1 /* 2 * Driver interface definition 3 * Copyright (c) 2003-2010, Jouni Malinen <j@w1.fi> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 * 14 * This file defines a driver interface used by both %wpa_supplicant and 15 * hostapd. The first part of the file defines data structures used in various 16 * driver operations. This is followed by the struct wpa_driver_ops that each 17 * driver wrapper will beed to define with callback functions for requesting 18 * driver operations. After this, there are definitions for driver event 19 * reporting with wpa_supplicant_event() and some convenience helper functions 20 * that can be used to report events. 21 */ 22 23 #ifndef DRIVER_H 24 #define DRIVER_H 25 26 #define WPA_SUPPLICANT_DRIVER_VERSION 4 27 28 #include "common/defs.h" 29 30 #define HOSTAPD_CHAN_DISABLED 0x00000001 31 #define HOSTAPD_CHAN_PASSIVE_SCAN 0x00000002 32 #define HOSTAPD_CHAN_NO_IBSS 0x00000004 33 #define HOSTAPD_CHAN_RADAR 0x00000008 34 35 /** 36 * struct hostapd_channel_data - Channel information 37 */ 38 struct hostapd_channel_data { 39 /** 40 * chan - Channel number (IEEE 802.11) 41 */ 42 short chan; 43 44 /** 45 * freq - Frequency in MHz 46 */ 47 short freq; 48 49 /** 50 * flag - Channel flags (HOSTAPD_CHAN_*) 51 */ 52 int flag; 53 54 /** 55 * max_tx_power - maximum transmit power in dBm 56 */ 57 u8 max_tx_power; 58 }; 59 60 /** 61 * struct hostapd_hw_modes - Supported hardware mode information 62 */ 63 struct hostapd_hw_modes { 64 /** 65 * mode - Hardware mode 66 */ 67 enum hostapd_hw_mode mode; 68 69 /** 70 * num_channels - Number of entries in the channels array 71 */ 72 int num_channels; 73 74 /** 75 * channels - Array of supported channels 76 */ 77 struct hostapd_channel_data *channels; 78 79 /** 80 * num_rates - Number of entries in the rates array 81 */ 82 int num_rates; 83 84 /** 85 * rates - Array of supported rates in 100 kbps units 86 */ 87 int *rates; 88 89 /** 90 * ht_capab - HT (IEEE 802.11n) capabilities 91 */ 92 u16 ht_capab; 93 94 /** 95 * mcs_set - MCS (IEEE 802.11n) rate parameters 96 */ 97 u8 mcs_set[16]; 98 99 /** 100 * a_mpdu_params - A-MPDU (IEEE 802.11n) parameters 101 */ 102 u8 a_mpdu_params; 103 }; 104 105 106 #define IEEE80211_MODE_INFRA 0 107 #define IEEE80211_MODE_IBSS 1 108 #define IEEE80211_MODE_AP 2 109 110 #define IEEE80211_CAP_ESS 0x0001 111 #define IEEE80211_CAP_IBSS 0x0002 112 #define IEEE80211_CAP_PRIVACY 0x0010 113 114 #define WPA_SCAN_QUAL_INVALID BIT(0) 115 #define WPA_SCAN_NOISE_INVALID BIT(1) 116 #define WPA_SCAN_LEVEL_INVALID BIT(2) 117 #define WPA_SCAN_LEVEL_DBM BIT(3) 118 #define WPA_SCAN_AUTHENTICATED BIT(4) 119 #define WPA_SCAN_ASSOCIATED BIT(5) 120 121 /** 122 * struct wpa_scan_res - Scan result for an BSS/IBSS 123 * @flags: information flags about the BSS/IBSS (WPA_SCAN_*) 124 * @bssid: BSSID 125 * @freq: frequency of the channel in MHz (e.g., 2412 = channel 1) 126 * @beacon_int: beacon interval in TUs (host byte order) 127 * @caps: capability information field in host byte order 128 * @qual: signal quality 129 * @noise: noise level 130 * @level: signal level 131 * @tsf: Timestamp 132 * @age: Age of the information in milliseconds (i.e., how many milliseconds 133 * ago the last Beacon or Probe Response frame was received) 134 * @ie_len: length of the following IE field in octets 135 * @beacon_ie_len: length of the following Beacon IE field in octets 136 * 137 * This structure is used as a generic format for scan results from the 138 * driver. Each driver interface implementation is responsible for converting 139 * the driver or OS specific scan results into this format. 140 * 141 * If the driver does not support reporting all IEs, the IE data structure is 142 * constructed of the IEs that are available. This field will also need to 143 * include SSID in IE format. All drivers are encouraged to be extended to 144 * report all IEs to make it easier to support future additions. 145 */ 146 struct wpa_scan_res { 147 unsigned int flags; 148 u8 bssid[ETH_ALEN]; 149 int freq; 150 u16 beacon_int; 151 u16 caps; 152 int qual; 153 int noise; 154 int level; 155 u64 tsf; 156 unsigned int age; 157 size_t ie_len; 158 size_t beacon_ie_len; 159 /* 160 * Followed by ie_len octets of IEs from Probe Response frame (or if 161 * the driver does not indicate source of IEs, these may also be from 162 * Beacon frame). After the first set of IEs, another set of IEs may 163 * follow (with beacon_ie_len octets of data) if the driver provides 164 * both IE sets. 165 */ 166 }; 167 168 /** 169 * struct wpa_scan_results - Scan results 170 * @res: Array of pointers to allocated variable length scan result entries 171 * @num: Number of entries in the scan result array 172 */ 173 struct wpa_scan_results { 174 struct wpa_scan_res **res; 175 size_t num; 176 }; 177 178 /** 179 * struct wpa_interface_info - Network interface information 180 * @next: Pointer to the next interface or NULL if this is the last one 181 * @ifname: Interface name that can be used with init() or init2() 182 * @desc: Human readable adapter description (e.g., vendor/model) or NULL if 183 * not available 184 * @drv_name: struct wpa_driver_ops::name (note: unlike other strings, this one 185 * is not an allocated copy, i.e., get_interfaces() caller will not free 186 * this) 187 */ 188 struct wpa_interface_info { 189 struct wpa_interface_info *next; 190 char *ifname; 191 char *desc; 192 const char *drv_name; 193 }; 194 195 #define WPAS_MAX_SCAN_SSIDS 4 196 197 /** 198 * struct wpa_driver_scan_params - Scan parameters 199 * Data for struct wpa_driver_ops::scan2(). 200 */ 201 struct wpa_driver_scan_params { 202 /** 203 * ssids - SSIDs to scan for 204 */ 205 struct wpa_driver_scan_ssid { 206 /** 207 * ssid - specific SSID to scan for (ProbeReq) 208 * %NULL or zero-length SSID is used to indicate active scan 209 * with wildcard SSID. 210 */ 211 const u8 *ssid; 212 /** 213 * ssid_len: Length of the SSID in octets 214 */ 215 size_t ssid_len; 216 } ssids[WPAS_MAX_SCAN_SSIDS]; 217 218 /** 219 * num_ssids - Number of entries in ssids array 220 * Zero indicates a request for a passive scan. 221 */ 222 size_t num_ssids; 223 224 /** 225 * extra_ies - Extra IE(s) to add into Probe Request or %NULL 226 */ 227 const u8 *extra_ies; 228 229 /** 230 * extra_ies_len - Length of extra_ies in octets 231 */ 232 size_t extra_ies_len; 233 234 /** 235 * freqs - Array of frequencies to scan or %NULL for all frequencies 236 * 237 * The frequency is set in MHz. The array is zero-terminated. 238 */ 239 int *freqs; 240 241 /** 242 * filter_ssids - Filter for reporting SSIDs 243 * 244 * This optional parameter can be used to request the driver wrapper to 245 * filter scan results to include only the specified SSIDs. %NULL 246 * indicates that no filtering is to be done. This can be used to 247 * reduce memory needs for scan results in environments that have large 248 * number of APs with different SSIDs. 249 * 250 * The driver wrapper is allowed to take this allocated buffer into its 251 * own use by setting the pointer to %NULL. In that case, the driver 252 * wrapper is responsible for freeing the buffer with os_free() once it 253 * is not needed anymore. 254 */ 255 struct wpa_driver_scan_filter { 256 u8 ssid[32]; 257 size_t ssid_len; 258 } *filter_ssids; 259 260 /** 261 * num_filter_ssids - Number of entries in filter_ssids array 262 */ 263 size_t num_filter_ssids; 264 }; 265 266 /** 267 * struct wpa_driver_auth_params - Authentication parameters 268 * Data for struct wpa_driver_ops::authenticate(). 269 */ 270 struct wpa_driver_auth_params { 271 int freq; 272 const u8 *bssid; 273 const u8 *ssid; 274 size_t ssid_len; 275 int auth_alg; 276 const u8 *ie; 277 size_t ie_len; 278 const u8 *wep_key[4]; 279 size_t wep_key_len[4]; 280 int wep_tx_keyidx; 281 int local_state_change; 282 }; 283 284 /** 285 * struct wpa_driver_associate_params - Association parameters 286 * Data for struct wpa_driver_ops::associate(). 287 */ 288 struct wpa_driver_associate_params { 289 /** 290 * bssid - BSSID of the selected AP 291 * This can be %NULL, if ap_scan=2 mode is used and the driver is 292 * responsible for selecting with which BSS to associate. */ 293 const u8 *bssid; 294 295 /** 296 * ssid - The selected SSID 297 */ 298 const u8 *ssid; 299 300 /** 301 * ssid_len - Length of the SSID (1..32) 302 */ 303 size_t ssid_len; 304 305 /** 306 * freq - Frequency of the channel the selected AP is using 307 * Frequency that the selected AP is using (in MHz as 308 * reported in the scan results) 309 */ 310 int freq; 311 312 /** 313 * wpa_ie - WPA information element for (Re)Association Request 314 * WPA information element to be included in (Re)Association 315 * Request (including information element id and length). Use 316 * of this WPA IE is optional. If the driver generates the WPA 317 * IE, it can use pairwise_suite, group_suite, and 318 * key_mgmt_suite to select proper algorithms. In this case, 319 * the driver has to notify wpa_supplicant about the used WPA 320 * IE by generating an event that the interface code will 321 * convert into EVENT_ASSOCINFO data (see below). 322 * 323 * When using WPA2/IEEE 802.11i, wpa_ie is used for RSN IE 324 * instead. The driver can determine which version is used by 325 * looking at the first byte of the IE (0xdd for WPA, 0x30 for 326 * WPA2/RSN). 327 * 328 * When using WPS, wpa_ie is used for WPS IE instead of WPA/RSN IE. 329 */ 330 const u8 *wpa_ie; 331 332 /** 333 * wpa_ie_len - length of the wpa_ie 334 */ 335 size_t wpa_ie_len; 336 337 /** 338 * pairwise_suite - Selected pairwise cipher suite 339 * 340 * This is usually ignored if @wpa_ie is used. 341 */ 342 enum wpa_cipher pairwise_suite; 343 344 /** 345 * group_suite - Selected group cipher suite 346 * 347 * This is usually ignored if @wpa_ie is used. 348 */ 349 enum wpa_cipher group_suite; 350 351 /** 352 * key_mgmt_suite - Selected key management suite 353 * 354 * This is usually ignored if @wpa_ie is used. 355 */ 356 enum wpa_key_mgmt key_mgmt_suite; 357 358 /** 359 * auth_alg - Allowed authentication algorithms 360 * Bit field of WPA_AUTH_ALG_* 361 */ 362 int auth_alg; 363 364 /** 365 * mode - Operation mode (infra/ibss) IEEE80211_MODE_* 366 */ 367 int mode; 368 369 /** 370 * wep_key - WEP keys for static WEP configuration 371 */ 372 const u8 *wep_key[4]; 373 374 /** 375 * wep_key_len - WEP key length for static WEP configuration 376 */ 377 size_t wep_key_len[4]; 378 379 /** 380 * wep_tx_keyidx - WEP TX key index for static WEP configuration 381 */ 382 int wep_tx_keyidx; 383 384 /** 385 * mgmt_frame_protection - IEEE 802.11w management frame protection 386 */ 387 enum mfp_options mgmt_frame_protection; 388 389 /** 390 * ft_ies - IEEE 802.11r / FT information elements 391 * If the supplicant is using IEEE 802.11r (FT) and has the needed keys 392 * for fast transition, this parameter is set to include the IEs that 393 * are to be sent in the next FT Authentication Request message. 394 * update_ft_ies() handler is called to update the IEs for further 395 * FT messages in the sequence. 396 * 397 * The driver should use these IEs only if the target AP is advertising 398 * the same mobility domain as the one included in the MDIE here. 399 * 400 * In ap_scan=2 mode, the driver can use these IEs when moving to a new 401 * AP after the initial association. These IEs can only be used if the 402 * target AP is advertising support for FT and is using the same MDIE 403 * and SSID as the current AP. 404 * 405 * The driver is responsible for reporting the FT IEs received from the 406 * AP's response using wpa_supplicant_event() with EVENT_FT_RESPONSE 407 * type. update_ft_ies() handler will then be called with the FT IEs to 408 * include in the next frame in the authentication sequence. 409 */ 410 const u8 *ft_ies; 411 412 /** 413 * ft_ies_len - Length of ft_ies in bytes 414 */ 415 size_t ft_ies_len; 416 417 /** 418 * ft_md - FT Mobility domain (6 octets) (also included inside ft_ies) 419 * 420 * This value is provided to allow the driver interface easier access 421 * to the current mobility domain. This value is set to %NULL if no 422 * mobility domain is currently active. 423 */ 424 const u8 *ft_md; 425 426 /** 427 * passphrase - RSN passphrase for PSK 428 * 429 * This value is made available only for WPA/WPA2-Personal (PSK) and 430 * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is 431 * the 8..63 character ASCII passphrase, if available. Please note that 432 * this can be %NULL if passphrase was not used to generate the PSK. In 433 * that case, the psk field must be used to fetch the PSK. 434 */ 435 const char *passphrase; 436 437 /** 438 * psk - RSN PSK (alternative for passphrase for PSK) 439 * 440 * This value is made available only for WPA/WPA2-Personal (PSK) and 441 * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is 442 * the 32-octet (256-bit) PSK, if available. The driver wrapper should 443 * be prepared to handle %NULL value as an error. 444 */ 445 const u8 *psk; 446 447 /** 448 * drop_unencrypted - Enable/disable unencrypted frame filtering 449 * 450 * Configure the driver to drop all non-EAPOL frames (both receive and 451 * transmit paths). Unencrypted EAPOL frames (ethertype 0x888e) must 452 * still be allowed for key negotiation. 453 */ 454 int drop_unencrypted; 455 456 /** 457 * prev_bssid - Previously used BSSID in this ESS 458 * 459 * When not %NULL, this is a request to use reassociation instead of 460 * association. 461 */ 462 const u8 *prev_bssid; 463 }; 464 465 /** 466 * struct wpa_driver_capa - Driver capability information 467 */ 468 struct wpa_driver_capa { 469 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA 0x00000001 470 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2 0x00000002 471 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK 0x00000004 472 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK 0x00000008 473 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE 0x00000010 474 #define WPA_DRIVER_CAPA_KEY_MGMT_FT 0x00000020 475 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_PSK 0x00000040 476 unsigned int key_mgmt; 477 478 #define WPA_DRIVER_CAPA_ENC_WEP40 0x00000001 479 #define WPA_DRIVER_CAPA_ENC_WEP104 0x00000002 480 #define WPA_DRIVER_CAPA_ENC_TKIP 0x00000004 481 #define WPA_DRIVER_CAPA_ENC_CCMP 0x00000008 482 unsigned int enc; 483 484 #define WPA_DRIVER_AUTH_OPEN 0x00000001 485 #define WPA_DRIVER_AUTH_SHARED 0x00000002 486 #define WPA_DRIVER_AUTH_LEAP 0x00000004 487 unsigned int auth; 488 489 /* Driver generated WPA/RSN IE */ 490 #define WPA_DRIVER_FLAGS_DRIVER_IE 0x00000001 491 /* Driver needs static WEP key setup after association command */ 492 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC 0x00000002 493 #define WPA_DRIVER_FLAGS_USER_SPACE_MLME 0x00000004 494 /* Driver takes care of RSN 4-way handshake internally; PMK is configured with 495 * struct wpa_driver_ops::set_key using alg = WPA_ALG_PMK */ 496 #define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE 0x00000008 497 #define WPA_DRIVER_FLAGS_WIRED 0x00000010 498 /* Driver provides separate commands for authentication and association (SME in 499 * wpa_supplicant). */ 500 #define WPA_DRIVER_FLAGS_SME 0x00000020 501 /* Driver supports AP mode */ 502 #define WPA_DRIVER_FLAGS_AP 0x00000040 503 /* Driver needs static WEP key setup after association has been completed */ 504 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE 0x00000080 505 unsigned int flags; 506 507 int max_scan_ssids; 508 509 /** 510 * max_remain_on_chan - Maximum remain-on-channel duration in msec 511 */ 512 unsigned int max_remain_on_chan; 513 }; 514 515 516 struct hostapd_data; 517 518 struct hostap_sta_driver_data { 519 unsigned long rx_packets, tx_packets, rx_bytes, tx_bytes; 520 unsigned long current_tx_rate; 521 unsigned long inactive_msec; 522 unsigned long flags; 523 unsigned long num_ps_buf_frames; 524 unsigned long tx_retry_failed; 525 unsigned long tx_retry_count; 526 int last_rssi; 527 int last_ack_rssi; 528 }; 529 530 struct hostapd_sta_add_params { 531 const u8 *addr; 532 u16 aid; 533 u16 capability; 534 const u8 *supp_rates; 535 size_t supp_rates_len; 536 u16 listen_interval; 537 const struct ieee80211_ht_capabilities *ht_capabilities; 538 }; 539 540 struct hostapd_freq_params { 541 int mode; 542 int freq; 543 int channel; 544 int ht_enabled; 545 int sec_channel_offset; /* 0 = HT40 disabled, -1 = HT40 enabled, 546 * secondary channel below primary, 1 = HT40 547 * enabled, secondary channel above primary */ 548 }; 549 550 enum wpa_driver_if_type { 551 /** 552 * WPA_IF_STATION - Station mode interface 553 */ 554 WPA_IF_STATION, 555 556 /** 557 * WPA_IF_AP_VLAN - AP mode VLAN interface 558 * 559 * This interface shares its address and Beacon frame with the main 560 * BSS. 561 */ 562 WPA_IF_AP_VLAN, 563 564 /** 565 * WPA_IF_AP_BSS - AP mode BSS interface 566 * 567 * This interface has its own address and Beacon frame. 568 */ 569 WPA_IF_AP_BSS, 570 }; 571 572 struct wpa_init_params { 573 const u8 *bssid; 574 const char *ifname; 575 const u8 *ssid; 576 size_t ssid_len; 577 const char *test_socket; 578 int use_pae_group_addr; 579 char **bridge; 580 size_t num_bridge; 581 582 u8 *own_addr; /* buffer for writing own MAC address */ 583 }; 584 585 586 struct wpa_bss_params { 587 /** Interface name (for multi-SSID/VLAN support) */ 588 const char *ifname; 589 /** Whether IEEE 802.1X or WPA/WPA2 is enabled */ 590 int enabled; 591 592 int wpa; 593 int ieee802_1x; 594 int wpa_group; 595 int wpa_pairwise; 596 int wpa_key_mgmt; 597 int rsn_preauth; 598 }; 599 600 #define WPA_STA_AUTHORIZED BIT(0) 601 #define WPA_STA_WMM BIT(1) 602 #define WPA_STA_SHORT_PREAMBLE BIT(2) 603 #define WPA_STA_MFP BIT(3) 604 605 /** 606 * struct wpa_driver_ops - Driver interface API definition 607 * 608 * This structure defines the API that each driver interface needs to implement 609 * for core wpa_supplicant code. All driver specific functionality is captured 610 * in this wrapper. 611 */ 612 struct wpa_driver_ops { 613 /** Name of the driver interface */ 614 const char *name; 615 /** One line description of the driver interface */ 616 const char *desc; 617 618 /** 619 * get_bssid - Get the current BSSID 620 * @priv: private driver interface data 621 * @bssid: buffer for BSSID (ETH_ALEN = 6 bytes) 622 * 623 * Returns: 0 on success, -1 on failure 624 * 625 * Query kernel driver for the current BSSID and copy it to bssid. 626 * Setting bssid to 00:00:00:00:00:00 is recommended if the STA is not 627 * associated. 628 */ 629 int (*get_bssid)(void *priv, u8 *bssid); 630 631 /** 632 * get_ssid - Get the current SSID 633 * @priv: private driver interface data 634 * @ssid: buffer for SSID (at least 32 bytes) 635 * 636 * Returns: Length of the SSID on success, -1 on failure 637 * 638 * Query kernel driver for the current SSID and copy it to ssid. 639 * Returning zero is recommended if the STA is not associated. 640 * 641 * Note: SSID is an array of octets, i.e., it is not nul terminated and 642 * can, at least in theory, contain control characters (including nul) 643 * and as such, should be processed as binary data, not a printable 644 * string. 645 */ 646 int (*get_ssid)(void *priv, u8 *ssid); 647 648 /** 649 * set_key - Configure encryption key 650 * @ifname: Interface name (for multi-SSID/VLAN support) 651 * @priv: private driver interface data 652 * @alg: encryption algorithm (%WPA_ALG_NONE, %WPA_ALG_WEP, 653 * %WPA_ALG_TKIP, %WPA_ALG_CCMP, %WPA_ALG_IGTK, %WPA_ALG_PMK); 654 * %WPA_ALG_NONE clears the key. 655 * @addr: address of the peer STA or ff:ff:ff:ff:ff:ff for 656 * broadcast/default keys 657 * @key_idx: key index (0..3), usually 0 for unicast keys; 0..4095 for 658 * IGTK 659 * @set_tx: configure this key as the default Tx key (only used when 660 * driver does not support separate unicast/individual key 661 * @seq: sequence number/packet number, seq_len octets, the next 662 * packet number to be used for in replay protection; configured 663 * for Rx keys (in most cases, this is only used with broadcast 664 * keys and set to zero for unicast keys) 665 * @seq_len: length of the seq, depends on the algorithm: 666 * TKIP: 6 octets, CCMP: 6 octets, IGTK: 6 octets 667 * @key: key buffer; TKIP: 16-byte temporal key, 8-byte Tx Mic key, 668 * 8-byte Rx Mic Key 669 * @key_len: length of the key buffer in octets (WEP: 5 or 13, 670 * TKIP: 32, CCMP: 16, IGTK: 16) 671 * 672 * Returns: 0 on success, -1 on failure 673 * 674 * Configure the given key for the kernel driver. If the driver 675 * supports separate individual keys (4 default keys + 1 individual), 676 * addr can be used to determine whether the key is default or 677 * individual. If only 4 keys are supported, the default key with key 678 * index 0 is used as the individual key. STA must be configured to use 679 * it as the default Tx key (set_tx is set) and accept Rx for all the 680 * key indexes. In most cases, WPA uses only key indexes 1 and 2 for 681 * broadcast keys, so key index 0 is available for this kind of 682 * configuration. 683 * 684 * Please note that TKIP keys include separate TX and RX MIC keys and 685 * some drivers may expect them in different order than wpa_supplicant 686 * is using. If the TX/RX keys are swapped, all TKIP encrypted packets 687 * will tricker Michael MIC errors. This can be fixed by changing the 688 * order of MIC keys by swapping te bytes 16..23 and 24..31 of the key 689 * in driver_*.c set_key() implementation, see driver_ndis.c for an 690 * example on how this can be done. 691 */ 692 int (*set_key)(const char *ifname, void *priv, enum wpa_alg alg, 693 const u8 *addr, int key_idx, int set_tx, 694 const u8 *seq, size_t seq_len, 695 const u8 *key, size_t key_len); 696 697 /** 698 * init - Initialize driver interface 699 * @ctx: context to be used when calling wpa_supplicant functions, 700 * e.g., wpa_supplicant_event() 701 * @ifname: interface name, e.g., wlan0 702 * 703 * Returns: Pointer to private data, %NULL on failure 704 * 705 * Initialize driver interface, including event processing for kernel 706 * driver events (e.g., associated, scan results, Michael MIC failure). 707 * This function can allocate a private configuration data area for 708 * @ctx, file descriptor, interface name, etc. information that may be 709 * needed in future driver operations. If this is not used, non-NULL 710 * value will need to be returned because %NULL is used to indicate 711 * failure. The returned value will be used as 'void *priv' data for 712 * all other driver_ops functions. 713 * 714 * The main event loop (eloop.c) of wpa_supplicant can be used to 715 * register callback for read sockets (eloop_register_read_sock()). 716 * 717 * See below for more information about events and 718 * wpa_supplicant_event() function. 719 */ 720 void * (*init)(void *ctx, const char *ifname); 721 722 /** 723 * deinit - Deinitialize driver interface 724 * @priv: private driver interface data from init() 725 * 726 * Shut down driver interface and processing of driver events. Free 727 * private data buffer if one was allocated in init() handler. 728 */ 729 void (*deinit)(void *priv); 730 731 /** 732 * set_param - Set driver configuration parameters 733 * @priv: private driver interface data from init() 734 * @param: driver specific configuration parameters 735 * 736 * Returns: 0 on success, -1 on failure 737 * 738 * Optional handler for notifying driver interface about configuration 739 * parameters (driver_param). 740 */ 741 int (*set_param)(void *priv, const char *param); 742 743 /** 744 * set_countermeasures - Enable/disable TKIP countermeasures 745 * @priv: private driver interface data 746 * @enabled: 1 = countermeasures enabled, 0 = disabled 747 * 748 * Returns: 0 on success, -1 on failure 749 * 750 * Configure TKIP countermeasures. When these are enabled, the driver 751 * should drop all received and queued frames that are using TKIP. 752 */ 753 int (*set_countermeasures)(void *priv, int enabled); 754 755 /** 756 * deauthenticate - Request driver to deauthenticate 757 * @priv: private driver interface data 758 * @addr: peer address (BSSID of the AP) 759 * @reason_code: 16-bit reason code to be sent in the deauthentication 760 * frame 761 * 762 * Returns: 0 on success, -1 on failure 763 */ 764 int (*deauthenticate)(void *priv, const u8 *addr, int reason_code); 765 766 /** 767 * disassociate - Request driver to disassociate 768 * @priv: private driver interface data 769 * @addr: peer address (BSSID of the AP) 770 * @reason_code: 16-bit reason code to be sent in the disassociation 771 * frame 772 * 773 * Returns: 0 on success, -1 on failure 774 */ 775 int (*disassociate)(void *priv, const u8 *addr, int reason_code); 776 777 /** 778 * associate - Request driver to associate 779 * @priv: private driver interface data 780 * @params: association parameters 781 * 782 * Returns: 0 on success, -1 on failure 783 */ 784 int (*associate)(void *priv, 785 struct wpa_driver_associate_params *params); 786 787 /** 788 * add_pmkid - Add PMKSA cache entry to the driver 789 * @priv: private driver interface data 790 * @bssid: BSSID for the PMKSA cache entry 791 * @pmkid: PMKID for the PMKSA cache entry 792 * 793 * Returns: 0 on success, -1 on failure 794 * 795 * This function is called when a new PMK is received, as a result of 796 * either normal authentication or RSN pre-authentication. 797 * 798 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 799 * associate(), add_pmkid() can be used to add new PMKSA cache entries 800 * in the driver. If the driver uses wpa_ie from wpa_supplicant, this 801 * driver_ops function does not need to be implemented. Likewise, if 802 * the driver does not support WPA, this function is not needed. 803 */ 804 int (*add_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid); 805 806 /** 807 * remove_pmkid - Remove PMKSA cache entry to the driver 808 * @priv: private driver interface data 809 * @bssid: BSSID for the PMKSA cache entry 810 * @pmkid: PMKID for the PMKSA cache entry 811 * 812 * Returns: 0 on success, -1 on failure 813 * 814 * This function is called when the supplicant drops a PMKSA cache 815 * entry for any reason. 816 * 817 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 818 * associate(), remove_pmkid() can be used to synchronize PMKSA caches 819 * between the driver and wpa_supplicant. If the driver uses wpa_ie 820 * from wpa_supplicant, this driver_ops function does not need to be 821 * implemented. Likewise, if the driver does not support WPA, this 822 * function is not needed. 823 */ 824 int (*remove_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid); 825 826 /** 827 * flush_pmkid - Flush PMKSA cache 828 * @priv: private driver interface data 829 * 830 * Returns: 0 on success, -1 on failure 831 * 832 * This function is called when the supplicant drops all PMKSA cache 833 * entries for any reason. 834 * 835 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 836 * associate(), remove_pmkid() can be used to synchronize PMKSA caches 837 * between the driver and wpa_supplicant. If the driver uses wpa_ie 838 * from wpa_supplicant, this driver_ops function does not need to be 839 * implemented. Likewise, if the driver does not support WPA, this 840 * function is not needed. 841 */ 842 int (*flush_pmkid)(void *priv); 843 844 /** 845 * get_capa - Get driver capabilities 846 * @priv: private driver interface data 847 * 848 * Returns: 0 on success, -1 on failure 849 * 850 * Get driver/firmware/hardware capabilities. 851 */ 852 int (*get_capa)(void *priv, struct wpa_driver_capa *capa); 853 854 /** 855 * poll - Poll driver for association information 856 * @priv: private driver interface data 857 * 858 * This is an option callback that can be used when the driver does not 859 * provide event mechanism for association events. This is called when 860 * receiving WPA EAPOL-Key messages that require association 861 * information. The driver interface is supposed to generate associnfo 862 * event before returning from this callback function. In addition, the 863 * driver interface should generate an association event after having 864 * sent out associnfo. 865 */ 866 void (*poll)(void *priv); 867 868 /** 869 * get_ifname - Get interface name 870 * @priv: private driver interface data 871 * 872 * Returns: Pointer to the interface name. This can differ from the 873 * interface name used in init() call. Init() is called first. 874 * 875 * This optional function can be used to allow the driver interface to 876 * replace the interface name with something else, e.g., based on an 877 * interface mapping from a more descriptive name. 878 */ 879 const char * (*get_ifname)(void *priv); 880 881 /** 882 * get_mac_addr - Get own MAC address 883 * @priv: private driver interface data 884 * 885 * Returns: Pointer to own MAC address or %NULL on failure 886 * 887 * This optional function can be used to get the own MAC address of the 888 * device from the driver interface code. This is only needed if the 889 * l2_packet implementation for the OS does not provide easy access to 890 * a MAC address. */ 891 const u8 * (*get_mac_addr)(void *priv); 892 893 /** 894 * send_eapol - Optional function for sending EAPOL packets 895 * @priv: private driver interface data 896 * @dest: Destination MAC address 897 * @proto: Ethertype 898 * @data: EAPOL packet starting with IEEE 802.1X header 899 * @data_len: Size of the EAPOL packet 900 * 901 * Returns: 0 on success, -1 on failure 902 * 903 * This optional function can be used to override l2_packet operations 904 * with driver specific functionality. If this function pointer is set, 905 * l2_packet module is not used at all and the driver interface code is 906 * responsible for receiving and sending all EAPOL packets. The 907 * received EAPOL packets are sent to core code with EVENT_EAPOL_RX 908 * event. The driver interface is required to implement get_mac_addr() 909 * handler if send_eapol() is used. 910 */ 911 int (*send_eapol)(void *priv, const u8 *dest, u16 proto, 912 const u8 *data, size_t data_len); 913 914 /** 915 * set_operstate - Sets device operating state to DORMANT or UP 916 * @priv: private driver interface data 917 * @state: 0 = dormant, 1 = up 918 * Returns: 0 on success, -1 on failure 919 * 920 * This is an optional function that can be used on operating systems 921 * that support a concept of controlling network device state from user 922 * space applications. This function, if set, gets called with 923 * state = 1 when authentication has been completed and with state = 0 924 * when connection is lost. 925 */ 926 int (*set_operstate)(void *priv, int state); 927 928 /** 929 * mlme_setprotection - MLME-SETPROTECTION.request primitive 930 * @priv: Private driver interface data 931 * @addr: Address of the station for which to set protection (may be 932 * %NULL for group keys) 933 * @protect_type: MLME_SETPROTECTION_PROTECT_TYPE_* 934 * @key_type: MLME_SETPROTECTION_KEY_TYPE_* 935 * Returns: 0 on success, -1 on failure 936 * 937 * This is an optional function that can be used to set the driver to 938 * require protection for Tx and/or Rx frames. This uses the layer 939 * interface defined in IEEE 802.11i-2004 clause 10.3.22.1 940 * (MLME-SETPROTECTION.request). Many drivers do not use explicit 941 * set protection operation; instead, they set protection implicitly 942 * based on configured keys. 943 */ 944 int (*mlme_setprotection)(void *priv, const u8 *addr, int protect_type, 945 int key_type); 946 947 /** 948 * get_hw_feature_data - Get hardware support data (channels and rates) 949 * @priv: Private driver interface data 950 * @num_modes: Variable for returning the number of returned modes 951 * flags: Variable for returning hardware feature flags 952 * Returns: Pointer to allocated hardware data on success or %NULL on 953 * failure. Caller is responsible for freeing this. 954 * 955 * This function is only needed for drivers that export MLME 956 * (management frame processing) to %wpa_supplicant or hostapd. 957 */ 958 struct hostapd_hw_modes * (*get_hw_feature_data)(void *priv, 959 u16 *num_modes, 960 u16 *flags); 961 962 /** 963 * set_channel - Set channel 964 * @priv: Private driver interface data 965 * @phymode: HOSTAPD_MODE_IEEE80211B, .. 966 * @chan: IEEE 802.11 channel number 967 * @freq: Frequency of the channel in MHz 968 * Returns: 0 on success, -1 on failure 969 * 970 * This function is only needed for drivers that export MLME 971 * (management frame processing) to wpa_supplicant. 972 */ 973 int (*set_channel)(void *priv, enum hostapd_hw_mode phymode, int chan, 974 int freq); 975 976 /** 977 * set_ssid - Set SSID 978 * @priv: Private driver interface data 979 * @ssid: SSID 980 * @ssid_len: SSID length 981 * Returns: 0 on success, -1 on failure 982 * 983 * This function is only needed for drivers that export MLME 984 * (management frame processing) to wpa_supplicant. 985 */ 986 int (*set_ssid)(void *priv, const u8 *ssid, size_t ssid_len); 987 988 /** 989 * set_bssid - Set BSSID 990 * @priv: Private driver interface data 991 * @bssid: BSSID 992 * Returns: 0 on success, -1 on failure 993 * 994 * This function is only needed for drivers that export MLME 995 * (management frame processing) to wpa_supplicant. 996 */ 997 int (*set_bssid)(void *priv, const u8 *bssid); 998 999 /** 1000 * send_mlme - Send management frame from MLME 1001 * @priv: Private driver interface data 1002 * @data: IEEE 802.11 management frame with IEEE 802.11 header 1003 * @data_len: Size of the management frame 1004 * Returns: 0 on success, -1 on failure 1005 * 1006 * This function is only needed for drivers that export MLME 1007 * (management frame processing) to wpa_supplicant. 1008 */ 1009 int (*send_mlme)(void *priv, const u8 *data, size_t data_len); 1010 1011 /** 1012 * mlme_add_sta - Add a STA entry into the driver/netstack 1013 * @priv: Private driver interface data 1014 * @addr: MAC address of the STA (e.g., BSSID of the AP) 1015 * @supp_rates: Supported rate set (from (Re)AssocResp); in IEEE 802.11 1016 * format (one octet per rate, 1 = 0.5 Mbps) 1017 * @supp_rates_len: Number of entries in supp_rates 1018 * Returns: 0 on success, -1 on failure 1019 * 1020 * This function is only needed for drivers that export MLME 1021 * (management frame processing) to wpa_supplicant. When the MLME code 1022 * completes association with an AP, this function is called to 1023 * configure the driver/netstack with a STA entry for data frame 1024 * processing (TX rate control, encryption/decryption). 1025 */ 1026 int (*mlme_add_sta)(void *priv, const u8 *addr, const u8 *supp_rates, 1027 size_t supp_rates_len); 1028 1029 /** 1030 * mlme_remove_sta - Remove a STA entry from the driver/netstack 1031 * @priv: Private driver interface data 1032 * @addr: MAC address of the STA (e.g., BSSID of the AP) 1033 * Returns: 0 on success, -1 on failure 1034 * 1035 * This function is only needed for drivers that export MLME 1036 * (management frame processing) to wpa_supplicant. 1037 */ 1038 int (*mlme_remove_sta)(void *priv, const u8 *addr); 1039 1040 /** 1041 * update_ft_ies - Update FT (IEEE 802.11r) IEs 1042 * @priv: Private driver interface data 1043 * @md: Mobility domain (2 octets) (also included inside ies) 1044 * @ies: FT IEs (MDIE, FTIE, ...) or %NULL to remove IEs 1045 * @ies_len: Length of FT IEs in bytes 1046 * Returns: 0 on success, -1 on failure 1047 * 1048 * The supplicant uses this callback to let the driver know that keying 1049 * material for FT is available and that the driver can use the 1050 * provided IEs in the next message in FT authentication sequence. 1051 * 1052 * This function is only needed for driver that support IEEE 802.11r 1053 * (Fast BSS Transition). 1054 */ 1055 int (*update_ft_ies)(void *priv, const u8 *md, const u8 *ies, 1056 size_t ies_len); 1057 1058 /** 1059 * send_ft_action - Send FT Action frame (IEEE 802.11r) 1060 * @priv: Private driver interface data 1061 * @action: Action field value 1062 * @target_ap: Target AP address 1063 * @ies: FT IEs (MDIE, FTIE, ...) (FT Request action frame body) 1064 * @ies_len: Length of FT IEs in bytes 1065 * Returns: 0 on success, -1 on failure 1066 * 1067 * The supplicant uses this callback to request the driver to transmit 1068 * an FT Action frame (action category 6) for over-the-DS fast BSS 1069 * transition. 1070 */ 1071 int (*send_ft_action)(void *priv, u8 action, const u8 *target_ap, 1072 const u8 *ies, size_t ies_len); 1073 1074 /** 1075 * get_scan_results2 - Fetch the latest scan results 1076 * @priv: private driver interface data 1077 * 1078 * Returns: Allocated buffer of scan results (caller is responsible for 1079 * freeing the data structure) on success, NULL on failure 1080 */ 1081 struct wpa_scan_results * (*get_scan_results2)(void *priv); 1082 1083 /** 1084 * set_country - Set country 1085 * @priv: Private driver interface data 1086 * @alpha2: country to which to switch to 1087 * Returns: 0 on success, -1 on failure 1088 * 1089 * This function is for drivers which support some form 1090 * of setting a regulatory domain. 1091 */ 1092 int (*set_country)(void *priv, const char *alpha2); 1093 1094 /** 1095 * global_init - Global driver initialization 1096 * Returns: Pointer to private data (global), %NULL on failure 1097 * 1098 * This optional function is called to initialize the driver wrapper 1099 * for global data, i.e., data that applies to all interfaces. If this 1100 * function is implemented, global_deinit() will also need to be 1101 * implemented to free the private data. The driver will also likely 1102 * use init2() function instead of init() to get the pointer to global 1103 * data available to per-interface initializer. 1104 */ 1105 void * (*global_init)(void); 1106 1107 /** 1108 * global_deinit - Global driver deinitialization 1109 * @priv: private driver global data from global_init() 1110 * 1111 * Terminate any global driver related functionality and free the 1112 * global data structure. 1113 */ 1114 void (*global_deinit)(void *priv); 1115 1116 /** 1117 * init2 - Initialize driver interface (with global data) 1118 * @ctx: context to be used when calling wpa_supplicant functions, 1119 * e.g., wpa_supplicant_event() 1120 * @ifname: interface name, e.g., wlan0 1121 * @global_priv: private driver global data from global_init() 1122 * Returns: Pointer to private data, %NULL on failure 1123 * 1124 * This function can be used instead of init() if the driver wrapper 1125 * uses global data. 1126 */ 1127 void * (*init2)(void *ctx, const char *ifname, void *global_priv); 1128 1129 /** 1130 * get_interfaces - Get information about available interfaces 1131 * @global_priv: private driver global data from global_init() 1132 * Returns: Allocated buffer of interface information (caller is 1133 * responsible for freeing the data structure) on success, NULL on 1134 * failure 1135 */ 1136 struct wpa_interface_info * (*get_interfaces)(void *global_priv); 1137 1138 /** 1139 * scan2 - Request the driver to initiate scan 1140 * @priv: private driver interface data 1141 * @params: Scan parameters 1142 * 1143 * Returns: 0 on success, -1 on failure 1144 * 1145 * Once the scan results are ready, the driver should report scan 1146 * results event for wpa_supplicant which will eventually request the 1147 * results with wpa_driver_get_scan_results2(). 1148 */ 1149 int (*scan2)(void *priv, struct wpa_driver_scan_params *params); 1150 1151 /** 1152 * authenticate - Request driver to authenticate 1153 * @priv: private driver interface data 1154 * @params: authentication parameters 1155 * Returns: 0 on success, -1 on failure 1156 * 1157 * This is an optional function that can be used with drivers that 1158 * support separate authentication and association steps, i.e., when 1159 * wpa_supplicant can act as the SME. If not implemented, associate() 1160 * function is expected to take care of IEEE 802.11 authentication, 1161 * too. 1162 */ 1163 int (*authenticate)(void *priv, 1164 struct wpa_driver_auth_params *params); 1165 1166 /** 1167 * set_beacon - Set Beacon frame template 1168 * @priv: Private driver interface data 1169 * @head: Beacon head from IEEE 802.11 header to IEs before TIM IE 1170 * @head_len: Length of the head buffer in octets 1171 * @tail: Beacon tail following TIM IE 1172 * @tail_len: Length of the tail buffer in octets 1173 * @dtim_period: DTIM period 1174 * @beacon_int: Beacon interval 1175 * Returns: 0 on success, -1 on failure 1176 * 1177 * This function is used to configure Beacon template for the driver in 1178 * AP mode. The driver is responsible for building the full Beacon 1179 * frame by concatenating the head part with TIM IE generated by the 1180 * driver/firmware and finishing with the tail part. 1181 */ 1182 int (*set_beacon)(void *priv, const u8 *head, size_t head_len, 1183 const u8 *tail, size_t tail_len, int dtim_period, 1184 int beacon_int); 1185 1186 /** 1187 * hapd_init - Initialize driver interface (hostapd only) 1188 * @hapd: Pointer to hostapd context 1189 * @params: Configuration for the driver wrapper 1190 * Returns: Pointer to private data, %NULL on failure 1191 * 1192 * This function is used instead of init() or init2() when the driver 1193 * wrapper is used withh hostapd. 1194 */ 1195 void * (*hapd_init)(struct hostapd_data *hapd, 1196 struct wpa_init_params *params); 1197 1198 /** 1199 * hapd_deinit - Deinitialize driver interface (hostapd only) 1200 * @priv: Private driver interface data from hapd_init() 1201 */ 1202 void (*hapd_deinit)(void *priv); 1203 1204 /** 1205 * set_ieee8021x - Enable/disable IEEE 802.1X support (AP only) 1206 * @priv: Private driver interface data 1207 * @params: BSS parameters 1208 * Returns: 0 on success, -1 on failure 1209 * 1210 * This is an optional function to configure the kernel driver to 1211 * enable/disable IEEE 802.1X support and set WPA/WPA2 parameters. This 1212 * can be left undefined (set to %NULL) if IEEE 802.1X support is 1213 * always enabled and the driver uses set_beacon() to set WPA/RSN IE 1214 * for Beacon frames. 1215 */ 1216 int (*set_ieee8021x)(void *priv, struct wpa_bss_params *params); 1217 1218 /** 1219 * set_privacy - Enable/disable privacy (AP only) 1220 * @priv: Private driver interface data 1221 * @enabled: 1 = privacy enabled, 0 = disabled 1222 * Returns: 0 on success, -1 on failure 1223 * 1224 * This is an optional function to configure privacy field in the 1225 * kernel driver for Beacon frames. This can be left undefined (set to 1226 * %NULL) if the driver uses the Beacon template from set_beacon(). 1227 */ 1228 int (*set_privacy)(void *priv, int enabled); 1229 1230 /** 1231 * get_seqnum - Fetch the current TSC/packet number (AP only) 1232 * @ifname: The interface name (main or virtual) 1233 * @priv: Private driver interface data 1234 * @addr: MAC address of the station or %NULL for group keys 1235 * @idx: Key index 1236 * @seq: Buffer for returning the latest used TSC/packet number 1237 * Returns: 0 on success, -1 on failure 1238 * 1239 * This function is used to fetch the last used TSC/packet number for 1240 * a TKIP, CCMP, or BIP/IGTK key. It is mainly used with group keys, so 1241 * there is no strict requirement on implementing support for unicast 1242 * keys (i.e., addr != %NULL). 1243 */ 1244 int (*get_seqnum)(const char *ifname, void *priv, const u8 *addr, 1245 int idx, u8 *seq); 1246 1247 /** 1248 * flush - Flush all association stations (AP only) 1249 * @priv: Private driver interface data 1250 * Returns: 0 on success, -1 on failure 1251 * 1252 * This function requests the driver to disassociate all associated 1253 * stations. This function does not need to be implemented if the 1254 * driver does not process association frames internally. 1255 */ 1256 int (*flush)(void *priv); 1257 1258 /** 1259 * set_generic_elem - Add IEs into Beacon/Probe Response frames (AP) 1260 * @priv: Private driver interface data 1261 * @elem: Information elements 1262 * @elem_len: Length of the elem buffer in octets 1263 * Returns: 0 on success, -1 on failure 1264 * 1265 * This is an optional function to add information elements in the 1266 * kernel driver for Beacon and Probe Response frames. This can be left 1267 * undefined (set to %NULL) if the driver uses the Beacon template from 1268 * set_beacon(). 1269 */ 1270 int (*set_generic_elem)(void *priv, const u8 *elem, size_t elem_len); 1271 1272 /** 1273 * read_sta_data - Fetch station data (AP only) 1274 * @priv: Private driver interface data 1275 * @data: Buffer for returning station information 1276 * @addr: MAC address of the station 1277 * Returns: 0 on success, -1 on failure 1278 */ 1279 int (*read_sta_data)(void *priv, struct hostap_sta_driver_data *data, 1280 const u8 *addr); 1281 1282 /** 1283 * hapd_send_eapol - Send an EAPOL packet (AP only) 1284 * @priv: private driver interface data 1285 * @addr: Destination MAC address 1286 * @data: EAPOL packet starting with IEEE 802.1X header 1287 * @data_len: Length of the EAPOL packet in octets 1288 * @encrypt: Whether the frame should be encrypted 1289 * @own_addr: Source MAC address 1290 * 1291 * Returns: 0 on success, -1 on failure 1292 */ 1293 int (*hapd_send_eapol)(void *priv, const u8 *addr, const u8 *data, 1294 size_t data_len, int encrypt, 1295 const u8 *own_addr); 1296 1297 /** 1298 * sta_deauth - Deauthenticate a station (AP only) 1299 * @priv: Private driver interface data 1300 * @own_addr: Source address and BSSID for the Deauthentication frame 1301 * @addr: MAC address of the station to deauthenticate 1302 * @reason: Reason code for the Deauthentiation frame 1303 * Returns: 0 on success, -1 on failure 1304 * 1305 * This function requests a specific station to be deauthenticated and 1306 * a Deauthentication frame to be sent to it. 1307 */ 1308 int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr, 1309 int reason); 1310 1311 /** 1312 * sta_disassoc - Disassociate a station (AP only) 1313 * @priv: Private driver interface data 1314 * @own_addr: Source address and BSSID for the Disassociation frame 1315 * @addr: MAC address of the station to disassociate 1316 * @reason: Reason code for the Disassociation frame 1317 * Returns: 0 on success, -1 on failure 1318 * 1319 * This function requests a specific station to be disassociated and 1320 * a Disassociation frame to be sent to it. 1321 */ 1322 int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr, 1323 int reason); 1324 1325 /** 1326 * sta_remove - Remove a station entry (AP only) 1327 * @priv: Private driver interface data 1328 * @addr: MAC address of the station to be removed 1329 * Returns: 0 on success, -1 on failure 1330 */ 1331 int (*sta_remove)(void *priv, const u8 *addr); 1332 1333 /** 1334 * hapd_get_ssid - Get the current SSID (AP only) 1335 * @priv: Private driver interface data 1336 * @buf: Buffer for returning the SSID 1337 * @len: Maximum length of the buffer 1338 * Returns: Length of the SSID on success, -1 on failure 1339 * 1340 * This function need not be implemented if the driver uses Beacon 1341 * template from set_beacon() and does not reply to Probe Request 1342 * frames. 1343 */ 1344 int (*hapd_get_ssid)(void *priv, u8 *buf, int len); 1345 1346 /** 1347 * hapd_set_ssid - Set SSID (AP only) 1348 * @priv: Private driver interface data 1349 * @buf: SSID 1350 * @len: Length of the SSID in octets 1351 * Returns: 0 on success, -1 on failure 1352 */ 1353 int (*hapd_set_ssid)(void *priv, const u8 *buf, int len); 1354 1355 /** 1356 * hapd_set_countermeasures - Enable/disable TKIP countermeasures (AP) 1357 * @priv: Private driver interface data 1358 * @enabled: 1 = countermeasures enabled, 0 = disabled 1359 * Returns: 0 on success, -1 on failure 1360 * 1361 * This need not be implemented if the driver does not take care of 1362 * association processing. 1363 */ 1364 int (*hapd_set_countermeasures)(void *priv, int enabled); 1365 1366 /** 1367 * sta_add - Add a station entry 1368 * @priv: Private driver interface data 1369 * @params: Station parameters 1370 * Returns: 0 on success, -1 on failure 1371 * 1372 * This function is used to add a station entry to the driver once the 1373 * station has completed association. This is only used if the driver 1374 * does not take care of association processing. 1375 */ 1376 int (*sta_add)(void *priv, struct hostapd_sta_add_params *params); 1377 1378 /** 1379 * get_inact_sec - Get station inactivity duration (AP only) 1380 * @priv: Private driver interface data 1381 * @addr: Station address 1382 * Returns: Number of seconds station has been inactive, -1 on failure 1383 */ 1384 int (*get_inact_sec)(void *priv, const u8 *addr); 1385 1386 /** 1387 * sta_clear_stats - Clear station statistics (AP only) 1388 * @priv: Private driver interface data 1389 * @addr: Station address 1390 * Returns: 0 on success, -1 on failure 1391 */ 1392 int (*sta_clear_stats)(void *priv, const u8 *addr); 1393 1394 /** 1395 * set_freq - Set channel/frequency (AP only) 1396 * @priv: Private driver interface data 1397 * @freq: Channel parameters 1398 * Returns: 0 on success, -1 on failure 1399 */ 1400 int (*set_freq)(void *priv, struct hostapd_freq_params *freq); 1401 1402 /** 1403 * set_rts - Set RTS threshold 1404 * @priv: Private driver interface data 1405 * @rts: RTS threshold in octets 1406 * Returns: 0 on success, -1 on failure 1407 */ 1408 int (*set_rts)(void *priv, int rts); 1409 1410 /** 1411 * set_frag - Set fragmentation threshold 1412 * @priv: Private driver interface data 1413 * @frag: Fragmentation threshold in octets 1414 * Returns: 0 on success, -1 on failure 1415 */ 1416 int (*set_frag)(void *priv, int frag); 1417 1418 /** 1419 * sta_set_flags - Set station flags (AP only) 1420 * @priv: Private driver interface data 1421 * @addr: Station address 1422 * @total_flags: Bitmap of all WPA_STA_* flags currently set 1423 * @flags_or: Bitmap of WPA_STA_* flags to add 1424 * @flags_and: Bitmap of WPA_STA_* flags to us as a mask 1425 * Returns: 0 on success, -1 on failure 1426 */ 1427 int (*sta_set_flags)(void *priv, const u8 *addr, 1428 int total_flags, int flags_or, int flags_and); 1429 1430 /** 1431 * set_rate_sets - Set supported and basic rate sets (AP only) 1432 * @priv: Private driver interface data 1433 * @supp_rates: -1 terminated array of supported rates in 100 kbps 1434 * @basic_rates: -1 terminated array of basic rates in 100 kbps 1435 * @mode: hardware mode (HOSTAPD_MODE_*) 1436 * Returns: 0 on success, -1 on failure 1437 */ 1438 int (*set_rate_sets)(void *priv, int *supp_rates, int *basic_rates, 1439 int mode); 1440 1441 /** 1442 * set_cts_protect - Set CTS protection mode (AP only) 1443 * @priv: Private driver interface data 1444 * @value: Whether CTS protection is enabled 1445 * Returns: 0 on success, -1 on failure 1446 */ 1447 int (*set_cts_protect)(void *priv, int value); 1448 1449 /** 1450 * set_preamble - Set preamble mode (AP only) 1451 * @priv: Private driver interface data 1452 * @value: Whether short preamble is enabled 1453 * Returns: 0 on success, -1 on failure 1454 */ 1455 int (*set_preamble)(void *priv, int value); 1456 1457 /** 1458 * set_short_slot_time - Set short slot time (AP only) 1459 * @priv: Private driver interface data 1460 * @value: Whether short slot time is enabled 1461 * Returns: 0 on success, -1 on failure 1462 */ 1463 int (*set_short_slot_time)(void *priv, int value); 1464 1465 /** 1466 * set_tx_queue_params - Set TX queue parameters 1467 * @priv: Private driver interface data 1468 * @queue: Queue number 1469 * @aifs: AIFS 1470 * @cw_min: cwMin 1471 * @cw_max: cwMax 1472 * @burst_time: Maximum length for bursting in 0.1 msec units 1473 */ 1474 int (*set_tx_queue_params)(void *priv, int queue, int aifs, int cw_min, 1475 int cw_max, int burst_time); 1476 1477 /** 1478 * valid_bss_mask - Validate BSSID mask 1479 * @priv: Private driver interface data 1480 * @addr: Address 1481 * @mask: Mask 1482 * Returns: 0 if mask is valid, -1 if mask is not valid, 1 if mask can 1483 * be used, but the main interface address must be the first address in 1484 * the block if mask is applied 1485 */ 1486 int (*valid_bss_mask)(void *priv, const u8 *addr, const u8 *mask); 1487 1488 /** 1489 * if_add - Add a virtual interface 1490 * @priv: Private driver interface data 1491 * @type: Interface type 1492 * @ifname: Interface name for the new virtual interface 1493 * @addr: Local address to use for the interface or %NULL to use the 1494 * parent interface address 1495 * @bss_ctx: BSS context for %WPA_IF_AP_BSS interfaces 1496 * @drv_priv: Pointer for overwriting the driver context or %NULL if 1497 * not allowed (applies only to %WPA_IF_AP_BSS type) 1498 * @force_ifname: Buffer for returning an interface name that the 1499 * driver ended up using if it differs from the requested ifname 1500 * @if_addr: Buffer for returning the allocated interface address 1501 * (this may differ from the requested addr if the driver cannot 1502 * change interface address) 1503 * Returns: 0 on success, -1 on failure 1504 */ 1505 int (*if_add)(void *priv, enum wpa_driver_if_type type, 1506 const char *ifname, const u8 *addr, void *bss_ctx, 1507 void **drv_priv, char *force_ifname, u8 *if_addr); 1508 1509 /** 1510 * if_remove - Remove a virtual interface 1511 * @priv: Private driver interface data 1512 * @type: Interface type 1513 * @ifname: Interface name of the virtual interface to be removed 1514 * Returns: 0 on success, -1 on failure 1515 */ 1516 int (*if_remove)(void *priv, enum wpa_driver_if_type type, 1517 const char *ifname); 1518 1519 /** 1520 * set_sta_vlan - Bind a station into a specific interface (AP only) 1521 * @priv: Private driver interface data 1522 * @ifname: Interface (main or virtual BSS or VLAN) 1523 * @addr: MAC address of the associated station 1524 * @vlan_id: VLAN ID 1525 * Returns: 0 on success, -1 on failure 1526 * 1527 * This function is used to bind a station to a specific virtual 1528 * interface. It is only used if when virtual interfaces are supported, 1529 * e.g., to assign stations to different VLAN interfaces based on 1530 * information from a RADIUS server. This allows separate broadcast 1531 * domains to be used with a single BSS. 1532 */ 1533 int (*set_sta_vlan)(void *priv, const u8 *addr, const char *ifname, 1534 int vlan_id); 1535 1536 /** 1537 * commit - Optional commit changes handler (AP only) 1538 * @priv: driver private data 1539 * Returns: 0 on success, -1 on failure 1540 * 1541 * This optional handler function can be registered if the driver 1542 * interface implementation needs to commit changes (e.g., by setting 1543 * network interface up) at the end of initial configuration. If set, 1544 * this handler will be called after initial setup has been completed. 1545 */ 1546 int (*commit)(void *priv); 1547 1548 /** 1549 * send_ether - Send an ethernet packet (AP only) 1550 * @priv: private driver interface data 1551 * @dst: Destination MAC address 1552 * @src: Source MAC address 1553 * @proto: Ethertype 1554 * @data: EAPOL packet starting with IEEE 802.1X header 1555 * @data_len: Length of the EAPOL packet in octets 1556 * Returns: 0 on success, -1 on failure 1557 */ 1558 int (*send_ether)(void *priv, const u8 *dst, const u8 *src, u16 proto, 1559 const u8 *data, size_t data_len); 1560 1561 /** 1562 * set_radius_acl_auth - Notification of RADIUS ACL change 1563 * @priv: Private driver interface data 1564 * @mac: MAC address of the station 1565 * @accepted: Whether the station was accepted 1566 * @session_timeout: Session timeout for the station 1567 * Returns: 0 on success, -1 on failure 1568 */ 1569 int (*set_radius_acl_auth)(void *priv, const u8 *mac, int accepted, 1570 u32 session_timeout); 1571 1572 /** 1573 * set_radius_acl_expire - Notification of RADIUS ACL expiration 1574 * @priv: Private driver interface data 1575 * @mac: MAC address of the station 1576 * Returns: 0 on success, -1 on failure 1577 */ 1578 int (*set_radius_acl_expire)(void *priv, const u8 *mac); 1579 1580 /** 1581 * set_ht_params - Set HT parameters (AP only) 1582 * @priv: Private driver interface data 1583 * @ht_capab: HT Capabilities IE 1584 * @ht_capab_len: Length of ht_capab in octets 1585 * @ht_oper: HT Operation IE 1586 * @ht_oper_len: Length of ht_oper in octets 1587 * Returns: 0 on success, -1 on failure 1588 */ 1589 int (*set_ht_params)(void *priv, 1590 const u8 *ht_capab, size_t ht_capab_len, 1591 const u8 *ht_oper, size_t ht_oper_len); 1592 1593 /** 1594 * set_ap_wps_ie - Add WPS IE(s) into Beacon/Probe Response frames (AP) 1595 * @priv: Private driver interface data 1596 * @beacon: WPS IE(s) for Beacon frames or %NULL to remove extra IE(s) 1597 * @proberesp: WPS IE(s) for Probe Response frames or %NULL to remove 1598 * extra IE(s) 1599 * Returns: 0 on success, -1 on failure 1600 * 1601 * This is an optional function to add WPS IE in the kernel driver for 1602 * Beacon and Probe Response frames. This can be left undefined (set 1603 * to %NULL) if the driver uses the Beacon template from set_beacon() 1604 * and does not process Probe Request frames. 1605 */ 1606 int (*set_ap_wps_ie)(void *priv, const struct wpabuf *beacon, 1607 const struct wpabuf *proberesp); 1608 1609 /** 1610 * set_supp_port - Set IEEE 802.1X Supplicant Port status 1611 * @priv: Private driver interface data 1612 * @authorized: Whether the port is authorized 1613 * Returns: 0 on success, -1 on failure 1614 */ 1615 int (*set_supp_port)(void *priv, int authorized); 1616 1617 /** 1618 * set_wds_sta - Bind a station into a 4-address WDS (AP only) 1619 * @priv: Private driver interface data 1620 * @addr: MAC address of the associated station 1621 * @aid: Association ID 1622 * @val: 1 = bind to 4-address WDS; 0 = unbind 1623 * Returns: 0 on success, -1 on failure 1624 */ 1625 int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val); 1626 1627 /** 1628 * send_action - Transmit an Action frame 1629 * @priv: Private driver interface data 1630 * @freq: Frequency (in MHz) of the channel 1631 * @dst: Destination MAC address (Address 1) 1632 * @src: Source MAC address (Address 2) 1633 * @bssid: BSSID (Address 3) 1634 * @data: Frame body 1635 * @data_len: data length in octets 1636 * Returns: 0 on success, -1 on failure 1637 * 1638 * This command can be used to request the driver to transmit an action 1639 * frame to the specified destination. If a remain-on-channel duration 1640 * is in progress, the frame is transmitted on that channel. Otherwise, 1641 * the frame is transmitted on the current operational channel if in 1642 * associated state in station mode or if operating as an AP. If none 1643 * of these conditions is in effect, send_action() cannot be used. 1644 */ 1645 int (*send_action)(void *priv, unsigned int freq, 1646 const u8 *dst, const u8 *src, const u8 *bssid, 1647 const u8 *data, size_t data_len); 1648 1649 /** 1650 * remain_on_channel - Remain awake on a channel 1651 * @priv: Private driver interface data 1652 * @freq: Frequency (in MHz) of the channel 1653 * @duration: Duration in milliseconds 1654 * Returns: 0 on success, -1 on failure 1655 * 1656 * This command is used to request the driver to remain awake on the 1657 * specified channel for the specified duration and report received 1658 * Action frames with EVENT_RX_ACTION events. Optionally, received 1659 * Probe Request frames may also be requested to be reported by calling 1660 * probe_req_report(). These will be reported with EVENT_RX_PROBE_REQ. 1661 * 1662 * The driver may not be at the requested channel when this function 1663 * returns, i.e., the return code is only indicating whether the 1664 * request was accepted. The caller will need to wait until the 1665 * EVENT_REMAIN_ON_CHANNEL event indicates that the driver has 1666 * completed the channel change. This may take some time due to other 1667 * need for the radio and the caller should be prepared to timing out 1668 * its wait since there are no guarantees on when this request can be 1669 * executed. 1670 */ 1671 int (*remain_on_channel)(void *priv, unsigned int freq, 1672 unsigned int duration); 1673 1674 /** 1675 * cancel_remain_on_channel - Cancel remain-on-channel operation 1676 * @priv: Private driver interface data 1677 * 1678 * This command can be used to cancel a remain-on-channel operation 1679 * before its originally requested duration has passed. This could be 1680 * used, e.g., when remain_on_channel() is used to request extra time 1681 * to receive a response to an Action frame and the response is 1682 * received when there is still unneeded time remaining on the 1683 * remain-on-channel operation. 1684 */ 1685 int (*cancel_remain_on_channel)(void *priv); 1686 1687 /** 1688 * probe_req_report - Request Probe Request frames to be indicated 1689 * @priv: Private driver interface data 1690 * @report: Whether to report received Probe Request frames 1691 * Returns: 0 on success, -1 on failure (or if not supported) 1692 * 1693 * This command can be used to request the driver to indicate when 1694 * Probe Request frames are received with EVENT_RX_PROBE_REQ events. 1695 * Since this operation may require extra resources, e.g., due to less 1696 * optimal hardware/firmware RX filtering, many drivers may disable 1697 * Probe Request reporting at least in station mode. This command is 1698 * used to notify the driver when the Probe Request frames need to be 1699 * reported, e.g., during remain-on-channel operations. 1700 */ 1701 int (*probe_req_report)(void *priv, int report); 1702 1703 /** 1704 * disable_11b_rates - Set whether IEEE 802.11b rates are used for TX 1705 * @priv: Private driver interface data 1706 * @disabled: Whether IEEE 802.11b rates are disabled 1707 * Returns: 0 on success, -1 on failure (or if not supported) 1708 * 1709 * This command is used to disable IEEE 802.11b rates (1, 2, 5.5, and 1710 * 11 Mbps) as TX rates for data and management frames. This can be 1711 * used to optimize channel use when there is no need to support IEEE 1712 * 802.11b-only devices. 1713 */ 1714 int (*disable_11b_rates)(void *priv, int disabled); 1715 1716 /** 1717 * deinit_ap - Deinitialize AP mode 1718 * @priv: Private driver interface data 1719 * Returns: 0 on success, -1 on failure (or if not supported) 1720 * 1721 * This optional function can be used to disable AP mode related 1722 * configuration and change the driver mode to station mode to allow 1723 * normal station operations like scanning to be completed. 1724 */ 1725 int (*deinit_ap)(void *priv); 1726 1727 /** 1728 * suspend - Notification on system suspend/hibernate event 1729 * @priv: Private driver interface data 1730 */ 1731 void (*suspend)(void *priv); 1732 1733 /** 1734 * resume - Notification on system resume/thaw event 1735 * @priv: Private driver interface data 1736 */ 1737 void (*resume)(void *priv); 1738 1739 /** 1740 * signal_monitor - Set signal monitoring parameters 1741 * @priv: Private driver interface data 1742 * @threshold: Threshold value for signal change events; 0 = disabled 1743 * @hysteresis: Minimum change in signal strength before indicating a 1744 * new event 1745 * Returns: 0 on success, -1 on failure (or if not supported) 1746 * 1747 * This function can be used to configure monitoring of signal strength 1748 * with the current AP. Whenever signal strength drops below the 1749 * %threshold value or increases above it, EVENT_SIGNAL_CHANGE event 1750 * should be generated assuming the signal strength has changed at 1751 * least %hysteresis from the previously indicated signal change event. 1752 */ 1753 int (*signal_monitor)(void *priv, int threshold, int hysteresis); 1754 1755 /** 1756 * send_frame - Send IEEE 802.11 frame (testing use only) 1757 * @priv: Private driver interface data 1758 * @data: IEEE 802.11 frame with IEEE 802.11 header 1759 * @data_len: Size of the frame 1760 * @encrypt: Whether to encrypt the frame (if keys are set) 1761 * Returns: 0 on success, -1 on failure 1762 * 1763 * This function is only used for debugging purposes and is not 1764 * required to be implemented for normal operations. 1765 */ 1766 int (*send_frame)(void *priv, const u8 *data, size_t data_len, 1767 int encrypt); 1768 }; 1769 1770 1771 /** 1772 * enum wpa_event_type - Event type for wpa_supplicant_event() calls 1773 */ 1774 enum wpa_event_type { 1775 /** 1776 * EVENT_ASSOC - Association completed 1777 * 1778 * This event needs to be delivered when the driver completes IEEE 1779 * 802.11 association or reassociation successfully. 1780 * wpa_driver_ops::get_bssid() is expected to provide the current BSSID 1781 * after this event has been generated. In addition, optional 1782 * EVENT_ASSOCINFO may be generated just before EVENT_ASSOC to provide 1783 * more information about the association. If the driver interface gets 1784 * both of these events at the same time, it can also include the 1785 * assoc_info data in EVENT_ASSOC call. 1786 */ 1787 EVENT_ASSOC, 1788 1789 /** 1790 * EVENT_DISASSOC - Association lost 1791 * 1792 * This event should be called when association is lost either due to 1793 * receiving deauthenticate or disassociate frame from the AP or when 1794 * sending either of these frames to the current AP. If the driver 1795 * supports separate deauthentication event, EVENT_DISASSOC should only 1796 * be used for disassociation and EVENT_DEAUTH for deauthentication. 1797 * In AP mode, union wpa_event_data::disassoc_info is required. 1798 */ 1799 EVENT_DISASSOC, 1800 1801 /** 1802 * EVENT_MICHAEL_MIC_FAILURE - Michael MIC (TKIP) detected 1803 * 1804 * This event must be delivered when a Michael MIC error is detected by 1805 * the local driver. Additional data for event processing is 1806 * provided with union wpa_event_data::michael_mic_failure. This 1807 * information is used to request new encyption key and to initiate 1808 * TKIP countermeasures if needed. 1809 */ 1810 EVENT_MICHAEL_MIC_FAILURE, 1811 1812 /** 1813 * EVENT_SCAN_RESULTS - Scan results available 1814 * 1815 * This event must be called whenever scan results are available to be 1816 * fetched with struct wpa_driver_ops::get_scan_results(). This event 1817 * is expected to be used some time after struct wpa_driver_ops::scan() 1818 * is called. If the driver provides an unsolicited event when the scan 1819 * has been completed, this event can be used to trigger 1820 * EVENT_SCAN_RESULTS call. If such event is not available from the 1821 * driver, the driver wrapper code is expected to use a registered 1822 * timeout to generate EVENT_SCAN_RESULTS call after the time that the 1823 * scan is expected to be completed. Optional information about 1824 * completed scan can be provided with union wpa_event_data::scan_info. 1825 */ 1826 EVENT_SCAN_RESULTS, 1827 1828 /** 1829 * EVENT_ASSOCINFO - Report optional extra information for association 1830 * 1831 * This event can be used to report extra association information for 1832 * EVENT_ASSOC processing. This extra information includes IEs from 1833 * association frames and Beacon/Probe Response frames in union 1834 * wpa_event_data::assoc_info. EVENT_ASSOCINFO must be send just before 1835 * EVENT_ASSOC. Alternatively, the driver interface can include 1836 * assoc_info data in the EVENT_ASSOC call if it has all the 1837 * information available at the same point. 1838 */ 1839 EVENT_ASSOCINFO, 1840 1841 /** 1842 * EVENT_INTERFACE_STATUS - Report interface status changes 1843 * 1844 * This optional event can be used to report changes in interface 1845 * status (interface added/removed) using union 1846 * wpa_event_data::interface_status. This can be used to trigger 1847 * wpa_supplicant to stop and re-start processing for the interface, 1848 * e.g., when a cardbus card is ejected/inserted. 1849 */ 1850 EVENT_INTERFACE_STATUS, 1851 1852 /** 1853 * EVENT_PMKID_CANDIDATE - Report a candidate AP for pre-authentication 1854 * 1855 * This event can be used to inform wpa_supplicant about candidates for 1856 * RSN (WPA2) pre-authentication. If wpa_supplicant is not responsible 1857 * for scan request (ap_scan=2 mode), this event is required for 1858 * pre-authentication. If wpa_supplicant is performing scan request 1859 * (ap_scan=1), this event is optional since scan results can be used 1860 * to add pre-authentication candidates. union 1861 * wpa_event_data::pmkid_candidate is used to report the BSSID of the 1862 * candidate and priority of the candidate, e.g., based on the signal 1863 * strength, in order to try to pre-authenticate first with candidates 1864 * that are most likely targets for re-association. 1865 * 1866 * EVENT_PMKID_CANDIDATE can be called whenever the driver has updates 1867 * on the candidate list. In addition, it can be called for the current 1868 * AP and APs that have existing PMKSA cache entries. wpa_supplicant 1869 * will automatically skip pre-authentication in cases where a valid 1870 * PMKSA exists. When more than one candidate exists, this event should 1871 * be generated once for each candidate. 1872 * 1873 * Driver will be notified about successful pre-authentication with 1874 * struct wpa_driver_ops::add_pmkid() calls. 1875 */ 1876 EVENT_PMKID_CANDIDATE, 1877 1878 /** 1879 * EVENT_STKSTART - Request STK handshake (MLME-STKSTART.request) 1880 * 1881 * This event can be used to inform wpa_supplicant about desire to set 1882 * up secure direct link connection between two stations as defined in 1883 * IEEE 802.11e with a new PeerKey mechanism that replaced the original 1884 * STAKey negotiation. The caller will need to set peer address for the 1885 * event. 1886 */ 1887 EVENT_STKSTART, 1888 1889 /** 1890 * EVENT_FT_RESPONSE - Report FT (IEEE 802.11r) response IEs 1891 * 1892 * The driver is expected to report the received FT IEs from 1893 * FT authentication sequence from the AP. The FT IEs are included in 1894 * the extra information in union wpa_event_data::ft_ies. 1895 */ 1896 EVENT_FT_RESPONSE, 1897 1898 /** 1899 * EVENT_IBSS_RSN_START - Request RSN authentication in IBSS 1900 * 1901 * The driver can use this event to inform wpa_supplicant about a STA 1902 * in an IBSS with which protected frames could be exchanged. This 1903 * event starts RSN authentication with the other STA to authenticate 1904 * the STA and set up encryption keys with it. 1905 */ 1906 EVENT_IBSS_RSN_START, 1907 1908 /** 1909 * EVENT_AUTH - Authentication result 1910 * 1911 * This event should be called when authentication attempt has been 1912 * completed. This is only used if the driver supports separate 1913 * authentication step (struct wpa_driver_ops::authenticate). 1914 * Information about authentication result is included in 1915 * union wpa_event_data::auth. 1916 */ 1917 EVENT_AUTH, 1918 1919 /** 1920 * EVENT_DEAUTH - Authentication lost 1921 * 1922 * This event should be called when authentication is lost either due 1923 * to receiving deauthenticate frame from the AP or when sending that 1924 * frame to the current AP. 1925 * In AP mode, union wpa_event_data::deauth_info is required. 1926 */ 1927 EVENT_DEAUTH, 1928 1929 /** 1930 * EVENT_ASSOC_REJECT - Association rejected 1931 * 1932 * This event should be called when (re)association attempt has been 1933 * rejected by the AP. Information about authentication result is 1934 * included in union wpa_event_data::assoc_reject. 1935 */ 1936 EVENT_ASSOC_REJECT, 1937 1938 /** 1939 * EVENT_AUTH_TIMED_OUT - Authentication timed out 1940 */ 1941 EVENT_AUTH_TIMED_OUT, 1942 1943 /** 1944 * EVENT_ASSOC_TIMED_OUT - Association timed out 1945 */ 1946 EVENT_ASSOC_TIMED_OUT, 1947 1948 /** 1949 * EVENT_FT_RRB_RX - FT (IEEE 802.11r) RRB frame received 1950 */ 1951 EVENT_FT_RRB_RX, 1952 1953 /** 1954 * EVENT_WPS_BUTTON_PUSHED - Report hardware push button press for WPS 1955 */ 1956 EVENT_WPS_BUTTON_PUSHED, 1957 1958 /** 1959 * EVENT_TX_STATUS - Report TX status 1960 */ 1961 EVENT_TX_STATUS, 1962 1963 /** 1964 * EVENT_RX_FROM_UNKNOWN - Report RX from unknown STA 1965 */ 1966 EVENT_RX_FROM_UNKNOWN, 1967 1968 /** 1969 * EVENT_RX_MGMT - Report RX of a management frame 1970 */ 1971 EVENT_RX_MGMT, 1972 1973 /** 1974 * EVENT_RX_ACTION - Action frame received 1975 * 1976 * This event is used to indicate when an Action frame has been 1977 * received. Information about the received frame is included in 1978 * union wpa_event_data::rx_action. 1979 */ 1980 EVENT_RX_ACTION, 1981 1982 /** 1983 * EVENT_REMAIN_ON_CHANNEL - Remain-on-channel duration started 1984 * 1985 * This event is used to indicate when the driver has started the 1986 * requested remain-on-channel duration. Information about the 1987 * operation is included in union wpa_event_data::remain_on_channel. 1988 */ 1989 EVENT_REMAIN_ON_CHANNEL, 1990 1991 /** 1992 * EVENT_CANCEL_REMAIN_ON_CHANNEL - Remain-on-channel timed out 1993 * 1994 * This event is used to indicate when the driver has completed 1995 * remain-on-channel duration, i.e., may noot be available on the 1996 * requested channel anymore. Information about the 1997 * operation is included in union wpa_event_data::remain_on_channel. 1998 */ 1999 EVENT_CANCEL_REMAIN_ON_CHANNEL, 2000 2001 /** 2002 * EVENT_MLME_RX - Report reception of frame for MLME (test use only) 2003 * 2004 * This event is used only by driver_test.c and userspace MLME. 2005 */ 2006 EVENT_MLME_RX, 2007 2008 /** 2009 * EVENT_RX_PROBE_REQ - Indicate received Probe Request frame 2010 * 2011 * This event is used to indicate when a Probe Request frame has been 2012 * received. Information about the received frame is included in 2013 * union wpa_event_data::rx_probe_req. The driver is required to report 2014 * these events only after successfully completed probe_req_report() 2015 * commands to request the events (i.e., report parameter is non-zero) 2016 * in station mode. In AP mode, Probe Request frames should always be 2017 * reported. 2018 */ 2019 EVENT_RX_PROBE_REQ, 2020 2021 /** 2022 * EVENT_NEW_STA - New wired device noticed 2023 * 2024 * This event is used to indicate that a new device has been detected 2025 * in a network that does not use association-like functionality (i.e., 2026 * mainly wired Ethernet). This can be used to start EAPOL 2027 * authenticator when receiving a frame from a device. The address of 2028 * the device is included in union wpa_event_data::new_sta. 2029 */ 2030 EVENT_NEW_STA, 2031 2032 /** 2033 * EVENT_EAPOL_RX - Report received EAPOL frame 2034 * 2035 * When in AP mode with hostapd, this event is required to be used to 2036 * deliver the receive EAPOL frames from the driver. With 2037 * %wpa_supplicant, this event is used only if the send_eapol() handler 2038 * is used to override the use of l2_packet for EAPOL frame TX. 2039 */ 2040 EVENT_EAPOL_RX, 2041 2042 /** 2043 * EVENT_SIGNAL_CHANGE - Indicate change in signal strength 2044 * 2045 * This event is used to indicate changes in the signal strength 2046 * observed in frames received from the current AP if signal strength 2047 * monitoring has been enabled with signal_monitor(). 2048 */ 2049 EVENT_SIGNAL_CHANGE 2050 }; 2051 2052 2053 /** 2054 * union wpa_event_data - Additional data for wpa_supplicant_event() calls 2055 */ 2056 union wpa_event_data { 2057 /** 2058 * struct assoc_info - Data for EVENT_ASSOC and EVENT_ASSOCINFO events 2059 * 2060 * This structure is optional for EVENT_ASSOC calls and required for 2061 * EVENT_ASSOCINFO calls. By using EVENT_ASSOC with this data, the 2062 * driver interface does not need to generate separate EVENT_ASSOCINFO 2063 * calls. 2064 */ 2065 struct assoc_info { 2066 /** 2067 * req_ies - (Re)Association Request IEs 2068 * 2069 * If the driver generates WPA/RSN IE, this event data must be 2070 * returned for WPA handshake to have needed information. If 2071 * wpa_supplicant-generated WPA/RSN IE is used, this 2072 * information event is optional. 2073 * 2074 * This should start with the first IE (fixed fields before IEs 2075 * are not included). 2076 */ 2077 const u8 *req_ies; 2078 2079 /** 2080 * req_ies_len - Length of req_ies in bytes 2081 */ 2082 size_t req_ies_len; 2083 2084 /** 2085 * resp_ies - (Re)Association Response IEs 2086 * 2087 * Optional association data from the driver. This data is not 2088 * required WPA, but may be useful for some protocols and as 2089 * such, should be reported if this is available to the driver 2090 * interface. 2091 * 2092 * This should start with the first IE (fixed fields before IEs 2093 * are not included). 2094 */ 2095 const u8 *resp_ies; 2096 2097 /** 2098 * resp_ies_len - Length of resp_ies in bytes 2099 */ 2100 size_t resp_ies_len; 2101 2102 /** 2103 * beacon_ies - Beacon or Probe Response IEs 2104 * 2105 * Optional Beacon/ProbeResp data: IEs included in Beacon or 2106 * Probe Response frames from the current AP (i.e., the one 2107 * that the client just associated with). This information is 2108 * used to update WPA/RSN IE for the AP. If this field is not 2109 * set, the results from previous scan will be used. If no 2110 * data for the new AP is found, scan results will be requested 2111 * again (without scan request). At this point, the driver is 2112 * expected to provide WPA/RSN IE for the AP (if WPA/WPA2 is 2113 * used). 2114 * 2115 * This should start with the first IE (fixed fields before IEs 2116 * are not included). 2117 */ 2118 const u8 *beacon_ies; 2119 2120 /** 2121 * beacon_ies_len - Length of beacon_ies */ 2122 size_t beacon_ies_len; 2123 2124 /** 2125 * freq - Frequency of the operational channel in MHz 2126 */ 2127 unsigned int freq; 2128 2129 /** 2130 * addr - Station address (for AP mode) 2131 */ 2132 const u8 *addr; 2133 } assoc_info; 2134 2135 /** 2136 * struct disassoc_info - Data for EVENT_DISASSOC events 2137 */ 2138 struct disassoc_info { 2139 /** 2140 * addr - Station address (for AP mode) 2141 */ 2142 const u8 *addr; 2143 2144 /** 2145 * reason_code - Reason Code (host byte order) used in 2146 * Deauthentication frame 2147 */ 2148 u16 reason_code; 2149 } disassoc_info; 2150 2151 /** 2152 * struct deauth_info - Data for EVENT_DEAUTH events 2153 */ 2154 struct deauth_info { 2155 /** 2156 * addr - Station address (for AP mode) 2157 */ 2158 const u8 *addr; 2159 2160 /** 2161 * reason_code - Reason Code (host byte order) used in 2162 * Deauthentication frame 2163 */ 2164 u16 reason_code; 2165 } deauth_info; 2166 2167 /** 2168 * struct michael_mic_failure - Data for EVENT_MICHAEL_MIC_FAILURE 2169 */ 2170 struct michael_mic_failure { 2171 int unicast; 2172 const u8 *src; 2173 } michael_mic_failure; 2174 2175 /** 2176 * struct interface_status - Data for EVENT_INTERFACE_STATUS 2177 */ 2178 struct interface_status { 2179 char ifname[100]; 2180 enum { 2181 EVENT_INTERFACE_ADDED, EVENT_INTERFACE_REMOVED 2182 } ievent; 2183 } interface_status; 2184 2185 /** 2186 * struct pmkid_candidate - Data for EVENT_PMKID_CANDIDATE 2187 */ 2188 struct pmkid_candidate { 2189 /** BSSID of the PMKID candidate */ 2190 u8 bssid[ETH_ALEN]; 2191 /** Smaller the index, higher the priority */ 2192 int index; 2193 /** Whether RSN IE includes pre-authenticate flag */ 2194 int preauth; 2195 } pmkid_candidate; 2196 2197 /** 2198 * struct stkstart - Data for EVENT_STKSTART 2199 */ 2200 struct stkstart { 2201 u8 peer[ETH_ALEN]; 2202 } stkstart; 2203 2204 /** 2205 * struct ft_ies - FT information elements (EVENT_FT_RESPONSE) 2206 * 2207 * During FT (IEEE 802.11r) authentication sequence, the driver is 2208 * expected to use this event to report received FT IEs (MDIE, FTIE, 2209 * RSN IE, TIE, possible resource request) to the supplicant. The FT 2210 * IEs for the next message will be delivered through the 2211 * struct wpa_driver_ops::update_ft_ies() callback. 2212 */ 2213 struct ft_ies { 2214 const u8 *ies; 2215 size_t ies_len; 2216 int ft_action; 2217 u8 target_ap[ETH_ALEN]; 2218 /** Optional IE(s), e.g., WMM TSPEC(s), for RIC-Request */ 2219 const u8 *ric_ies; 2220 /** Length of ric_ies buffer in octets */ 2221 size_t ric_ies_len; 2222 } ft_ies; 2223 2224 /** 2225 * struct ibss_rsn_start - Data for EVENT_IBSS_RSN_START 2226 */ 2227 struct ibss_rsn_start { 2228 u8 peer[ETH_ALEN]; 2229 } ibss_rsn_start; 2230 2231 /** 2232 * struct auth_info - Data for EVENT_AUTH events 2233 */ 2234 struct auth_info { 2235 u8 peer[ETH_ALEN]; 2236 u16 auth_type; 2237 u16 status_code; 2238 const u8 *ies; 2239 size_t ies_len; 2240 } auth; 2241 2242 /** 2243 * struct assoc_reject - Data for EVENT_ASSOC_REJECT events 2244 */ 2245 struct assoc_reject { 2246 /** 2247 * resp_ies - (Re)Association Response IEs 2248 * 2249 * Optional association data from the driver. This data is not 2250 * required WPA, but may be useful for some protocols and as 2251 * such, should be reported if this is available to the driver 2252 * interface. 2253 * 2254 * This should start with the first IE (fixed fields before IEs 2255 * are not included). 2256 */ 2257 u8 *resp_ies; 2258 2259 /** 2260 * resp_ies_len - Length of resp_ies in bytes 2261 */ 2262 size_t resp_ies_len; 2263 2264 /** 2265 * status_code - Status Code from (Re)association Response 2266 */ 2267 u16 status_code; 2268 } assoc_reject; 2269 2270 struct timeout_event { 2271 u8 addr[ETH_ALEN]; 2272 } timeout_event; 2273 2274 /** 2275 * struct ft_rrb_rx - Data for EVENT_FT_RRB_RX events 2276 */ 2277 struct ft_rrb_rx { 2278 const u8 *src; 2279 const u8 *data; 2280 size_t data_len; 2281 } ft_rrb_rx; 2282 2283 /** 2284 * struct tx_status - Data for EVENT_TX_STATUS events 2285 */ 2286 struct tx_status { 2287 u16 type; 2288 u16 stype; 2289 const u8 *dst; 2290 const u8 *data; 2291 size_t data_len; 2292 int ack; 2293 } tx_status; 2294 2295 /** 2296 * struct rx_from_unknown - Data for EVENT_RX_FROM_UNKNOWN events 2297 */ 2298 struct rx_from_unknown { 2299 const u8 *frame; 2300 size_t len; 2301 } rx_from_unknown; 2302 2303 /** 2304 * struct rx_mgmt - Data for EVENT_RX_MGMT events 2305 */ 2306 struct rx_mgmt { 2307 const u8 *frame; 2308 size_t frame_len; 2309 u32 datarate; 2310 u32 ssi_signal; 2311 } rx_mgmt; 2312 2313 /** 2314 * struct rx_action - Data for EVENT_RX_ACTION events 2315 */ 2316 struct rx_action { 2317 /** 2318 * da - Destination address of the received Action frame 2319 */ 2320 const u8 *da; 2321 2322 /** 2323 * sa - Source address of the received Action frame 2324 */ 2325 const u8 *sa; 2326 2327 /** 2328 * bssid - Address 3 of the received Action frame 2329 */ 2330 const u8 *bssid; 2331 2332 /** 2333 * category - Action frame category 2334 */ 2335 u8 category; 2336 2337 /** 2338 * data - Action frame body after category field 2339 */ 2340 const u8 *data; 2341 2342 /** 2343 * len - Length of data in octets 2344 */ 2345 size_t len; 2346 2347 /** 2348 * freq - Frequency (in MHz) on which the frame was received 2349 */ 2350 int freq; 2351 } rx_action; 2352 2353 /** 2354 * struct remain_on_channel - Data for EVENT_REMAIN_ON_CHANNEL events 2355 * 2356 * This is also used with EVENT_CANCEL_REMAIN_ON_CHANNEL events. 2357 */ 2358 struct remain_on_channel { 2359 /** 2360 * freq - Channel frequency in MHz 2361 */ 2362 unsigned int freq; 2363 2364 /** 2365 * duration - Duration to remain on the channel in milliseconds 2366 */ 2367 unsigned int duration; 2368 } remain_on_channel; 2369 2370 /** 2371 * struct scan_info - Optional data for EVENT_SCAN_RESULTS events 2372 * @aborted: Whether the scan was aborted 2373 * @freqs: Scanned frequencies in MHz (%NULL = all channels scanned) 2374 * @num_freqs: Number of entries in freqs array 2375 * @ssids: Scanned SSIDs (%NULL or zero-length SSID indicates wildcard 2376 * SSID) 2377 * @num_ssids: Number of entries in ssids array 2378 */ 2379 struct scan_info { 2380 int aborted; 2381 const int *freqs; 2382 size_t num_freqs; 2383 struct wpa_driver_scan_ssid ssids[WPAS_MAX_SCAN_SSIDS]; 2384 size_t num_ssids; 2385 } scan_info; 2386 2387 /** 2388 * struct mlme_rx - Data for EVENT_MLME_RX events 2389 */ 2390 struct mlme_rx { 2391 const u8 *buf; 2392 size_t len; 2393 int freq; 2394 int channel; 2395 int ssi; 2396 } mlme_rx; 2397 2398 /** 2399 * struct rx_probe_req - Data for EVENT_RX_PROBE_REQ events 2400 */ 2401 struct rx_probe_req { 2402 /** 2403 * sa - Source address of the received Probe Request frame 2404 */ 2405 const u8 *sa; 2406 2407 /** 2408 * ie - IEs from the Probe Request body 2409 */ 2410 const u8 *ie; 2411 2412 /** 2413 * ie_len - Length of ie buffer in octets 2414 */ 2415 size_t ie_len; 2416 } rx_probe_req; 2417 2418 /** 2419 * struct new_sta - Data for EVENT_NEW_STA events 2420 */ 2421 struct new_sta { 2422 const u8 *addr; 2423 } new_sta; 2424 2425 /** 2426 * struct eapol_rx - Data for EVENT_EAPOL_RX events 2427 */ 2428 struct eapol_rx { 2429 const u8 *src; 2430 const u8 *data; 2431 size_t data_len; 2432 } eapol_rx; 2433 2434 /** 2435 * struct signal_change - Data for EVENT_SIGNAL_CHANGE events 2436 */ 2437 struct signal_change { 2438 int above_threshold; 2439 } signal_change; 2440 }; 2441 2442 /** 2443 * wpa_supplicant_event - Report a driver event for wpa_supplicant 2444 * @ctx: Context pointer (wpa_s); this is the ctx variable registered 2445 * with struct wpa_driver_ops::init() 2446 * @event: event type (defined above) 2447 * @data: possible extra data for the event 2448 * 2449 * Driver wrapper code should call this function whenever an event is received 2450 * from the driver. 2451 */ 2452 void wpa_supplicant_event(void *ctx, enum wpa_event_type event, 2453 union wpa_event_data *data); 2454 2455 2456 /* 2457 * The following inline functions are provided for convenience to simplify 2458 * event indication for some of the common events. 2459 */ 2460 2461 static inline void drv_event_assoc(void *ctx, const u8 *addr, const u8 *ie, 2462 size_t ielen) 2463 { 2464 union wpa_event_data event; 2465 os_memset(&event, 0, sizeof(event)); 2466 event.assoc_info.req_ies = ie; 2467 event.assoc_info.req_ies_len = ielen; 2468 event.assoc_info.addr = addr; 2469 wpa_supplicant_event(ctx, EVENT_ASSOC, &event); 2470 } 2471 2472 static inline void drv_event_disassoc(void *ctx, const u8 *addr) 2473 { 2474 union wpa_event_data event; 2475 os_memset(&event, 0, sizeof(event)); 2476 event.disassoc_info.addr = addr; 2477 wpa_supplicant_event(ctx, EVENT_DISASSOC, &event); 2478 } 2479 2480 static inline void drv_event_eapol_rx(void *ctx, const u8 *src, const u8 *data, 2481 size_t data_len) 2482 { 2483 union wpa_event_data event; 2484 os_memset(&event, 0, sizeof(event)); 2485 event.eapol_rx.src = src; 2486 event.eapol_rx.data = data; 2487 event.eapol_rx.data_len = data_len; 2488 wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event); 2489 } 2490 2491 #endif /* DRIVER_H */ 2492