1 /* 2 * Driver interface definition 3 * Copyright (c) 2003-2015, Jouni Malinen <j (at) w1.fi> 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 * 8 * This file defines a driver interface used by both %wpa_supplicant and 9 * hostapd. The first part of the file defines data structures used in various 10 * driver operations. This is followed by the struct wpa_driver_ops that each 11 * driver wrapper will beed to define with callback functions for requesting 12 * driver operations. After this, there are definitions for driver event 13 * reporting with wpa_supplicant_event() and some convenience helper functions 14 * that can be used to report events. 15 */ 16 17 #ifndef DRIVER_H 18 #define DRIVER_H 19 20 #define WPA_SUPPLICANT_DRIVER_VERSION 4 21 22 #include "common/defs.h" 23 #include "common/ieee802_11_defs.h" 24 #include "utils/list.h" 25 26 #define HOSTAPD_CHAN_DISABLED 0x00000001 27 #define HOSTAPD_CHAN_NO_IR 0x00000002 28 #define HOSTAPD_CHAN_RADAR 0x00000008 29 #define HOSTAPD_CHAN_HT40PLUS 0x00000010 30 #define HOSTAPD_CHAN_HT40MINUS 0x00000020 31 #define HOSTAPD_CHAN_HT40 0x00000040 32 #define HOSTAPD_CHAN_SURVEY_LIST_INITIALIZED 0x00000080 33 34 #define HOSTAPD_CHAN_DFS_UNKNOWN 0x00000000 35 #define HOSTAPD_CHAN_DFS_USABLE 0x00000100 36 #define HOSTAPD_CHAN_DFS_UNAVAILABLE 0x00000200 37 #define HOSTAPD_CHAN_DFS_AVAILABLE 0x00000300 38 #define HOSTAPD_CHAN_DFS_MASK 0x00000300 39 40 #define HOSTAPD_CHAN_VHT_10_70 0x00000800 41 #define HOSTAPD_CHAN_VHT_30_50 0x00001000 42 #define HOSTAPD_CHAN_VHT_50_30 0x00002000 43 #define HOSTAPD_CHAN_VHT_70_10 0x00004000 44 45 #define HOSTAPD_CHAN_INDOOR_ONLY 0x00010000 46 #define HOSTAPD_CHAN_GO_CONCURRENT 0x00020000 47 48 /** 49 * enum reg_change_initiator - Regulatory change initiator 50 */ 51 enum reg_change_initiator { 52 REGDOM_SET_BY_CORE, 53 REGDOM_SET_BY_USER, 54 REGDOM_SET_BY_DRIVER, 55 REGDOM_SET_BY_COUNTRY_IE, 56 REGDOM_BEACON_HINT, 57 }; 58 59 /** 60 * enum reg_type - Regulatory change types 61 */ 62 enum reg_type { 63 REGDOM_TYPE_UNKNOWN, 64 REGDOM_TYPE_COUNTRY, 65 REGDOM_TYPE_WORLD, 66 REGDOM_TYPE_CUSTOM_WORLD, 67 REGDOM_TYPE_INTERSECTION, 68 }; 69 70 /** 71 * struct hostapd_channel_data - Channel information 72 */ 73 struct hostapd_channel_data { 74 /** 75 * chan - Channel number (IEEE 802.11) 76 */ 77 short chan; 78 79 /** 80 * freq - Frequency in MHz 81 */ 82 int freq; 83 84 /** 85 * flag - Channel flags (HOSTAPD_CHAN_*) 86 */ 87 int flag; 88 89 /** 90 * max_tx_power - Regulatory transmit power limit in dBm 91 */ 92 u8 max_tx_power; 93 94 /** 95 * survey_list - Linked list of surveys (struct freq_survey) 96 */ 97 struct dl_list survey_list; 98 99 /** 100 * min_nf - Minimum observed noise floor, in dBm, based on all 101 * surveyed channel data 102 */ 103 s8 min_nf; 104 105 #ifdef CONFIG_ACS 106 /** 107 * interference_factor - Computed interference factor on this 108 * channel (used internally in src/ap/acs.c; driver wrappers do not 109 * need to set this) 110 */ 111 long double interference_factor; 112 #endif /* CONFIG_ACS */ 113 114 /** 115 * dfs_cac_ms - DFS CAC time in milliseconds 116 */ 117 unsigned int dfs_cac_ms; 118 }; 119 120 #define HOSTAPD_MODE_FLAG_HT_INFO_KNOWN BIT(0) 121 #define HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN BIT(1) 122 123 /** 124 * struct hostapd_hw_modes - Supported hardware mode information 125 */ 126 struct hostapd_hw_modes { 127 /** 128 * mode - Hardware mode 129 */ 130 enum hostapd_hw_mode mode; 131 132 /** 133 * num_channels - Number of entries in the channels array 134 */ 135 int num_channels; 136 137 /** 138 * channels - Array of supported channels 139 */ 140 struct hostapd_channel_data *channels; 141 142 /** 143 * num_rates - Number of entries in the rates array 144 */ 145 int num_rates; 146 147 /** 148 * rates - Array of supported rates in 100 kbps units 149 */ 150 int *rates; 151 152 /** 153 * ht_capab - HT (IEEE 802.11n) capabilities 154 */ 155 u16 ht_capab; 156 157 /** 158 * mcs_set - MCS (IEEE 802.11n) rate parameters 159 */ 160 u8 mcs_set[16]; 161 162 /** 163 * a_mpdu_params - A-MPDU (IEEE 802.11n) parameters 164 */ 165 u8 a_mpdu_params; 166 167 /** 168 * vht_capab - VHT (IEEE 802.11ac) capabilities 169 */ 170 u32 vht_capab; 171 172 /** 173 * vht_mcs_set - VHT MCS (IEEE 802.11ac) rate parameters 174 */ 175 u8 vht_mcs_set[8]; 176 177 unsigned int flags; /* HOSTAPD_MODE_FLAG_* */ 178 }; 179 180 181 #define IEEE80211_MODE_INFRA 0 182 #define IEEE80211_MODE_IBSS 1 183 #define IEEE80211_MODE_AP 2 184 #define IEEE80211_MODE_MESH 5 185 186 #define IEEE80211_CAP_ESS 0x0001 187 #define IEEE80211_CAP_IBSS 0x0002 188 #define IEEE80211_CAP_PRIVACY 0x0010 189 #define IEEE80211_CAP_RRM 0x1000 190 191 /* DMG (60 GHz) IEEE 802.11ad */ 192 /* type - bits 0..1 */ 193 #define IEEE80211_CAP_DMG_MASK 0x0003 194 #define IEEE80211_CAP_DMG_IBSS 0x0001 /* Tx by: STA */ 195 #define IEEE80211_CAP_DMG_PBSS 0x0002 /* Tx by: PCP */ 196 #define IEEE80211_CAP_DMG_AP 0x0003 /* Tx by: AP */ 197 198 #define WPA_SCAN_QUAL_INVALID BIT(0) 199 #define WPA_SCAN_NOISE_INVALID BIT(1) 200 #define WPA_SCAN_LEVEL_INVALID BIT(2) 201 #define WPA_SCAN_LEVEL_DBM BIT(3) 202 #define WPA_SCAN_ASSOCIATED BIT(5) 203 204 /** 205 * struct wpa_scan_res - Scan result for an BSS/IBSS 206 * @flags: information flags about the BSS/IBSS (WPA_SCAN_*) 207 * @bssid: BSSID 208 * @freq: frequency of the channel in MHz (e.g., 2412 = channel 1) 209 * @beacon_int: beacon interval in TUs (host byte order) 210 * @caps: capability information field in host byte order 211 * @qual: signal quality 212 * @noise: noise level 213 * @level: signal level 214 * @tsf: Timestamp 215 * @age: Age of the information in milliseconds (i.e., how many milliseconds 216 * ago the last Beacon or Probe Response frame was received) 217 * @est_throughput: Estimated throughput in kbps (this is calculated during 218 * scan result processing if left zero by the driver wrapper) 219 * @snr: Signal-to-noise ratio in dB (calculated during scan result processing) 220 * @ie_len: length of the following IE field in octets 221 * @beacon_ie_len: length of the following Beacon IE field in octets 222 * 223 * This structure is used as a generic format for scan results from the 224 * driver. Each driver interface implementation is responsible for converting 225 * the driver or OS specific scan results into this format. 226 * 227 * If the driver does not support reporting all IEs, the IE data structure is 228 * constructed of the IEs that are available. This field will also need to 229 * include SSID in IE format. All drivers are encouraged to be extended to 230 * report all IEs to make it easier to support future additions. 231 * 232 * This structure data is followed by ie_len octets of IEs from Probe Response 233 * frame (or if the driver does not indicate source of IEs, these may also be 234 * from Beacon frame). After the first set of IEs, another set of IEs may follow 235 * (with beacon_ie_len octets of data) if the driver provides both IE sets. 236 */ 237 struct wpa_scan_res { 238 unsigned int flags; 239 u8 bssid[ETH_ALEN]; 240 int freq; 241 u16 beacon_int; 242 u16 caps; 243 int qual; 244 int noise; 245 int level; 246 u64 tsf; 247 unsigned int age; 248 unsigned int est_throughput; 249 int snr; 250 size_t ie_len; 251 size_t beacon_ie_len; 252 /* Followed by ie_len + beacon_ie_len octets of IE data */ 253 }; 254 255 /** 256 * struct wpa_scan_results - Scan results 257 * @res: Array of pointers to allocated variable length scan result entries 258 * @num: Number of entries in the scan result array 259 * @fetch_time: Time when the results were fetched from the driver 260 */ 261 struct wpa_scan_results { 262 struct wpa_scan_res **res; 263 size_t num; 264 struct os_reltime fetch_time; 265 }; 266 267 /** 268 * struct wpa_interface_info - Network interface information 269 * @next: Pointer to the next interface or NULL if this is the last one 270 * @ifname: Interface name that can be used with init() or init2() 271 * @desc: Human readable adapter description (e.g., vendor/model) or NULL if 272 * not available 273 * @drv_name: struct wpa_driver_ops::name (note: unlike other strings, this one 274 * is not an allocated copy, i.e., get_interfaces() caller will not free 275 * this) 276 */ 277 struct wpa_interface_info { 278 struct wpa_interface_info *next; 279 char *ifname; 280 char *desc; 281 const char *drv_name; 282 }; 283 284 #define WPAS_MAX_SCAN_SSIDS 16 285 286 /** 287 * struct wpa_driver_scan_params - Scan parameters 288 * Data for struct wpa_driver_ops::scan2(). 289 */ 290 struct wpa_driver_scan_params { 291 /** 292 * ssids - SSIDs to scan for 293 */ 294 struct wpa_driver_scan_ssid { 295 /** 296 * ssid - specific SSID to scan for (ProbeReq) 297 * %NULL or zero-length SSID is used to indicate active scan 298 * with wildcard SSID. 299 */ 300 const u8 *ssid; 301 /** 302 * ssid_len: Length of the SSID in octets 303 */ 304 size_t ssid_len; 305 } ssids[WPAS_MAX_SCAN_SSIDS]; 306 307 /** 308 * num_ssids - Number of entries in ssids array 309 * Zero indicates a request for a passive scan. 310 */ 311 size_t num_ssids; 312 313 /** 314 * extra_ies - Extra IE(s) to add into Probe Request or %NULL 315 */ 316 const u8 *extra_ies; 317 318 /** 319 * extra_ies_len - Length of extra_ies in octets 320 */ 321 size_t extra_ies_len; 322 323 /** 324 * freqs - Array of frequencies to scan or %NULL for all frequencies 325 * 326 * The frequency is set in MHz. The array is zero-terminated. 327 */ 328 int *freqs; 329 330 /** 331 * filter_ssids - Filter for reporting SSIDs 332 * 333 * This optional parameter can be used to request the driver wrapper to 334 * filter scan results to include only the specified SSIDs. %NULL 335 * indicates that no filtering is to be done. This can be used to 336 * reduce memory needs for scan results in environments that have large 337 * number of APs with different SSIDs. 338 * 339 * The driver wrapper is allowed to take this allocated buffer into its 340 * own use by setting the pointer to %NULL. In that case, the driver 341 * wrapper is responsible for freeing the buffer with os_free() once it 342 * is not needed anymore. 343 */ 344 struct wpa_driver_scan_filter { 345 u8 ssid[SSID_MAX_LEN]; 346 size_t ssid_len; 347 } *filter_ssids; 348 349 /** 350 * num_filter_ssids - Number of entries in filter_ssids array 351 */ 352 size_t num_filter_ssids; 353 354 /** 355 * filter_rssi - Filter by RSSI 356 * 357 * The driver may filter scan results in firmware to reduce host 358 * wakeups and thereby save power. Specify the RSSI threshold in s32 359 * dBm. 360 */ 361 s32 filter_rssi; 362 363 /** 364 * p2p_probe - Used to disable CCK (802.11b) rates for P2P probes 365 * 366 * When set, the driver is expected to remove rates 1, 2, 5.5, and 11 367 * Mbps from the support rates element(s) in the Probe Request frames 368 * and not to transmit the frames at any of those rates. 369 */ 370 unsigned int p2p_probe:1; 371 372 /** 373 * only_new_results - Request driver to report only new results 374 * 375 * This is used to request the driver to report only BSSes that have 376 * been detected after this scan request has been started, i.e., to 377 * flush old cached BSS entries. 378 */ 379 unsigned int only_new_results:1; 380 381 /** 382 * low_priority - Requests driver to use a lower scan priority 383 * 384 * This is used to request the driver to use a lower scan priority 385 * if it supports such a thing. 386 */ 387 unsigned int low_priority:1; 388 389 /** 390 * mac_addr_rand - Requests driver to randomize MAC address 391 */ 392 unsigned int mac_addr_rand:1; 393 394 /** 395 * mac_addr - MAC address used with randomization. The address cannot be 396 * a multicast one, i.e., bit 0 of byte 0 should not be set. 397 */ 398 const u8 *mac_addr; 399 400 /** 401 * mac_addr_mask - MAC address mask used with randomization. 402 * 403 * Bits that are 0 in the mask should be randomized. Bits that are 1 in 404 * the mask should be taken as is from mac_addr. The mask should not 405 * allow the generation of a multicast address, i.e., bit 0 of byte 0 406 * must be set. 407 */ 408 const u8 *mac_addr_mask; 409 410 /* 411 * NOTE: Whenever adding new parameters here, please make sure 412 * wpa_scan_clone_params() and wpa_scan_free_params() get updated with 413 * matching changes. 414 */ 415 }; 416 417 /** 418 * struct wpa_driver_auth_params - Authentication parameters 419 * Data for struct wpa_driver_ops::authenticate(). 420 */ 421 struct wpa_driver_auth_params { 422 int freq; 423 const u8 *bssid; 424 const u8 *ssid; 425 size_t ssid_len; 426 int auth_alg; 427 const u8 *ie; 428 size_t ie_len; 429 const u8 *wep_key[4]; 430 size_t wep_key_len[4]; 431 int wep_tx_keyidx; 432 int local_state_change; 433 434 /** 435 * p2p - Whether this connection is a P2P group 436 */ 437 int p2p; 438 439 /** 440 * sae_data - SAE elements for Authentication frame 441 * 442 * This buffer starts with the Authentication transaction sequence 443 * number field. If SAE is not used, this pointer is %NULL. 444 */ 445 const u8 *sae_data; 446 447 /** 448 * sae_data_len - Length of sae_data buffer in octets 449 */ 450 size_t sae_data_len; 451 }; 452 453 /** 454 * enum wps_mode - WPS mode 455 */ 456 enum wps_mode { 457 /** 458 * WPS_MODE_NONE - No WPS provisioning being used 459 */ 460 WPS_MODE_NONE, 461 462 /** 463 * WPS_MODE_OPEN - WPS provisioning with AP that is in open mode 464 */ 465 WPS_MODE_OPEN, 466 467 /** 468 * WPS_MODE_PRIVACY - WPS provisioning with AP that is using protection 469 */ 470 WPS_MODE_PRIVACY 471 }; 472 473 /** 474 * struct hostapd_freq_params - Channel parameters 475 */ 476 struct hostapd_freq_params { 477 /** 478 * mode - Mode/band (HOSTAPD_MODE_IEEE80211A, ..) 479 */ 480 enum hostapd_hw_mode mode; 481 482 /** 483 * freq - Primary channel center frequency in MHz 484 */ 485 int freq; 486 487 /** 488 * channel - Channel number 489 */ 490 int channel; 491 492 /** 493 * ht_enabled - Whether HT is enabled 494 */ 495 int ht_enabled; 496 497 /** 498 * sec_channel_offset - Secondary channel offset for HT40 499 * 500 * 0 = HT40 disabled, 501 * -1 = HT40 enabled, secondary channel below primary, 502 * 1 = HT40 enabled, secondary channel above primary 503 */ 504 int sec_channel_offset; 505 506 /** 507 * vht_enabled - Whether VHT is enabled 508 */ 509 int vht_enabled; 510 511 /** 512 * center_freq1 - Segment 0 center frequency in MHz 513 * 514 * Valid for both HT and VHT. 515 */ 516 int center_freq1; 517 518 /** 519 * center_freq2 - Segment 1 center frequency in MHz 520 * 521 * Non-zero only for bandwidth 80 and an 80+80 channel 522 */ 523 int center_freq2; 524 525 /** 526 * bandwidth - Channel bandwidth in MHz (20, 40, 80, 160) 527 */ 528 int bandwidth; 529 }; 530 531 /** 532 * struct wpa_driver_associate_params - Association parameters 533 * Data for struct wpa_driver_ops::associate(). 534 */ 535 struct wpa_driver_associate_params { 536 /** 537 * bssid - BSSID of the selected AP 538 * This can be %NULL, if ap_scan=2 mode is used and the driver is 539 * responsible for selecting with which BSS to associate. */ 540 const u8 *bssid; 541 542 /** 543 * bssid_hint - BSSID of a proposed AP 544 * 545 * This indicates which BSS has been found a suitable candidate for 546 * initial association for drivers that use driver/firmwate-based BSS 547 * selection. Unlike the @bssid parameter, @bssid_hint does not limit 548 * the driver from selecting other BSSes in the ESS. 549 */ 550 const u8 *bssid_hint; 551 552 /** 553 * ssid - The selected SSID 554 */ 555 const u8 *ssid; 556 557 /** 558 * ssid_len - Length of the SSID (1..32) 559 */ 560 size_t ssid_len; 561 562 /** 563 * freq - channel parameters 564 */ 565 struct hostapd_freq_params freq; 566 567 /** 568 * freq_hint - Frequency of the channel the proposed AP is using 569 * 570 * This provides a channel on which a suitable BSS has been found as a 571 * hint for the driver. Unlike the @freq parameter, @freq_hint does not 572 * limit the driver from selecting other channels for 573 * driver/firmware-based BSS selection. 574 */ 575 int freq_hint; 576 577 /** 578 * bg_scan_period - Background scan period in seconds, 0 to disable 579 * background scan, or -1 to indicate no change to default driver 580 * configuration 581 */ 582 int bg_scan_period; 583 584 /** 585 * beacon_int - Beacon interval for IBSS or 0 to use driver default 586 */ 587 int beacon_int; 588 589 /** 590 * wpa_ie - WPA information element for (Re)Association Request 591 * WPA information element to be included in (Re)Association 592 * Request (including information element id and length). Use 593 * of this WPA IE is optional. If the driver generates the WPA 594 * IE, it can use pairwise_suite, group_suite, and 595 * key_mgmt_suite to select proper algorithms. In this case, 596 * the driver has to notify wpa_supplicant about the used WPA 597 * IE by generating an event that the interface code will 598 * convert into EVENT_ASSOCINFO data (see below). 599 * 600 * When using WPA2/IEEE 802.11i, wpa_ie is used for RSN IE 601 * instead. The driver can determine which version is used by 602 * looking at the first byte of the IE (0xdd for WPA, 0x30 for 603 * WPA2/RSN). 604 * 605 * When using WPS, wpa_ie is used for WPS IE instead of WPA/RSN IE. 606 */ 607 const u8 *wpa_ie; 608 609 /** 610 * wpa_ie_len - length of the wpa_ie 611 */ 612 size_t wpa_ie_len; 613 614 /** 615 * wpa_proto - Bitfield of WPA_PROTO_* values to indicate WPA/WPA2 616 */ 617 unsigned int wpa_proto; 618 619 /** 620 * pairwise_suite - Selected pairwise cipher suite (WPA_CIPHER_*) 621 * 622 * This is usually ignored if @wpa_ie is used. 623 */ 624 unsigned int pairwise_suite; 625 626 /** 627 * group_suite - Selected group cipher suite (WPA_CIPHER_*) 628 * 629 * This is usually ignored if @wpa_ie is used. 630 */ 631 unsigned int group_suite; 632 633 /** 634 * key_mgmt_suite - Selected key management suite (WPA_KEY_MGMT_*) 635 * 636 * This is usually ignored if @wpa_ie is used. 637 */ 638 unsigned int key_mgmt_suite; 639 640 /** 641 * auth_alg - Allowed authentication algorithms 642 * Bit field of WPA_AUTH_ALG_* 643 */ 644 int auth_alg; 645 646 /** 647 * mode - Operation mode (infra/ibss) IEEE80211_MODE_* 648 */ 649 int mode; 650 651 /** 652 * wep_key - WEP keys for static WEP configuration 653 */ 654 const u8 *wep_key[4]; 655 656 /** 657 * wep_key_len - WEP key length for static WEP configuration 658 */ 659 size_t wep_key_len[4]; 660 661 /** 662 * wep_tx_keyidx - WEP TX key index for static WEP configuration 663 */ 664 int wep_tx_keyidx; 665 666 /** 667 * mgmt_frame_protection - IEEE 802.11w management frame protection 668 */ 669 enum mfp_options mgmt_frame_protection; 670 671 /** 672 * ft_ies - IEEE 802.11r / FT information elements 673 * If the supplicant is using IEEE 802.11r (FT) and has the needed keys 674 * for fast transition, this parameter is set to include the IEs that 675 * are to be sent in the next FT Authentication Request message. 676 * update_ft_ies() handler is called to update the IEs for further 677 * FT messages in the sequence. 678 * 679 * The driver should use these IEs only if the target AP is advertising 680 * the same mobility domain as the one included in the MDIE here. 681 * 682 * In ap_scan=2 mode, the driver can use these IEs when moving to a new 683 * AP after the initial association. These IEs can only be used if the 684 * target AP is advertising support for FT and is using the same MDIE 685 * and SSID as the current AP. 686 * 687 * The driver is responsible for reporting the FT IEs received from the 688 * AP's response using wpa_supplicant_event() with EVENT_FT_RESPONSE 689 * type. update_ft_ies() handler will then be called with the FT IEs to 690 * include in the next frame in the authentication sequence. 691 */ 692 const u8 *ft_ies; 693 694 /** 695 * ft_ies_len - Length of ft_ies in bytes 696 */ 697 size_t ft_ies_len; 698 699 /** 700 * ft_md - FT Mobility domain (6 octets) (also included inside ft_ies) 701 * 702 * This value is provided to allow the driver interface easier access 703 * to the current mobility domain. This value is set to %NULL if no 704 * mobility domain is currently active. 705 */ 706 const u8 *ft_md; 707 708 /** 709 * passphrase - RSN passphrase for PSK 710 * 711 * This value is made available only for WPA/WPA2-Personal (PSK) and 712 * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is 713 * the 8..63 character ASCII passphrase, if available. Please note that 714 * this can be %NULL if passphrase was not used to generate the PSK. In 715 * that case, the psk field must be used to fetch the PSK. 716 */ 717 const char *passphrase; 718 719 /** 720 * psk - RSN PSK (alternative for passphrase for PSK) 721 * 722 * This value is made available only for WPA/WPA2-Personal (PSK) and 723 * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is 724 * the 32-octet (256-bit) PSK, if available. The driver wrapper should 725 * be prepared to handle %NULL value as an error. 726 */ 727 const u8 *psk; 728 729 /** 730 * drop_unencrypted - Enable/disable unencrypted frame filtering 731 * 732 * Configure the driver to drop all non-EAPOL frames (both receive and 733 * transmit paths). Unencrypted EAPOL frames (ethertype 0x888e) must 734 * still be allowed for key negotiation. 735 */ 736 int drop_unencrypted; 737 738 /** 739 * prev_bssid - Previously used BSSID in this ESS 740 * 741 * When not %NULL, this is a request to use reassociation instead of 742 * association. 743 */ 744 const u8 *prev_bssid; 745 746 /** 747 * wps - WPS mode 748 * 749 * If the driver needs to do special configuration for WPS association, 750 * this variable provides more information on what type of association 751 * is being requested. Most drivers should not need ot use this. 752 */ 753 enum wps_mode wps; 754 755 /** 756 * p2p - Whether this connection is a P2P group 757 */ 758 int p2p; 759 760 /** 761 * uapsd - UAPSD parameters for the network 762 * -1 = do not change defaults 763 * AP mode: 1 = enabled, 0 = disabled 764 * STA mode: bits 0..3 UAPSD enabled for VO,VI,BK,BE 765 */ 766 int uapsd; 767 768 /** 769 * fixed_bssid - Whether to force this BSSID in IBSS mode 770 * 1 = Fix this BSSID and prevent merges. 771 * 0 = Do not fix BSSID. 772 */ 773 int fixed_bssid; 774 775 /** 776 * fixed_freq - Fix control channel in IBSS mode 777 * 0 = don't fix control channel (default) 778 * 1 = fix control channel; this prevents IBSS merging with another 779 * channel 780 */ 781 int fixed_freq; 782 783 /** 784 * disable_ht - Disable HT (IEEE 802.11n) for this connection 785 */ 786 int disable_ht; 787 788 /** 789 * htcaps - HT Capabilities over-rides 790 * 791 * Only bits set in the mask will be used, and not all values are used 792 * by the kernel anyway. Currently, MCS, MPDU and MSDU fields are used. 793 * 794 * Pointer to struct ieee80211_ht_capabilities. 795 */ 796 const u8 *htcaps; 797 798 /** 799 * htcaps_mask - HT Capabilities over-rides mask 800 * 801 * Pointer to struct ieee80211_ht_capabilities. 802 */ 803 const u8 *htcaps_mask; 804 805 #ifdef CONFIG_VHT_OVERRIDES 806 /** 807 * disable_vht - Disable VHT for this connection 808 */ 809 int disable_vht; 810 811 /** 812 * VHT capability overrides. 813 */ 814 const struct ieee80211_vht_capabilities *vhtcaps; 815 const struct ieee80211_vht_capabilities *vhtcaps_mask; 816 #endif /* CONFIG_VHT_OVERRIDES */ 817 818 /** 819 * req_key_mgmt_offload - Request key management offload for connection 820 * 821 * Request key management offload for this connection if the device 822 * supports it. 823 */ 824 int req_key_mgmt_offload; 825 826 /** 827 * Flag for indicating whether this association includes support for 828 * RRM (Radio Resource Measurements) 829 */ 830 int rrm_used; 831 }; 832 833 enum hide_ssid { 834 NO_SSID_HIDING, 835 HIDDEN_SSID_ZERO_LEN, 836 HIDDEN_SSID_ZERO_CONTENTS 837 }; 838 839 struct wowlan_triggers { 840 u8 any; 841 u8 disconnect; 842 u8 magic_pkt; 843 u8 gtk_rekey_failure; 844 u8 eap_identity_req; 845 u8 four_way_handshake; 846 u8 rfkill_release; 847 }; 848 849 struct wpa_driver_ap_params { 850 /** 851 * head - Beacon head from IEEE 802.11 header to IEs before TIM IE 852 */ 853 u8 *head; 854 855 /** 856 * head_len - Length of the head buffer in octets 857 */ 858 size_t head_len; 859 860 /** 861 * tail - Beacon tail following TIM IE 862 */ 863 u8 *tail; 864 865 /** 866 * tail_len - Length of the tail buffer in octets 867 */ 868 size_t tail_len; 869 870 /** 871 * dtim_period - DTIM period 872 */ 873 int dtim_period; 874 875 /** 876 * beacon_int - Beacon interval 877 */ 878 int beacon_int; 879 880 /** 881 * basic_rates: -1 terminated array of basic rates in 100 kbps 882 * 883 * This parameter can be used to set a specific basic rate set for the 884 * BSS. If %NULL, default basic rate set is used. 885 */ 886 int *basic_rates; 887 888 /** 889 * proberesp - Probe Response template 890 * 891 * This is used by drivers that reply to Probe Requests internally in 892 * AP mode and require the full Probe Response template. 893 */ 894 u8 *proberesp; 895 896 /** 897 * proberesp_len - Length of the proberesp buffer in octets 898 */ 899 size_t proberesp_len; 900 901 /** 902 * ssid - The SSID to use in Beacon/Probe Response frames 903 */ 904 const u8 *ssid; 905 906 /** 907 * ssid_len - Length of the SSID (1..32) 908 */ 909 size_t ssid_len; 910 911 /** 912 * hide_ssid - Whether to hide the SSID 913 */ 914 enum hide_ssid hide_ssid; 915 916 /** 917 * pairwise_ciphers - WPA_CIPHER_* bitfield 918 */ 919 unsigned int pairwise_ciphers; 920 921 /** 922 * group_cipher - WPA_CIPHER_* 923 */ 924 unsigned int group_cipher; 925 926 /** 927 * key_mgmt_suites - WPA_KEY_MGMT_* bitfield 928 */ 929 unsigned int key_mgmt_suites; 930 931 /** 932 * auth_algs - WPA_AUTH_ALG_* bitfield 933 */ 934 unsigned int auth_algs; 935 936 /** 937 * wpa_version - WPA_PROTO_* bitfield 938 */ 939 unsigned int wpa_version; 940 941 /** 942 * privacy - Whether privacy is used in the BSS 943 */ 944 int privacy; 945 946 /** 947 * beacon_ies - WPS/P2P IE(s) for Beacon frames 948 * 949 * This is used to add IEs like WPS IE and P2P IE by drivers that do 950 * not use the full Beacon template. 951 */ 952 const struct wpabuf *beacon_ies; 953 954 /** 955 * proberesp_ies - P2P/WPS IE(s) for Probe Response frames 956 * 957 * This is used to add IEs like WPS IE and P2P IE by drivers that 958 * reply to Probe Request frames internally. 959 */ 960 const struct wpabuf *proberesp_ies; 961 962 /** 963 * assocresp_ies - WPS IE(s) for (Re)Association Response frames 964 * 965 * This is used to add IEs like WPS IE by drivers that reply to 966 * (Re)Association Request frames internally. 967 */ 968 const struct wpabuf *assocresp_ies; 969 970 /** 971 * isolate - Whether to isolate frames between associated stations 972 * 973 * If this is non-zero, the AP is requested to disable forwarding of 974 * frames between associated stations. 975 */ 976 int isolate; 977 978 /** 979 * cts_protect - Whether CTS protection is enabled 980 */ 981 int cts_protect; 982 983 /** 984 * preamble - Whether short preamble is enabled 985 */ 986 int preamble; 987 988 /** 989 * short_slot_time - Whether short slot time is enabled 990 * 991 * 0 = short slot time disable, 1 = short slot time enabled, -1 = do 992 * not set (e.g., when 802.11g mode is not in use) 993 */ 994 int short_slot_time; 995 996 /** 997 * ht_opmode - HT operation mode or -1 if HT not in use 998 */ 999 int ht_opmode; 1000 1001 /** 1002 * interworking - Whether Interworking is enabled 1003 */ 1004 int interworking; 1005 1006 /** 1007 * hessid - Homogeneous ESS identifier or %NULL if not set 1008 */ 1009 const u8 *hessid; 1010 1011 /** 1012 * access_network_type - Access Network Type (0..15) 1013 * 1014 * This is used for filtering Probe Request frames when Interworking is 1015 * enabled. 1016 */ 1017 u8 access_network_type; 1018 1019 /** 1020 * ap_max_inactivity - Timeout in seconds to detect STA's inactivity 1021 * 1022 * This is used by driver which advertises this capability. 1023 */ 1024 int ap_max_inactivity; 1025 1026 /** 1027 * ctwindow - Client Traffic Window (in TUs) 1028 */ 1029 u8 p2p_go_ctwindow; 1030 1031 /** 1032 * smps_mode - SMPS mode 1033 * 1034 * SMPS mode to be used by the AP, specified as the relevant bits of 1035 * ht_capab (i.e. HT_CAP_INFO_SMPS_*). 1036 */ 1037 unsigned int smps_mode; 1038 1039 /** 1040 * disable_dgaf - Whether group-addressed frames are disabled 1041 */ 1042 int disable_dgaf; 1043 1044 /** 1045 * osen - Whether OSEN security is enabled 1046 */ 1047 int osen; 1048 1049 /** 1050 * freq - Channel parameters for dynamic bandwidth changes 1051 */ 1052 struct hostapd_freq_params *freq; 1053 1054 /** 1055 * reenable - Whether this is to re-enable beaconing 1056 */ 1057 int reenable; 1058 }; 1059 1060 struct wpa_driver_mesh_bss_params { 1061 #define WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS 0x00000001 1062 /* 1063 * TODO: Other mesh configuration parameters would go here. 1064 * See NL80211_MESHCONF_* for all the mesh config parameters. 1065 */ 1066 unsigned int flags; 1067 int peer_link_timeout; 1068 }; 1069 1070 struct wpa_driver_mesh_join_params { 1071 const u8 *meshid; 1072 int meshid_len; 1073 const int *basic_rates; 1074 const u8 *ies; 1075 int ie_len; 1076 struct hostapd_freq_params freq; 1077 int beacon_int; 1078 int max_peer_links; 1079 struct wpa_driver_mesh_bss_params conf; 1080 #define WPA_DRIVER_MESH_FLAG_USER_MPM 0x00000001 1081 #define WPA_DRIVER_MESH_FLAG_DRIVER_MPM 0x00000002 1082 #define WPA_DRIVER_MESH_FLAG_SAE_AUTH 0x00000004 1083 #define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008 1084 unsigned int flags; 1085 }; 1086 1087 /** 1088 * struct wpa_driver_capa - Driver capability information 1089 */ 1090 struct wpa_driver_capa { 1091 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA 0x00000001 1092 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2 0x00000002 1093 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK 0x00000004 1094 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK 0x00000008 1095 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE 0x00000010 1096 #define WPA_DRIVER_CAPA_KEY_MGMT_FT 0x00000020 1097 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_PSK 0x00000040 1098 #define WPA_DRIVER_CAPA_KEY_MGMT_WAPI_PSK 0x00000080 1099 #define WPA_DRIVER_CAPA_KEY_MGMT_SUITE_B 0x00000100 1100 #define WPA_DRIVER_CAPA_KEY_MGMT_SUITE_B_192 0x00000200 1101 /** Bitfield of supported key management suites */ 1102 unsigned int key_mgmt; 1103 1104 #define WPA_DRIVER_CAPA_ENC_WEP40 0x00000001 1105 #define WPA_DRIVER_CAPA_ENC_WEP104 0x00000002 1106 #define WPA_DRIVER_CAPA_ENC_TKIP 0x00000004 1107 #define WPA_DRIVER_CAPA_ENC_CCMP 0x00000008 1108 #define WPA_DRIVER_CAPA_ENC_WEP128 0x00000010 1109 #define WPA_DRIVER_CAPA_ENC_GCMP 0x00000020 1110 #define WPA_DRIVER_CAPA_ENC_GCMP_256 0x00000040 1111 #define WPA_DRIVER_CAPA_ENC_CCMP_256 0x00000080 1112 #define WPA_DRIVER_CAPA_ENC_BIP 0x00000100 1113 #define WPA_DRIVER_CAPA_ENC_BIP_GMAC_128 0x00000200 1114 #define WPA_DRIVER_CAPA_ENC_BIP_GMAC_256 0x00000400 1115 #define WPA_DRIVER_CAPA_ENC_BIP_CMAC_256 0x00000800 1116 #define WPA_DRIVER_CAPA_ENC_GTK_NOT_USED 0x00001000 1117 /** Bitfield of supported cipher suites */ 1118 unsigned int enc; 1119 1120 #define WPA_DRIVER_AUTH_OPEN 0x00000001 1121 #define WPA_DRIVER_AUTH_SHARED 0x00000002 1122 #define WPA_DRIVER_AUTH_LEAP 0x00000004 1123 /** Bitfield of supported IEEE 802.11 authentication algorithms */ 1124 unsigned int auth; 1125 1126 /** Driver generated WPA/RSN IE */ 1127 #define WPA_DRIVER_FLAGS_DRIVER_IE 0x00000001 1128 /** Driver needs static WEP key setup after association command */ 1129 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC 0x00000002 1130 /** Driver takes care of all DFS operations */ 1131 #define WPA_DRIVER_FLAGS_DFS_OFFLOAD 0x00000004 1132 /** Driver takes care of RSN 4-way handshake internally; PMK is configured with 1133 * struct wpa_driver_ops::set_key using alg = WPA_ALG_PMK */ 1134 #define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE 0x00000008 1135 /** Driver is for a wired Ethernet interface */ 1136 #define WPA_DRIVER_FLAGS_WIRED 0x00000010 1137 /** Driver provides separate commands for authentication and association (SME in 1138 * wpa_supplicant). */ 1139 #define WPA_DRIVER_FLAGS_SME 0x00000020 1140 /** Driver supports AP mode */ 1141 #define WPA_DRIVER_FLAGS_AP 0x00000040 1142 /** Driver needs static WEP key setup after association has been completed */ 1143 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE 0x00000080 1144 /** Driver supports dynamic HT 20/40 MHz channel changes during BSS lifetime */ 1145 #define WPA_DRIVER_FLAGS_HT_2040_COEX 0x00000100 1146 /** Driver supports concurrent P2P operations */ 1147 #define WPA_DRIVER_FLAGS_P2P_CONCURRENT 0x00000200 1148 /** 1149 * Driver uses the initial interface as a dedicated management interface, i.e., 1150 * it cannot be used for P2P group operations or non-P2P purposes. 1151 */ 1152 #define WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE 0x00000400 1153 /** This interface is P2P capable (P2P GO or P2P Client) */ 1154 #define WPA_DRIVER_FLAGS_P2P_CAPABLE 0x00000800 1155 /** Driver supports station and key removal when stopping an AP */ 1156 #define WPA_DRIVER_FLAGS_AP_TEARDOWN_SUPPORT 0x00001000 1157 /** 1158 * Driver uses the initial interface for P2P management interface and non-P2P 1159 * purposes (e.g., connect to infra AP), but this interface cannot be used for 1160 * P2P group operations. 1161 */ 1162 #define WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P 0x00002000 1163 /** 1164 * Driver is known to use sane error codes, i.e., when it indicates that 1165 * something (e.g., association) fails, there was indeed a failure and the 1166 * operation does not end up getting completed successfully later. 1167 */ 1168 #define WPA_DRIVER_FLAGS_SANE_ERROR_CODES 0x00004000 1169 /** Driver supports off-channel TX */ 1170 #define WPA_DRIVER_FLAGS_OFFCHANNEL_TX 0x00008000 1171 /** Driver indicates TX status events for EAPOL Data frames */ 1172 #define WPA_DRIVER_FLAGS_EAPOL_TX_STATUS 0x00010000 1173 /** Driver indicates TX status events for Deauth/Disassoc frames */ 1174 #define WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS 0x00020000 1175 /** Driver supports roaming (BSS selection) in firmware */ 1176 #define WPA_DRIVER_FLAGS_BSS_SELECTION 0x00040000 1177 /** Driver supports operating as a TDLS peer */ 1178 #define WPA_DRIVER_FLAGS_TDLS_SUPPORT 0x00080000 1179 /** Driver requires external TDLS setup/teardown/discovery */ 1180 #define WPA_DRIVER_FLAGS_TDLS_EXTERNAL_SETUP 0x00100000 1181 /** Driver indicates support for Probe Response offloading in AP mode */ 1182 #define WPA_DRIVER_FLAGS_PROBE_RESP_OFFLOAD 0x00200000 1183 /** Driver supports U-APSD in AP mode */ 1184 #define WPA_DRIVER_FLAGS_AP_UAPSD 0x00400000 1185 /** Driver supports inactivity timer in AP mode */ 1186 #define WPA_DRIVER_FLAGS_INACTIVITY_TIMER 0x00800000 1187 /** Driver expects user space implementation of MLME in AP mode */ 1188 #define WPA_DRIVER_FLAGS_AP_MLME 0x01000000 1189 /** Driver supports SAE with user space SME */ 1190 #define WPA_DRIVER_FLAGS_SAE 0x02000000 1191 /** Driver makes use of OBSS scan mechanism in wpa_supplicant */ 1192 #define WPA_DRIVER_FLAGS_OBSS_SCAN 0x04000000 1193 /** Driver supports IBSS (Ad-hoc) mode */ 1194 #define WPA_DRIVER_FLAGS_IBSS 0x08000000 1195 /** Driver supports radar detection */ 1196 #define WPA_DRIVER_FLAGS_RADAR 0x10000000 1197 /** Driver supports a dedicated interface for P2P Device */ 1198 #define WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE 0x20000000 1199 /** Driver supports QoS Mapping */ 1200 #define WPA_DRIVER_FLAGS_QOS_MAPPING 0x40000000 1201 /** Driver supports CSA in AP mode */ 1202 #define WPA_DRIVER_FLAGS_AP_CSA 0x80000000 1203 /** Driver supports mesh */ 1204 #define WPA_DRIVER_FLAGS_MESH 0x0000000100000000ULL 1205 /** Driver support ACS offload */ 1206 #define WPA_DRIVER_FLAGS_ACS_OFFLOAD 0x0000000200000000ULL 1207 /** Driver supports key management offload */ 1208 #define WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD 0x0000000400000000ULL 1209 /** Driver supports TDLS channel switching */ 1210 #define WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH 0x0000000800000000ULL 1211 /** Driver supports IBSS with HT datarates */ 1212 #define WPA_DRIVER_FLAGS_HT_IBSS 0x0000001000000000ULL 1213 /** Driver supports IBSS with VHT datarates */ 1214 #define WPA_DRIVER_FLAGS_VHT_IBSS 0x0000002000000000ULL 1215 /** Driver supports automatic band selection */ 1216 #define WPA_DRIVER_FLAGS_SUPPORT_HW_MODE_ANY 0x0000004000000000ULL 1217 u64 flags; 1218 1219 #define WPA_DRIVER_SMPS_MODE_STATIC 0x00000001 1220 #define WPA_DRIVER_SMPS_MODE_DYNAMIC 0x00000002 1221 unsigned int smps_modes; 1222 1223 unsigned int wmm_ac_supported:1; 1224 1225 unsigned int mac_addr_rand_scan_supported:1; 1226 unsigned int mac_addr_rand_sched_scan_supported:1; 1227 1228 /** Maximum number of supported active probe SSIDs */ 1229 int max_scan_ssids; 1230 1231 /** Maximum number of supported active probe SSIDs for sched_scan */ 1232 int max_sched_scan_ssids; 1233 1234 /** Whether sched_scan (offloaded scanning) is supported */ 1235 int sched_scan_supported; 1236 1237 /** Maximum number of supported match sets for sched_scan */ 1238 int max_match_sets; 1239 1240 /** 1241 * max_remain_on_chan - Maximum remain-on-channel duration in msec 1242 */ 1243 unsigned int max_remain_on_chan; 1244 1245 /** 1246 * max_stations - Maximum number of associated stations the driver 1247 * supports in AP mode 1248 */ 1249 unsigned int max_stations; 1250 1251 /** 1252 * probe_resp_offloads - Bitmap of supported protocols by the driver 1253 * for Probe Response offloading. 1254 */ 1255 /** Driver Probe Response offloading support for WPS ver. 1 */ 1256 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_WPS 0x00000001 1257 /** Driver Probe Response offloading support for WPS ver. 2 */ 1258 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_WPS2 0x00000002 1259 /** Driver Probe Response offloading support for P2P */ 1260 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_P2P 0x00000004 1261 /** Driver Probe Response offloading support for IEEE 802.11u (Interworking) */ 1262 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_INTERWORKING 0x00000008 1263 unsigned int probe_resp_offloads; 1264 1265 unsigned int max_acl_mac_addrs; 1266 1267 /** 1268 * Number of supported concurrent channels 1269 */ 1270 unsigned int num_multichan_concurrent; 1271 1272 /** 1273 * extended_capa - extended capabilities in driver/device 1274 * 1275 * Must be allocated and freed by driver and the pointers must be 1276 * valid for the lifetime of the driver, i.e., freed in deinit() 1277 */ 1278 const u8 *extended_capa, *extended_capa_mask; 1279 unsigned int extended_capa_len; 1280 1281 struct wowlan_triggers wowlan_triggers; 1282 1283 /** Driver adds the DS Params Set IE in Probe Request frames */ 1284 #define WPA_DRIVER_FLAGS_DS_PARAM_SET_IE_IN_PROBES 0x00000001 1285 /** Driver adds the WFA TPC IE in Probe Request frames */ 1286 #define WPA_DRIVER_FLAGS_WFA_TPC_IE_IN_PROBES 0x00000002 1287 /** Driver handles quiet period requests */ 1288 #define WPA_DRIVER_FLAGS_QUIET 0x00000004 1289 /** 1290 * Driver is capable of inserting the current TX power value into the body of 1291 * transmitted frames. 1292 * Background: Some Action frames include a TPC Report IE. This IE contains a 1293 * TX power field, which has to be updated by lower layers. One such Action 1294 * frame is Link Measurement Report (part of RRM). Another is TPC Report (part 1295 * of spectrum management). Note that this insertion takes place at a fixed 1296 * offset, namely the 6th byte in the Action frame body. 1297 */ 1298 #define WPA_DRIVER_FLAGS_TX_POWER_INSERTION 0x00000008 1299 u32 rrm_flags; 1300 }; 1301 1302 1303 struct hostapd_data; 1304 1305 struct hostap_sta_driver_data { 1306 unsigned long rx_packets, tx_packets, rx_bytes, tx_bytes; 1307 unsigned long current_tx_rate; 1308 unsigned long inactive_msec; 1309 unsigned long flags; 1310 unsigned long num_ps_buf_frames; 1311 unsigned long tx_retry_failed; 1312 unsigned long tx_retry_count; 1313 int last_rssi; 1314 int last_ack_rssi; 1315 }; 1316 1317 struct hostapd_sta_add_params { 1318 const u8 *addr; 1319 u16 aid; 1320 u16 capability; 1321 const u8 *supp_rates; 1322 size_t supp_rates_len; 1323 u16 listen_interval; 1324 const struct ieee80211_ht_capabilities *ht_capabilities; 1325 const struct ieee80211_vht_capabilities *vht_capabilities; 1326 int vht_opmode_enabled; 1327 u8 vht_opmode; 1328 u32 flags; /* bitmask of WPA_STA_* flags */ 1329 u32 flags_mask; /* unset bits in flags */ 1330 #ifdef CONFIG_MESH 1331 enum mesh_plink_state plink_state; 1332 #endif /* CONFIG_MESH */ 1333 int set; /* Set STA parameters instead of add */ 1334 u8 qosinfo; 1335 const u8 *ext_capab; 1336 size_t ext_capab_len; 1337 const u8 *supp_channels; 1338 size_t supp_channels_len; 1339 const u8 *supp_oper_classes; 1340 size_t supp_oper_classes_len; 1341 }; 1342 1343 struct mac_address { 1344 u8 addr[ETH_ALEN]; 1345 }; 1346 1347 struct hostapd_acl_params { 1348 u8 acl_policy; 1349 unsigned int num_mac_acl; 1350 struct mac_address mac_acl[0]; 1351 }; 1352 1353 enum wpa_driver_if_type { 1354 /** 1355 * WPA_IF_STATION - Station mode interface 1356 */ 1357 WPA_IF_STATION, 1358 1359 /** 1360 * WPA_IF_AP_VLAN - AP mode VLAN interface 1361 * 1362 * This interface shares its address and Beacon frame with the main 1363 * BSS. 1364 */ 1365 WPA_IF_AP_VLAN, 1366 1367 /** 1368 * WPA_IF_AP_BSS - AP mode BSS interface 1369 * 1370 * This interface has its own address and Beacon frame. 1371 */ 1372 WPA_IF_AP_BSS, 1373 1374 /** 1375 * WPA_IF_P2P_GO - P2P Group Owner 1376 */ 1377 WPA_IF_P2P_GO, 1378 1379 /** 1380 * WPA_IF_P2P_CLIENT - P2P Client 1381 */ 1382 WPA_IF_P2P_CLIENT, 1383 1384 /** 1385 * WPA_IF_P2P_GROUP - P2P Group interface (will become either 1386 * WPA_IF_P2P_GO or WPA_IF_P2P_CLIENT, but the role is not yet known) 1387 */ 1388 WPA_IF_P2P_GROUP, 1389 1390 /** 1391 * WPA_IF_P2P_DEVICE - P2P Device interface is used to indentify the 1392 * abstracted P2P Device function in the driver 1393 */ 1394 WPA_IF_P2P_DEVICE, 1395 1396 /* 1397 * WPA_IF_MESH - Mesh interface 1398 */ 1399 WPA_IF_MESH, 1400 }; 1401 1402 struct wpa_init_params { 1403 void *global_priv; 1404 const u8 *bssid; 1405 const char *ifname; 1406 const char *driver_params; 1407 int use_pae_group_addr; 1408 char **bridge; 1409 size_t num_bridge; 1410 1411 u8 *own_addr; /* buffer for writing own MAC address */ 1412 }; 1413 1414 1415 struct wpa_bss_params { 1416 /** Interface name (for multi-SSID/VLAN support) */ 1417 const char *ifname; 1418 /** Whether IEEE 802.1X or WPA/WPA2 is enabled */ 1419 int enabled; 1420 1421 int wpa; 1422 int ieee802_1x; 1423 int wpa_group; 1424 int wpa_pairwise; 1425 int wpa_key_mgmt; 1426 int rsn_preauth; 1427 enum mfp_options ieee80211w; 1428 }; 1429 1430 #define WPA_STA_AUTHORIZED BIT(0) 1431 #define WPA_STA_WMM BIT(1) 1432 #define WPA_STA_SHORT_PREAMBLE BIT(2) 1433 #define WPA_STA_MFP BIT(3) 1434 #define WPA_STA_TDLS_PEER BIT(4) 1435 #define WPA_STA_AUTHENTICATED BIT(5) 1436 1437 enum tdls_oper { 1438 TDLS_DISCOVERY_REQ, 1439 TDLS_SETUP, 1440 TDLS_TEARDOWN, 1441 TDLS_ENABLE_LINK, 1442 TDLS_DISABLE_LINK, 1443 TDLS_ENABLE, 1444 TDLS_DISABLE 1445 }; 1446 1447 enum wnm_oper { 1448 WNM_SLEEP_ENTER_CONFIRM, 1449 WNM_SLEEP_ENTER_FAIL, 1450 WNM_SLEEP_EXIT_CONFIRM, 1451 WNM_SLEEP_EXIT_FAIL, 1452 WNM_SLEEP_TFS_REQ_IE_ADD, /* STA requests driver to add TFS req IE */ 1453 WNM_SLEEP_TFS_REQ_IE_NONE, /* STA requests empty TFS req IE */ 1454 WNM_SLEEP_TFS_REQ_IE_SET, /* AP requests driver to set TFS req IE for 1455 * a STA */ 1456 WNM_SLEEP_TFS_RESP_IE_ADD, /* AP requests driver to add TFS resp IE 1457 * for a STA */ 1458 WNM_SLEEP_TFS_RESP_IE_NONE, /* AP requests empty TFS resp IE */ 1459 WNM_SLEEP_TFS_RESP_IE_SET, /* AP requests driver to set TFS resp IE 1460 * for a STA */ 1461 WNM_SLEEP_TFS_IE_DEL /* AP delete the TFS IE */ 1462 }; 1463 1464 /* enum chan_width - Channel width definitions */ 1465 enum chan_width { 1466 CHAN_WIDTH_20_NOHT, 1467 CHAN_WIDTH_20, 1468 CHAN_WIDTH_40, 1469 CHAN_WIDTH_80, 1470 CHAN_WIDTH_80P80, 1471 CHAN_WIDTH_160, 1472 CHAN_WIDTH_UNKNOWN 1473 }; 1474 1475 /** 1476 * struct wpa_signal_info - Information about channel signal quality 1477 */ 1478 struct wpa_signal_info { 1479 u32 frequency; 1480 int above_threshold; 1481 int current_signal; 1482 int avg_signal; 1483 int avg_beacon_signal; 1484 int current_noise; 1485 int current_txrate; 1486 enum chan_width chanwidth; 1487 int center_frq1; 1488 int center_frq2; 1489 }; 1490 1491 /** 1492 * struct beacon_data - Beacon data 1493 * @head: Head portion of Beacon frame (before TIM IE) 1494 * @tail: Tail portion of Beacon frame (after TIM IE) 1495 * @beacon_ies: Extra information element(s) to add into Beacon frames or %NULL 1496 * @proberesp_ies: Extra information element(s) to add into Probe Response 1497 * frames or %NULL 1498 * @assocresp_ies: Extra information element(s) to add into (Re)Association 1499 * Response frames or %NULL 1500 * @probe_resp: Probe Response frame template 1501 * @head_len: Length of @head 1502 * @tail_len: Length of @tail 1503 * @beacon_ies_len: Length of beacon_ies in octets 1504 * @proberesp_ies_len: Length of proberesp_ies in octets 1505 * @proberesp_ies_len: Length of proberesp_ies in octets 1506 * @probe_resp_len: Length of probe response template (@probe_resp) 1507 */ 1508 struct beacon_data { 1509 u8 *head, *tail; 1510 u8 *beacon_ies; 1511 u8 *proberesp_ies; 1512 u8 *assocresp_ies; 1513 u8 *probe_resp; 1514 1515 size_t head_len, tail_len; 1516 size_t beacon_ies_len; 1517 size_t proberesp_ies_len; 1518 size_t assocresp_ies_len; 1519 size_t probe_resp_len; 1520 }; 1521 1522 /** 1523 * struct csa_settings - Settings for channel switch command 1524 * @cs_count: Count in Beacon frames (TBTT) to perform the switch 1525 * @block_tx: 1 - block transmission for CSA period 1526 * @freq_params: Next channel frequency parameter 1527 * @beacon_csa: Beacon/probe resp/asooc resp info for CSA period 1528 * @beacon_after: Next beacon/probe resp/asooc resp info 1529 * @counter_offset_beacon: Offset to the count field in beacon's tail 1530 * @counter_offset_presp: Offset to the count field in probe resp. 1531 */ 1532 struct csa_settings { 1533 u8 cs_count; 1534 u8 block_tx; 1535 1536 struct hostapd_freq_params freq_params; 1537 struct beacon_data beacon_csa; 1538 struct beacon_data beacon_after; 1539 1540 u16 counter_offset_beacon; 1541 u16 counter_offset_presp; 1542 }; 1543 1544 /* TDLS peer capabilities for send_tdls_mgmt() */ 1545 enum tdls_peer_capability { 1546 TDLS_PEER_HT = BIT(0), 1547 TDLS_PEER_VHT = BIT(1), 1548 TDLS_PEER_WMM = BIT(2), 1549 }; 1550 1551 /* valid info in the wmm_params struct */ 1552 enum wmm_params_valid_info { 1553 WMM_PARAMS_UAPSD_QUEUES_INFO = BIT(0), 1554 }; 1555 1556 /** 1557 * struct wmm_params - WMM parameterss configured for this association 1558 * @info_bitmap: Bitmap of valid wmm_params info; indicates what fields 1559 * of the struct contain valid information. 1560 * @uapsd_queues: Bitmap of ACs configured for uapsd (valid only if 1561 * %WMM_PARAMS_UAPSD_QUEUES_INFO is set) 1562 */ 1563 struct wmm_params { 1564 u8 info_bitmap; 1565 u8 uapsd_queues; 1566 }; 1567 1568 #ifdef CONFIG_MACSEC 1569 struct macsec_init_params { 1570 Boolean always_include_sci; 1571 Boolean use_es; 1572 Boolean use_scb; 1573 }; 1574 #endif /* CONFIG_MACSEC */ 1575 1576 enum drv_br_port_attr { 1577 DRV_BR_PORT_ATTR_PROXYARP, 1578 DRV_BR_PORT_ATTR_HAIRPIN_MODE, 1579 }; 1580 1581 enum drv_br_net_param { 1582 DRV_BR_NET_PARAM_GARP_ACCEPT, 1583 DRV_BR_MULTICAST_SNOOPING, 1584 }; 1585 1586 struct drv_acs_params { 1587 /* Selected mode (HOSTAPD_MODE_*) */ 1588 enum hostapd_hw_mode hw_mode; 1589 1590 /* Indicates whether HT is enabled */ 1591 int ht_enabled; 1592 1593 /* Indicates whether HT40 is enabled */ 1594 int ht40_enabled; 1595 1596 /* Indicates whether VHT is enabled */ 1597 int vht_enabled; 1598 1599 /* Configured ACS channel width */ 1600 u16 ch_width; 1601 1602 /* ACS channel list info */ 1603 unsigned int ch_list_len; 1604 const u8 *ch_list; 1605 }; 1606 1607 1608 /** 1609 * struct wpa_driver_ops - Driver interface API definition 1610 * 1611 * This structure defines the API that each driver interface needs to implement 1612 * for core wpa_supplicant code. All driver specific functionality is captured 1613 * in this wrapper. 1614 */ 1615 struct wpa_driver_ops { 1616 /** Name of the driver interface */ 1617 const char *name; 1618 /** One line description of the driver interface */ 1619 const char *desc; 1620 1621 /** 1622 * get_bssid - Get the current BSSID 1623 * @priv: private driver interface data 1624 * @bssid: buffer for BSSID (ETH_ALEN = 6 bytes) 1625 * 1626 * Returns: 0 on success, -1 on failure 1627 * 1628 * Query kernel driver for the current BSSID and copy it to bssid. 1629 * Setting bssid to 00:00:00:00:00:00 is recommended if the STA is not 1630 * associated. 1631 */ 1632 int (*get_bssid)(void *priv, u8 *bssid); 1633 1634 /** 1635 * get_ssid - Get the current SSID 1636 * @priv: private driver interface data 1637 * @ssid: buffer for SSID (at least 32 bytes) 1638 * 1639 * Returns: Length of the SSID on success, -1 on failure 1640 * 1641 * Query kernel driver for the current SSID and copy it to ssid. 1642 * Returning zero is recommended if the STA is not associated. 1643 * 1644 * Note: SSID is an array of octets, i.e., it is not nul terminated and 1645 * can, at least in theory, contain control characters (including nul) 1646 * and as such, should be processed as binary data, not a printable 1647 * string. 1648 */ 1649 int (*get_ssid)(void *priv, u8 *ssid); 1650 1651 /** 1652 * set_key - Configure encryption key 1653 * @ifname: Interface name (for multi-SSID/VLAN support) 1654 * @priv: private driver interface data 1655 * @alg: encryption algorithm (%WPA_ALG_NONE, %WPA_ALG_WEP, 1656 * %WPA_ALG_TKIP, %WPA_ALG_CCMP, %WPA_ALG_IGTK, %WPA_ALG_PMK, 1657 * %WPA_ALG_GCMP, %WPA_ALG_GCMP_256, %WPA_ALG_CCMP_256, 1658 * %WPA_ALG_BIP_GMAC_128, %WPA_ALG_BIP_GMAC_256, 1659 * %WPA_ALG_BIP_CMAC_256); 1660 * %WPA_ALG_NONE clears the key. 1661 * @addr: Address of the peer STA (BSSID of the current AP when setting 1662 * pairwise key in station mode), ff:ff:ff:ff:ff:ff for 1663 * broadcast keys, %NULL for default keys that are used both for 1664 * broadcast and unicast; when clearing keys, %NULL is used to 1665 * indicate that both the broadcast-only and default key of the 1666 * specified key index is to be cleared 1667 * @key_idx: key index (0..3), usually 0 for unicast keys; 0..4095 for 1668 * IGTK 1669 * @set_tx: configure this key as the default Tx key (only used when 1670 * driver does not support separate unicast/individual key 1671 * @seq: sequence number/packet number, seq_len octets, the next 1672 * packet number to be used for in replay protection; configured 1673 * for Rx keys (in most cases, this is only used with broadcast 1674 * keys and set to zero for unicast keys); %NULL if not set 1675 * @seq_len: length of the seq, depends on the algorithm: 1676 * TKIP: 6 octets, CCMP/GCMP: 6 octets, IGTK: 6 octets 1677 * @key: key buffer; TKIP: 16-byte temporal key, 8-byte Tx Mic key, 1678 * 8-byte Rx Mic Key 1679 * @key_len: length of the key buffer in octets (WEP: 5 or 13, 1680 * TKIP: 32, CCMP/GCMP: 16, IGTK: 16) 1681 * 1682 * Returns: 0 on success, -1 on failure 1683 * 1684 * Configure the given key for the kernel driver. If the driver 1685 * supports separate individual keys (4 default keys + 1 individual), 1686 * addr can be used to determine whether the key is default or 1687 * individual. If only 4 keys are supported, the default key with key 1688 * index 0 is used as the individual key. STA must be configured to use 1689 * it as the default Tx key (set_tx is set) and accept Rx for all the 1690 * key indexes. In most cases, WPA uses only key indexes 1 and 2 for 1691 * broadcast keys, so key index 0 is available for this kind of 1692 * configuration. 1693 * 1694 * Please note that TKIP keys include separate TX and RX MIC keys and 1695 * some drivers may expect them in different order than wpa_supplicant 1696 * is using. If the TX/RX keys are swapped, all TKIP encrypted packets 1697 * will trigger Michael MIC errors. This can be fixed by changing the 1698 * order of MIC keys by swapping te bytes 16..23 and 24..31 of the key 1699 * in driver_*.c set_key() implementation, see driver_ndis.c for an 1700 * example on how this can be done. 1701 */ 1702 int (*set_key)(const char *ifname, void *priv, enum wpa_alg alg, 1703 const u8 *addr, int key_idx, int set_tx, 1704 const u8 *seq, size_t seq_len, 1705 const u8 *key, size_t key_len); 1706 1707 /** 1708 * init - Initialize driver interface 1709 * @ctx: context to be used when calling wpa_supplicant functions, 1710 * e.g., wpa_supplicant_event() 1711 * @ifname: interface name, e.g., wlan0 1712 * 1713 * Returns: Pointer to private data, %NULL on failure 1714 * 1715 * Initialize driver interface, including event processing for kernel 1716 * driver events (e.g., associated, scan results, Michael MIC failure). 1717 * This function can allocate a private configuration data area for 1718 * @ctx, file descriptor, interface name, etc. information that may be 1719 * needed in future driver operations. If this is not used, non-NULL 1720 * value will need to be returned because %NULL is used to indicate 1721 * failure. The returned value will be used as 'void *priv' data for 1722 * all other driver_ops functions. 1723 * 1724 * The main event loop (eloop.c) of wpa_supplicant can be used to 1725 * register callback for read sockets (eloop_register_read_sock()). 1726 * 1727 * See below for more information about events and 1728 * wpa_supplicant_event() function. 1729 */ 1730 void * (*init)(void *ctx, const char *ifname); 1731 1732 /** 1733 * deinit - Deinitialize driver interface 1734 * @priv: private driver interface data from init() 1735 * 1736 * Shut down driver interface and processing of driver events. Free 1737 * private data buffer if one was allocated in init() handler. 1738 */ 1739 void (*deinit)(void *priv); 1740 1741 /** 1742 * set_param - Set driver configuration parameters 1743 * @priv: private driver interface data from init() 1744 * @param: driver specific configuration parameters 1745 * 1746 * Returns: 0 on success, -1 on failure 1747 * 1748 * Optional handler for notifying driver interface about configuration 1749 * parameters (driver_param). 1750 */ 1751 int (*set_param)(void *priv, const char *param); 1752 1753 /** 1754 * set_countermeasures - Enable/disable TKIP countermeasures 1755 * @priv: private driver interface data 1756 * @enabled: 1 = countermeasures enabled, 0 = disabled 1757 * 1758 * Returns: 0 on success, -1 on failure 1759 * 1760 * Configure TKIP countermeasures. When these are enabled, the driver 1761 * should drop all received and queued frames that are using TKIP. 1762 */ 1763 int (*set_countermeasures)(void *priv, int enabled); 1764 1765 /** 1766 * deauthenticate - Request driver to deauthenticate 1767 * @priv: private driver interface data 1768 * @addr: peer address (BSSID of the AP) 1769 * @reason_code: 16-bit reason code to be sent in the deauthentication 1770 * frame 1771 * 1772 * Returns: 0 on success, -1 on failure 1773 */ 1774 int (*deauthenticate)(void *priv, const u8 *addr, int reason_code); 1775 1776 /** 1777 * associate - Request driver to associate 1778 * @priv: private driver interface data 1779 * @params: association parameters 1780 * 1781 * Returns: 0 on success, -1 on failure 1782 */ 1783 int (*associate)(void *priv, 1784 struct wpa_driver_associate_params *params); 1785 1786 /** 1787 * add_pmkid - Add PMKSA cache entry to the driver 1788 * @priv: private driver interface data 1789 * @bssid: BSSID for the PMKSA cache entry 1790 * @pmkid: PMKID for the PMKSA cache entry 1791 * 1792 * Returns: 0 on success, -1 on failure 1793 * 1794 * This function is called when a new PMK is received, as a result of 1795 * either normal authentication or RSN pre-authentication. 1796 * 1797 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 1798 * associate(), add_pmkid() can be used to add new PMKSA cache entries 1799 * in the driver. If the driver uses wpa_ie from wpa_supplicant, this 1800 * driver_ops function does not need to be implemented. Likewise, if 1801 * the driver does not support WPA, this function is not needed. 1802 */ 1803 int (*add_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid); 1804 1805 /** 1806 * remove_pmkid - Remove PMKSA cache entry to the driver 1807 * @priv: private driver interface data 1808 * @bssid: BSSID for the PMKSA cache entry 1809 * @pmkid: PMKID for the PMKSA cache entry 1810 * 1811 * Returns: 0 on success, -1 on failure 1812 * 1813 * This function is called when the supplicant drops a PMKSA cache 1814 * entry for any reason. 1815 * 1816 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 1817 * associate(), remove_pmkid() can be used to synchronize PMKSA caches 1818 * between the driver and wpa_supplicant. If the driver uses wpa_ie 1819 * from wpa_supplicant, this driver_ops function does not need to be 1820 * implemented. Likewise, if the driver does not support WPA, this 1821 * function is not needed. 1822 */ 1823 int (*remove_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid); 1824 1825 /** 1826 * flush_pmkid - Flush PMKSA cache 1827 * @priv: private driver interface data 1828 * 1829 * Returns: 0 on success, -1 on failure 1830 * 1831 * This function is called when the supplicant drops all PMKSA cache 1832 * entries for any reason. 1833 * 1834 * If the driver generates RSN IE, i.e., it does not use wpa_ie in 1835 * associate(), remove_pmkid() can be used to synchronize PMKSA caches 1836 * between the driver and wpa_supplicant. If the driver uses wpa_ie 1837 * from wpa_supplicant, this driver_ops function does not need to be 1838 * implemented. Likewise, if the driver does not support WPA, this 1839 * function is not needed. 1840 */ 1841 int (*flush_pmkid)(void *priv); 1842 1843 /** 1844 * get_capa - Get driver capabilities 1845 * @priv: private driver interface data 1846 * 1847 * Returns: 0 on success, -1 on failure 1848 * 1849 * Get driver/firmware/hardware capabilities. 1850 */ 1851 int (*get_capa)(void *priv, struct wpa_driver_capa *capa); 1852 1853 /** 1854 * poll - Poll driver for association information 1855 * @priv: private driver interface data 1856 * 1857 * This is an option callback that can be used when the driver does not 1858 * provide event mechanism for association events. This is called when 1859 * receiving WPA EAPOL-Key messages that require association 1860 * information. The driver interface is supposed to generate associnfo 1861 * event before returning from this callback function. In addition, the 1862 * driver interface should generate an association event after having 1863 * sent out associnfo. 1864 */ 1865 void (*poll)(void *priv); 1866 1867 /** 1868 * get_ifname - Get interface name 1869 * @priv: private driver interface data 1870 * 1871 * Returns: Pointer to the interface name. This can differ from the 1872 * interface name used in init() call. Init() is called first. 1873 * 1874 * This optional function can be used to allow the driver interface to 1875 * replace the interface name with something else, e.g., based on an 1876 * interface mapping from a more descriptive name. 1877 */ 1878 const char * (*get_ifname)(void *priv); 1879 1880 /** 1881 * get_mac_addr - Get own MAC address 1882 * @priv: private driver interface data 1883 * 1884 * Returns: Pointer to own MAC address or %NULL on failure 1885 * 1886 * This optional function can be used to get the own MAC address of the 1887 * device from the driver interface code. This is only needed if the 1888 * l2_packet implementation for the OS does not provide easy access to 1889 * a MAC address. */ 1890 const u8 * (*get_mac_addr)(void *priv); 1891 1892 /** 1893 * set_operstate - Sets device operating state to DORMANT or UP 1894 * @priv: private driver interface data 1895 * @state: 0 = dormant, 1 = up 1896 * Returns: 0 on success, -1 on failure 1897 * 1898 * This is an optional function that can be used on operating systems 1899 * that support a concept of controlling network device state from user 1900 * space applications. This function, if set, gets called with 1901 * state = 1 when authentication has been completed and with state = 0 1902 * when connection is lost. 1903 */ 1904 int (*set_operstate)(void *priv, int state); 1905 1906 /** 1907 * mlme_setprotection - MLME-SETPROTECTION.request primitive 1908 * @priv: Private driver interface data 1909 * @addr: Address of the station for which to set protection (may be 1910 * %NULL for group keys) 1911 * @protect_type: MLME_SETPROTECTION_PROTECT_TYPE_* 1912 * @key_type: MLME_SETPROTECTION_KEY_TYPE_* 1913 * Returns: 0 on success, -1 on failure 1914 * 1915 * This is an optional function that can be used to set the driver to 1916 * require protection for Tx and/or Rx frames. This uses the layer 1917 * interface defined in IEEE 802.11i-2004 clause 10.3.22.1 1918 * (MLME-SETPROTECTION.request). Many drivers do not use explicit 1919 * set protection operation; instead, they set protection implicitly 1920 * based on configured keys. 1921 */ 1922 int (*mlme_setprotection)(void *priv, const u8 *addr, int protect_type, 1923 int key_type); 1924 1925 /** 1926 * get_hw_feature_data - Get hardware support data (channels and rates) 1927 * @priv: Private driver interface data 1928 * @num_modes: Variable for returning the number of returned modes 1929 * flags: Variable for returning hardware feature flags 1930 * Returns: Pointer to allocated hardware data on success or %NULL on 1931 * failure. Caller is responsible for freeing this. 1932 */ 1933 struct hostapd_hw_modes * (*get_hw_feature_data)(void *priv, 1934 u16 *num_modes, 1935 u16 *flags); 1936 1937 /** 1938 * send_mlme - Send management frame from MLME 1939 * @priv: Private driver interface data 1940 * @data: IEEE 802.11 management frame with IEEE 802.11 header 1941 * @data_len: Size of the management frame 1942 * @noack: Do not wait for this frame to be acked (disable retries) 1943 * @freq: Frequency (in MHz) to send the frame on, or 0 to let the 1944 * driver decide 1945 * Returns: 0 on success, -1 on failure 1946 */ 1947 int (*send_mlme)(void *priv, const u8 *data, size_t data_len, 1948 int noack, unsigned int freq); 1949 1950 /** 1951 * update_ft_ies - Update FT (IEEE 802.11r) IEs 1952 * @priv: Private driver interface data 1953 * @md: Mobility domain (2 octets) (also included inside ies) 1954 * @ies: FT IEs (MDIE, FTIE, ...) or %NULL to remove IEs 1955 * @ies_len: Length of FT IEs in bytes 1956 * Returns: 0 on success, -1 on failure 1957 * 1958 * The supplicant uses this callback to let the driver know that keying 1959 * material for FT is available and that the driver can use the 1960 * provided IEs in the next message in FT authentication sequence. 1961 * 1962 * This function is only needed for driver that support IEEE 802.11r 1963 * (Fast BSS Transition). 1964 */ 1965 int (*update_ft_ies)(void *priv, const u8 *md, const u8 *ies, 1966 size_t ies_len); 1967 1968 /** 1969 * get_scan_results2 - Fetch the latest scan results 1970 * @priv: private driver interface data 1971 * 1972 * Returns: Allocated buffer of scan results (caller is responsible for 1973 * freeing the data structure) on success, NULL on failure 1974 */ 1975 struct wpa_scan_results * (*get_scan_results2)(void *priv); 1976 1977 /** 1978 * set_country - Set country 1979 * @priv: Private driver interface data 1980 * @alpha2: country to which to switch to 1981 * Returns: 0 on success, -1 on failure 1982 * 1983 * This function is for drivers which support some form 1984 * of setting a regulatory domain. 1985 */ 1986 int (*set_country)(void *priv, const char *alpha2); 1987 1988 /** 1989 * get_country - Get country 1990 * @priv: Private driver interface data 1991 * @alpha2: Buffer for returning country code (at least 3 octets) 1992 * Returns: 0 on success, -1 on failure 1993 */ 1994 int (*get_country)(void *priv, char *alpha2); 1995 1996 /** 1997 * global_init - Global driver initialization 1998 * Returns: Pointer to private data (global), %NULL on failure 1999 * 2000 * This optional function is called to initialize the driver wrapper 2001 * for global data, i.e., data that applies to all interfaces. If this 2002 * function is implemented, global_deinit() will also need to be 2003 * implemented to free the private data. The driver will also likely 2004 * use init2() function instead of init() to get the pointer to global 2005 * data available to per-interface initializer. 2006 */ 2007 void * (*global_init)(void); 2008 2009 /** 2010 * global_deinit - Global driver deinitialization 2011 * @priv: private driver global data from global_init() 2012 * 2013 * Terminate any global driver related functionality and free the 2014 * global data structure. 2015 */ 2016 void (*global_deinit)(void *priv); 2017 2018 /** 2019 * init2 - Initialize driver interface (with global data) 2020 * @ctx: context to be used when calling wpa_supplicant functions, 2021 * e.g., wpa_supplicant_event() 2022 * @ifname: interface name, e.g., wlan0 2023 * @global_priv: private driver global data from global_init() 2024 * Returns: Pointer to private data, %NULL on failure 2025 * 2026 * This function can be used instead of init() if the driver wrapper 2027 * uses global data. 2028 */ 2029 void * (*init2)(void *ctx, const char *ifname, void *global_priv); 2030 2031 /** 2032 * get_interfaces - Get information about available interfaces 2033 * @global_priv: private driver global data from global_init() 2034 * Returns: Allocated buffer of interface information (caller is 2035 * responsible for freeing the data structure) on success, NULL on 2036 * failure 2037 */ 2038 struct wpa_interface_info * (*get_interfaces)(void *global_priv); 2039 2040 /** 2041 * scan2 - Request the driver to initiate scan 2042 * @priv: private driver interface data 2043 * @params: Scan parameters 2044 * 2045 * Returns: 0 on success, -1 on failure 2046 * 2047 * Once the scan results are ready, the driver should report scan 2048 * results event for wpa_supplicant which will eventually request the 2049 * results with wpa_driver_get_scan_results2(). 2050 */ 2051 int (*scan2)(void *priv, struct wpa_driver_scan_params *params); 2052 2053 /** 2054 * authenticate - Request driver to authenticate 2055 * @priv: private driver interface data 2056 * @params: authentication parameters 2057 * Returns: 0 on success, -1 on failure 2058 * 2059 * This is an optional function that can be used with drivers that 2060 * support separate authentication and association steps, i.e., when 2061 * wpa_supplicant can act as the SME. If not implemented, associate() 2062 * function is expected to take care of IEEE 802.11 authentication, 2063 * too. 2064 */ 2065 int (*authenticate)(void *priv, 2066 struct wpa_driver_auth_params *params); 2067 2068 /** 2069 * set_ap - Set Beacon and Probe Response information for AP mode 2070 * @priv: Private driver interface data 2071 * @params: Parameters to use in AP mode 2072 * 2073 * This function is used to configure Beacon template and/or extra IEs 2074 * to add for Beacon and Probe Response frames for the driver in 2075 * AP mode. The driver is responsible for building the full Beacon 2076 * frame by concatenating the head part with TIM IE generated by the 2077 * driver/firmware and finishing with the tail part. Depending on the 2078 * driver architectue, this can be done either by using the full 2079 * template or the set of additional IEs (e.g., WPS and P2P IE). 2080 * Similarly, Probe Response processing depends on the driver design. 2081 * If the driver (or firmware) takes care of replying to Probe Request 2082 * frames, the extra IEs provided here needs to be added to the Probe 2083 * Response frames. 2084 * 2085 * Returns: 0 on success, -1 on failure 2086 */ 2087 int (*set_ap)(void *priv, struct wpa_driver_ap_params *params); 2088 2089 /** 2090 * set_acl - Set ACL in AP mode 2091 * @priv: Private driver interface data 2092 * @params: Parameters to configure ACL 2093 * Returns: 0 on success, -1 on failure 2094 * 2095 * This is used only for the drivers which support MAC address ACL. 2096 */ 2097 int (*set_acl)(void *priv, struct hostapd_acl_params *params); 2098 2099 /** 2100 * hapd_init - Initialize driver interface (hostapd only) 2101 * @hapd: Pointer to hostapd context 2102 * @params: Configuration for the driver wrapper 2103 * Returns: Pointer to private data, %NULL on failure 2104 * 2105 * This function is used instead of init() or init2() when the driver 2106 * wrapper is used with hostapd. 2107 */ 2108 void * (*hapd_init)(struct hostapd_data *hapd, 2109 struct wpa_init_params *params); 2110 2111 /** 2112 * hapd_deinit - Deinitialize driver interface (hostapd only) 2113 * @priv: Private driver interface data from hapd_init() 2114 */ 2115 void (*hapd_deinit)(void *priv); 2116 2117 /** 2118 * set_ieee8021x - Enable/disable IEEE 802.1X support (AP only) 2119 * @priv: Private driver interface data 2120 * @params: BSS parameters 2121 * Returns: 0 on success, -1 on failure 2122 * 2123 * This is an optional function to configure the kernel driver to 2124 * enable/disable IEEE 802.1X support and set WPA/WPA2 parameters. This 2125 * can be left undefined (set to %NULL) if IEEE 802.1X support is 2126 * always enabled and the driver uses set_ap() to set WPA/RSN IE 2127 * for Beacon frames. 2128 * 2129 * DEPRECATED - use set_ap() instead 2130 */ 2131 int (*set_ieee8021x)(void *priv, struct wpa_bss_params *params); 2132 2133 /** 2134 * set_privacy - Enable/disable privacy (AP only) 2135 * @priv: Private driver interface data 2136 * @enabled: 1 = privacy enabled, 0 = disabled 2137 * Returns: 0 on success, -1 on failure 2138 * 2139 * This is an optional function to configure privacy field in the 2140 * kernel driver for Beacon frames. This can be left undefined (set to 2141 * %NULL) if the driver uses the Beacon template from set_ap(). 2142 * 2143 * DEPRECATED - use set_ap() instead 2144 */ 2145 int (*set_privacy)(void *priv, int enabled); 2146 2147 /** 2148 * get_seqnum - Fetch the current TSC/packet number (AP only) 2149 * @ifname: The interface name (main or virtual) 2150 * @priv: Private driver interface data 2151 * @addr: MAC address of the station or %NULL for group keys 2152 * @idx: Key index 2153 * @seq: Buffer for returning the latest used TSC/packet number 2154 * Returns: 0 on success, -1 on failure 2155 * 2156 * This function is used to fetch the last used TSC/packet number for 2157 * a TKIP, CCMP, GCMP, or BIP/IGTK key. It is mainly used with group 2158 * keys, so there is no strict requirement on implementing support for 2159 * unicast keys (i.e., addr != %NULL). 2160 */ 2161 int (*get_seqnum)(const char *ifname, void *priv, const u8 *addr, 2162 int idx, u8 *seq); 2163 2164 /** 2165 * flush - Flush all association stations (AP only) 2166 * @priv: Private driver interface data 2167 * Returns: 0 on success, -1 on failure 2168 * 2169 * This function requests the driver to disassociate all associated 2170 * stations. This function does not need to be implemented if the 2171 * driver does not process association frames internally. 2172 */ 2173 int (*flush)(void *priv); 2174 2175 /** 2176 * set_generic_elem - Add IEs into Beacon/Probe Response frames (AP) 2177 * @priv: Private driver interface data 2178 * @elem: Information elements 2179 * @elem_len: Length of the elem buffer in octets 2180 * Returns: 0 on success, -1 on failure 2181 * 2182 * This is an optional function to add information elements in the 2183 * kernel driver for Beacon and Probe Response frames. This can be left 2184 * undefined (set to %NULL) if the driver uses the Beacon template from 2185 * set_ap(). 2186 * 2187 * DEPRECATED - use set_ap() instead 2188 */ 2189 int (*set_generic_elem)(void *priv, const u8 *elem, size_t elem_len); 2190 2191 /** 2192 * read_sta_data - Fetch station data 2193 * @priv: Private driver interface data 2194 * @data: Buffer for returning station information 2195 * @addr: MAC address of the station 2196 * Returns: 0 on success, -1 on failure 2197 */ 2198 int (*read_sta_data)(void *priv, struct hostap_sta_driver_data *data, 2199 const u8 *addr); 2200 2201 /** 2202 * hapd_send_eapol - Send an EAPOL packet (AP only) 2203 * @priv: private driver interface data 2204 * @addr: Destination MAC address 2205 * @data: EAPOL packet starting with IEEE 802.1X header 2206 * @data_len: Length of the EAPOL packet in octets 2207 * @encrypt: Whether the frame should be encrypted 2208 * @own_addr: Source MAC address 2209 * @flags: WPA_STA_* flags for the destination station 2210 * 2211 * Returns: 0 on success, -1 on failure 2212 */ 2213 int (*hapd_send_eapol)(void *priv, const u8 *addr, const u8 *data, 2214 size_t data_len, int encrypt, 2215 const u8 *own_addr, u32 flags); 2216 2217 /** 2218 * sta_deauth - Deauthenticate a station (AP only) 2219 * @priv: Private driver interface data 2220 * @own_addr: Source address and BSSID for the Deauthentication frame 2221 * @addr: MAC address of the station to deauthenticate 2222 * @reason: Reason code for the Deauthentiation frame 2223 * Returns: 0 on success, -1 on failure 2224 * 2225 * This function requests a specific station to be deauthenticated and 2226 * a Deauthentication frame to be sent to it. 2227 */ 2228 int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr, 2229 int reason); 2230 2231 /** 2232 * sta_disassoc - Disassociate a station (AP only) 2233 * @priv: Private driver interface data 2234 * @own_addr: Source address and BSSID for the Disassociation frame 2235 * @addr: MAC address of the station to disassociate 2236 * @reason: Reason code for the Disassociation frame 2237 * Returns: 0 on success, -1 on failure 2238 * 2239 * This function requests a specific station to be disassociated and 2240 * a Disassociation frame to be sent to it. 2241 */ 2242 int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr, 2243 int reason); 2244 2245 /** 2246 * sta_remove - Remove a station entry (AP only) 2247 * @priv: Private driver interface data 2248 * @addr: MAC address of the station to be removed 2249 * Returns: 0 on success, -1 on failure 2250 */ 2251 int (*sta_remove)(void *priv, const u8 *addr); 2252 2253 /** 2254 * hapd_get_ssid - Get the current SSID (AP only) 2255 * @priv: Private driver interface data 2256 * @buf: Buffer for returning the SSID 2257 * @len: Maximum length of the buffer 2258 * Returns: Length of the SSID on success, -1 on failure 2259 * 2260 * This function need not be implemented if the driver uses Beacon 2261 * template from set_ap() and does not reply to Probe Request frames. 2262 */ 2263 int (*hapd_get_ssid)(void *priv, u8 *buf, int len); 2264 2265 /** 2266 * hapd_set_ssid - Set SSID (AP only) 2267 * @priv: Private driver interface data 2268 * @buf: SSID 2269 * @len: Length of the SSID in octets 2270 * Returns: 0 on success, -1 on failure 2271 * 2272 * DEPRECATED - use set_ap() instead 2273 */ 2274 int (*hapd_set_ssid)(void *priv, const u8 *buf, int len); 2275 2276 /** 2277 * hapd_set_countermeasures - Enable/disable TKIP countermeasures (AP) 2278 * @priv: Private driver interface data 2279 * @enabled: 1 = countermeasures enabled, 0 = disabled 2280 * Returns: 0 on success, -1 on failure 2281 * 2282 * This need not be implemented if the driver does not take care of 2283 * association processing. 2284 */ 2285 int (*hapd_set_countermeasures)(void *priv, int enabled); 2286 2287 /** 2288 * sta_add - Add a station entry 2289 * @priv: Private driver interface data 2290 * @params: Station parameters 2291 * Returns: 0 on success, -1 on failure 2292 * 2293 * This function is used to add a station entry to the driver once the 2294 * station has completed association. This is only used if the driver 2295 * does not take care of association processing. 2296 * 2297 * With TDLS, this function is also used to add or set (params->set 1) 2298 * TDLS peer entries. 2299 */ 2300 int (*sta_add)(void *priv, struct hostapd_sta_add_params *params); 2301 2302 /** 2303 * get_inact_sec - Get station inactivity duration (AP only) 2304 * @priv: Private driver interface data 2305 * @addr: Station address 2306 * Returns: Number of seconds station has been inactive, -1 on failure 2307 */ 2308 int (*get_inact_sec)(void *priv, const u8 *addr); 2309 2310 /** 2311 * sta_clear_stats - Clear station statistics (AP only) 2312 * @priv: Private driver interface data 2313 * @addr: Station address 2314 * Returns: 0 on success, -1 on failure 2315 */ 2316 int (*sta_clear_stats)(void *priv, const u8 *addr); 2317 2318 /** 2319 * set_freq - Set channel/frequency (AP only) 2320 * @priv: Private driver interface data 2321 * @freq: Channel parameters 2322 * Returns: 0 on success, -1 on failure 2323 */ 2324 int (*set_freq)(void *priv, struct hostapd_freq_params *freq); 2325 2326 /** 2327 * set_rts - Set RTS threshold 2328 * @priv: Private driver interface data 2329 * @rts: RTS threshold in octets 2330 * Returns: 0 on success, -1 on failure 2331 */ 2332 int (*set_rts)(void *priv, int rts); 2333 2334 /** 2335 * set_frag - Set fragmentation threshold 2336 * @priv: Private driver interface data 2337 * @frag: Fragmentation threshold in octets 2338 * Returns: 0 on success, -1 on failure 2339 */ 2340 int (*set_frag)(void *priv, int frag); 2341 2342 /** 2343 * sta_set_flags - Set station flags (AP only) 2344 * @priv: Private driver interface data 2345 * @addr: Station address 2346 * @total_flags: Bitmap of all WPA_STA_* flags currently set 2347 * @flags_or: Bitmap of WPA_STA_* flags to add 2348 * @flags_and: Bitmap of WPA_STA_* flags to us as a mask 2349 * Returns: 0 on success, -1 on failure 2350 */ 2351 int (*sta_set_flags)(void *priv, const u8 *addr, 2352 int total_flags, int flags_or, int flags_and); 2353 2354 /** 2355 * set_tx_queue_params - Set TX queue parameters 2356 * @priv: Private driver interface data 2357 * @queue: Queue number (0 = VO, 1 = VI, 2 = BE, 3 = BK) 2358 * @aifs: AIFS 2359 * @cw_min: cwMin 2360 * @cw_max: cwMax 2361 * @burst_time: Maximum length for bursting in 0.1 msec units 2362 */ 2363 int (*set_tx_queue_params)(void *priv, int queue, int aifs, int cw_min, 2364 int cw_max, int burst_time); 2365 2366 /** 2367 * if_add - Add a virtual interface 2368 * @priv: Private driver interface data 2369 * @type: Interface type 2370 * @ifname: Interface name for the new virtual interface 2371 * @addr: Local address to use for the interface or %NULL to use the 2372 * parent interface address 2373 * @bss_ctx: BSS context for %WPA_IF_AP_BSS interfaces 2374 * @drv_priv: Pointer for overwriting the driver context or %NULL if 2375 * not allowed (applies only to %WPA_IF_AP_BSS type) 2376 * @force_ifname: Buffer for returning an interface name that the 2377 * driver ended up using if it differs from the requested ifname 2378 * @if_addr: Buffer for returning the allocated interface address 2379 * (this may differ from the requested addr if the driver cannot 2380 * change interface address) 2381 * @bridge: Bridge interface to use or %NULL if no bridge configured 2382 * @use_existing: Whether to allow existing interface to be used 2383 * Returns: 0 on success, -1 on failure 2384 */ 2385 int (*if_add)(void *priv, enum wpa_driver_if_type type, 2386 const char *ifname, const u8 *addr, void *bss_ctx, 2387 void **drv_priv, char *force_ifname, u8 *if_addr, 2388 const char *bridge, int use_existing); 2389 2390 /** 2391 * if_remove - Remove a virtual interface 2392 * @priv: Private driver interface data 2393 * @type: Interface type 2394 * @ifname: Interface name of the virtual interface to be removed 2395 * Returns: 0 on success, -1 on failure 2396 */ 2397 int (*if_remove)(void *priv, enum wpa_driver_if_type type, 2398 const char *ifname); 2399 2400 /** 2401 * set_sta_vlan - Bind a station into a specific interface (AP only) 2402 * @priv: Private driver interface data 2403 * @ifname: Interface (main or virtual BSS or VLAN) 2404 * @addr: MAC address of the associated station 2405 * @vlan_id: VLAN ID 2406 * Returns: 0 on success, -1 on failure 2407 * 2408 * This function is used to bind a station to a specific virtual 2409 * interface. It is only used if when virtual interfaces are supported, 2410 * e.g., to assign stations to different VLAN interfaces based on 2411 * information from a RADIUS server. This allows separate broadcast 2412 * domains to be used with a single BSS. 2413 */ 2414 int (*set_sta_vlan)(void *priv, const u8 *addr, const char *ifname, 2415 int vlan_id); 2416 2417 /** 2418 * commit - Optional commit changes handler (AP only) 2419 * @priv: driver private data 2420 * Returns: 0 on success, -1 on failure 2421 * 2422 * This optional handler function can be registered if the driver 2423 * interface implementation needs to commit changes (e.g., by setting 2424 * network interface up) at the end of initial configuration. If set, 2425 * this handler will be called after initial setup has been completed. 2426 */ 2427 int (*commit)(void *priv); 2428 2429 /** 2430 * send_ether - Send an ethernet packet (AP only) 2431 * @priv: private driver interface data 2432 * @dst: Destination MAC address 2433 * @src: Source MAC address 2434 * @proto: Ethertype 2435 * @data: EAPOL packet starting with IEEE 802.1X header 2436 * @data_len: Length of the EAPOL packet in octets 2437 * Returns: 0 on success, -1 on failure 2438 */ 2439 int (*send_ether)(void *priv, const u8 *dst, const u8 *src, u16 proto, 2440 const u8 *data, size_t data_len); 2441 2442 /** 2443 * set_radius_acl_auth - Notification of RADIUS ACL change 2444 * @priv: Private driver interface data 2445 * @mac: MAC address of the station 2446 * @accepted: Whether the station was accepted 2447 * @session_timeout: Session timeout for the station 2448 * Returns: 0 on success, -1 on failure 2449 */ 2450 int (*set_radius_acl_auth)(void *priv, const u8 *mac, int accepted, 2451 u32 session_timeout); 2452 2453 /** 2454 * set_radius_acl_expire - Notification of RADIUS ACL expiration 2455 * @priv: Private driver interface data 2456 * @mac: MAC address of the station 2457 * Returns: 0 on success, -1 on failure 2458 */ 2459 int (*set_radius_acl_expire)(void *priv, const u8 *mac); 2460 2461 /** 2462 * set_ap_wps_ie - Add WPS IE(s) into Beacon/Probe Response frames (AP) 2463 * @priv: Private driver interface data 2464 * @beacon: WPS IE(s) for Beacon frames or %NULL to remove extra IE(s) 2465 * @proberesp: WPS IE(s) for Probe Response frames or %NULL to remove 2466 * extra IE(s) 2467 * @assocresp: WPS IE(s) for (Re)Association Response frames or %NULL 2468 * to remove extra IE(s) 2469 * Returns: 0 on success, -1 on failure 2470 * 2471 * This is an optional function to add WPS IE in the kernel driver for 2472 * Beacon and Probe Response frames. This can be left undefined (set 2473 * to %NULL) if the driver uses the Beacon template from set_ap() 2474 * and does not process Probe Request frames. If the driver takes care 2475 * of (Re)Association frame processing, the assocresp buffer includes 2476 * WPS IE(s) that need to be added to (Re)Association Response frames 2477 * whenever a (Re)Association Request frame indicated use of WPS. 2478 * 2479 * This will also be used to add P2P IE(s) into Beacon/Probe Response 2480 * frames when operating as a GO. The driver is responsible for adding 2481 * timing related attributes (e.g., NoA) in addition to the IEs 2482 * included here by appending them after these buffers. This call is 2483 * also used to provide Probe Response IEs for P2P Listen state 2484 * operations for drivers that generate the Probe Response frames 2485 * internally. 2486 * 2487 * DEPRECATED - use set_ap() instead 2488 */ 2489 int (*set_ap_wps_ie)(void *priv, const struct wpabuf *beacon, 2490 const struct wpabuf *proberesp, 2491 const struct wpabuf *assocresp); 2492 2493 /** 2494 * set_supp_port - Set IEEE 802.1X Supplicant Port status 2495 * @priv: Private driver interface data 2496 * @authorized: Whether the port is authorized 2497 * Returns: 0 on success, -1 on failure 2498 */ 2499 int (*set_supp_port)(void *priv, int authorized); 2500 2501 /** 2502 * set_wds_sta - Bind a station into a 4-address WDS (AP only) 2503 * @priv: Private driver interface data 2504 * @addr: MAC address of the associated station 2505 * @aid: Association ID 2506 * @val: 1 = bind to 4-address WDS; 0 = unbind 2507 * @bridge_ifname: Bridge interface to use for the WDS station or %NULL 2508 * to indicate that bridge is not to be used 2509 * @ifname_wds: Buffer to return the interface name for the new WDS 2510 * station or %NULL to indicate name is not returned. 2511 * Returns: 0 on success, -1 on failure 2512 */ 2513 int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val, 2514 const char *bridge_ifname, char *ifname_wds); 2515 2516 /** 2517 * send_action - Transmit an Action frame 2518 * @priv: Private driver interface data 2519 * @freq: Frequency (in MHz) of the channel 2520 * @wait: Time to wait off-channel for a response (in ms), or zero 2521 * @dst: Destination MAC address (Address 1) 2522 * @src: Source MAC address (Address 2) 2523 * @bssid: BSSID (Address 3) 2524 * @data: Frame body 2525 * @data_len: data length in octets 2526 @ @no_cck: Whether CCK rates must not be used to transmit this frame 2527 * Returns: 0 on success, -1 on failure 2528 * 2529 * This command can be used to request the driver to transmit an action 2530 * frame to the specified destination. 2531 * 2532 * If the %WPA_DRIVER_FLAGS_OFFCHANNEL_TX flag is set, the frame will 2533 * be transmitted on the given channel and the device will wait for a 2534 * response on that channel for the given wait time. 2535 * 2536 * If the flag is not set, the wait time will be ignored. In this case, 2537 * if a remain-on-channel duration is in progress, the frame must be 2538 * transmitted on that channel; alternatively the frame may be sent on 2539 * the current operational channel (if in associated state in station 2540 * mode or while operating as an AP.) 2541 */ 2542 int (*send_action)(void *priv, unsigned int freq, unsigned int wait, 2543 const u8 *dst, const u8 *src, const u8 *bssid, 2544 const u8 *data, size_t data_len, int no_cck); 2545 2546 /** 2547 * send_action_cancel_wait - Cancel action frame TX wait 2548 * @priv: Private driver interface data 2549 * 2550 * This command cancels the wait time associated with sending an action 2551 * frame. It is only available when %WPA_DRIVER_FLAGS_OFFCHANNEL_TX is 2552 * set in the driver flags. 2553 */ 2554 void (*send_action_cancel_wait)(void *priv); 2555 2556 /** 2557 * remain_on_channel - Remain awake on a channel 2558 * @priv: Private driver interface data 2559 * @freq: Frequency (in MHz) of the channel 2560 * @duration: Duration in milliseconds 2561 * Returns: 0 on success, -1 on failure 2562 * 2563 * This command is used to request the driver to remain awake on the 2564 * specified channel for the specified duration and report received 2565 * Action frames with EVENT_RX_MGMT events. Optionally, received 2566 * Probe Request frames may also be requested to be reported by calling 2567 * probe_req_report(). These will be reported with EVENT_RX_PROBE_REQ. 2568 * 2569 * The driver may not be at the requested channel when this function 2570 * returns, i.e., the return code is only indicating whether the 2571 * request was accepted. The caller will need to wait until the 2572 * EVENT_REMAIN_ON_CHANNEL event indicates that the driver has 2573 * completed the channel change. This may take some time due to other 2574 * need for the radio and the caller should be prepared to timing out 2575 * its wait since there are no guarantees on when this request can be 2576 * executed. 2577 */ 2578 int (*remain_on_channel)(void *priv, unsigned int freq, 2579 unsigned int duration); 2580 2581 /** 2582 * cancel_remain_on_channel - Cancel remain-on-channel operation 2583 * @priv: Private driver interface data 2584 * 2585 * This command can be used to cancel a remain-on-channel operation 2586 * before its originally requested duration has passed. This could be 2587 * used, e.g., when remain_on_channel() is used to request extra time 2588 * to receive a response to an Action frame and the response is 2589 * received when there is still unneeded time remaining on the 2590 * remain-on-channel operation. 2591 */ 2592 int (*cancel_remain_on_channel)(void *priv); 2593 2594 /** 2595 * probe_req_report - Request Probe Request frames to be indicated 2596 * @priv: Private driver interface data 2597 * @report: Whether to report received Probe Request frames 2598 * Returns: 0 on success, -1 on failure (or if not supported) 2599 * 2600 * This command can be used to request the driver to indicate when 2601 * Probe Request frames are received with EVENT_RX_PROBE_REQ events. 2602 * Since this operation may require extra resources, e.g., due to less 2603 * optimal hardware/firmware RX filtering, many drivers may disable 2604 * Probe Request reporting at least in station mode. This command is 2605 * used to notify the driver when the Probe Request frames need to be 2606 * reported, e.g., during remain-on-channel operations. 2607 */ 2608 int (*probe_req_report)(void *priv, int report); 2609 2610 /** 2611 * deinit_ap - Deinitialize AP mode 2612 * @priv: Private driver interface data 2613 * Returns: 0 on success, -1 on failure (or if not supported) 2614 * 2615 * This optional function can be used to disable AP mode related 2616 * configuration. If the interface was not dynamically added, 2617 * change the driver mode to station mode to allow normal station 2618 * operations like scanning to be completed. 2619 */ 2620 int (*deinit_ap)(void *priv); 2621 2622 /** 2623 * deinit_p2p_cli - Deinitialize P2P client mode 2624 * @priv: Private driver interface data 2625 * Returns: 0 on success, -1 on failure (or if not supported) 2626 * 2627 * This optional function can be used to disable P2P client mode. If the 2628 * interface was not dynamically added, change the interface type back 2629 * to station mode. 2630 */ 2631 int (*deinit_p2p_cli)(void *priv); 2632 2633 /** 2634 * suspend - Notification on system suspend/hibernate event 2635 * @priv: Private driver interface data 2636 */ 2637 void (*suspend)(void *priv); 2638 2639 /** 2640 * resume - Notification on system resume/thaw event 2641 * @priv: Private driver interface data 2642 */ 2643 void (*resume)(void *priv); 2644 2645 /** 2646 * signal_monitor - Set signal monitoring parameters 2647 * @priv: Private driver interface data 2648 * @threshold: Threshold value for signal change events; 0 = disabled 2649 * @hysteresis: Minimum change in signal strength before indicating a 2650 * new event 2651 * Returns: 0 on success, -1 on failure (or if not supported) 2652 * 2653 * This function can be used to configure monitoring of signal strength 2654 * with the current AP. Whenever signal strength drops below the 2655 * %threshold value or increases above it, EVENT_SIGNAL_CHANGE event 2656 * should be generated assuming the signal strength has changed at 2657 * least %hysteresis from the previously indicated signal change event. 2658 */ 2659 int (*signal_monitor)(void *priv, int threshold, int hysteresis); 2660 2661 /** 2662 * send_frame - Send IEEE 802.11 frame (testing use only) 2663 * @priv: Private driver interface data 2664 * @data: IEEE 802.11 frame with IEEE 802.11 header 2665 * @data_len: Size of the frame 2666 * @encrypt: Whether to encrypt the frame (if keys are set) 2667 * Returns: 0 on success, -1 on failure 2668 * 2669 * This function is only used for debugging purposes and is not 2670 * required to be implemented for normal operations. 2671 */ 2672 int (*send_frame)(void *priv, const u8 *data, size_t data_len, 2673 int encrypt); 2674 2675 /** 2676 * get_noa - Get current Notice of Absence attribute payload 2677 * @priv: Private driver interface data 2678 * @buf: Buffer for returning NoA 2679 * @buf_len: Buffer length in octets 2680 * Returns: Number of octets used in buf, 0 to indicate no NoA is being 2681 * advertized, or -1 on failure 2682 * 2683 * This function is used to fetch the current Notice of Absence 2684 * attribute value from GO. 2685 */ 2686 int (*get_noa)(void *priv, u8 *buf, size_t buf_len); 2687 2688 /** 2689 * set_noa - Set Notice of Absence parameters for GO (testing) 2690 * @priv: Private driver interface data 2691 * @count: Count 2692 * @start: Start time in ms from next TBTT 2693 * @duration: Duration in ms 2694 * Returns: 0 on success or -1 on failure 2695 * 2696 * This function is used to set Notice of Absence parameters for GO. It 2697 * is used only for testing. To disable NoA, all parameters are set to 2698 * 0. 2699 */ 2700 int (*set_noa)(void *priv, u8 count, int start, int duration); 2701 2702 /** 2703 * set_p2p_powersave - Set P2P power save options 2704 * @priv: Private driver interface data 2705 * @legacy_ps: 0 = disable, 1 = enable, 2 = maximum PS, -1 = no change 2706 * @opp_ps: 0 = disable, 1 = enable, -1 = no change 2707 * @ctwindow: 0.. = change (msec), -1 = no change 2708 * Returns: 0 on success or -1 on failure 2709 */ 2710 int (*set_p2p_powersave)(void *priv, int legacy_ps, int opp_ps, 2711 int ctwindow); 2712 2713 /** 2714 * ampdu - Enable/disable aggregation 2715 * @priv: Private driver interface data 2716 * @ampdu: 1/0 = enable/disable A-MPDU aggregation 2717 * Returns: 0 on success or -1 on failure 2718 */ 2719 int (*ampdu)(void *priv, int ampdu); 2720 2721 /** 2722 * get_radio_name - Get physical radio name for the device 2723 * @priv: Private driver interface data 2724 * Returns: Radio name or %NULL if not known 2725 * 2726 * The returned data must not be modified by the caller. It is assumed 2727 * that any interface that has the same radio name as another is 2728 * sharing the same physical radio. This information can be used to 2729 * share scan results etc. information between the virtual interfaces 2730 * to speed up various operations. 2731 */ 2732 const char * (*get_radio_name)(void *priv); 2733 2734 /** 2735 * send_tdls_mgmt - for sending TDLS management packets 2736 * @priv: private driver interface data 2737 * @dst: Destination (peer) MAC address 2738 * @action_code: TDLS action code for the mssage 2739 * @dialog_token: Dialog Token to use in the message (if needed) 2740 * @status_code: Status Code or Reason Code to use (if needed) 2741 * @peer_capab: TDLS peer capability (TDLS_PEER_* bitfield) 2742 * @initiator: Is the current end the TDLS link initiator 2743 * @buf: TDLS IEs to add to the message 2744 * @len: Length of buf in octets 2745 * Returns: 0 on success, negative (<0) on failure 2746 * 2747 * This optional function can be used to send packet to driver which is 2748 * responsible for receiving and sending all TDLS packets. 2749 */ 2750 int (*send_tdls_mgmt)(void *priv, const u8 *dst, u8 action_code, 2751 u8 dialog_token, u16 status_code, u32 peer_capab, 2752 int initiator, const u8 *buf, size_t len); 2753 2754 /** 2755 * tdls_oper - Ask the driver to perform high-level TDLS operations 2756 * @priv: Private driver interface data 2757 * @oper: TDLS high-level operation. See %enum tdls_oper 2758 * @peer: Destination (peer) MAC address 2759 * Returns: 0 on success, negative (<0) on failure 2760 * 2761 * This optional function can be used to send high-level TDLS commands 2762 * to the driver. 2763 */ 2764 int (*tdls_oper)(void *priv, enum tdls_oper oper, const u8 *peer); 2765 2766 /** 2767 * wnm_oper - Notify driver of the WNM frame reception 2768 * @priv: Private driver interface data 2769 * @oper: WNM operation. See %enum wnm_oper 2770 * @peer: Destination (peer) MAC address 2771 * @buf: Buffer for the driver to fill in (for getting IE) 2772 * @buf_len: Return the len of buf 2773 * Returns: 0 on success, negative (<0) on failure 2774 */ 2775 int (*wnm_oper)(void *priv, enum wnm_oper oper, const u8 *peer, 2776 u8 *buf, u16 *buf_len); 2777 2778 /** 2779 * set_qos_map - Set QoS Map 2780 * @priv: Private driver interface data 2781 * @qos_map_set: QoS Map 2782 * @qos_map_set_len: Length of QoS Map 2783 */ 2784 int (*set_qos_map)(void *priv, const u8 *qos_map_set, 2785 u8 qos_map_set_len); 2786 2787 /** 2788 * br_add_ip_neigh - Add a neigh to the bridge ip neigh table 2789 * @priv: Private driver interface data 2790 * @version: IP version of the IP address, 4 or 6 2791 * @ipaddr: IP address for the neigh entry 2792 * @prefixlen: IP address prefix length 2793 * @addr: Corresponding MAC address 2794 * Returns: 0 on success, negative (<0) on failure 2795 */ 2796 int (*br_add_ip_neigh)(void *priv, u8 version, const u8 *ipaddr, 2797 int prefixlen, const u8 *addr); 2798 2799 /** 2800 * br_delete_ip_neigh - Remove a neigh from the bridge ip neigh table 2801 * @priv: Private driver interface data 2802 * @version: IP version of the IP address, 4 or 6 2803 * @ipaddr: IP address for the neigh entry 2804 * Returns: 0 on success, negative (<0) on failure 2805 */ 2806 int (*br_delete_ip_neigh)(void *priv, u8 version, const u8 *ipaddr); 2807 2808 /** 2809 * br_port_set_attr - Set a bridge port attribute 2810 * @attr: Bridge port attribute to set 2811 * @val: Value to be set 2812 * Returns: 0 on success, negative (<0) on failure 2813 */ 2814 int (*br_port_set_attr)(void *priv, enum drv_br_port_attr attr, 2815 unsigned int val); 2816 2817 /** 2818 * br_port_set_attr - Set a bridge network parameter 2819 * @param: Bridge parameter to set 2820 * @val: Value to be set 2821 * Returns: 0 on success, negative (<0) on failure 2822 */ 2823 int (*br_set_net_param)(void *priv, enum drv_br_net_param param, 2824 unsigned int val); 2825 2826 /** 2827 * set_wowlan - Set wake-on-wireless triggers 2828 * @priv: Private driver interface data 2829 * @triggers: wowlan triggers 2830 */ 2831 int (*set_wowlan)(void *priv, const struct wowlan_triggers *triggers); 2832 2833 /** 2834 * signal_poll - Get current connection information 2835 * @priv: Private driver interface data 2836 * @signal_info: Connection info structure 2837 */ 2838 int (*signal_poll)(void *priv, struct wpa_signal_info *signal_info); 2839 2840 /** 2841 * set_authmode - Set authentication algorithm(s) for static WEP 2842 * @priv: Private driver interface data 2843 * @authmode: 1=Open System, 2=Shared Key, 3=both 2844 * Returns: 0 on success, -1 on failure 2845 * 2846 * This function can be used to set authentication algorithms for AP 2847 * mode when static WEP is used. If the driver uses user space MLME/SME 2848 * implementation, there is no need to implement this function. 2849 * 2850 * DEPRECATED - use set_ap() instead 2851 */ 2852 int (*set_authmode)(void *priv, int authmode); 2853 2854 #ifdef ANDROID 2855 /** 2856 * driver_cmd - Execute driver-specific command 2857 * @priv: Private driver interface data 2858 * @cmd: Command to execute 2859 * @buf: Return buffer 2860 * @buf_len: Buffer length 2861 * Returns: 0 on success, -1 on failure 2862 */ 2863 int (*driver_cmd)(void *priv, char *cmd, char *buf, size_t buf_len); 2864 #endif /* ANDROID */ 2865 2866 /** 2867 * vendor_cmd - Execute vendor specific command 2868 * @priv: Private driver interface data 2869 * @vendor_id: Vendor id 2870 * @subcmd: Vendor command id 2871 * @data: Vendor command parameters (%NULL if no parameters) 2872 * @data_len: Data length 2873 * @buf: Return buffer (%NULL to ignore reply) 2874 * Returns: 0 on success, negative (<0) on failure 2875 * 2876 * This function handles vendor specific commands that are passed to 2877 * the driver/device. The command is identified by vendor id and 2878 * command id. Parameters can be passed as argument to the command 2879 * in the data buffer. Reply (if any) will be filled in the supplied 2880 * return buffer. 2881 * 2882 * The exact driver behavior is driver interface and vendor specific. As 2883 * an example, this will be converted to a vendor specific cfg80211 2884 * command in case of the nl80211 driver interface. 2885 */ 2886 int (*vendor_cmd)(void *priv, unsigned int vendor_id, 2887 unsigned int subcmd, const u8 *data, size_t data_len, 2888 struct wpabuf *buf); 2889 2890 /** 2891 * set_rekey_info - Set rekey information 2892 * @priv: Private driver interface data 2893 * @kek: Current KEK 2894 * @kek_len: KEK length in octets 2895 * @kck: Current KCK 2896 * @kck_len: KCK length in octets 2897 * @replay_ctr: Current EAPOL-Key Replay Counter 2898 * 2899 * This optional function can be used to provide information for the 2900 * driver/firmware to process EAPOL-Key frames in Group Key Handshake 2901 * while the host (including wpa_supplicant) is sleeping. 2902 */ 2903 void (*set_rekey_info)(void *priv, const u8 *kek, size_t kek_len, 2904 const u8 *kck, size_t kck_len, 2905 const u8 *replay_ctr); 2906 2907 /** 2908 * sta_assoc - Station association indication 2909 * @priv: Private driver interface data 2910 * @own_addr: Source address and BSSID for association frame 2911 * @addr: MAC address of the station to associate 2912 * @reassoc: flag to indicate re-association 2913 * @status: association response status code 2914 * @ie: assoc response ie buffer 2915 * @len: ie buffer length 2916 * Returns: 0 on success, -1 on failure 2917 * 2918 * This function indicates the driver to send (Re)Association 2919 * Response frame to the station. 2920 */ 2921 int (*sta_assoc)(void *priv, const u8 *own_addr, const u8 *addr, 2922 int reassoc, u16 status, const u8 *ie, size_t len); 2923 2924 /** 2925 * sta_auth - Station authentication indication 2926 * @priv: Private driver interface data 2927 * @own_addr: Source address and BSSID for authentication frame 2928 * @addr: MAC address of the station to associate 2929 * @seq: authentication sequence number 2930 * @status: authentication response status code 2931 * @ie: authentication frame ie buffer 2932 * @len: ie buffer length 2933 * 2934 * This function indicates the driver to send Authentication frame 2935 * to the station. 2936 */ 2937 int (*sta_auth)(void *priv, const u8 *own_addr, const u8 *addr, 2938 u16 seq, u16 status, const u8 *ie, size_t len); 2939 2940 /** 2941 * add_tspec - Add traffic stream 2942 * @priv: Private driver interface data 2943 * @addr: MAC address of the station to associate 2944 * @tspec_ie: tspec ie buffer 2945 * @tspec_ielen: tspec ie length 2946 * Returns: 0 on success, -1 on failure 2947 * 2948 * This function adds the traffic steam for the station 2949 * and fills the medium_time in tspec_ie. 2950 */ 2951 int (*add_tspec)(void *priv, const u8 *addr, u8 *tspec_ie, 2952 size_t tspec_ielen); 2953 2954 /** 2955 * add_sta_node - Add a station node in the driver 2956 * @priv: Private driver interface data 2957 * @addr: MAC address of the station to add 2958 * @auth_alg: authentication algorithm used by the station 2959 * Returns: 0 on success, -1 on failure 2960 * 2961 * This function adds the station node in the driver, when 2962 * the station gets added by FT-over-DS. 2963 */ 2964 int (*add_sta_node)(void *priv, const u8 *addr, u16 auth_alg); 2965 2966 /** 2967 * sched_scan - Request the driver to initiate scheduled scan 2968 * @priv: Private driver interface data 2969 * @params: Scan parameters 2970 * @interval: Interval between scan cycles in milliseconds 2971 * Returns: 0 on success, -1 on failure 2972 * 2973 * This operation should be used for scheduled scan offload to 2974 * the hardware. Every time scan results are available, the 2975 * driver should report scan results event for wpa_supplicant 2976 * which will eventually request the results with 2977 * wpa_driver_get_scan_results2(). This operation is optional 2978 * and if not provided or if it returns -1, we fall back to 2979 * normal host-scheduled scans. 2980 */ 2981 int (*sched_scan)(void *priv, struct wpa_driver_scan_params *params, 2982 u32 interval); 2983 2984 /** 2985 * stop_sched_scan - Request the driver to stop a scheduled scan 2986 * @priv: Private driver interface data 2987 * Returns: 0 on success, -1 on failure 2988 * 2989 * This should cause the scheduled scan to be stopped and 2990 * results should stop being sent. Must be supported if 2991 * sched_scan is supported. 2992 */ 2993 int (*stop_sched_scan)(void *priv); 2994 2995 /** 2996 * poll_client - Probe (null data or such) the given station 2997 * @priv: Private driver interface data 2998 * @own_addr: MAC address of sending interface 2999 * @addr: MAC address of the station to probe 3000 * @qos: Indicates whether station is QoS station 3001 * 3002 * This function is used to verify whether an associated station is 3003 * still present. This function does not need to be implemented if the 3004 * driver provides such inactivity polling mechanism. 3005 */ 3006 void (*poll_client)(void *priv, const u8 *own_addr, 3007 const u8 *addr, int qos); 3008 3009 /** 3010 * radio_disable - Disable/enable radio 3011 * @priv: Private driver interface data 3012 * @disabled: 1=disable 0=enable radio 3013 * Returns: 0 on success, -1 on failure 3014 * 3015 * This optional command is for testing purposes. It can be used to 3016 * disable the radio on a testbed device to simulate out-of-radio-range 3017 * conditions. 3018 */ 3019 int (*radio_disable)(void *priv, int disabled); 3020 3021 /** 3022 * switch_channel - Announce channel switch and migrate the GO to the 3023 * given frequency 3024 * @priv: Private driver interface data 3025 * @settings: Settings for CSA period and new channel 3026 * Returns: 0 on success, -1 on failure 3027 * 3028 * This function is used to move the GO to the legacy STA channel to 3029 * avoid frequency conflict in single channel concurrency. 3030 */ 3031 int (*switch_channel)(void *priv, struct csa_settings *settings); 3032 3033 /** 3034 * add_tx_ts - Add traffic stream 3035 * @priv: Private driver interface data 3036 * @tsid: Traffic stream ID 3037 * @addr: Receiver address 3038 * @user_prio: User priority of the traffic stream 3039 * @admitted_time: Admitted time for this TS in units of 3040 * 32 microsecond periods (per second). 3041 * Returns: 0 on success, -1 on failure 3042 */ 3043 int (*add_tx_ts)(void *priv, u8 tsid, const u8 *addr, u8 user_prio, 3044 u16 admitted_time); 3045 3046 /** 3047 * del_tx_ts - Delete traffic stream 3048 * @priv: Private driver interface data 3049 * @tsid: Traffic stream ID 3050 * @addr: Receiver address 3051 * Returns: 0 on success, -1 on failure 3052 */ 3053 int (*del_tx_ts)(void *priv, u8 tsid, const u8 *addr); 3054 3055 /** 3056 * Enable channel-switching with TDLS peer 3057 * @priv: Private driver interface data 3058 * @addr: MAC address of the TDLS peer 3059 * @oper_class: Operating class of the switch channel 3060 * @params: Channel specification 3061 * Returns: 0 on success, -1 on failure 3062 * 3063 * The function indicates to driver that it can start switching to a 3064 * different channel with a specified TDLS peer. The switching is 3065 * assumed on until canceled with tdls_disable_channel_switch(). 3066 */ 3067 int (*tdls_enable_channel_switch)( 3068 void *priv, const u8 *addr, u8 oper_class, 3069 const struct hostapd_freq_params *params); 3070 3071 /** 3072 * Disable channel switching with TDLS peer 3073 * @priv: Private driver interface data 3074 * @addr: MAC address of the TDLS peer 3075 * Returns: 0 on success, -1 on failure 3076 * 3077 * This function indicates to the driver that it should stop switching 3078 * with a given TDLS peer. 3079 */ 3080 int (*tdls_disable_channel_switch)(void *priv, const u8 *addr); 3081 3082 /** 3083 * start_dfs_cac - Listen for radar interference on the channel 3084 * @priv: Private driver interface data 3085 * @freq: Channel parameters 3086 * Returns: 0 on success, -1 on failure 3087 */ 3088 int (*start_dfs_cac)(void *priv, struct hostapd_freq_params *freq); 3089 3090 /** 3091 * stop_ap - Removes beacon from AP 3092 * @priv: Private driver interface data 3093 * Returns: 0 on success, -1 on failure (or if not supported) 3094 * 3095 * This optional function can be used to disable AP mode related 3096 * configuration. Unlike deinit_ap, it does not change to station 3097 * mode. 3098 */ 3099 int (*stop_ap)(void *priv); 3100 3101 /** 3102 * get_survey - Retrieve survey data 3103 * @priv: Private driver interface data 3104 * @freq: If set, survey data for the specified frequency is only 3105 * being requested. If not set, all survey data is requested. 3106 * Returns: 0 on success, -1 on failure 3107 * 3108 * Use this to retrieve: 3109 * 3110 * - the observed channel noise floor 3111 * - the amount of time we have spent on the channel 3112 * - the amount of time during which we have spent on the channel that 3113 * the radio has determined the medium is busy and we cannot 3114 * transmit 3115 * - the amount of time we have spent receiving data 3116 * - the amount of time we have spent transmitting data 3117 * 3118 * This data can be used for spectrum heuristics. One example is 3119 * Automatic Channel Selection (ACS). The channel survey data is 3120 * kept on a linked list on the channel data, one entry is added 3121 * for each survey. The min_nf of the channel is updated for each 3122 * survey. 3123 */ 3124 int (*get_survey)(void *priv, unsigned int freq); 3125 3126 /** 3127 * status - Get driver interface status information 3128 * @priv: Private driver interface data 3129 * @buf: Buffer for printing tou the status information 3130 * @buflen: Maximum length of the buffer 3131 * Returns: Length of written status information or -1 on failure 3132 */ 3133 int (*status)(void *priv, char *buf, size_t buflen); 3134 3135 /** 3136 * roaming - Set roaming policy for driver-based BSS selection 3137 * @priv: Private driver interface data 3138 * @allowed: Whether roaming within ESS is allowed 3139 * @bssid: Forced BSSID if roaming is disabled or %NULL if not set 3140 * Returns: Length of written status information or -1 on failure 3141 * 3142 * This optional callback can be used to update roaming policy from the 3143 * associate() command (bssid being set there indicates that the driver 3144 * should not roam before getting this roaming() call to allow roaming. 3145 * If the driver does not indicate WPA_DRIVER_FLAGS_BSS_SELECTION 3146 * capability, roaming policy is handled within wpa_supplicant and there 3147 * is no need to implement or react to this callback. 3148 */ 3149 int (*roaming)(void *priv, int allowed, const u8 *bssid); 3150 3151 /** 3152 * set_mac_addr - Set MAC address 3153 * @priv: Private driver interface data 3154 * @addr: MAC address to use or %NULL for setting back to permanent 3155 * Returns: 0 on success, -1 on failure 3156 */ 3157 int (*set_mac_addr)(void *priv, const u8 *addr); 3158 3159 #ifdef CONFIG_MACSEC 3160 int (*macsec_init)(void *priv, struct macsec_init_params *params); 3161 3162 int (*macsec_deinit)(void *priv); 3163 3164 /** 3165 * enable_protect_frames - Set protect frames status 3166 * @priv: Private driver interface data 3167 * @enabled: TRUE = protect frames enabled 3168 * FALSE = protect frames disabled 3169 * Returns: 0 on success, -1 on failure (or if not supported) 3170 */ 3171 int (*enable_protect_frames)(void *priv, Boolean enabled); 3172 3173 /** 3174 * set_replay_protect - Set replay protect status and window size 3175 * @priv: Private driver interface data 3176 * @enabled: TRUE = replay protect enabled 3177 * FALSE = replay protect disabled 3178 * @window: replay window size, valid only when replay protect enabled 3179 * Returns: 0 on success, -1 on failure (or if not supported) 3180 */ 3181 int (*set_replay_protect)(void *priv, Boolean enabled, u32 window); 3182 3183 /** 3184 * set_current_cipher_suite - Set current cipher suite 3185 * @priv: Private driver interface data 3186 * @cs: EUI64 identifier 3187 * @cs_len: Length of the cs buffer in octets 3188 * Returns: 0 on success, -1 on failure (or if not supported) 3189 */ 3190 int (*set_current_cipher_suite)(void *priv, const u8 *cs, 3191 size_t cs_len); 3192 3193 /** 3194 * enable_controlled_port - Set controlled port status 3195 * @priv: Private driver interface data 3196 * @enabled: TRUE = controlled port enabled 3197 * FALSE = controlled port disabled 3198 * Returns: 0 on success, -1 on failure (or if not supported) 3199 */ 3200 int (*enable_controlled_port)(void *priv, Boolean enabled); 3201 3202 /** 3203 * get_receive_lowest_pn - Get receive lowest pn 3204 * @priv: Private driver interface data 3205 * @channel: secure channel 3206 * @an: association number 3207 * @lowest_pn: lowest accept pn 3208 * Returns: 0 on success, -1 on failure (or if not supported) 3209 */ 3210 int (*get_receive_lowest_pn)(void *priv, u32 channel, u8 an, 3211 u32 *lowest_pn); 3212 3213 /** 3214 * get_transmit_next_pn - Get transmit next pn 3215 * @priv: Private driver interface data 3216 * @channel: secure channel 3217 * @an: association number 3218 * @next_pn: next pn 3219 * Returns: 0 on success, -1 on failure (or if not supported) 3220 */ 3221 int (*get_transmit_next_pn)(void *priv, u32 channel, u8 an, 3222 u32 *next_pn); 3223 3224 /** 3225 * set_transmit_next_pn - Set transmit next pn 3226 * @priv: Private driver interface data 3227 * @channel: secure channel 3228 * @an: association number 3229 * @next_pn: next pn 3230 * Returns: 0 on success, -1 on failure (or if not supported) 3231 */ 3232 int (*set_transmit_next_pn)(void *priv, u32 channel, u8 an, 3233 u32 next_pn); 3234 3235 /** 3236 * get_available_receive_sc - get available receive channel 3237 * @priv: Private driver interface data 3238 * @channel: secure channel 3239 * Returns: 0 on success, -1 on failure (or if not supported) 3240 */ 3241 int (*get_available_receive_sc)(void *priv, u32 *channel); 3242 3243 /** 3244 * create_receive_sc - create secure channel for receiving 3245 * @priv: Private driver interface data 3246 * @channel: secure channel 3247 * @sci_addr: secure channel identifier - address 3248 * @sci_port: secure channel identifier - port 3249 * @conf_offset: confidentiality offset (0, 30, or 50) 3250 * @validation: frame validation policy (0 = Disabled, 1 = Checked, 3251 * 2 = Strict) 3252 * Returns: 0 on success, -1 on failure (or if not supported) 3253 */ 3254 int (*create_receive_sc)(void *priv, u32 channel, const u8 *sci_addr, 3255 u16 sci_port, unsigned int conf_offset, 3256 int validation); 3257 3258 /** 3259 * delete_receive_sc - delete secure connection for receiving 3260 * @priv: private driver interface data from init() 3261 * @channel: secure channel 3262 * Returns: 0 on success, -1 on failure 3263 */ 3264 int (*delete_receive_sc)(void *priv, u32 channel); 3265 3266 /** 3267 * create_receive_sa - create secure association for receive 3268 * @priv: private driver interface data from init() 3269 * @channel: secure channel 3270 * @an: association number 3271 * @lowest_pn: the lowest packet number can be received 3272 * @sak: the secure association key 3273 * Returns: 0 on success, -1 on failure 3274 */ 3275 int (*create_receive_sa)(void *priv, u32 channel, u8 an, 3276 u32 lowest_pn, const u8 *sak); 3277 3278 /** 3279 * enable_receive_sa - enable the SA for receive 3280 * @priv: private driver interface data from init() 3281 * @channel: secure channel 3282 * @an: association number 3283 * Returns: 0 on success, -1 on failure 3284 */ 3285 int (*enable_receive_sa)(void *priv, u32 channel, u8 an); 3286 3287 /** 3288 * disable_receive_sa - disable SA for receive 3289 * @priv: private driver interface data from init() 3290 * @channel: secure channel index 3291 * @an: association number 3292 * Returns: 0 on success, -1 on failure 3293 */ 3294 int (*disable_receive_sa)(void *priv, u32 channel, u8 an); 3295 3296 /** 3297 * get_available_transmit_sc - get available transmit channel 3298 * @priv: Private driver interface data 3299 * @channel: secure channel 3300 * Returns: 0 on success, -1 on failure (or if not supported) 3301 */ 3302 int (*get_available_transmit_sc)(void *priv, u32 *channel); 3303 3304 /** 3305 * create_transmit_sc - create secure connection for transmit 3306 * @priv: private driver interface data from init() 3307 * @channel: secure channel 3308 * @sci_addr: secure channel identifier - address 3309 * @sci_port: secure channel identifier - port 3310 * Returns: 0 on success, -1 on failure 3311 */ 3312 int (*create_transmit_sc)(void *priv, u32 channel, const u8 *sci_addr, 3313 u16 sci_port, unsigned int conf_offset); 3314 3315 /** 3316 * delete_transmit_sc - delete secure connection for transmit 3317 * @priv: private driver interface data from init() 3318 * @channel: secure channel 3319 * Returns: 0 on success, -1 on failure 3320 */ 3321 int (*delete_transmit_sc)(void *priv, u32 channel); 3322 3323 /** 3324 * create_transmit_sa - create secure association for transmit 3325 * @priv: private driver interface data from init() 3326 * @channel: secure channel index 3327 * @an: association number 3328 * @next_pn: the packet number used as next transmit packet 3329 * @confidentiality: True if the SA is to provide confidentiality 3330 * as well as integrity 3331 * @sak: the secure association key 3332 * Returns: 0 on success, -1 on failure 3333 */ 3334 int (*create_transmit_sa)(void *priv, u32 channel, u8 an, u32 next_pn, 3335 Boolean confidentiality, const u8 *sak); 3336 3337 /** 3338 * enable_transmit_sa - enable SA for transmit 3339 * @priv: private driver interface data from init() 3340 * @channel: secure channel 3341 * @an: association number 3342 * Returns: 0 on success, -1 on failure 3343 */ 3344 int (*enable_transmit_sa)(void *priv, u32 channel, u8 an); 3345 3346 /** 3347 * disable_transmit_sa - disable SA for transmit 3348 * @priv: private driver interface data from init() 3349 * @channel: secure channel 3350 * @an: association number 3351 * Returns: 0 on success, -1 on failure 3352 */ 3353 int (*disable_transmit_sa)(void *priv, u32 channel, u8 an); 3354 #endif /* CONFIG_MACSEC */ 3355 3356 /** 3357 * init_mesh - Driver specific initialization for mesh 3358 * @priv: Private driver interface data 3359 * Returns: 0 on success, -1 on failure 3360 */ 3361 int (*init_mesh)(void *priv); 3362 3363 /** 3364 * join_mesh - Join a mesh network 3365 * @priv: Private driver interface data 3366 * @params: Mesh configuration parameters 3367 * Returns: 0 on success, -1 on failure 3368 */ 3369 int (*join_mesh)(void *priv, 3370 struct wpa_driver_mesh_join_params *params); 3371 3372 /** 3373 * leave_mesh - Leave a mesh network 3374 * @priv: Private driver interface data 3375 * Returns 0 on success, -1 on failure 3376 */ 3377 int (*leave_mesh)(void *priv); 3378 3379 /** 3380 * do_acs - Automatically select channel 3381 * @priv: Private driver interface data 3382 * @params: Parameters for ACS 3383 * Returns 0 on success, -1 on failure 3384 * 3385 * This command can be used to offload ACS to the driver if the driver 3386 * indicates support for such offloading (WPA_DRIVER_FLAGS_ACS_OFFLOAD). 3387 */ 3388 int (*do_acs)(void *priv, struct drv_acs_params *params); 3389 }; 3390 3391 3392 /** 3393 * enum wpa_event_type - Event type for wpa_supplicant_event() calls 3394 */ 3395 enum wpa_event_type { 3396 /** 3397 * EVENT_ASSOC - Association completed 3398 * 3399 * This event needs to be delivered when the driver completes IEEE 3400 * 802.11 association or reassociation successfully. 3401 * wpa_driver_ops::get_bssid() is expected to provide the current BSSID 3402 * after this event has been generated. In addition, optional 3403 * EVENT_ASSOCINFO may be generated just before EVENT_ASSOC to provide 3404 * more information about the association. If the driver interface gets 3405 * both of these events at the same time, it can also include the 3406 * assoc_info data in EVENT_ASSOC call. 3407 */ 3408 EVENT_ASSOC, 3409 3410 /** 3411 * EVENT_DISASSOC - Association lost 3412 * 3413 * This event should be called when association is lost either due to 3414 * receiving deauthenticate or disassociate frame from the AP or when 3415 * sending either of these frames to the current AP. If the driver 3416 * supports separate deauthentication event, EVENT_DISASSOC should only 3417 * be used for disassociation and EVENT_DEAUTH for deauthentication. 3418 * In AP mode, union wpa_event_data::disassoc_info is required. 3419 */ 3420 EVENT_DISASSOC, 3421 3422 /** 3423 * EVENT_MICHAEL_MIC_FAILURE - Michael MIC (TKIP) detected 3424 * 3425 * This event must be delivered when a Michael MIC error is detected by 3426 * the local driver. Additional data for event processing is 3427 * provided with union wpa_event_data::michael_mic_failure. This 3428 * information is used to request new encyption key and to initiate 3429 * TKIP countermeasures if needed. 3430 */ 3431 EVENT_MICHAEL_MIC_FAILURE, 3432 3433 /** 3434 * EVENT_SCAN_RESULTS - Scan results available 3435 * 3436 * This event must be called whenever scan results are available to be 3437 * fetched with struct wpa_driver_ops::get_scan_results(). This event 3438 * is expected to be used some time after struct wpa_driver_ops::scan() 3439 * is called. If the driver provides an unsolicited event when the scan 3440 * has been completed, this event can be used to trigger 3441 * EVENT_SCAN_RESULTS call. If such event is not available from the 3442 * driver, the driver wrapper code is expected to use a registered 3443 * timeout to generate EVENT_SCAN_RESULTS call after the time that the 3444 * scan is expected to be completed. Optional information about 3445 * completed scan can be provided with union wpa_event_data::scan_info. 3446 */ 3447 EVENT_SCAN_RESULTS, 3448 3449 /** 3450 * EVENT_ASSOCINFO - Report optional extra information for association 3451 * 3452 * This event can be used to report extra association information for 3453 * EVENT_ASSOC processing. This extra information includes IEs from 3454 * association frames and Beacon/Probe Response frames in union 3455 * wpa_event_data::assoc_info. EVENT_ASSOCINFO must be send just before 3456 * EVENT_ASSOC. Alternatively, the driver interface can include 3457 * assoc_info data in the EVENT_ASSOC call if it has all the 3458 * information available at the same point. 3459 */ 3460 EVENT_ASSOCINFO, 3461 3462 /** 3463 * EVENT_INTERFACE_STATUS - Report interface status changes 3464 * 3465 * This optional event can be used to report changes in interface 3466 * status (interface added/removed) using union 3467 * wpa_event_data::interface_status. This can be used to trigger 3468 * wpa_supplicant to stop and re-start processing for the interface, 3469 * e.g., when a cardbus card is ejected/inserted. 3470 */ 3471 EVENT_INTERFACE_STATUS, 3472 3473 /** 3474 * EVENT_PMKID_CANDIDATE - Report a candidate AP for pre-authentication 3475 * 3476 * This event can be used to inform wpa_supplicant about candidates for 3477 * RSN (WPA2) pre-authentication. If wpa_supplicant is not responsible 3478 * for scan request (ap_scan=2 mode), this event is required for 3479 * pre-authentication. If wpa_supplicant is performing scan request 3480 * (ap_scan=1), this event is optional since scan results can be used 3481 * to add pre-authentication candidates. union 3482 * wpa_event_data::pmkid_candidate is used to report the BSSID of the 3483 * candidate and priority of the candidate, e.g., based on the signal 3484 * strength, in order to try to pre-authenticate first with candidates 3485 * that are most likely targets for re-association. 3486 * 3487 * EVENT_PMKID_CANDIDATE can be called whenever the driver has updates 3488 * on the candidate list. In addition, it can be called for the current 3489 * AP and APs that have existing PMKSA cache entries. wpa_supplicant 3490 * will automatically skip pre-authentication in cases where a valid 3491 * PMKSA exists. When more than one candidate exists, this event should 3492 * be generated once for each candidate. 3493 * 3494 * Driver will be notified about successful pre-authentication with 3495 * struct wpa_driver_ops::add_pmkid() calls. 3496 */ 3497 EVENT_PMKID_CANDIDATE, 3498 3499 /** 3500 * EVENT_STKSTART - Request STK handshake (MLME-STKSTART.request) 3501 * 3502 * This event can be used to inform wpa_supplicant about desire to set 3503 * up secure direct link connection between two stations as defined in 3504 * IEEE 802.11e with a new PeerKey mechanism that replaced the original 3505 * STAKey negotiation. The caller will need to set peer address for the 3506 * event. 3507 */ 3508 EVENT_STKSTART, 3509 3510 /** 3511 * EVENT_TDLS - Request TDLS operation 3512 * 3513 * This event can be used to request a TDLS operation to be performed. 3514 */ 3515 EVENT_TDLS, 3516 3517 /** 3518 * EVENT_FT_RESPONSE - Report FT (IEEE 802.11r) response IEs 3519 * 3520 * The driver is expected to report the received FT IEs from 3521 * FT authentication sequence from the AP. The FT IEs are included in 3522 * the extra information in union wpa_event_data::ft_ies. 3523 */ 3524 EVENT_FT_RESPONSE, 3525 3526 /** 3527 * EVENT_IBSS_RSN_START - Request RSN authentication in IBSS 3528 * 3529 * The driver can use this event to inform wpa_supplicant about a STA 3530 * in an IBSS with which protected frames could be exchanged. This 3531 * event starts RSN authentication with the other STA to authenticate 3532 * the STA and set up encryption keys with it. 3533 */ 3534 EVENT_IBSS_RSN_START, 3535 3536 /** 3537 * EVENT_AUTH - Authentication result 3538 * 3539 * This event should be called when authentication attempt has been 3540 * completed. This is only used if the driver supports separate 3541 * authentication step (struct wpa_driver_ops::authenticate). 3542 * Information about authentication result is included in 3543 * union wpa_event_data::auth. 3544 */ 3545 EVENT_AUTH, 3546 3547 /** 3548 * EVENT_DEAUTH - Authentication lost 3549 * 3550 * This event should be called when authentication is lost either due 3551 * to receiving deauthenticate frame from the AP or when sending that 3552 * frame to the current AP. 3553 * In AP mode, union wpa_event_data::deauth_info is required. 3554 */ 3555 EVENT_DEAUTH, 3556 3557 /** 3558 * EVENT_ASSOC_REJECT - Association rejected 3559 * 3560 * This event should be called when (re)association attempt has been 3561 * rejected by the AP. Information about the association response is 3562 * included in union wpa_event_data::assoc_reject. 3563 */ 3564 EVENT_ASSOC_REJECT, 3565 3566 /** 3567 * EVENT_AUTH_TIMED_OUT - Authentication timed out 3568 */ 3569 EVENT_AUTH_TIMED_OUT, 3570 3571 /** 3572 * EVENT_ASSOC_TIMED_OUT - Association timed out 3573 */ 3574 EVENT_ASSOC_TIMED_OUT, 3575 3576 /** 3577 * EVENT_WPS_BUTTON_PUSHED - Report hardware push button press for WPS 3578 */ 3579 EVENT_WPS_BUTTON_PUSHED, 3580 3581 /** 3582 * EVENT_TX_STATUS - Report TX status 3583 */ 3584 EVENT_TX_STATUS, 3585 3586 /** 3587 * EVENT_RX_FROM_UNKNOWN - Report RX from unknown STA 3588 */ 3589 EVENT_RX_FROM_UNKNOWN, 3590 3591 /** 3592 * EVENT_RX_MGMT - Report RX of a management frame 3593 */ 3594 EVENT_RX_MGMT, 3595 3596 /** 3597 * EVENT_REMAIN_ON_CHANNEL - Remain-on-channel duration started 3598 * 3599 * This event is used to indicate when the driver has started the 3600 * requested remain-on-channel duration. Information about the 3601 * operation is included in union wpa_event_data::remain_on_channel. 3602 */ 3603 EVENT_REMAIN_ON_CHANNEL, 3604 3605 /** 3606 * EVENT_CANCEL_REMAIN_ON_CHANNEL - Remain-on-channel timed out 3607 * 3608 * This event is used to indicate when the driver has completed 3609 * remain-on-channel duration, i.e., may noot be available on the 3610 * requested channel anymore. Information about the 3611 * operation is included in union wpa_event_data::remain_on_channel. 3612 */ 3613 EVENT_CANCEL_REMAIN_ON_CHANNEL, 3614 3615 /** 3616 * EVENT_RX_PROBE_REQ - Indicate received Probe Request frame 3617 * 3618 * This event is used to indicate when a Probe Request frame has been 3619 * received. Information about the received frame is included in 3620 * union wpa_event_data::rx_probe_req. The driver is required to report 3621 * these events only after successfully completed probe_req_report() 3622 * commands to request the events (i.e., report parameter is non-zero) 3623 * in station mode. In AP mode, Probe Request frames should always be 3624 * reported. 3625 */ 3626 EVENT_RX_PROBE_REQ, 3627 3628 /** 3629 * EVENT_NEW_STA - New wired device noticed 3630 * 3631 * This event is used to indicate that a new device has been detected 3632 * in a network that does not use association-like functionality (i.e., 3633 * mainly wired Ethernet). This can be used to start EAPOL 3634 * authenticator when receiving a frame from a device. The address of 3635 * the device is included in union wpa_event_data::new_sta. 3636 */ 3637 EVENT_NEW_STA, 3638 3639 /** 3640 * EVENT_EAPOL_RX - Report received EAPOL frame 3641 * 3642 * When in AP mode with hostapd, this event is required to be used to 3643 * deliver the receive EAPOL frames from the driver. 3644 */ 3645 EVENT_EAPOL_RX, 3646 3647 /** 3648 * EVENT_SIGNAL_CHANGE - Indicate change in signal strength 3649 * 3650 * This event is used to indicate changes in the signal strength 3651 * observed in frames received from the current AP if signal strength 3652 * monitoring has been enabled with signal_monitor(). 3653 */ 3654 EVENT_SIGNAL_CHANGE, 3655 3656 /** 3657 * EVENT_INTERFACE_ENABLED - Notify that interface was enabled 3658 * 3659 * This event is used to indicate that the interface was enabled after 3660 * having been previously disabled, e.g., due to rfkill. 3661 */ 3662 EVENT_INTERFACE_ENABLED, 3663 3664 /** 3665 * EVENT_INTERFACE_DISABLED - Notify that interface was disabled 3666 * 3667 * This event is used to indicate that the interface was disabled, 3668 * e.g., due to rfkill. 3669 */ 3670 EVENT_INTERFACE_DISABLED, 3671 3672 /** 3673 * EVENT_CHANNEL_LIST_CHANGED - Channel list changed 3674 * 3675 * This event is used to indicate that the channel list has changed, 3676 * e.g., because of a regulatory domain change triggered by scan 3677 * results including an AP advertising a country code. 3678 */ 3679 EVENT_CHANNEL_LIST_CHANGED, 3680 3681 /** 3682 * EVENT_INTERFACE_UNAVAILABLE - Notify that interface is unavailable 3683 * 3684 * This event is used to indicate that the driver cannot maintain this 3685 * interface in its operation mode anymore. The most likely use for 3686 * this is to indicate that AP mode operation is not available due to 3687 * operating channel would need to be changed to a DFS channel when 3688 * the driver does not support radar detection and another virtual 3689 * interfaces caused the operating channel to change. Other similar 3690 * resource conflicts could also trigger this for station mode 3691 * interfaces. This event can be propagated when channel switching 3692 * fails. 3693 */ 3694 EVENT_INTERFACE_UNAVAILABLE, 3695 3696 /** 3697 * EVENT_BEST_CHANNEL 3698 * 3699 * Driver generates this event whenever it detects a better channel 3700 * (e.g., based on RSSI or channel use). This information can be used 3701 * to improve channel selection for a new AP/P2P group. 3702 */ 3703 EVENT_BEST_CHANNEL, 3704 3705 /** 3706 * EVENT_UNPROT_DEAUTH - Unprotected Deauthentication frame received 3707 * 3708 * This event should be called when a Deauthentication frame is dropped 3709 * due to it not being protected (MFP/IEEE 802.11w). 3710 * union wpa_event_data::unprot_deauth is required to provide more 3711 * details of the frame. 3712 */ 3713 EVENT_UNPROT_DEAUTH, 3714 3715 /** 3716 * EVENT_UNPROT_DISASSOC - Unprotected Disassociation frame received 3717 * 3718 * This event should be called when a Disassociation frame is dropped 3719 * due to it not being protected (MFP/IEEE 802.11w). 3720 * union wpa_event_data::unprot_disassoc is required to provide more 3721 * details of the frame. 3722 */ 3723 EVENT_UNPROT_DISASSOC, 3724 3725 /** 3726 * EVENT_STATION_LOW_ACK 3727 * 3728 * Driver generates this event whenever it detected that a particular 3729 * station was lost. Detection can be through massive transmission 3730 * failures for example. 3731 */ 3732 EVENT_STATION_LOW_ACK, 3733 3734 /** 3735 * EVENT_IBSS_PEER_LOST - IBSS peer not reachable anymore 3736 */ 3737 EVENT_IBSS_PEER_LOST, 3738 3739 /** 3740 * EVENT_DRIVER_GTK_REKEY - Device/driver did GTK rekey 3741 * 3742 * This event carries the new replay counter to notify wpa_supplicant 3743 * of the current EAPOL-Key Replay Counter in case the driver/firmware 3744 * completed Group Key Handshake while the host (including 3745 * wpa_supplicant was sleeping). 3746 */ 3747 EVENT_DRIVER_GTK_REKEY, 3748 3749 /** 3750 * EVENT_SCHED_SCAN_STOPPED - Scheduled scan was stopped 3751 */ 3752 EVENT_SCHED_SCAN_STOPPED, 3753 3754 /** 3755 * EVENT_DRIVER_CLIENT_POLL_OK - Station responded to poll 3756 * 3757 * This event indicates that the station responded to the poll 3758 * initiated with @poll_client. 3759 */ 3760 EVENT_DRIVER_CLIENT_POLL_OK, 3761 3762 /** 3763 * EVENT_EAPOL_TX_STATUS - notify of EAPOL TX status 3764 */ 3765 EVENT_EAPOL_TX_STATUS, 3766 3767 /** 3768 * EVENT_CH_SWITCH - AP or GO decided to switch channels 3769 * 3770 * Described in wpa_event_data.ch_switch 3771 * */ 3772 EVENT_CH_SWITCH, 3773 3774 /** 3775 * EVENT_WNM - Request WNM operation 3776 * 3777 * This event can be used to request a WNM operation to be performed. 3778 */ 3779 EVENT_WNM, 3780 3781 /** 3782 * EVENT_CONNECT_FAILED_REASON - Connection failure reason in AP mode 3783 * 3784 * This event indicates that the driver reported a connection failure 3785 * with the specified client (for example, max client reached, etc.) in 3786 * AP mode. 3787 */ 3788 EVENT_CONNECT_FAILED_REASON, 3789 3790 /** 3791 * EVENT_DFS_RADAR_DETECTED - Notify of radar detection 3792 * 3793 * A radar has been detected on the supplied frequency, hostapd should 3794 * react accordingly (e.g., change channel). 3795 */ 3796 EVENT_DFS_RADAR_DETECTED, 3797 3798 /** 3799 * EVENT_DFS_CAC_FINISHED - Notify that channel availability check has been completed 3800 * 3801 * After a successful CAC, the channel can be marked clear and used. 3802 */ 3803 EVENT_DFS_CAC_FINISHED, 3804 3805 /** 3806 * EVENT_DFS_CAC_ABORTED - Notify that channel availability check has been aborted 3807 * 3808 * The CAC was not successful, and the channel remains in the previous 3809 * state. This may happen due to a radar beeing detected or other 3810 * external influences. 3811 */ 3812 EVENT_DFS_CAC_ABORTED, 3813 3814 /** 3815 * EVENT_DFS_NOP_FINISHED - Notify that non-occupancy period is over 3816 * 3817 * The channel which was previously unavailable is now available again. 3818 */ 3819 EVENT_DFS_NOP_FINISHED, 3820 3821 /** 3822 * EVENT_SURVEY - Received survey data 3823 * 3824 * This event gets triggered when a driver query is issued for survey 3825 * data and the requested data becomes available. The returned data is 3826 * stored in struct survey_results. The results provide at most one 3827 * survey entry for each frequency and at minimum will provide one 3828 * survey entry for one frequency. The survey data can be os_malloc()'d 3829 * and then os_free()'d, so the event callback must only copy data. 3830 */ 3831 EVENT_SURVEY, 3832 3833 /** 3834 * EVENT_SCAN_STARTED - Scan started 3835 * 3836 * This indicates that driver has started a scan operation either based 3837 * on a request from wpa_supplicant/hostapd or from another application. 3838 * EVENT_SCAN_RESULTS is used to indicate when the scan has been 3839 * completed (either successfully or by getting cancelled). 3840 */ 3841 EVENT_SCAN_STARTED, 3842 3843 /** 3844 * EVENT_AVOID_FREQUENCIES - Received avoid frequency range 3845 * 3846 * This event indicates a set of frequency ranges that should be avoided 3847 * to reduce issues due to interference or internal co-existence 3848 * information in the driver. 3849 */ 3850 EVENT_AVOID_FREQUENCIES, 3851 3852 /** 3853 * EVENT_NEW_PEER_CANDIDATE - new (unknown) mesh peer notification 3854 */ 3855 EVENT_NEW_PEER_CANDIDATE, 3856 3857 /** 3858 * EVENT_ACS_CHANNEL_SELECTED - Received selected channels by ACS 3859 * 3860 * Indicates a pair of primary and secondary channels chosen by ACS 3861 * in device. 3862 */ 3863 EVENT_ACS_CHANNEL_SELECTED, 3864 3865 /** 3866 * EVENT_DFS_CAC_STARTED - Notify that channel availability check has 3867 * been started. 3868 * 3869 * This event indicates that channel availability check has been started 3870 * on a DFS frequency by a driver that supports DFS Offload. 3871 */ 3872 EVENT_DFS_CAC_STARTED, 3873 }; 3874 3875 3876 /** 3877 * struct freq_survey - Channel survey info 3878 * 3879 * @ifidx: Interface index in which this survey was observed 3880 * @freq: Center of frequency of the surveyed channel 3881 * @nf: Channel noise floor in dBm 3882 * @channel_time: Amount of time in ms the radio spent on the channel 3883 * @channel_time_busy: Amount of time in ms the radio detected some signal 3884 * that indicated to the radio the channel was not clear 3885 * @channel_time_rx: Amount of time the radio spent receiving data 3886 * @channel_time_tx: Amount of time the radio spent transmitting data 3887 * @filled: bitmask indicating which fields have been reported, see 3888 * SURVEY_HAS_* defines. 3889 * @list: Internal list pointers 3890 */ 3891 struct freq_survey { 3892 u32 ifidx; 3893 unsigned int freq; 3894 s8 nf; 3895 u64 channel_time; 3896 u64 channel_time_busy; 3897 u64 channel_time_rx; 3898 u64 channel_time_tx; 3899 unsigned int filled; 3900 struct dl_list list; 3901 }; 3902 3903 #define SURVEY_HAS_NF BIT(0) 3904 #define SURVEY_HAS_CHAN_TIME BIT(1) 3905 #define SURVEY_HAS_CHAN_TIME_BUSY BIT(2) 3906 #define SURVEY_HAS_CHAN_TIME_RX BIT(3) 3907 #define SURVEY_HAS_CHAN_TIME_TX BIT(4) 3908 3909 3910 /** 3911 * union wpa_event_data - Additional data for wpa_supplicant_event() calls 3912 */ 3913 union wpa_event_data { 3914 /** 3915 * struct assoc_info - Data for EVENT_ASSOC and EVENT_ASSOCINFO events 3916 * 3917 * This structure is optional for EVENT_ASSOC calls and required for 3918 * EVENT_ASSOCINFO calls. By using EVENT_ASSOC with this data, the 3919 * driver interface does not need to generate separate EVENT_ASSOCINFO 3920 * calls. 3921 */ 3922 struct assoc_info { 3923 /** 3924 * reassoc - Flag to indicate association or reassociation 3925 */ 3926 int reassoc; 3927 3928 /** 3929 * req_ies - (Re)Association Request IEs 3930 * 3931 * If the driver generates WPA/RSN IE, this event data must be 3932 * returned for WPA handshake to have needed information. If 3933 * wpa_supplicant-generated WPA/RSN IE is used, this 3934 * information event is optional. 3935 * 3936 * This should start with the first IE (fixed fields before IEs 3937 * are not included). 3938 */ 3939 const u8 *req_ies; 3940 3941 /** 3942 * req_ies_len - Length of req_ies in bytes 3943 */ 3944 size_t req_ies_len; 3945 3946 /** 3947 * resp_ies - (Re)Association Response IEs 3948 * 3949 * Optional association data from the driver. This data is not 3950 * required WPA, but may be useful for some protocols and as 3951 * such, should be reported if this is available to the driver 3952 * interface. 3953 * 3954 * This should start with the first IE (fixed fields before IEs 3955 * are not included). 3956 */ 3957 const u8 *resp_ies; 3958 3959 /** 3960 * resp_ies_len - Length of resp_ies in bytes 3961 */ 3962 size_t resp_ies_len; 3963 3964 /** 3965 * beacon_ies - Beacon or Probe Response IEs 3966 * 3967 * Optional Beacon/ProbeResp data: IEs included in Beacon or 3968 * Probe Response frames from the current AP (i.e., the one 3969 * that the client just associated with). This information is 3970 * used to update WPA/RSN IE for the AP. If this field is not 3971 * set, the results from previous scan will be used. If no 3972 * data for the new AP is found, scan results will be requested 3973 * again (without scan request). At this point, the driver is 3974 * expected to provide WPA/RSN IE for the AP (if WPA/WPA2 is 3975 * used). 3976 * 3977 * This should start with the first IE (fixed fields before IEs 3978 * are not included). 3979 */ 3980 const u8 *beacon_ies; 3981 3982 /** 3983 * beacon_ies_len - Length of beacon_ies */ 3984 size_t beacon_ies_len; 3985 3986 /** 3987 * freq - Frequency of the operational channel in MHz 3988 */ 3989 unsigned int freq; 3990 3991 /** 3992 * wmm_params - WMM parameters used in this association. 3993 */ 3994 struct wmm_params wmm_params; 3995 3996 /** 3997 * addr - Station address (for AP mode) 3998 */ 3999 const u8 *addr; 4000 4001 /** 4002 * The following is the key management offload information 4003 * @authorized 4004 * @key_replay_ctr 4005 * @key_replay_ctr_len 4006 * @ptk_kck 4007 * @ptk_kek_len 4008 * @ptk_kek 4009 * @ptk_kek_len 4010 */ 4011 4012 /** 4013 * authorized - Status of key management offload, 4014 * 1 = successful 4015 */ 4016 int authorized; 4017 4018 /** 4019 * key_replay_ctr - Key replay counter value last used 4020 * in a valid EAPOL-Key frame 4021 */ 4022 const u8 *key_replay_ctr; 4023 4024 /** 4025 * key_replay_ctr_len - The length of key_replay_ctr 4026 */ 4027 size_t key_replay_ctr_len; 4028 4029 /** 4030 * ptk_kck - The derived PTK KCK 4031 */ 4032 const u8 *ptk_kck; 4033 4034 /** 4035 * ptk_kek_len - The length of ptk_kck 4036 */ 4037 size_t ptk_kck_len; 4038 4039 /** 4040 * ptk_kek - The derived PTK KEK 4041 */ 4042 const u8 *ptk_kek; 4043 4044 /** 4045 * ptk_kek_len - The length of ptk_kek 4046 */ 4047 size_t ptk_kek_len; 4048 } assoc_info; 4049 4050 /** 4051 * struct disassoc_info - Data for EVENT_DISASSOC events 4052 */ 4053 struct disassoc_info { 4054 /** 4055 * addr - Station address (for AP mode) 4056 */ 4057 const u8 *addr; 4058 4059 /** 4060 * reason_code - Reason Code (host byte order) used in 4061 * Deauthentication frame 4062 */ 4063 u16 reason_code; 4064 4065 /** 4066 * ie - Optional IE(s) in Disassociation frame 4067 */ 4068 const u8 *ie; 4069 4070 /** 4071 * ie_len - Length of ie buffer in octets 4072 */ 4073 size_t ie_len; 4074 4075 /** 4076 * locally_generated - Whether the frame was locally generated 4077 */ 4078 int locally_generated; 4079 } disassoc_info; 4080 4081 /** 4082 * struct deauth_info - Data for EVENT_DEAUTH events 4083 */ 4084 struct deauth_info { 4085 /** 4086 * addr - Station address (for AP mode) 4087 */ 4088 const u8 *addr; 4089 4090 /** 4091 * reason_code - Reason Code (host byte order) used in 4092 * Deauthentication frame 4093 */ 4094 u16 reason_code; 4095 4096 /** 4097 * ie - Optional IE(s) in Deauthentication frame 4098 */ 4099 const u8 *ie; 4100 4101 /** 4102 * ie_len - Length of ie buffer in octets 4103 */ 4104 size_t ie_len; 4105 4106 /** 4107 * locally_generated - Whether the frame was locally generated 4108 */ 4109 int locally_generated; 4110 } deauth_info; 4111 4112 /** 4113 * struct michael_mic_failure - Data for EVENT_MICHAEL_MIC_FAILURE 4114 */ 4115 struct michael_mic_failure { 4116 int unicast; 4117 const u8 *src; 4118 } michael_mic_failure; 4119 4120 /** 4121 * struct interface_status - Data for EVENT_INTERFACE_STATUS 4122 */ 4123 struct interface_status { 4124 char ifname[100]; 4125 enum { 4126 EVENT_INTERFACE_ADDED, EVENT_INTERFACE_REMOVED 4127 } ievent; 4128 } interface_status; 4129 4130 /** 4131 * struct pmkid_candidate - Data for EVENT_PMKID_CANDIDATE 4132 */ 4133 struct pmkid_candidate { 4134 /** BSSID of the PMKID candidate */ 4135 u8 bssid[ETH_ALEN]; 4136 /** Smaller the index, higher the priority */ 4137 int index; 4138 /** Whether RSN IE includes pre-authenticate flag */ 4139 int preauth; 4140 } pmkid_candidate; 4141 4142 /** 4143 * struct stkstart - Data for EVENT_STKSTART 4144 */ 4145 struct stkstart { 4146 u8 peer[ETH_ALEN]; 4147 } stkstart; 4148 4149 /** 4150 * struct tdls - Data for EVENT_TDLS 4151 */ 4152 struct tdls { 4153 u8 peer[ETH_ALEN]; 4154 enum { 4155 TDLS_REQUEST_SETUP, 4156 TDLS_REQUEST_TEARDOWN, 4157 TDLS_REQUEST_DISCOVER, 4158 } oper; 4159 u16 reason_code; /* for teardown */ 4160 } tdls; 4161 4162 /** 4163 * struct wnm - Data for EVENT_WNM 4164 */ 4165 struct wnm { 4166 u8 addr[ETH_ALEN]; 4167 enum { 4168 WNM_OPER_SLEEP, 4169 } oper; 4170 enum { 4171 WNM_SLEEP_ENTER, 4172 WNM_SLEEP_EXIT 4173 } sleep_action; 4174 int sleep_intval; 4175 u16 reason_code; 4176 u8 *buf; 4177 u16 buf_len; 4178 } wnm; 4179 4180 /** 4181 * struct ft_ies - FT information elements (EVENT_FT_RESPONSE) 4182 * 4183 * During FT (IEEE 802.11r) authentication sequence, the driver is 4184 * expected to use this event to report received FT IEs (MDIE, FTIE, 4185 * RSN IE, TIE, possible resource request) to the supplicant. The FT 4186 * IEs for the next message will be delivered through the 4187 * struct wpa_driver_ops::update_ft_ies() callback. 4188 */ 4189 struct ft_ies { 4190 const u8 *ies; 4191 size_t ies_len; 4192 int ft_action; 4193 u8 target_ap[ETH_ALEN]; 4194 /** Optional IE(s), e.g., WMM TSPEC(s), for RIC-Request */ 4195 const u8 *ric_ies; 4196 /** Length of ric_ies buffer in octets */ 4197 size_t ric_ies_len; 4198 } ft_ies; 4199 4200 /** 4201 * struct ibss_rsn_start - Data for EVENT_IBSS_RSN_START 4202 */ 4203 struct ibss_rsn_start { 4204 u8 peer[ETH_ALEN]; 4205 } ibss_rsn_start; 4206 4207 /** 4208 * struct auth_info - Data for EVENT_AUTH events 4209 */ 4210 struct auth_info { 4211 u8 peer[ETH_ALEN]; 4212 u8 bssid[ETH_ALEN]; 4213 u16 auth_type; 4214 u16 auth_transaction; 4215 u16 status_code; 4216 const u8 *ies; 4217 size_t ies_len; 4218 } auth; 4219 4220 /** 4221 * struct assoc_reject - Data for EVENT_ASSOC_REJECT events 4222 */ 4223 struct assoc_reject { 4224 /** 4225 * bssid - BSSID of the AP that rejected association 4226 */ 4227 const u8 *bssid; 4228 4229 /** 4230 * resp_ies - (Re)Association Response IEs 4231 * 4232 * Optional association data from the driver. This data is not 4233 * required WPA, but may be useful for some protocols and as 4234 * such, should be reported if this is available to the driver 4235 * interface. 4236 * 4237 * This should start with the first IE (fixed fields before IEs 4238 * are not included). 4239 */ 4240 const u8 *resp_ies; 4241 4242 /** 4243 * resp_ies_len - Length of resp_ies in bytes 4244 */ 4245 size_t resp_ies_len; 4246 4247 /** 4248 * status_code - Status Code from (Re)association Response 4249 */ 4250 u16 status_code; 4251 } assoc_reject; 4252 4253 struct timeout_event { 4254 u8 addr[ETH_ALEN]; 4255 } timeout_event; 4256 4257 /** 4258 * struct tx_status - Data for EVENT_TX_STATUS events 4259 */ 4260 struct tx_status { 4261 u16 type; 4262 u16 stype; 4263 const u8 *dst; 4264 const u8 *data; 4265 size_t data_len; 4266 int ack; 4267 } tx_status; 4268 4269 /** 4270 * struct rx_from_unknown - Data for EVENT_RX_FROM_UNKNOWN events 4271 */ 4272 struct rx_from_unknown { 4273 const u8 *bssid; 4274 const u8 *addr; 4275 int wds; 4276 } rx_from_unknown; 4277 4278 /** 4279 * struct rx_mgmt - Data for EVENT_RX_MGMT events 4280 */ 4281 struct rx_mgmt { 4282 const u8 *frame; 4283 size_t frame_len; 4284 u32 datarate; 4285 4286 /** 4287 * drv_priv - Pointer to store driver private BSS information 4288 * 4289 * If not set to NULL, this is used for comparison with 4290 * hostapd_data->drv_priv to determine which BSS should process 4291 * the frame. 4292 */ 4293 void *drv_priv; 4294 4295 /** 4296 * freq - Frequency (in MHz) on which the frame was received 4297 */ 4298 int freq; 4299 4300 /** 4301 * ssi_signal - Signal strength in dBm (or 0 if not available) 4302 */ 4303 int ssi_signal; 4304 } rx_mgmt; 4305 4306 /** 4307 * struct remain_on_channel - Data for EVENT_REMAIN_ON_CHANNEL events 4308 * 4309 * This is also used with EVENT_CANCEL_REMAIN_ON_CHANNEL events. 4310 */ 4311 struct remain_on_channel { 4312 /** 4313 * freq - Channel frequency in MHz 4314 */ 4315 unsigned int freq; 4316 4317 /** 4318 * duration - Duration to remain on the channel in milliseconds 4319 */ 4320 unsigned int duration; 4321 } remain_on_channel; 4322 4323 /** 4324 * struct scan_info - Optional data for EVENT_SCAN_RESULTS events 4325 * @aborted: Whether the scan was aborted 4326 * @freqs: Scanned frequencies in MHz (%NULL = all channels scanned) 4327 * @num_freqs: Number of entries in freqs array 4328 * @ssids: Scanned SSIDs (%NULL or zero-length SSID indicates wildcard 4329 * SSID) 4330 * @num_ssids: Number of entries in ssids array 4331 */ 4332 struct scan_info { 4333 int aborted; 4334 const int *freqs; 4335 size_t num_freqs; 4336 struct wpa_driver_scan_ssid ssids[WPAS_MAX_SCAN_SSIDS]; 4337 size_t num_ssids; 4338 } scan_info; 4339 4340 /** 4341 * struct rx_probe_req - Data for EVENT_RX_PROBE_REQ events 4342 */ 4343 struct rx_probe_req { 4344 /** 4345 * sa - Source address of the received Probe Request frame 4346 */ 4347 const u8 *sa; 4348 4349 /** 4350 * da - Destination address of the received Probe Request frame 4351 * or %NULL if not available 4352 */ 4353 const u8 *da; 4354 4355 /** 4356 * bssid - BSSID of the received Probe Request frame or %NULL 4357 * if not available 4358 */ 4359 const u8 *bssid; 4360 4361 /** 4362 * ie - IEs from the Probe Request body 4363 */ 4364 const u8 *ie; 4365 4366 /** 4367 * ie_len - Length of ie buffer in octets 4368 */ 4369 size_t ie_len; 4370 4371 /** 4372 * signal - signal strength in dBm (or 0 if not available) 4373 */ 4374 int ssi_signal; 4375 } rx_probe_req; 4376 4377 /** 4378 * struct new_sta - Data for EVENT_NEW_STA events 4379 */ 4380 struct new_sta { 4381 const u8 *addr; 4382 } new_sta; 4383 4384 /** 4385 * struct eapol_rx - Data for EVENT_EAPOL_RX events 4386 */ 4387 struct eapol_rx { 4388 const u8 *src; 4389 const u8 *data; 4390 size_t data_len; 4391 } eapol_rx; 4392 4393 /** 4394 * signal_change - Data for EVENT_SIGNAL_CHANGE events 4395 */ 4396 struct wpa_signal_info signal_change; 4397 4398 /** 4399 * struct best_channel - Data for EVENT_BEST_CHANNEL events 4400 * @freq_24: Best 2.4 GHz band channel frequency in MHz 4401 * @freq_5: Best 5 GHz band channel frequency in MHz 4402 * @freq_overall: Best channel frequency in MHz 4403 * 4404 * 0 can be used to indicate no preference in either band. 4405 */ 4406 struct best_channel { 4407 int freq_24; 4408 int freq_5; 4409 int freq_overall; 4410 } best_chan; 4411 4412 struct unprot_deauth { 4413 const u8 *sa; 4414 const u8 *da; 4415 u16 reason_code; 4416 } unprot_deauth; 4417 4418 struct unprot_disassoc { 4419 const u8 *sa; 4420 const u8 *da; 4421 u16 reason_code; 4422 } unprot_disassoc; 4423 4424 /** 4425 * struct low_ack - Data for EVENT_STATION_LOW_ACK events 4426 * @addr: station address 4427 */ 4428 struct low_ack { 4429 u8 addr[ETH_ALEN]; 4430 } low_ack; 4431 4432 /** 4433 * struct ibss_peer_lost - Data for EVENT_IBSS_PEER_LOST 4434 */ 4435 struct ibss_peer_lost { 4436 u8 peer[ETH_ALEN]; 4437 } ibss_peer_lost; 4438 4439 /** 4440 * struct driver_gtk_rekey - Data for EVENT_DRIVER_GTK_REKEY 4441 */ 4442 struct driver_gtk_rekey { 4443 const u8 *bssid; 4444 const u8 *replay_ctr; 4445 } driver_gtk_rekey; 4446 4447 /** 4448 * struct client_poll - Data for EVENT_DRIVER_CLIENT_POLL_OK events 4449 * @addr: station address 4450 */ 4451 struct client_poll { 4452 u8 addr[ETH_ALEN]; 4453 } client_poll; 4454 4455 /** 4456 * struct eapol_tx_status 4457 * @dst: Original destination 4458 * @data: Data starting with IEEE 802.1X header (!) 4459 * @data_len: Length of data 4460 * @ack: Indicates ack or lost frame 4461 * 4462 * This corresponds to hapd_send_eapol if the frame sent 4463 * there isn't just reported as EVENT_TX_STATUS. 4464 */ 4465 struct eapol_tx_status { 4466 const u8 *dst; 4467 const u8 *data; 4468 int data_len; 4469 int ack; 4470 } eapol_tx_status; 4471 4472 /** 4473 * struct ch_switch 4474 * @freq: Frequency of new channel in MHz 4475 * @ht_enabled: Whether this is an HT channel 4476 * @ch_offset: Secondary channel offset 4477 * @ch_width: Channel width 4478 * @cf1: Center frequency 1 4479 * @cf2: Center frequency 2 4480 */ 4481 struct ch_switch { 4482 int freq; 4483 int ht_enabled; 4484 int ch_offset; 4485 enum chan_width ch_width; 4486 int cf1; 4487 int cf2; 4488 } ch_switch; 4489 4490 /** 4491 * struct connect_failed - Data for EVENT_CONNECT_FAILED_REASON 4492 * @addr: Remote client address 4493 * @code: Reason code for connection failure 4494 */ 4495 struct connect_failed_reason { 4496 u8 addr[ETH_ALEN]; 4497 enum { 4498 MAX_CLIENT_REACHED, 4499 BLOCKED_CLIENT 4500 } code; 4501 } connect_failed_reason; 4502 4503 /** 4504 * struct dfs_event - Data for radar detected events 4505 * @freq: Frequency of the channel in MHz 4506 */ 4507 struct dfs_event { 4508 int freq; 4509 int ht_enabled; 4510 int chan_offset; 4511 enum chan_width chan_width; 4512 int cf1; 4513 int cf2; 4514 } dfs_event; 4515 4516 /** 4517 * survey_results - Survey result data for EVENT_SURVEY 4518 * @freq_filter: Requested frequency survey filter, 0 if request 4519 * was for all survey data 4520 * @survey_list: Linked list of survey data (struct freq_survey) 4521 */ 4522 struct survey_results { 4523 unsigned int freq_filter; 4524 struct dl_list survey_list; /* struct freq_survey */ 4525 } survey_results; 4526 4527 /** 4528 * channel_list_changed - Data for EVENT_CHANNEL_LIST_CHANGED 4529 * @initiator: Initiator of the regulatory change 4530 * @type: Regulatory change type 4531 * @alpha2: Country code (or "" if not available) 4532 */ 4533 struct channel_list_changed { 4534 enum reg_change_initiator initiator; 4535 enum reg_type type; 4536 char alpha2[3]; 4537 } channel_list_changed; 4538 4539 /** 4540 * freq_range - List of frequency ranges 4541 * 4542 * This is used as the data with EVENT_AVOID_FREQUENCIES. 4543 */ 4544 struct wpa_freq_range_list freq_range; 4545 4546 /** 4547 * struct mesh_peer 4548 * 4549 * @peer: Peer address 4550 * @ies: Beacon IEs 4551 * @ie_len: Length of @ies 4552 * 4553 * Notification of new candidate mesh peer. 4554 */ 4555 struct mesh_peer { 4556 const u8 *peer; 4557 const u8 *ies; 4558 size_t ie_len; 4559 } mesh_peer; 4560 4561 /** 4562 * struct acs_selected_channels - Data for EVENT_ACS_CHANNEL_SELECTED 4563 * @pri_channel: Selected primary channel 4564 * @sec_channel: Selected secondary channel 4565 * @vht_seg0_center_ch: VHT mode Segment0 center channel 4566 * @vht_seg1_center_ch: VHT mode Segment1 center channel 4567 * @ch_width: Selected Channel width by driver. Driver may choose to 4568 * change hostapd configured ACS channel width due driver internal 4569 * channel restrictions. 4570 * hw_mode: Selected band (used with hw_mode=any) 4571 */ 4572 struct acs_selected_channels { 4573 u8 pri_channel; 4574 u8 sec_channel; 4575 u8 vht_seg0_center_ch; 4576 u8 vht_seg1_center_ch; 4577 u16 ch_width; 4578 enum hostapd_hw_mode hw_mode; 4579 } acs_selected_channels; 4580 }; 4581 4582 /** 4583 * wpa_supplicant_event - Report a driver event for wpa_supplicant 4584 * @ctx: Context pointer (wpa_s); this is the ctx variable registered 4585 * with struct wpa_driver_ops::init() 4586 * @event: event type (defined above) 4587 * @data: possible extra data for the event 4588 * 4589 * Driver wrapper code should call this function whenever an event is received 4590 * from the driver. 4591 */ 4592 void wpa_supplicant_event(void *ctx, enum wpa_event_type event, 4593 union wpa_event_data *data); 4594 4595 4596 /* 4597 * The following inline functions are provided for convenience to simplify 4598 * event indication for some of the common events. 4599 */ 4600 4601 static inline void drv_event_assoc(void *ctx, const u8 *addr, const u8 *ie, 4602 size_t ielen, int reassoc) 4603 { 4604 union wpa_event_data event; 4605 os_memset(&event, 0, sizeof(event)); 4606 event.assoc_info.reassoc = reassoc; 4607 event.assoc_info.req_ies = ie; 4608 event.assoc_info.req_ies_len = ielen; 4609 event.assoc_info.addr = addr; 4610 wpa_supplicant_event(ctx, EVENT_ASSOC, &event); 4611 } 4612 4613 static inline void drv_event_disassoc(void *ctx, const u8 *addr) 4614 { 4615 union wpa_event_data event; 4616 os_memset(&event, 0, sizeof(event)); 4617 event.disassoc_info.addr = addr; 4618 wpa_supplicant_event(ctx, EVENT_DISASSOC, &event); 4619 } 4620 4621 static inline void drv_event_eapol_rx(void *ctx, const u8 *src, const u8 *data, 4622 size_t data_len) 4623 { 4624 union wpa_event_data event; 4625 os_memset(&event, 0, sizeof(event)); 4626 event.eapol_rx.src = src; 4627 event.eapol_rx.data = data; 4628 event.eapol_rx.data_len = data_len; 4629 wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event); 4630 } 4631 4632 /* driver_common.c */ 4633 void wpa_scan_results_free(struct wpa_scan_results *res); 4634 4635 /* Convert wpa_event_type to a string for logging */ 4636 const char * event_to_string(enum wpa_event_type event); 4637 4638 /* Convert chan_width to a string for logging and control interfaces */ 4639 const char * channel_width_to_string(enum chan_width width); 4640 4641 int ht_supported(const struct hostapd_hw_modes *mode); 4642 int vht_supported(const struct hostapd_hw_modes *mode); 4643 4644 struct wowlan_triggers * 4645 wpa_get_wowlan_triggers(const char *wowlan_triggers, 4646 const struct wpa_driver_capa *capa); 4647 4648 /* NULL terminated array of linked in driver wrappers */ 4649 extern const struct wpa_driver_ops *const wpa_drivers[]; 4650 4651 #endif /* DRIVER_H */ 4652