Add capability flag for IBSS and add get_capability modes
[mech_eap.git] / src / drivers / driver.h
1 /*
2  * Driver interface definition
3  * Copyright (c) 2003-2012, Jouni Malinen <j@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
24 #define HOSTAPD_CHAN_DISABLED 0x00000001
25 #define HOSTAPD_CHAN_PASSIVE_SCAN 0x00000002
26 #define HOSTAPD_CHAN_NO_IBSS 0x00000004
27 #define HOSTAPD_CHAN_RADAR 0x00000008
28 #define HOSTAPD_CHAN_HT40PLUS 0x00000010
29 #define HOSTAPD_CHAN_HT40MINUS 0x00000020
30 #define HOSTAPD_CHAN_HT40 0x00000040
31
32 /**
33  * struct hostapd_channel_data - Channel information
34  */
35 struct hostapd_channel_data {
36         /**
37          * chan - Channel number (IEEE 802.11)
38          */
39         short chan;
40
41         /**
42          * freq - Frequency in MHz
43          */
44         int freq;
45
46         /**
47          * flag - Channel flags (HOSTAPD_CHAN_*)
48          */
49         int flag;
50
51         /**
52          * max_tx_power - maximum transmit power in dBm
53          */
54         u8 max_tx_power;
55 };
56
57 #define HOSTAPD_MODE_FLAG_HT_INFO_KNOWN BIT(0)
58
59 /**
60  * struct hostapd_hw_modes - Supported hardware mode information
61  */
62 struct hostapd_hw_modes {
63         /**
64          * mode - Hardware mode
65          */
66         enum hostapd_hw_mode mode;
67
68         /**
69          * num_channels - Number of entries in the channels array
70          */
71         int num_channels;
72
73         /**
74          * channels - Array of supported channels
75          */
76         struct hostapd_channel_data *channels;
77
78         /**
79          * num_rates - Number of entries in the rates array
80          */
81         int num_rates;
82
83         /**
84          * rates - Array of supported rates in 100 kbps units
85          */
86         int *rates;
87
88         /**
89          * ht_capab - HT (IEEE 802.11n) capabilities
90          */
91         u16 ht_capab;
92
93         /**
94          * mcs_set - MCS (IEEE 802.11n) rate parameters
95          */
96         u8 mcs_set[16];
97
98         /**
99          * a_mpdu_params - A-MPDU (IEEE 802.11n) parameters
100          */
101         u8 a_mpdu_params;
102
103         /**
104          * vht_capab - VHT (IEEE 802.11ac) capabilities
105          */
106         u32 vht_capab;
107
108         /**
109          * vht_mcs_set - VHT MCS (IEEE 802.11ac) rate parameters
110          */
111         u8 vht_mcs_set[8];
112
113         unsigned int flags; /* HOSTAPD_MODE_FLAG_* */
114 };
115
116
117 #define IEEE80211_MODE_INFRA    0
118 #define IEEE80211_MODE_IBSS     1
119 #define IEEE80211_MODE_AP       2
120
121 #define IEEE80211_CAP_ESS       0x0001
122 #define IEEE80211_CAP_IBSS      0x0002
123 #define IEEE80211_CAP_PRIVACY   0x0010
124
125 /* DMG (60 GHz) IEEE 802.11ad */
126 /* type - bits 0..1 */
127 #define IEEE80211_CAP_DMG_MASK  0x0003
128 #define IEEE80211_CAP_DMG_IBSS  0x0001 /* Tx by: STA */
129 #define IEEE80211_CAP_DMG_PBSS  0x0002 /* Tx by: PCP */
130 #define IEEE80211_CAP_DMG_AP    0x0003 /* Tx by: AP */
131
132 #define WPA_SCAN_QUAL_INVALID           BIT(0)
133 #define WPA_SCAN_NOISE_INVALID          BIT(1)
134 #define WPA_SCAN_LEVEL_INVALID          BIT(2)
135 #define WPA_SCAN_LEVEL_DBM              BIT(3)
136 #define WPA_SCAN_AUTHENTICATED          BIT(4)
137 #define WPA_SCAN_ASSOCIATED             BIT(5)
138
139 /**
140  * struct wpa_scan_res - Scan result for an BSS/IBSS
141  * @flags: information flags about the BSS/IBSS (WPA_SCAN_*)
142  * @bssid: BSSID
143  * @freq: frequency of the channel in MHz (e.g., 2412 = channel 1)
144  * @beacon_int: beacon interval in TUs (host byte order)
145  * @caps: capability information field in host byte order
146  * @qual: signal quality
147  * @noise: noise level
148  * @level: signal level
149  * @tsf: Timestamp
150  * @age: Age of the information in milliseconds (i.e., how many milliseconds
151  * ago the last Beacon or Probe Response frame was received)
152  * @ie_len: length of the following IE field in octets
153  * @beacon_ie_len: length of the following Beacon IE field in octets
154  *
155  * This structure is used as a generic format for scan results from the
156  * driver. Each driver interface implementation is responsible for converting
157  * the driver or OS specific scan results into this format.
158  *
159  * If the driver does not support reporting all IEs, the IE data structure is
160  * constructed of the IEs that are available. This field will also need to
161  * include SSID in IE format. All drivers are encouraged to be extended to
162  * report all IEs to make it easier to support future additions.
163  */
164 struct wpa_scan_res {
165         unsigned int flags;
166         u8 bssid[ETH_ALEN];
167         int freq;
168         u16 beacon_int;
169         u16 caps;
170         int qual;
171         int noise;
172         int level;
173         u64 tsf;
174         unsigned int age;
175         size_t ie_len;
176         size_t beacon_ie_len;
177         /*
178          * Followed by ie_len octets of IEs from Probe Response frame (or if
179          * the driver does not indicate source of IEs, these may also be from
180          * Beacon frame). After the first set of IEs, another set of IEs may
181          * follow (with beacon_ie_len octets of data) if the driver provides
182          * both IE sets.
183          */
184 };
185
186 /**
187  * struct wpa_scan_results - Scan results
188  * @res: Array of pointers to allocated variable length scan result entries
189  * @num: Number of entries in the scan result array
190  * @fetch_time: Time when the results were fetched from the driver
191  */
192 struct wpa_scan_results {
193         struct wpa_scan_res **res;
194         size_t num;
195         struct os_time fetch_time;
196 };
197
198 /**
199  * struct wpa_interface_info - Network interface information
200  * @next: Pointer to the next interface or NULL if this is the last one
201  * @ifname: Interface name that can be used with init() or init2()
202  * @desc: Human readable adapter description (e.g., vendor/model) or NULL if
203  *      not available
204  * @drv_name: struct wpa_driver_ops::name (note: unlike other strings, this one
205  *      is not an allocated copy, i.e., get_interfaces() caller will not free
206  *      this)
207  */
208 struct wpa_interface_info {
209         struct wpa_interface_info *next;
210         char *ifname;
211         char *desc;
212         const char *drv_name;
213 };
214
215 #define WPAS_MAX_SCAN_SSIDS 16
216
217 /**
218  * struct wpa_driver_scan_params - Scan parameters
219  * Data for struct wpa_driver_ops::scan2().
220  */
221 struct wpa_driver_scan_params {
222         /**
223          * ssids - SSIDs to scan for
224          */
225         struct wpa_driver_scan_ssid {
226                 /**
227                  * ssid - specific SSID to scan for (ProbeReq)
228                  * %NULL or zero-length SSID is used to indicate active scan
229                  * with wildcard SSID.
230                  */
231                 const u8 *ssid;
232                 /**
233                  * ssid_len: Length of the SSID in octets
234                  */
235                 size_t ssid_len;
236         } ssids[WPAS_MAX_SCAN_SSIDS];
237
238         /**
239          * num_ssids - Number of entries in ssids array
240          * Zero indicates a request for a passive scan.
241          */
242         size_t num_ssids;
243
244         /**
245          * extra_ies - Extra IE(s) to add into Probe Request or %NULL
246          */
247         const u8 *extra_ies;
248
249         /**
250          * extra_ies_len - Length of extra_ies in octets
251          */
252         size_t extra_ies_len;
253
254         /**
255          * freqs - Array of frequencies to scan or %NULL for all frequencies
256          *
257          * The frequency is set in MHz. The array is zero-terminated.
258          */
259         int *freqs;
260
261         /**
262          * filter_ssids - Filter for reporting SSIDs
263          *
264          * This optional parameter can be used to request the driver wrapper to
265          * filter scan results to include only the specified SSIDs. %NULL
266          * indicates that no filtering is to be done. This can be used to
267          * reduce memory needs for scan results in environments that have large
268          * number of APs with different SSIDs.
269          *
270          * The driver wrapper is allowed to take this allocated buffer into its
271          * own use by setting the pointer to %NULL. In that case, the driver
272          * wrapper is responsible for freeing the buffer with os_free() once it
273          * is not needed anymore.
274          */
275         struct wpa_driver_scan_filter {
276                 u8 ssid[32];
277                 size_t ssid_len;
278         } *filter_ssids;
279
280         /**
281          * num_filter_ssids - Number of entries in filter_ssids array
282          */
283         size_t num_filter_ssids;
284
285         /**
286          * filter_rssi - Filter by RSSI
287          *
288          * The driver may filter scan results in firmware to reduce host
289          * wakeups and thereby save power. Specify the RSSI threshold in s32
290          * dBm.
291          */
292         s32 filter_rssi;
293
294         /**
295          * p2p_probe - Used to disable CCK (802.11b) rates for P2P probes
296          *
297          * When set, the driver is expected to remove rates 1, 2, 5.5, and 11
298          * Mbps from the support rates element(s) in the Probe Request frames
299          * and not to transmit the frames at any of those rates.
300          */
301         u8 p2p_probe;
302 };
303
304 /**
305  * struct wpa_driver_auth_params - Authentication parameters
306  * Data for struct wpa_driver_ops::authenticate().
307  */
308 struct wpa_driver_auth_params {
309         int freq;
310         const u8 *bssid;
311         const u8 *ssid;
312         size_t ssid_len;
313         int auth_alg;
314         const u8 *ie;
315         size_t ie_len;
316         const u8 *wep_key[4];
317         size_t wep_key_len[4];
318         int wep_tx_keyidx;
319         int local_state_change;
320
321         /**
322          * p2p - Whether this connection is a P2P group
323          */
324         int p2p;
325
326         const u8 *sae_data;
327         size_t sae_data_len;
328
329 };
330
331 enum wps_mode {
332         WPS_MODE_NONE /* no WPS provisioning being used */,
333         WPS_MODE_OPEN /* WPS provisioning with AP that is in open mode */,
334         WPS_MODE_PRIVACY /* WPS provisioning with AP that is using protection
335                           */
336 };
337
338 /**
339  * struct wpa_driver_associate_params - Association parameters
340  * Data for struct wpa_driver_ops::associate().
341  */
342 struct wpa_driver_associate_params {
343         /**
344          * bssid - BSSID of the selected AP
345          * This can be %NULL, if ap_scan=2 mode is used and the driver is
346          * responsible for selecting with which BSS to associate. */
347         const u8 *bssid;
348
349         /**
350          * ssid - The selected SSID
351          */
352         const u8 *ssid;
353
354         /**
355          * ssid_len - Length of the SSID (1..32)
356          */
357         size_t ssid_len;
358
359         /**
360          * freq - Frequency of the channel the selected AP is using
361          * Frequency that the selected AP is using (in MHz as
362          * reported in the scan results)
363          */
364         int freq;
365
366         /**
367          * bg_scan_period - Background scan period in seconds, 0 to disable
368          * background scan, or -1 to indicate no change to default driver
369          * configuration
370          */
371         int bg_scan_period;
372
373         /**
374          * wpa_ie - WPA information element for (Re)Association Request
375          * WPA information element to be included in (Re)Association
376          * Request (including information element id and length). Use
377          * of this WPA IE is optional. If the driver generates the WPA
378          * IE, it can use pairwise_suite, group_suite, and
379          * key_mgmt_suite to select proper algorithms. In this case,
380          * the driver has to notify wpa_supplicant about the used WPA
381          * IE by generating an event that the interface code will
382          * convert into EVENT_ASSOCINFO data (see below).
383          *
384          * When using WPA2/IEEE 802.11i, wpa_ie is used for RSN IE
385          * instead. The driver can determine which version is used by
386          * looking at the first byte of the IE (0xdd for WPA, 0x30 for
387          * WPA2/RSN).
388          *
389          * When using WPS, wpa_ie is used for WPS IE instead of WPA/RSN IE.
390          */
391         const u8 *wpa_ie;
392
393         /**
394          * wpa_ie_len - length of the wpa_ie
395          */
396         size_t wpa_ie_len;
397
398         /**
399          * wpa_proto - Bitfield of WPA_PROTO_* values to indicate WPA/WPA2
400          */
401         unsigned int wpa_proto;
402
403         /**
404          * pairwise_suite - Selected pairwise cipher suite
405          *
406          * This is usually ignored if @wpa_ie is used.
407          */
408         enum wpa_cipher pairwise_suite;
409
410         /**
411          * group_suite - Selected group cipher suite
412          *
413          * This is usually ignored if @wpa_ie is used.
414          */
415         enum wpa_cipher group_suite;
416
417         /**
418          * key_mgmt_suite - Selected key management suite
419          *
420          * This is usually ignored if @wpa_ie is used.
421          */
422         enum wpa_key_mgmt key_mgmt_suite;
423
424         /**
425          * auth_alg - Allowed authentication algorithms
426          * Bit field of WPA_AUTH_ALG_*
427          */
428         int auth_alg;
429
430         /**
431          * mode - Operation mode (infra/ibss) IEEE80211_MODE_*
432          */
433         int mode;
434
435         /**
436          * wep_key - WEP keys for static WEP configuration
437          */
438         const u8 *wep_key[4];
439
440         /**
441          * wep_key_len - WEP key length for static WEP configuration
442          */
443         size_t wep_key_len[4];
444
445         /**
446          * wep_tx_keyidx - WEP TX key index for static WEP configuration
447          */
448         int wep_tx_keyidx;
449
450         /**
451          * mgmt_frame_protection - IEEE 802.11w management frame protection
452          */
453         enum mfp_options mgmt_frame_protection;
454
455         /**
456          * ft_ies - IEEE 802.11r / FT information elements
457          * If the supplicant is using IEEE 802.11r (FT) and has the needed keys
458          * for fast transition, this parameter is set to include the IEs that
459          * are to be sent in the next FT Authentication Request message.
460          * update_ft_ies() handler is called to update the IEs for further
461          * FT messages in the sequence.
462          *
463          * The driver should use these IEs only if the target AP is advertising
464          * the same mobility domain as the one included in the MDIE here.
465          *
466          * In ap_scan=2 mode, the driver can use these IEs when moving to a new
467          * AP after the initial association. These IEs can only be used if the
468          * target AP is advertising support for FT and is using the same MDIE
469          * and SSID as the current AP.
470          *
471          * The driver is responsible for reporting the FT IEs received from the
472          * AP's response using wpa_supplicant_event() with EVENT_FT_RESPONSE
473          * type. update_ft_ies() handler will then be called with the FT IEs to
474          * include in the next frame in the authentication sequence.
475          */
476         const u8 *ft_ies;
477
478         /**
479          * ft_ies_len - Length of ft_ies in bytes
480          */
481         size_t ft_ies_len;
482
483         /**
484          * ft_md - FT Mobility domain (6 octets) (also included inside ft_ies)
485          *
486          * This value is provided to allow the driver interface easier access
487          * to the current mobility domain. This value is set to %NULL if no
488          * mobility domain is currently active.
489          */
490         const u8 *ft_md;
491
492         /**
493          * passphrase - RSN passphrase for PSK
494          *
495          * This value is made available only for WPA/WPA2-Personal (PSK) and
496          * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is
497          * the 8..63 character ASCII passphrase, if available. Please note that
498          * this can be %NULL if passphrase was not used to generate the PSK. In
499          * that case, the psk field must be used to fetch the PSK.
500          */
501         const char *passphrase;
502
503         /**
504          * psk - RSN PSK (alternative for passphrase for PSK)
505          *
506          * This value is made available only for WPA/WPA2-Personal (PSK) and
507          * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is
508          * the 32-octet (256-bit) PSK, if available. The driver wrapper should
509          * be prepared to handle %NULL value as an error.
510          */
511         const u8 *psk;
512
513         /**
514          * drop_unencrypted - Enable/disable unencrypted frame filtering
515          *
516          * Configure the driver to drop all non-EAPOL frames (both receive and
517          * transmit paths). Unencrypted EAPOL frames (ethertype 0x888e) must
518          * still be allowed for key negotiation.
519          */
520         int drop_unencrypted;
521
522         /**
523          * prev_bssid - Previously used BSSID in this ESS
524          *
525          * When not %NULL, this is a request to use reassociation instead of
526          * association.
527          */
528         const u8 *prev_bssid;
529
530         /**
531          * wps - WPS mode
532          *
533          * If the driver needs to do special configuration for WPS association,
534          * this variable provides more information on what type of association
535          * is being requested. Most drivers should not need ot use this.
536          */
537         enum wps_mode wps;
538
539         /**
540          * p2p - Whether this connection is a P2P group
541          */
542         int p2p;
543
544         /**
545          * uapsd - UAPSD parameters for the network
546          * -1 = do not change defaults
547          * AP mode: 1 = enabled, 0 = disabled
548          * STA mode: bits 0..3 UAPSD enabled for VO,VI,BK,BE
549          */
550         int uapsd;
551
552         /**
553          * fixed_bssid - Whether to force this BSSID in IBSS mode
554          * 1 = Fix this BSSID and prevent merges.
555          * 0 = Do not fix BSSID.
556          */
557         int fixed_bssid;
558
559         /**
560          * disable_ht - Disable HT (IEEE 802.11n) for this connection
561          */
562         int disable_ht;
563
564         /**
565          * HT Capabilities over-rides. Only bits set in the mask will be used,
566          * and not all values are used by the kernel anyway. Currently, MCS,
567          * MPDU and MSDU fields are used.
568          */
569         const u8 *htcaps;       /* struct ieee80211_ht_capabilities * */
570         const u8 *htcaps_mask;  /* struct ieee80211_ht_capabilities * */
571
572 #ifdef CONFIG_VHT_OVERRIDES
573         /**
574          * disable_vht - Disable VHT for this connection
575          */
576         int disable_vht;
577
578         /**
579          * VHT capability overrides.
580          */
581         const struct ieee80211_vht_capabilities *vhtcaps;
582         const struct ieee80211_vht_capabilities *vhtcaps_mask;
583 #endif /* CONFIG_VHT_OVERRIDES */
584 };
585
586 enum hide_ssid {
587         NO_SSID_HIDING,
588         HIDDEN_SSID_ZERO_LEN,
589         HIDDEN_SSID_ZERO_CONTENTS
590 };
591
592 struct wpa_driver_ap_params {
593         /**
594          * head - Beacon head from IEEE 802.11 header to IEs before TIM IE
595          */
596         const u8 *head;
597
598         /**
599          * head_len - Length of the head buffer in octets
600          */
601         size_t head_len;
602
603         /**
604          * tail - Beacon tail following TIM IE
605          */
606         const u8 *tail;
607
608         /**
609          * tail_len - Length of the tail buffer in octets
610          */
611         size_t tail_len;
612
613         /**
614          * dtim_period - DTIM period
615          */
616         int dtim_period;
617
618         /**
619          * beacon_int - Beacon interval
620          */
621         int beacon_int;
622
623         /**
624          * basic_rates: -1 terminated array of basic rates in 100 kbps
625          *
626          * This parameter can be used to set a specific basic rate set for the
627          * BSS. If %NULL, default basic rate set is used.
628          */
629         int *basic_rates;
630
631         /**
632          * proberesp - Probe Response template
633          *
634          * This is used by drivers that reply to Probe Requests internally in
635          * AP mode and require the full Probe Response template.
636          */
637         const u8 *proberesp;
638
639         /**
640          * proberesp_len - Length of the proberesp buffer in octets
641          */
642         size_t proberesp_len;
643
644         /**
645          * ssid - The SSID to use in Beacon/Probe Response frames
646          */
647         const u8 *ssid;
648
649         /**
650          * ssid_len - Length of the SSID (1..32)
651          */
652         size_t ssid_len;
653
654         /**
655          * hide_ssid - Whether to hide the SSID
656          */
657         enum hide_ssid hide_ssid;
658
659         /**
660          * pairwise_ciphers - WPA_CIPHER_* bitfield
661          */
662         unsigned int pairwise_ciphers;
663
664         /**
665          * group_cipher - WPA_CIPHER_*
666          */
667         unsigned int group_cipher;
668
669         /**
670          * key_mgmt_suites - WPA_KEY_MGMT_* bitfield
671          */
672         unsigned int key_mgmt_suites;
673
674         /**
675          * auth_algs - WPA_AUTH_ALG_* bitfield
676          */
677         unsigned int auth_algs;
678
679         /**
680          * wpa_version - WPA_PROTO_* bitfield
681          */
682         unsigned int wpa_version;
683
684         /**
685          * privacy - Whether privacy is used in the BSS
686          */
687         int privacy;
688
689         /**
690          * beacon_ies - WPS/P2P IE(s) for Beacon frames
691          *
692          * This is used to add IEs like WPS IE and P2P IE by drivers that do
693          * not use the full Beacon template.
694          */
695         const struct wpabuf *beacon_ies;
696
697         /**
698          * proberesp_ies - P2P/WPS IE(s) for Probe Response frames
699          *
700          * This is used to add IEs like WPS IE and P2P IE by drivers that
701          * reply to Probe Request frames internally.
702          */
703         const struct wpabuf *proberesp_ies;
704
705         /**
706          * assocresp_ies - WPS IE(s) for (Re)Association Response frames
707          *
708          * This is used to add IEs like WPS IE by drivers that reply to
709          * (Re)Association Request frames internally.
710          */
711         const struct wpabuf *assocresp_ies;
712
713         /**
714          * isolate - Whether to isolate frames between associated stations
715          *
716          * If this is non-zero, the AP is requested to disable forwarding of
717          * frames between associated stations.
718          */
719         int isolate;
720
721         /**
722          * cts_protect - Whether CTS protection is enabled
723          */
724         int cts_protect;
725
726         /**
727          * preamble - Whether short preamble is enabled
728          */
729         int preamble;
730
731         /**
732          * short_slot_time - Whether short slot time is enabled
733          *
734          * 0 = short slot time disable, 1 = short slot time enabled, -1 = do
735          * not set (e.g., when 802.11g mode is not in use)
736          */
737         int short_slot_time;
738
739         /**
740          * ht_opmode - HT operation mode or -1 if HT not in use
741          */
742         int ht_opmode;
743
744         /**
745          * interworking - Whether Interworking is enabled
746          */
747         int interworking;
748
749         /**
750          * hessid - Homogeneous ESS identifier or %NULL if not set
751          */
752         const u8 *hessid;
753
754         /**
755          * access_network_type - Access Network Type (0..15)
756          *
757          * This is used for filtering Probe Request frames when Interworking is
758          * enabled.
759          */
760         u8 access_network_type;
761
762         /**
763          * ap_max_inactivity - Timeout in seconds to detect STA's inactivity
764          *
765          * This is used by driver which advertises this capability.
766          */
767         int ap_max_inactivity;
768
769         /**
770          * disable_dgaf - Whether group-addressed frames are disabled
771          */
772         int disable_dgaf;
773 };
774
775 /**
776  * struct wpa_driver_capa - Driver capability information
777  */
778 struct wpa_driver_capa {
779 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA            0x00000001
780 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2           0x00000002
781 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK        0x00000004
782 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK       0x00000008
783 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE       0x00000010
784 #define WPA_DRIVER_CAPA_KEY_MGMT_FT             0x00000020
785 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_PSK         0x00000040
786 #define WPA_DRIVER_CAPA_KEY_MGMT_WAPI_PSK       0x00000080
787         unsigned int key_mgmt;
788
789 #define WPA_DRIVER_CAPA_ENC_WEP40       0x00000001
790 #define WPA_DRIVER_CAPA_ENC_WEP104      0x00000002
791 #define WPA_DRIVER_CAPA_ENC_TKIP        0x00000004
792 #define WPA_DRIVER_CAPA_ENC_CCMP        0x00000008
793 #define WPA_DRIVER_CAPA_ENC_WEP128      0x00000010
794 #define WPA_DRIVER_CAPA_ENC_GCMP        0x00000020
795         unsigned int enc;
796
797 #define WPA_DRIVER_AUTH_OPEN            0x00000001
798 #define WPA_DRIVER_AUTH_SHARED          0x00000002
799 #define WPA_DRIVER_AUTH_LEAP            0x00000004
800         unsigned int auth;
801
802 /* Driver generated WPA/RSN IE */
803 #define WPA_DRIVER_FLAGS_DRIVER_IE      0x00000001
804 /* Driver needs static WEP key setup after association command */
805 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC 0x00000002
806 /* unused: 0x00000004 */
807 /* Driver takes care of RSN 4-way handshake internally; PMK is configured with
808  * struct wpa_driver_ops::set_key using alg = WPA_ALG_PMK */
809 #define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE 0x00000008
810 #define WPA_DRIVER_FLAGS_WIRED          0x00000010
811 /* Driver provides separate commands for authentication and association (SME in
812  * wpa_supplicant). */
813 #define WPA_DRIVER_FLAGS_SME            0x00000020
814 /* Driver supports AP mode */
815 #define WPA_DRIVER_FLAGS_AP             0x00000040
816 /* Driver needs static WEP key setup after association has been completed */
817 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE      0x00000080
818 /* Driver takes care of P2P management operations */
819 #define WPA_DRIVER_FLAGS_P2P_MGMT       0x00000100
820 /* Driver supports concurrent P2P operations */
821 #define WPA_DRIVER_FLAGS_P2P_CONCURRENT 0x00000200
822 /*
823  * Driver uses the initial interface as a dedicated management interface, i.e.,
824  * it cannot be used for P2P group operations or non-P2P purposes.
825  */
826 #define WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE        0x00000400
827 /* This interface is P2P capable (P2P Device, GO, or P2P Client */
828 #define WPA_DRIVER_FLAGS_P2P_CAPABLE    0x00000800
829 /* Driver supports concurrent operations on multiple channels */
830 #define WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT       0x00001000
831 /*
832  * Driver uses the initial interface for P2P management interface and non-P2P
833  * purposes (e.g., connect to infra AP), but this interface cannot be used for
834  * P2P group operations.
835  */
836 #define WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P           0x00002000
837 /*
838  * Driver is known to use sane error codes, i.e., when it indicates that
839  * something (e.g., association) fails, there was indeed a failure and the
840  * operation does not end up getting completed successfully later.
841  */
842 #define WPA_DRIVER_FLAGS_SANE_ERROR_CODES               0x00004000
843 /* Driver supports off-channel TX */
844 #define WPA_DRIVER_FLAGS_OFFCHANNEL_TX                  0x00008000
845 /* Driver indicates TX status events for EAPOL Data frames */
846 #define WPA_DRIVER_FLAGS_EAPOL_TX_STATUS                0x00010000
847 /* Driver indicates TX status events for Deauth/Disassoc frames */
848 #define WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS               0x00020000
849 /* Driver supports roaming (BSS selection) in firmware */
850 #define WPA_DRIVER_FLAGS_BSS_SELECTION                  0x00040000
851 /* Driver supports operating as a TDLS peer */
852 #define WPA_DRIVER_FLAGS_TDLS_SUPPORT                   0x00080000
853 /* Driver requires external TDLS setup/teardown/discovery */
854 #define WPA_DRIVER_FLAGS_TDLS_EXTERNAL_SETUP            0x00100000
855 /* Driver indicates support for Probe Response offloading in AP mode */
856 #define WPA_DRIVER_FLAGS_PROBE_RESP_OFFLOAD             0x00200000
857 /* Driver supports U-APSD in AP mode */
858 #define WPA_DRIVER_FLAGS_AP_UAPSD                       0x00400000
859 /* Driver supports inactivity timer in AP mode */
860 #define WPA_DRIVER_FLAGS_INACTIVITY_TIMER               0x00800000
861 /* Driver expects user space implementation of MLME in AP mode */
862 #define WPA_DRIVER_FLAGS_AP_MLME                        0x01000000
863 /* Driver supports SAE with user space SME */
864 #define WPA_DRIVER_FLAGS_SAE                            0x02000000
865 /* Driver makes use of OBSS scan mechanism in wpa_supplicant */
866 #define WPA_DRIVER_FLAGS_OBSS_SCAN                      0x04000000
867 /* Driver supports IBSS (Ad-hoc) mode */
868 #define WPA_DRIVER_FLAGS_IBSS                           0x08000000
869         unsigned int flags;
870
871         int max_scan_ssids;
872         int max_sched_scan_ssids;
873         int sched_scan_supported;
874         int max_match_sets;
875
876         /**
877          * max_remain_on_chan - Maximum remain-on-channel duration in msec
878          */
879         unsigned int max_remain_on_chan;
880
881         /**
882          * max_stations - Maximum number of associated stations the driver
883          * supports in AP mode
884          */
885         unsigned int max_stations;
886
887         /**
888          * probe_resp_offloads - Bitmap of supported protocols by the driver
889          * for Probe Response offloading.
890          */
891 /* Driver Probe Response offloading support for WPS ver. 1 */
892 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_WPS               0x00000001
893 /* Driver Probe Response offloading support for WPS ver. 2 */
894 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_WPS2              0x00000002
895 /* Driver Probe Response offloading support for P2P */
896 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_P2P               0x00000004
897 /* Driver Probe Response offloading support for IEEE 802.11u (Interworking) */
898 #define WPA_DRIVER_PROBE_RESP_OFFLOAD_INTERWORKING      0x00000008
899         unsigned int probe_resp_offloads;
900 };
901
902
903 struct hostapd_data;
904
905 struct hostap_sta_driver_data {
906         unsigned long rx_packets, tx_packets, rx_bytes, tx_bytes;
907         unsigned long current_tx_rate;
908         unsigned long inactive_msec;
909         unsigned long flags;
910         unsigned long num_ps_buf_frames;
911         unsigned long tx_retry_failed;
912         unsigned long tx_retry_count;
913         int last_rssi;
914         int last_ack_rssi;
915 };
916
917 struct hostapd_sta_add_params {
918         const u8 *addr;
919         u16 aid;
920         u16 capability;
921         const u8 *supp_rates;
922         size_t supp_rates_len;
923         u16 listen_interval;
924         const struct ieee80211_ht_capabilities *ht_capabilities;
925         const struct ieee80211_vht_capabilities *vht_capabilities;
926         u32 flags; /* bitmask of WPA_STA_* flags */
927         int set; /* Set STA parameters instead of add */
928         u8 qosinfo;
929         const u8 *ext_capab;
930         size_t ext_capab_len;
931 };
932
933 struct hostapd_freq_params {
934         int mode;
935         int freq;
936         int channel;
937         /* for HT */
938         int ht_enabled;
939         int sec_channel_offset; /* 0 = HT40 disabled, -1 = HT40 enabled,
940                                  * secondary channel below primary, 1 = HT40
941                                  * enabled, secondary channel above primary */
942
943         /* for VHT */
944         int vht_enabled;
945
946         /* valid for both HT and VHT, center_freq2 is non-zero
947          * only for bandwidth 80 and an 80+80 channel */
948         int center_freq1, center_freq2;
949         int bandwidth;
950 };
951
952 enum wpa_driver_if_type {
953         /**
954          * WPA_IF_STATION - Station mode interface
955          */
956         WPA_IF_STATION,
957
958         /**
959          * WPA_IF_AP_VLAN - AP mode VLAN interface
960          *
961          * This interface shares its address and Beacon frame with the main
962          * BSS.
963          */
964         WPA_IF_AP_VLAN,
965
966         /**
967          * WPA_IF_AP_BSS - AP mode BSS interface
968          *
969          * This interface has its own address and Beacon frame.
970          */
971         WPA_IF_AP_BSS,
972
973         /**
974          * WPA_IF_P2P_GO - P2P Group Owner
975          */
976         WPA_IF_P2P_GO,
977
978         /**
979          * WPA_IF_P2P_CLIENT - P2P Client
980          */
981         WPA_IF_P2P_CLIENT,
982
983         /**
984          * WPA_IF_P2P_GROUP - P2P Group interface (will become either
985          * WPA_IF_P2P_GO or WPA_IF_P2P_CLIENT, but the role is not yet known)
986          */
987         WPA_IF_P2P_GROUP
988 };
989
990 struct wpa_init_params {
991         void *global_priv;
992         const u8 *bssid;
993         const char *ifname;
994         const u8 *ssid;
995         size_t ssid_len;
996         const char *test_socket;
997         int use_pae_group_addr;
998         char **bridge;
999         size_t num_bridge;
1000
1001         u8 *own_addr; /* buffer for writing own MAC address */
1002 };
1003
1004
1005 struct wpa_bss_params {
1006         /** Interface name (for multi-SSID/VLAN support) */
1007         const char *ifname;
1008         /** Whether IEEE 802.1X or WPA/WPA2 is enabled */
1009         int enabled;
1010
1011         int wpa;
1012         int ieee802_1x;
1013         int wpa_group;
1014         int wpa_pairwise;
1015         int wpa_key_mgmt;
1016         int rsn_preauth;
1017         enum mfp_options ieee80211w;
1018 };
1019
1020 #define WPA_STA_AUTHORIZED BIT(0)
1021 #define WPA_STA_WMM BIT(1)
1022 #define WPA_STA_SHORT_PREAMBLE BIT(2)
1023 #define WPA_STA_MFP BIT(3)
1024 #define WPA_STA_TDLS_PEER BIT(4)
1025
1026 /**
1027  * struct p2p_params - P2P parameters for driver-based P2P management
1028  */
1029 struct p2p_params {
1030         const char *dev_name;
1031         u8 pri_dev_type[8];
1032 #define DRV_MAX_SEC_DEV_TYPES 5
1033         u8 sec_dev_type[DRV_MAX_SEC_DEV_TYPES][8];
1034         size_t num_sec_dev_types;
1035 };
1036
1037 enum tdls_oper {
1038         TDLS_DISCOVERY_REQ,
1039         TDLS_SETUP,
1040         TDLS_TEARDOWN,
1041         TDLS_ENABLE_LINK,
1042         TDLS_DISABLE_LINK,
1043         TDLS_ENABLE,
1044         TDLS_DISABLE
1045 };
1046
1047 enum wnm_oper {
1048         WNM_SLEEP_ENTER_CONFIRM,
1049         WNM_SLEEP_ENTER_FAIL,
1050         WNM_SLEEP_EXIT_CONFIRM,
1051         WNM_SLEEP_EXIT_FAIL,
1052         WNM_SLEEP_TFS_REQ_IE_ADD,   /* STA requests driver to add TFS req IE */
1053         WNM_SLEEP_TFS_REQ_IE_NONE,  /* STA requests empty TFS req IE */
1054         WNM_SLEEP_TFS_REQ_IE_SET,   /* AP requests driver to set TFS req IE for
1055                                      * a STA */
1056         WNM_SLEEP_TFS_RESP_IE_ADD,  /* AP requests driver to add TFS resp IE
1057                                      * for a STA */
1058         WNM_SLEEP_TFS_RESP_IE_NONE, /* AP requests empty TFS resp IE */
1059         WNM_SLEEP_TFS_RESP_IE_SET,  /* AP requests driver to set TFS resp IE
1060                                      * for a STA */
1061         WNM_SLEEP_TFS_IE_DEL        /* AP delete the TFS IE */
1062 };
1063
1064 /**
1065  * struct wpa_signal_info - Information about channel signal quality
1066  */
1067 struct wpa_signal_info {
1068         u32 frequency;
1069         int above_threshold;
1070         int current_signal;
1071         int current_noise;
1072         int current_txrate;
1073 };
1074
1075 /**
1076  * struct wpa_driver_ops - Driver interface API definition
1077  *
1078  * This structure defines the API that each driver interface needs to implement
1079  * for core wpa_supplicant code. All driver specific functionality is captured
1080  * in this wrapper.
1081  */
1082 struct wpa_driver_ops {
1083         /** Name of the driver interface */
1084         const char *name;
1085         /** One line description of the driver interface */
1086         const char *desc;
1087
1088         /**
1089          * get_bssid - Get the current BSSID
1090          * @priv: private driver interface data
1091          * @bssid: buffer for BSSID (ETH_ALEN = 6 bytes)
1092          *
1093          * Returns: 0 on success, -1 on failure
1094          *
1095          * Query kernel driver for the current BSSID and copy it to bssid.
1096          * Setting bssid to 00:00:00:00:00:00 is recommended if the STA is not
1097          * associated.
1098          */
1099         int (*get_bssid)(void *priv, u8 *bssid);
1100
1101         /**
1102          * get_ssid - Get the current SSID
1103          * @priv: private driver interface data
1104          * @ssid: buffer for SSID (at least 32 bytes)
1105          *
1106          * Returns: Length of the SSID on success, -1 on failure
1107          *
1108          * Query kernel driver for the current SSID and copy it to ssid.
1109          * Returning zero is recommended if the STA is not associated.
1110          *
1111          * Note: SSID is an array of octets, i.e., it is not nul terminated and
1112          * can, at least in theory, contain control characters (including nul)
1113          * and as such, should be processed as binary data, not a printable
1114          * string.
1115          */
1116         int (*get_ssid)(void *priv, u8 *ssid);
1117
1118         /**
1119          * set_key - Configure encryption key
1120          * @ifname: Interface name (for multi-SSID/VLAN support)
1121          * @priv: private driver interface data
1122          * @alg: encryption algorithm (%WPA_ALG_NONE, %WPA_ALG_WEP,
1123          *      %WPA_ALG_TKIP, %WPA_ALG_CCMP, %WPA_ALG_IGTK, %WPA_ALG_PMK,
1124          *      %WPA_ALG_GCMP);
1125          *      %WPA_ALG_NONE clears the key.
1126          * @addr: Address of the peer STA (BSSID of the current AP when setting
1127          *      pairwise key in station mode), ff:ff:ff:ff:ff:ff for
1128          *      broadcast keys, %NULL for default keys that are used both for
1129          *      broadcast and unicast; when clearing keys, %NULL is used to
1130          *      indicate that both the broadcast-only and default key of the
1131          *      specified key index is to be cleared
1132          * @key_idx: key index (0..3), usually 0 for unicast keys; 0..4095 for
1133          *      IGTK
1134          * @set_tx: configure this key as the default Tx key (only used when
1135          *      driver does not support separate unicast/individual key
1136          * @seq: sequence number/packet number, seq_len octets, the next
1137          *      packet number to be used for in replay protection; configured
1138          *      for Rx keys (in most cases, this is only used with broadcast
1139          *      keys and set to zero for unicast keys); %NULL if not set
1140          * @seq_len: length of the seq, depends on the algorithm:
1141          *      TKIP: 6 octets, CCMP/GCMP: 6 octets, IGTK: 6 octets
1142          * @key: key buffer; TKIP: 16-byte temporal key, 8-byte Tx Mic key,
1143          *      8-byte Rx Mic Key
1144          * @key_len: length of the key buffer in octets (WEP: 5 or 13,
1145          *      TKIP: 32, CCMP/GCMP: 16, IGTK: 16)
1146          *
1147          * Returns: 0 on success, -1 on failure
1148          *
1149          * Configure the given key for the kernel driver. If the driver
1150          * supports separate individual keys (4 default keys + 1 individual),
1151          * addr can be used to determine whether the key is default or
1152          * individual. If only 4 keys are supported, the default key with key
1153          * index 0 is used as the individual key. STA must be configured to use
1154          * it as the default Tx key (set_tx is set) and accept Rx for all the
1155          * key indexes. In most cases, WPA uses only key indexes 1 and 2 for
1156          * broadcast keys, so key index 0 is available for this kind of
1157          * configuration.
1158          *
1159          * Please note that TKIP keys include separate TX and RX MIC keys and
1160          * some drivers may expect them in different order than wpa_supplicant
1161          * is using. If the TX/RX keys are swapped, all TKIP encrypted packets
1162          * will trigger Michael MIC errors. This can be fixed by changing the
1163          * order of MIC keys by swapping te bytes 16..23 and 24..31 of the key
1164          * in driver_*.c set_key() implementation, see driver_ndis.c for an
1165          * example on how this can be done.
1166          */
1167         int (*set_key)(const char *ifname, void *priv, enum wpa_alg alg,
1168                        const u8 *addr, int key_idx, int set_tx,
1169                        const u8 *seq, size_t seq_len,
1170                        const u8 *key, size_t key_len);
1171
1172         /**
1173          * init - Initialize driver interface
1174          * @ctx: context to be used when calling wpa_supplicant functions,
1175          * e.g., wpa_supplicant_event()
1176          * @ifname: interface name, e.g., wlan0
1177          *
1178          * Returns: Pointer to private data, %NULL on failure
1179          *
1180          * Initialize driver interface, including event processing for kernel
1181          * driver events (e.g., associated, scan results, Michael MIC failure).
1182          * This function can allocate a private configuration data area for
1183          * @ctx, file descriptor, interface name, etc. information that may be
1184          * needed in future driver operations. If this is not used, non-NULL
1185          * value will need to be returned because %NULL is used to indicate
1186          * failure. The returned value will be used as 'void *priv' data for
1187          * all other driver_ops functions.
1188          *
1189          * The main event loop (eloop.c) of wpa_supplicant can be used to
1190          * register callback for read sockets (eloop_register_read_sock()).
1191          *
1192          * See below for more information about events and
1193          * wpa_supplicant_event() function.
1194          */
1195         void * (*init)(void *ctx, const char *ifname);
1196
1197         /**
1198          * deinit - Deinitialize driver interface
1199          * @priv: private driver interface data from init()
1200          *
1201          * Shut down driver interface and processing of driver events. Free
1202          * private data buffer if one was allocated in init() handler.
1203          */
1204         void (*deinit)(void *priv);
1205
1206         /**
1207          * set_param - Set driver configuration parameters
1208          * @priv: private driver interface data from init()
1209          * @param: driver specific configuration parameters
1210          *
1211          * Returns: 0 on success, -1 on failure
1212          *
1213          * Optional handler for notifying driver interface about configuration
1214          * parameters (driver_param).
1215          */
1216         int (*set_param)(void *priv, const char *param);
1217
1218         /**
1219          * set_countermeasures - Enable/disable TKIP countermeasures
1220          * @priv: private driver interface data
1221          * @enabled: 1 = countermeasures enabled, 0 = disabled
1222          *
1223          * Returns: 0 on success, -1 on failure
1224          *
1225          * Configure TKIP countermeasures. When these are enabled, the driver
1226          * should drop all received and queued frames that are using TKIP.
1227          */
1228         int (*set_countermeasures)(void *priv, int enabled);
1229
1230         /**
1231          * deauthenticate - Request driver to deauthenticate
1232          * @priv: private driver interface data
1233          * @addr: peer address (BSSID of the AP)
1234          * @reason_code: 16-bit reason code to be sent in the deauthentication
1235          *      frame
1236          *
1237          * Returns: 0 on success, -1 on failure
1238          */
1239         int (*deauthenticate)(void *priv, const u8 *addr, int reason_code);
1240
1241         /**
1242          * associate - Request driver to associate
1243          * @priv: private driver interface data
1244          * @params: association parameters
1245          *
1246          * Returns: 0 on success, -1 on failure
1247          */
1248         int (*associate)(void *priv,
1249                          struct wpa_driver_associate_params *params);
1250
1251         /**
1252          * add_pmkid - Add PMKSA cache entry to the driver
1253          * @priv: private driver interface data
1254          * @bssid: BSSID for the PMKSA cache entry
1255          * @pmkid: PMKID for the PMKSA cache entry
1256          *
1257          * Returns: 0 on success, -1 on failure
1258          *
1259          * This function is called when a new PMK is received, as a result of
1260          * either normal authentication or RSN pre-authentication.
1261          *
1262          * If the driver generates RSN IE, i.e., it does not use wpa_ie in
1263          * associate(), add_pmkid() can be used to add new PMKSA cache entries
1264          * in the driver. If the driver uses wpa_ie from wpa_supplicant, this
1265          * driver_ops function does not need to be implemented. Likewise, if
1266          * the driver does not support WPA, this function is not needed.
1267          */
1268         int (*add_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid);
1269
1270         /**
1271          * remove_pmkid - Remove PMKSA cache entry to the driver
1272          * @priv: private driver interface data
1273          * @bssid: BSSID for the PMKSA cache entry
1274          * @pmkid: PMKID for the PMKSA cache entry
1275          *
1276          * Returns: 0 on success, -1 on failure
1277          *
1278          * This function is called when the supplicant drops a PMKSA cache
1279          * entry for any reason.
1280          *
1281          * If the driver generates RSN IE, i.e., it does not use wpa_ie in
1282          * associate(), remove_pmkid() can be used to synchronize PMKSA caches
1283          * between the driver and wpa_supplicant. If the driver uses wpa_ie
1284          * from wpa_supplicant, this driver_ops function does not need to be
1285          * implemented. Likewise, if the driver does not support WPA, this
1286          * function is not needed.
1287          */
1288         int (*remove_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid);
1289
1290         /**
1291          * flush_pmkid - Flush PMKSA cache
1292          * @priv: private driver interface data
1293          *
1294          * Returns: 0 on success, -1 on failure
1295          *
1296          * This function is called when the supplicant drops all PMKSA cache
1297          * entries for any reason.
1298          *
1299          * If the driver generates RSN IE, i.e., it does not use wpa_ie in
1300          * associate(), remove_pmkid() can be used to synchronize PMKSA caches
1301          * between the driver and wpa_supplicant. If the driver uses wpa_ie
1302          * from wpa_supplicant, this driver_ops function does not need to be
1303          * implemented. Likewise, if the driver does not support WPA, this
1304          * function is not needed.
1305          */
1306         int (*flush_pmkid)(void *priv);
1307
1308         /**
1309          * get_capa - Get driver capabilities
1310          * @priv: private driver interface data
1311          *
1312          * Returns: 0 on success, -1 on failure
1313          *
1314          * Get driver/firmware/hardware capabilities.
1315          */
1316         int (*get_capa)(void *priv, struct wpa_driver_capa *capa);
1317
1318         /**
1319          * poll - Poll driver for association information
1320          * @priv: private driver interface data
1321          *
1322          * This is an option callback that can be used when the driver does not
1323          * provide event mechanism for association events. This is called when
1324          * receiving WPA EAPOL-Key messages that require association
1325          * information. The driver interface is supposed to generate associnfo
1326          * event before returning from this callback function. In addition, the
1327          * driver interface should generate an association event after having
1328          * sent out associnfo.
1329          */
1330         void (*poll)(void *priv);
1331
1332         /**
1333          * get_ifname - Get interface name
1334          * @priv: private driver interface data
1335          *
1336          * Returns: Pointer to the interface name. This can differ from the
1337          * interface name used in init() call. Init() is called first.
1338          *
1339          * This optional function can be used to allow the driver interface to
1340          * replace the interface name with something else, e.g., based on an
1341          * interface mapping from a more descriptive name.
1342          */
1343         const char * (*get_ifname)(void *priv);
1344
1345         /**
1346          * get_mac_addr - Get own MAC address
1347          * @priv: private driver interface data
1348          *
1349          * Returns: Pointer to own MAC address or %NULL on failure
1350          *
1351          * This optional function can be used to get the own MAC address of the
1352          * device from the driver interface code. This is only needed if the
1353          * l2_packet implementation for the OS does not provide easy access to
1354          * a MAC address. */
1355         const u8 * (*get_mac_addr)(void *priv);
1356
1357         /**
1358          * send_eapol - Optional function for sending EAPOL packets
1359          * @priv: private driver interface data
1360          * @dest: Destination MAC address
1361          * @proto: Ethertype
1362          * @data: EAPOL packet starting with IEEE 802.1X header
1363          * @data_len: Size of the EAPOL packet
1364          *
1365          * Returns: 0 on success, -1 on failure
1366          *
1367          * This optional function can be used to override l2_packet operations
1368          * with driver specific functionality. If this function pointer is set,
1369          * l2_packet module is not used at all and the driver interface code is
1370          * responsible for receiving and sending all EAPOL packets. The
1371          * received EAPOL packets are sent to core code with EVENT_EAPOL_RX
1372          * event. The driver interface is required to implement get_mac_addr()
1373          * handler if send_eapol() is used.
1374          */
1375         int (*send_eapol)(void *priv, const u8 *dest, u16 proto,
1376                           const u8 *data, size_t data_len);
1377
1378         /**
1379          * set_operstate - Sets device operating state to DORMANT or UP
1380          * @priv: private driver interface data
1381          * @state: 0 = dormant, 1 = up
1382          * Returns: 0 on success, -1 on failure
1383          *
1384          * This is an optional function that can be used on operating systems
1385          * that support a concept of controlling network device state from user
1386          * space applications. This function, if set, gets called with
1387          * state = 1 when authentication has been completed and with state = 0
1388          * when connection is lost.
1389          */
1390         int (*set_operstate)(void *priv, int state);
1391
1392         /**
1393          * mlme_setprotection - MLME-SETPROTECTION.request primitive
1394          * @priv: Private driver interface data
1395          * @addr: Address of the station for which to set protection (may be
1396          * %NULL for group keys)
1397          * @protect_type: MLME_SETPROTECTION_PROTECT_TYPE_*
1398          * @key_type: MLME_SETPROTECTION_KEY_TYPE_*
1399          * Returns: 0 on success, -1 on failure
1400          *
1401          * This is an optional function that can be used to set the driver to
1402          * require protection for Tx and/or Rx frames. This uses the layer
1403          * interface defined in IEEE 802.11i-2004 clause 10.3.22.1
1404          * (MLME-SETPROTECTION.request). Many drivers do not use explicit
1405          * set protection operation; instead, they set protection implicitly
1406          * based on configured keys.
1407          */
1408         int (*mlme_setprotection)(void *priv, const u8 *addr, int protect_type,
1409                                   int key_type);
1410
1411         /**
1412          * get_hw_feature_data - Get hardware support data (channels and rates)
1413          * @priv: Private driver interface data
1414          * @num_modes: Variable for returning the number of returned modes
1415          * flags: Variable for returning hardware feature flags
1416          * Returns: Pointer to allocated hardware data on success or %NULL on
1417          * failure. Caller is responsible for freeing this.
1418          */
1419         struct hostapd_hw_modes * (*get_hw_feature_data)(void *priv,
1420                                                          u16 *num_modes,
1421                                                          u16 *flags);
1422
1423         /**
1424          * send_mlme - Send management frame from MLME
1425          * @priv: Private driver interface data
1426          * @data: IEEE 802.11 management frame with IEEE 802.11 header
1427          * @data_len: Size of the management frame
1428          * @noack: Do not wait for this frame to be acked (disable retries)
1429          * Returns: 0 on success, -1 on failure
1430          */
1431         int (*send_mlme)(void *priv, const u8 *data, size_t data_len,
1432                          int noack);
1433
1434         /**
1435          * update_ft_ies - Update FT (IEEE 802.11r) IEs
1436          * @priv: Private driver interface data
1437          * @md: Mobility domain (2 octets) (also included inside ies)
1438          * @ies: FT IEs (MDIE, FTIE, ...) or %NULL to remove IEs
1439          * @ies_len: Length of FT IEs in bytes
1440          * Returns: 0 on success, -1 on failure
1441          *
1442          * The supplicant uses this callback to let the driver know that keying
1443          * material for FT is available and that the driver can use the
1444          * provided IEs in the next message in FT authentication sequence.
1445          *
1446          * This function is only needed for driver that support IEEE 802.11r
1447          * (Fast BSS Transition).
1448          */
1449         int (*update_ft_ies)(void *priv, const u8 *md, const u8 *ies,
1450                              size_t ies_len);
1451
1452         /**
1453          * send_ft_action - Send FT Action frame (IEEE 802.11r)
1454          * @priv: Private driver interface data
1455          * @action: Action field value
1456          * @target_ap: Target AP address
1457          * @ies: FT IEs (MDIE, FTIE, ...) (FT Request action frame body)
1458          * @ies_len: Length of FT IEs in bytes
1459          * Returns: 0 on success, -1 on failure
1460          *
1461          * The supplicant uses this callback to request the driver to transmit
1462          * an FT Action frame (action category 6) for over-the-DS fast BSS
1463          * transition.
1464          */
1465         int (*send_ft_action)(void *priv, u8 action, const u8 *target_ap,
1466                               const u8 *ies, size_t ies_len);
1467
1468         /**
1469          * get_scan_results2 - Fetch the latest scan results
1470          * @priv: private driver interface data
1471          *
1472          * Returns: Allocated buffer of scan results (caller is responsible for
1473          * freeing the data structure) on success, NULL on failure
1474          */
1475          struct wpa_scan_results * (*get_scan_results2)(void *priv);
1476
1477         /**
1478          * set_country - Set country
1479          * @priv: Private driver interface data
1480          * @alpha2: country to which to switch to
1481          * Returns: 0 on success, -1 on failure
1482          *
1483          * This function is for drivers which support some form
1484          * of setting a regulatory domain.
1485          */
1486         int (*set_country)(void *priv, const char *alpha2);
1487
1488         /**
1489          * global_init - Global driver initialization
1490          * Returns: Pointer to private data (global), %NULL on failure
1491          *
1492          * This optional function is called to initialize the driver wrapper
1493          * for global data, i.e., data that applies to all interfaces. If this
1494          * function is implemented, global_deinit() will also need to be
1495          * implemented to free the private data. The driver will also likely
1496          * use init2() function instead of init() to get the pointer to global
1497          * data available to per-interface initializer.
1498          */
1499         void * (*global_init)(void);
1500
1501         /**
1502          * global_deinit - Global driver deinitialization
1503          * @priv: private driver global data from global_init()
1504          *
1505          * Terminate any global driver related functionality and free the
1506          * global data structure.
1507          */
1508         void (*global_deinit)(void *priv);
1509
1510         /**
1511          * init2 - Initialize driver interface (with global data)
1512          * @ctx: context to be used when calling wpa_supplicant functions,
1513          * e.g., wpa_supplicant_event()
1514          * @ifname: interface name, e.g., wlan0
1515          * @global_priv: private driver global data from global_init()
1516          * Returns: Pointer to private data, %NULL on failure
1517          *
1518          * This function can be used instead of init() if the driver wrapper
1519          * uses global data.
1520          */
1521         void * (*init2)(void *ctx, const char *ifname, void *global_priv);
1522
1523         /**
1524          * get_interfaces - Get information about available interfaces
1525          * @global_priv: private driver global data from global_init()
1526          * Returns: Allocated buffer of interface information (caller is
1527          * responsible for freeing the data structure) on success, NULL on
1528          * failure
1529          */
1530         struct wpa_interface_info * (*get_interfaces)(void *global_priv);
1531
1532         /**
1533          * scan2 - Request the driver to initiate scan
1534          * @priv: private driver interface data
1535          * @params: Scan parameters
1536          *
1537          * Returns: 0 on success, -1 on failure
1538          *
1539          * Once the scan results are ready, the driver should report scan
1540          * results event for wpa_supplicant which will eventually request the
1541          * results with wpa_driver_get_scan_results2().
1542          */
1543         int (*scan2)(void *priv, struct wpa_driver_scan_params *params);
1544
1545         /**
1546          * authenticate - Request driver to authenticate
1547          * @priv: private driver interface data
1548          * @params: authentication parameters
1549          * Returns: 0 on success, -1 on failure
1550          *
1551          * This is an optional function that can be used with drivers that
1552          * support separate authentication and association steps, i.e., when
1553          * wpa_supplicant can act as the SME. If not implemented, associate()
1554          * function is expected to take care of IEEE 802.11 authentication,
1555          * too.
1556          */
1557         int (*authenticate)(void *priv,
1558                             struct wpa_driver_auth_params *params);
1559
1560         /**
1561          * set_ap - Set Beacon and Probe Response information for AP mode
1562          * @priv: Private driver interface data
1563          * @params: Parameters to use in AP mode
1564          *
1565          * This function is used to configure Beacon template and/or extra IEs
1566          * to add for Beacon and Probe Response frames for the driver in
1567          * AP mode. The driver is responsible for building the full Beacon
1568          * frame by concatenating the head part with TIM IE generated by the
1569          * driver/firmware and finishing with the tail part. Depending on the
1570          * driver architectue, this can be done either by using the full
1571          * template or the set of additional IEs (e.g., WPS and P2P IE).
1572          * Similarly, Probe Response processing depends on the driver design.
1573          * If the driver (or firmware) takes care of replying to Probe Request
1574          * frames, the extra IEs provided here needs to be added to the Probe
1575          * Response frames.
1576          *
1577          * Returns: 0 on success, -1 on failure
1578          */
1579         int (*set_ap)(void *priv, struct wpa_driver_ap_params *params);
1580
1581         /**
1582          * hapd_init - Initialize driver interface (hostapd only)
1583          * @hapd: Pointer to hostapd context
1584          * @params: Configuration for the driver wrapper
1585          * Returns: Pointer to private data, %NULL on failure
1586          *
1587          * This function is used instead of init() or init2() when the driver
1588          * wrapper is used with hostapd.
1589          */
1590         void * (*hapd_init)(struct hostapd_data *hapd,
1591                             struct wpa_init_params *params);
1592
1593         /**
1594          * hapd_deinit - Deinitialize driver interface (hostapd only)
1595          * @priv: Private driver interface data from hapd_init()
1596          */
1597         void (*hapd_deinit)(void *priv);
1598
1599         /**
1600          * set_ieee8021x - Enable/disable IEEE 802.1X support (AP only)
1601          * @priv: Private driver interface data
1602          * @params: BSS parameters
1603          * Returns: 0 on success, -1 on failure
1604          *
1605          * This is an optional function to configure the kernel driver to
1606          * enable/disable IEEE 802.1X support and set WPA/WPA2 parameters. This
1607          * can be left undefined (set to %NULL) if IEEE 802.1X support is
1608          * always enabled and the driver uses set_ap() to set WPA/RSN IE
1609          * for Beacon frames.
1610          *
1611          * DEPRECATED - use set_ap() instead
1612          */
1613         int (*set_ieee8021x)(void *priv, struct wpa_bss_params *params);
1614
1615         /**
1616          * set_privacy - Enable/disable privacy (AP only)
1617          * @priv: Private driver interface data
1618          * @enabled: 1 = privacy enabled, 0 = disabled
1619          * Returns: 0 on success, -1 on failure
1620          *
1621          * This is an optional function to configure privacy field in the
1622          * kernel driver for Beacon frames. This can be left undefined (set to
1623          * %NULL) if the driver uses the Beacon template from set_ap().
1624          *
1625          * DEPRECATED - use set_ap() instead
1626          */
1627         int (*set_privacy)(void *priv, int enabled);
1628
1629         /**
1630          * get_seqnum - Fetch the current TSC/packet number (AP only)
1631          * @ifname: The interface name (main or virtual)
1632          * @priv: Private driver interface data
1633          * @addr: MAC address of the station or %NULL for group keys
1634          * @idx: Key index
1635          * @seq: Buffer for returning the latest used TSC/packet number
1636          * Returns: 0 on success, -1 on failure
1637          *
1638          * This function is used to fetch the last used TSC/packet number for
1639          * a TKIP, CCMP, GCMP, or BIP/IGTK key. It is mainly used with group
1640          * keys, so there is no strict requirement on implementing support for
1641          * unicast keys (i.e., addr != %NULL).
1642          */
1643         int (*get_seqnum)(const char *ifname, void *priv, const u8 *addr,
1644                           int idx, u8 *seq);
1645
1646         /**
1647          * flush - Flush all association stations (AP only)
1648          * @priv: Private driver interface data
1649          * Returns: 0 on success, -1 on failure
1650          *
1651          * This function requests the driver to disassociate all associated
1652          * stations. This function does not need to be implemented if the
1653          * driver does not process association frames internally.
1654          */
1655         int (*flush)(void *priv);
1656
1657         /**
1658          * set_generic_elem - Add IEs into Beacon/Probe Response frames (AP)
1659          * @priv: Private driver interface data
1660          * @elem: Information elements
1661          * @elem_len: Length of the elem buffer in octets
1662          * Returns: 0 on success, -1 on failure
1663          *
1664          * This is an optional function to add information elements in the
1665          * kernel driver for Beacon and Probe Response frames. This can be left
1666          * undefined (set to %NULL) if the driver uses the Beacon template from
1667          * set_ap().
1668          *
1669          * DEPRECATED - use set_ap() instead
1670          */
1671         int (*set_generic_elem)(void *priv, const u8 *elem, size_t elem_len);
1672
1673         /**
1674          * read_sta_data - Fetch station data
1675          * @priv: Private driver interface data
1676          * @data: Buffer for returning station information
1677          * @addr: MAC address of the station
1678          * Returns: 0 on success, -1 on failure
1679          */
1680         int (*read_sta_data)(void *priv, struct hostap_sta_driver_data *data,
1681                              const u8 *addr);
1682
1683         /**
1684          * hapd_send_eapol - Send an EAPOL packet (AP only)
1685          * @priv: private driver interface data
1686          * @addr: Destination MAC address
1687          * @data: EAPOL packet starting with IEEE 802.1X header
1688          * @data_len: Length of the EAPOL packet in octets
1689          * @encrypt: Whether the frame should be encrypted
1690          * @own_addr: Source MAC address
1691          * @flags: WPA_STA_* flags for the destination station
1692          *
1693          * Returns: 0 on success, -1 on failure
1694          */
1695         int (*hapd_send_eapol)(void *priv, const u8 *addr, const u8 *data,
1696                                size_t data_len, int encrypt,
1697                                const u8 *own_addr, u32 flags);
1698
1699         /**
1700          * sta_deauth - Deauthenticate a station (AP only)
1701          * @priv: Private driver interface data
1702          * @own_addr: Source address and BSSID for the Deauthentication frame
1703          * @addr: MAC address of the station to deauthenticate
1704          * @reason: Reason code for the Deauthentiation frame
1705          * Returns: 0 on success, -1 on failure
1706          *
1707          * This function requests a specific station to be deauthenticated and
1708          * a Deauthentication frame to be sent to it.
1709          */
1710         int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr,
1711                           int reason);
1712
1713         /**
1714          * sta_disassoc - Disassociate a station (AP only)
1715          * @priv: Private driver interface data
1716          * @own_addr: Source address and BSSID for the Disassociation frame
1717          * @addr: MAC address of the station to disassociate
1718          * @reason: Reason code for the Disassociation frame
1719          * Returns: 0 on success, -1 on failure
1720          *
1721          * This function requests a specific station to be disassociated and
1722          * a Disassociation frame to be sent to it.
1723          */
1724         int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr,
1725                             int reason);
1726
1727         /**
1728          * sta_remove - Remove a station entry (AP only)
1729          * @priv: Private driver interface data
1730          * @addr: MAC address of the station to be removed
1731          * Returns: 0 on success, -1 on failure
1732          */
1733         int (*sta_remove)(void *priv, const u8 *addr);
1734
1735         /**
1736          * hapd_get_ssid - Get the current SSID (AP only)
1737          * @priv: Private driver interface data
1738          * @buf: Buffer for returning the SSID
1739          * @len: Maximum length of the buffer
1740          * Returns: Length of the SSID on success, -1 on failure
1741          *
1742          * This function need not be implemented if the driver uses Beacon
1743          * template from set_ap() and does not reply to Probe Request frames.
1744          */
1745         int (*hapd_get_ssid)(void *priv, u8 *buf, int len);
1746
1747         /**
1748          * hapd_set_ssid - Set SSID (AP only)
1749          * @priv: Private driver interface data
1750          * @buf: SSID
1751          * @len: Length of the SSID in octets
1752          * Returns: 0 on success, -1 on failure
1753          *
1754          * DEPRECATED - use set_ap() instead
1755          */
1756         int (*hapd_set_ssid)(void *priv, const u8 *buf, int len);
1757
1758         /**
1759          * hapd_set_countermeasures - Enable/disable TKIP countermeasures (AP)
1760          * @priv: Private driver interface data
1761          * @enabled: 1 = countermeasures enabled, 0 = disabled
1762          * Returns: 0 on success, -1 on failure
1763          *
1764          * This need not be implemented if the driver does not take care of
1765          * association processing.
1766          */
1767         int (*hapd_set_countermeasures)(void *priv, int enabled);
1768
1769         /**
1770          * sta_add - Add a station entry
1771          * @priv: Private driver interface data
1772          * @params: Station parameters
1773          * Returns: 0 on success, -1 on failure
1774          *
1775          * This function is used to add a station entry to the driver once the
1776          * station has completed association. This is only used if the driver
1777          * does not take care of association processing.
1778          *
1779          * With TDLS, this function is also used to add or set (params->set 1)
1780          * TDLS peer entries.
1781          */
1782         int (*sta_add)(void *priv, struct hostapd_sta_add_params *params);
1783
1784         /**
1785          * get_inact_sec - Get station inactivity duration (AP only)
1786          * @priv: Private driver interface data
1787          * @addr: Station address
1788          * Returns: Number of seconds station has been inactive, -1 on failure
1789          */
1790         int (*get_inact_sec)(void *priv, const u8 *addr);
1791
1792         /**
1793          * sta_clear_stats - Clear station statistics (AP only)
1794          * @priv: Private driver interface data
1795          * @addr: Station address
1796          * Returns: 0 on success, -1 on failure
1797          */
1798         int (*sta_clear_stats)(void *priv, const u8 *addr);
1799
1800         /**
1801          * set_freq - Set channel/frequency (AP only)
1802          * @priv: Private driver interface data
1803          * @freq: Channel parameters
1804          * Returns: 0 on success, -1 on failure
1805          */
1806         int (*set_freq)(void *priv, struct hostapd_freq_params *freq);
1807
1808         /**
1809          * set_rts - Set RTS threshold
1810          * @priv: Private driver interface data
1811          * @rts: RTS threshold in octets
1812          * Returns: 0 on success, -1 on failure
1813          */
1814         int (*set_rts)(void *priv, int rts);
1815
1816         /**
1817          * set_frag - Set fragmentation threshold
1818          * @priv: Private driver interface data
1819          * @frag: Fragmentation threshold in octets
1820          * Returns: 0 on success, -1 on failure
1821          */
1822         int (*set_frag)(void *priv, int frag);
1823
1824         /**
1825          * sta_set_flags - Set station flags (AP only)
1826          * @priv: Private driver interface data
1827          * @addr: Station address
1828          * @total_flags: Bitmap of all WPA_STA_* flags currently set
1829          * @flags_or: Bitmap of WPA_STA_* flags to add
1830          * @flags_and: Bitmap of WPA_STA_* flags to us as a mask
1831          * Returns: 0 on success, -1 on failure
1832          */
1833         int (*sta_set_flags)(void *priv, const u8 *addr,
1834                              int total_flags, int flags_or, int flags_and);
1835
1836         /**
1837          * set_tx_queue_params - Set TX queue parameters
1838          * @priv: Private driver interface data
1839          * @queue: Queue number (0 = VO, 1 = VI, 2 = BE, 3 = BK)
1840          * @aifs: AIFS
1841          * @cw_min: cwMin
1842          * @cw_max: cwMax
1843          * @burst_time: Maximum length for bursting in 0.1 msec units
1844          */
1845         int (*set_tx_queue_params)(void *priv, int queue, int aifs, int cw_min,
1846                                    int cw_max, int burst_time);
1847
1848         /**
1849          * if_add - Add a virtual interface
1850          * @priv: Private driver interface data
1851          * @type: Interface type
1852          * @ifname: Interface name for the new virtual interface
1853          * @addr: Local address to use for the interface or %NULL to use the
1854          *      parent interface address
1855          * @bss_ctx: BSS context for %WPA_IF_AP_BSS interfaces
1856          * @drv_priv: Pointer for overwriting the driver context or %NULL if
1857          *      not allowed (applies only to %WPA_IF_AP_BSS type)
1858          * @force_ifname: Buffer for returning an interface name that the
1859          *      driver ended up using if it differs from the requested ifname
1860          * @if_addr: Buffer for returning the allocated interface address
1861          *      (this may differ from the requested addr if the driver cannot
1862          *      change interface address)
1863          * @bridge: Bridge interface to use or %NULL if no bridge configured
1864          * Returns: 0 on success, -1 on failure
1865          */
1866         int (*if_add)(void *priv, enum wpa_driver_if_type type,
1867                       const char *ifname, const u8 *addr, void *bss_ctx,
1868                       void **drv_priv, char *force_ifname, u8 *if_addr,
1869                       const char *bridge);
1870
1871         /**
1872          * if_remove - Remove a virtual interface
1873          * @priv: Private driver interface data
1874          * @type: Interface type
1875          * @ifname: Interface name of the virtual interface to be removed
1876          * Returns: 0 on success, -1 on failure
1877          */
1878         int (*if_remove)(void *priv, enum wpa_driver_if_type type,
1879                          const char *ifname);
1880
1881         /**
1882          * set_sta_vlan - Bind a station into a specific interface (AP only)
1883          * @priv: Private driver interface data
1884          * @ifname: Interface (main or virtual BSS or VLAN)
1885          * @addr: MAC address of the associated station
1886          * @vlan_id: VLAN ID
1887          * Returns: 0 on success, -1 on failure
1888          *
1889          * This function is used to bind a station to a specific virtual
1890          * interface. It is only used if when virtual interfaces are supported,
1891          * e.g., to assign stations to different VLAN interfaces based on
1892          * information from a RADIUS server. This allows separate broadcast
1893          * domains to be used with a single BSS.
1894          */
1895         int (*set_sta_vlan)(void *priv, const u8 *addr, const char *ifname,
1896                             int vlan_id);
1897
1898         /**
1899          * commit - Optional commit changes handler (AP only)
1900          * @priv: driver private data
1901          * Returns: 0 on success, -1 on failure
1902          *
1903          * This optional handler function can be registered if the driver
1904          * interface implementation needs to commit changes (e.g., by setting
1905          * network interface up) at the end of initial configuration. If set,
1906          * this handler will be called after initial setup has been completed.
1907          */
1908         int (*commit)(void *priv);
1909
1910         /**
1911          * send_ether - Send an ethernet packet (AP only)
1912          * @priv: private driver interface data
1913          * @dst: Destination MAC address
1914          * @src: Source MAC address
1915          * @proto: Ethertype
1916          * @data: EAPOL packet starting with IEEE 802.1X header
1917          * @data_len: Length of the EAPOL packet in octets
1918          * Returns: 0 on success, -1 on failure
1919          */
1920         int (*send_ether)(void *priv, const u8 *dst, const u8 *src, u16 proto,
1921                           const u8 *data, size_t data_len);
1922
1923         /**
1924          * set_radius_acl_auth - Notification of RADIUS ACL change
1925          * @priv: Private driver interface data
1926          * @mac: MAC address of the station
1927          * @accepted: Whether the station was accepted
1928          * @session_timeout: Session timeout for the station
1929          * Returns: 0 on success, -1 on failure
1930          */
1931         int (*set_radius_acl_auth)(void *priv, const u8 *mac, int accepted, 
1932                                    u32 session_timeout);
1933
1934         /**
1935          * set_radius_acl_expire - Notification of RADIUS ACL expiration
1936          * @priv: Private driver interface data
1937          * @mac: MAC address of the station
1938          * Returns: 0 on success, -1 on failure
1939          */
1940         int (*set_radius_acl_expire)(void *priv, const u8 *mac);
1941
1942         /**
1943          * set_ap_wps_ie - Add WPS IE(s) into Beacon/Probe Response frames (AP)
1944          * @priv: Private driver interface data
1945          * @beacon: WPS IE(s) for Beacon frames or %NULL to remove extra IE(s)
1946          * @proberesp: WPS IE(s) for Probe Response frames or %NULL to remove
1947          *      extra IE(s)
1948          * @assocresp: WPS IE(s) for (Re)Association Response frames or %NULL
1949          *      to remove extra IE(s)
1950          * Returns: 0 on success, -1 on failure
1951          *
1952          * This is an optional function to add WPS IE in the kernel driver for
1953          * Beacon and Probe Response frames. This can be left undefined (set
1954          * to %NULL) if the driver uses the Beacon template from set_ap()
1955          * and does not process Probe Request frames. If the driver takes care
1956          * of (Re)Association frame processing, the assocresp buffer includes
1957          * WPS IE(s) that need to be added to (Re)Association Response frames
1958          * whenever a (Re)Association Request frame indicated use of WPS.
1959          *
1960          * This will also be used to add P2P IE(s) into Beacon/Probe Response
1961          * frames when operating as a GO. The driver is responsible for adding
1962          * timing related attributes (e.g., NoA) in addition to the IEs
1963          * included here by appending them after these buffers. This call is
1964          * also used to provide Probe Response IEs for P2P Listen state
1965          * operations for drivers that generate the Probe Response frames
1966          * internally.
1967          *
1968          * DEPRECATED - use set_ap() instead
1969          */
1970         int (*set_ap_wps_ie)(void *priv, const struct wpabuf *beacon,
1971                              const struct wpabuf *proberesp,
1972                              const struct wpabuf *assocresp);
1973
1974         /**
1975          * set_supp_port - Set IEEE 802.1X Supplicant Port status
1976          * @priv: Private driver interface data
1977          * @authorized: Whether the port is authorized
1978          * Returns: 0 on success, -1 on failure
1979          */
1980         int (*set_supp_port)(void *priv, int authorized);
1981
1982         /**
1983          * set_wds_sta - Bind a station into a 4-address WDS (AP only)
1984          * @priv: Private driver interface data
1985          * @addr: MAC address of the associated station
1986          * @aid: Association ID
1987          * @val: 1 = bind to 4-address WDS; 0 = unbind
1988          * @bridge_ifname: Bridge interface to use for the WDS station or %NULL
1989          *      to indicate that bridge is not to be used
1990          * Returns: 0 on success, -1 on failure
1991          */
1992         int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val,
1993                            const char *bridge_ifname);
1994
1995         /**
1996          * send_action - Transmit an Action frame
1997          * @priv: Private driver interface data
1998          * @freq: Frequency (in MHz) of the channel
1999          * @wait: Time to wait off-channel for a response (in ms), or zero
2000          * @dst: Destination MAC address (Address 1)
2001          * @src: Source MAC address (Address 2)
2002          * @bssid: BSSID (Address 3)
2003          * @data: Frame body
2004          * @data_len: data length in octets
2005          @ @no_cck: Whether CCK rates must not be used to transmit this frame
2006          * Returns: 0 on success, -1 on failure
2007          *
2008          * This command can be used to request the driver to transmit an action
2009          * frame to the specified destination.
2010          *
2011          * If the %WPA_DRIVER_FLAGS_OFFCHANNEL_TX flag is set, the frame will
2012          * be transmitted on the given channel and the device will wait for a
2013          * response on that channel for the given wait time.
2014          *
2015          * If the flag is not set, the wait time will be ignored. In this case,
2016          * if a remain-on-channel duration is in progress, the frame must be
2017          * transmitted on that channel; alternatively the frame may be sent on
2018          * the current operational channel (if in associated state in station
2019          * mode or while operating as an AP.)
2020          */
2021         int (*send_action)(void *priv, unsigned int freq, unsigned int wait,
2022                            const u8 *dst, const u8 *src, const u8 *bssid,
2023                            const u8 *data, size_t data_len, int no_cck);
2024
2025         /**
2026          * send_action_cancel_wait - Cancel action frame TX wait
2027          * @priv: Private driver interface data
2028          *
2029          * This command cancels the wait time associated with sending an action
2030          * frame. It is only available when %WPA_DRIVER_FLAGS_OFFCHANNEL_TX is
2031          * set in the driver flags.
2032          */
2033         void (*send_action_cancel_wait)(void *priv);
2034
2035         /**
2036          * remain_on_channel - Remain awake on a channel
2037          * @priv: Private driver interface data
2038          * @freq: Frequency (in MHz) of the channel
2039          * @duration: Duration in milliseconds
2040          * Returns: 0 on success, -1 on failure
2041          *
2042          * This command is used to request the driver to remain awake on the
2043          * specified channel for the specified duration and report received
2044          * Action frames with EVENT_RX_ACTION events. Optionally, received
2045          * Probe Request frames may also be requested to be reported by calling
2046          * probe_req_report(). These will be reported with EVENT_RX_PROBE_REQ.
2047          *
2048          * The driver may not be at the requested channel when this function
2049          * returns, i.e., the return code is only indicating whether the
2050          * request was accepted. The caller will need to wait until the
2051          * EVENT_REMAIN_ON_CHANNEL event indicates that the driver has
2052          * completed the channel change. This may take some time due to other
2053          * need for the radio and the caller should be prepared to timing out
2054          * its wait since there are no guarantees on when this request can be
2055          * executed.
2056          */
2057         int (*remain_on_channel)(void *priv, unsigned int freq,
2058                                  unsigned int duration);
2059
2060         /**
2061          * cancel_remain_on_channel - Cancel remain-on-channel operation
2062          * @priv: Private driver interface data
2063          *
2064          * This command can be used to cancel a remain-on-channel operation
2065          * before its originally requested duration has passed. This could be
2066          * used, e.g., when remain_on_channel() is used to request extra time
2067          * to receive a response to an Action frame and the response is
2068          * received when there is still unneeded time remaining on the
2069          * remain-on-channel operation.
2070          */
2071         int (*cancel_remain_on_channel)(void *priv);
2072
2073         /**
2074          * probe_req_report - Request Probe Request frames to be indicated
2075          * @priv: Private driver interface data
2076          * @report: Whether to report received Probe Request frames
2077          * Returns: 0 on success, -1 on failure (or if not supported)
2078          *
2079          * This command can be used to request the driver to indicate when
2080          * Probe Request frames are received with EVENT_RX_PROBE_REQ events.
2081          * Since this operation may require extra resources, e.g., due to less
2082          * optimal hardware/firmware RX filtering, many drivers may disable
2083          * Probe Request reporting at least in station mode. This command is
2084          * used to notify the driver when the Probe Request frames need to be
2085          * reported, e.g., during remain-on-channel operations.
2086          */
2087         int (*probe_req_report)(void *priv, int report);
2088
2089         /**
2090          * deinit_ap - Deinitialize AP mode
2091          * @priv: Private driver interface data
2092          * Returns: 0 on success, -1 on failure (or if not supported)
2093          *
2094          * This optional function can be used to disable AP mode related
2095          * configuration and change the driver mode to station mode to allow
2096          * normal station operations like scanning to be completed.
2097          */
2098         int (*deinit_ap)(void *priv);
2099
2100         /**
2101          * deinit_p2p_cli - Deinitialize P2P client mode
2102          * @priv: Private driver interface data
2103          * Returns: 0 on success, -1 on failure (or if not supported)
2104          *
2105          * This optional function can be used to disable P2P client mode. It
2106          * can be used to change the interface type back to station mode.
2107          */
2108         int (*deinit_p2p_cli)(void *priv);
2109
2110         /**
2111          * suspend - Notification on system suspend/hibernate event
2112          * @priv: Private driver interface data
2113          */
2114         void (*suspend)(void *priv);
2115
2116         /**
2117          * resume - Notification on system resume/thaw event
2118          * @priv: Private driver interface data
2119          */
2120         void (*resume)(void *priv);
2121
2122         /**
2123          * signal_monitor - Set signal monitoring parameters
2124          * @priv: Private driver interface data
2125          * @threshold: Threshold value for signal change events; 0 = disabled
2126          * @hysteresis: Minimum change in signal strength before indicating a
2127          *      new event
2128          * Returns: 0 on success, -1 on failure (or if not supported)
2129          *
2130          * This function can be used to configure monitoring of signal strength
2131          * with the current AP. Whenever signal strength drops below the
2132          * %threshold value or increases above it, EVENT_SIGNAL_CHANGE event
2133          * should be generated assuming the signal strength has changed at
2134          * least %hysteresis from the previously indicated signal change event.
2135          */
2136         int (*signal_monitor)(void *priv, int threshold, int hysteresis);
2137
2138         /**
2139          * send_frame - Send IEEE 802.11 frame (testing use only)
2140          * @priv: Private driver interface data
2141          * @data: IEEE 802.11 frame with IEEE 802.11 header
2142          * @data_len: Size of the frame
2143          * @encrypt: Whether to encrypt the frame (if keys are set)
2144          * Returns: 0 on success, -1 on failure
2145          *
2146          * This function is only used for debugging purposes and is not
2147          * required to be implemented for normal operations.
2148          */
2149         int (*send_frame)(void *priv, const u8 *data, size_t data_len,
2150                           int encrypt);
2151
2152         /**
2153          * shared_freq - Get operating frequency of shared interface(s)
2154          * @priv: Private driver interface data
2155          * Returns: Operating frequency in MHz, 0 if no shared operation in
2156          * use, or -1 on failure
2157          *
2158          * This command can be used to request the current operating frequency
2159          * of any virtual interface that shares the same radio to provide
2160          * information for channel selection for other virtual interfaces.
2161          */
2162         int (*shared_freq)(void *priv);
2163
2164         /**
2165          * get_noa - Get current Notice of Absence attribute payload
2166          * @priv: Private driver interface data
2167          * @buf: Buffer for returning NoA
2168          * @buf_len: Buffer length in octets
2169          * Returns: Number of octets used in buf, 0 to indicate no NoA is being
2170          * advertized, or -1 on failure
2171          *
2172          * This function is used to fetch the current Notice of Absence
2173          * attribute value from GO.
2174          */
2175         int (*get_noa)(void *priv, u8 *buf, size_t buf_len);
2176
2177         /**
2178          * set_noa - Set Notice of Absence parameters for GO (testing)
2179          * @priv: Private driver interface data
2180          * @count: Count
2181          * @start: Start time in ms from next TBTT
2182          * @duration: Duration in ms
2183          * Returns: 0 on success or -1 on failure
2184          *
2185          * This function is used to set Notice of Absence parameters for GO. It
2186          * is used only for testing. To disable NoA, all parameters are set to
2187          * 0.
2188          */
2189         int (*set_noa)(void *priv, u8 count, int start, int duration);
2190
2191         /**
2192          * set_p2p_powersave - Set P2P power save options
2193          * @priv: Private driver interface data
2194          * @legacy_ps: 0 = disable, 1 = enable, 2 = maximum PS, -1 = no change
2195          * @opp_ps: 0 = disable, 1 = enable, -1 = no change
2196          * @ctwindow: 0.. = change (msec), -1 = no change
2197          * Returns: 0 on success or -1 on failure
2198          */
2199         int (*set_p2p_powersave)(void *priv, int legacy_ps, int opp_ps,
2200                                  int ctwindow);
2201
2202         /**
2203          * ampdu - Enable/disable aggregation
2204          * @priv: Private driver interface data
2205          * @ampdu: 1/0 = enable/disable A-MPDU aggregation
2206          * Returns: 0 on success or -1 on failure
2207          */
2208         int (*ampdu)(void *priv, int ampdu);
2209
2210         /**
2211          * get_radio_name - Get physical radio name for the device
2212          * @priv: Private driver interface data
2213          * Returns: Radio name or %NULL if not known
2214          *
2215          * The returned data must not be modified by the caller. It is assumed
2216          * that any interface that has the same radio name as another is
2217          * sharing the same physical radio. This information can be used to
2218          * share scan results etc. information between the virtual interfaces
2219          * to speed up various operations.
2220          */
2221         const char * (*get_radio_name)(void *priv);
2222
2223         /**
2224          * p2p_find - Start P2P Device Discovery
2225          * @priv: Private driver interface data
2226          * @timeout: Timeout for find operation in seconds or 0 for no timeout
2227          * @type: Device Discovery type (enum p2p_discovery_type)
2228          * Returns: 0 on success, -1 on failure
2229          *
2230          * This function is only used if the driver implements P2P management,
2231          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2232          * struct wpa_driver_capa.
2233          */
2234         int (*p2p_find)(void *priv, unsigned int timeout, int type);
2235
2236         /**
2237          * p2p_stop_find - Stop P2P Device Discovery
2238          * @priv: Private driver interface data
2239          * Returns: 0 on success, -1 on failure
2240          *
2241          * This function is only used if the driver implements P2P management,
2242          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2243          * struct wpa_driver_capa.
2244          */
2245         int (*p2p_stop_find)(void *priv);
2246
2247         /**
2248          * p2p_listen - Start P2P Listen state for specified duration
2249          * @priv: Private driver interface data
2250          * @timeout: Listen state duration in milliseconds
2251          * Returns: 0 on success, -1 on failure
2252          *
2253          * This function can be used to request the P2P module to keep the
2254          * device discoverable on the listen channel for an extended set of
2255          * time. At least in its current form, this is mainly used for testing
2256          * purposes and may not be of much use for normal P2P operations.
2257          *
2258          * This function is only used if the driver implements P2P management,
2259          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2260          * struct wpa_driver_capa.
2261          */
2262         int (*p2p_listen)(void *priv, unsigned int timeout);
2263
2264         /**
2265          * p2p_connect - Start P2P group formation (GO negotiation)
2266          * @priv: Private driver interface data
2267          * @peer_addr: MAC address of the peer P2P client
2268          * @wps_method: enum p2p_wps_method value indicating config method
2269          * @go_intent: Local GO intent value (1..15)
2270          * @own_interface_addr: Intended interface address to use with the
2271          *      group
2272          * @force_freq: The only allowed channel frequency in MHz or 0
2273          * @persistent_group: Whether to create persistent group
2274          * Returns: 0 on success, -1 on failure
2275          *
2276          * This function is only used if the driver implements P2P management,
2277          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2278          * struct wpa_driver_capa.
2279          */
2280         int (*p2p_connect)(void *priv, const u8 *peer_addr, int wps_method,
2281                            int go_intent, const u8 *own_interface_addr,
2282                            unsigned int force_freq, int persistent_group);
2283
2284         /**
2285          * wps_success_cb - Report successfully completed WPS provisioning
2286          * @priv: Private driver interface data
2287          * @peer_addr: Peer address
2288          * Returns: 0 on success, -1 on failure
2289          *
2290          * This function is used to report successfully completed WPS
2291          * provisioning during group formation in both GO/Registrar and
2292          * client/Enrollee roles.
2293          *
2294          * This function is only used if the driver implements P2P management,
2295          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2296          * struct wpa_driver_capa.
2297          */
2298         int (*wps_success_cb)(void *priv, const u8 *peer_addr);
2299
2300         /**
2301          * p2p_group_formation_failed - Report failed WPS provisioning
2302          * @priv: Private driver interface data
2303          * Returns: 0 on success, -1 on failure
2304          *
2305          * This function is used to report failed group formation. This can
2306          * happen either due to failed WPS provisioning or due to 15 second
2307          * timeout during the provisioning phase.
2308          *
2309          * This function is only used if the driver implements P2P management,
2310          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2311          * struct wpa_driver_capa.
2312          */
2313         int (*p2p_group_formation_failed)(void *priv);
2314
2315         /**
2316          * p2p_set_params - Set P2P parameters
2317          * @priv: Private driver interface data
2318          * @params: P2P parameters
2319          * Returns: 0 on success, -1 on failure
2320          *
2321          * This function is only used if the driver implements P2P management,
2322          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2323          * struct wpa_driver_capa.
2324          */
2325         int (*p2p_set_params)(void *priv, const struct p2p_params *params);
2326
2327         /**
2328          * p2p_prov_disc_req - Send Provision Discovery Request
2329          * @priv: Private driver interface data
2330          * @peer_addr: MAC address of the peer P2P client
2331          * @config_methods: WPS Config Methods value (only one bit set)
2332          * Returns: 0 on success, -1 on failure
2333          *
2334          * This function can be used to request a discovered P2P peer to
2335          * display a PIN (config_methods = WPS_CONFIG_DISPLAY) or be prepared
2336          * to enter a PIN from us (config_methods = WPS_CONFIG_KEYPAD). The
2337          * Provision Discovery Request frame is transmitted once immediately
2338          * and if no response is received, the frame will be sent again
2339          * whenever the target device is discovered during device dsicovery
2340          * (start with a p2p_find() call). Response from the peer is indicated
2341          * with the EVENT_P2P_PROV_DISC_RESPONSE event.
2342          *
2343          * This function is only used if the driver implements P2P management,
2344          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2345          * struct wpa_driver_capa.
2346          */
2347         int (*p2p_prov_disc_req)(void *priv, const u8 *peer_addr,
2348                                  u16 config_methods, int join);
2349
2350         /**
2351          * p2p_sd_request - Schedule a service discovery query
2352          * @priv: Private driver interface data
2353          * @dst: Destination peer or %NULL to apply for all peers
2354          * @tlvs: P2P Service Query TLV(s)
2355          * Returns: Reference to the query or 0 on failure
2356          *
2357          * Response to the query is indicated with the
2358          * EVENT_P2P_SD_RESPONSE driver event.
2359          *
2360          * This function is only used if the driver implements P2P management,
2361          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2362          * struct wpa_driver_capa.
2363          */
2364         u64 (*p2p_sd_request)(void *priv, const u8 *dst,
2365                               const struct wpabuf *tlvs);
2366
2367         /**
2368          * p2p_sd_cancel_request - Cancel a pending service discovery query
2369          * @priv: Private driver interface data
2370          * @req: Query reference from p2p_sd_request()
2371          * Returns: 0 on success, -1 on failure
2372          *
2373          * This function is only used if the driver implements P2P management,
2374          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2375          * struct wpa_driver_capa.
2376          */
2377         int (*p2p_sd_cancel_request)(void *priv, u64 req);
2378
2379         /**
2380          * p2p_sd_response - Send response to a service discovery query
2381          * @priv: Private driver interface data
2382          * @freq: Frequency from EVENT_P2P_SD_REQUEST event
2383          * @dst: Destination address from EVENT_P2P_SD_REQUEST event
2384          * @dialog_token: Dialog token from EVENT_P2P_SD_REQUEST event
2385          * @resp_tlvs: P2P Service Response TLV(s)
2386          * Returns: 0 on success, -1 on failure
2387          *
2388          * This function is called as a response to the request indicated with
2389          * the EVENT_P2P_SD_REQUEST driver event.
2390          *
2391          * This function is only used if the driver implements P2P management,
2392          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2393          * struct wpa_driver_capa.
2394          */
2395         int (*p2p_sd_response)(void *priv, int freq, const u8 *dst,
2396                                u8 dialog_token,
2397                                const struct wpabuf *resp_tlvs);
2398
2399         /**
2400          * p2p_service_update - Indicate a change in local services
2401          * @priv: Private driver interface data
2402          * Returns: 0 on success, -1 on failure
2403          *
2404          * This function needs to be called whenever there is a change in
2405          * availability of the local services. This will increment the
2406          * Service Update Indicator value which will be used in SD Request and
2407          * Response frames.
2408          *
2409          * This function is only used if the driver implements P2P management,
2410          * i.e., if it sets WPA_DRIVER_FLAGS_P2P_MGMT in
2411          * struct wpa_driver_capa.
2412          */
2413         int (*p2p_service_update)(void *priv);
2414
2415         /**
2416          * p2p_reject - Reject peer device (explicitly block connections)
2417          * @priv: Private driver interface data
2418          * @addr: MAC address of the peer
2419          * Returns: 0 on success, -1 on failure
2420          */
2421         int (*p2p_reject)(void *priv, const u8 *addr);
2422
2423         /**
2424          * p2p_invite - Invite a P2P Device into a group
2425          * @priv: Private driver interface data
2426          * @peer: Device Address of the peer P2P Device
2427          * @role: Local role in the group
2428          * @bssid: Group BSSID or %NULL if not known
2429          * @ssid: Group SSID
2430          * @ssid_len: Length of ssid in octets
2431          * @go_dev_addr: Forced GO Device Address or %NULL if none
2432          * @persistent_group: Whether this is to reinvoke a persistent group
2433          * Returns: 0 on success, -1 on failure
2434          */
2435         int (*p2p_invite)(void *priv, const u8 *peer, int role,
2436                           const u8 *bssid, const u8 *ssid, size_t ssid_len,
2437                           const u8 *go_dev_addr, int persistent_group);
2438
2439         /**
2440          * send_tdls_mgmt - for sending TDLS management packets
2441          * @priv: private driver interface data
2442          * @dst: Destination (peer) MAC address
2443          * @action_code: TDLS action code for the mssage
2444          * @dialog_token: Dialog Token to use in the message (if needed)
2445          * @status_code: Status Code or Reason Code to use (if needed)
2446          * @buf: TDLS IEs to add to the message
2447          * @len: Length of buf in octets
2448          * Returns: 0 on success, negative (<0) on failure
2449          *
2450          * This optional function can be used to send packet to driver which is
2451          * responsible for receiving and sending all TDLS packets.
2452          */
2453         int (*send_tdls_mgmt)(void *priv, const u8 *dst, u8 action_code,
2454                               u8 dialog_token, u16 status_code,
2455                               const u8 *buf, size_t len);
2456
2457         /**
2458          * tdls_oper - Ask the driver to perform high-level TDLS operations
2459          * @priv: Private driver interface data
2460          * @oper: TDLS high-level operation. See %enum tdls_oper
2461          * @peer: Destination (peer) MAC address
2462          * Returns: 0 on success, negative (<0) on failure
2463          *
2464          * This optional function can be used to send high-level TDLS commands
2465          * to the driver.
2466          */
2467         int (*tdls_oper)(void *priv, enum tdls_oper oper, const u8 *peer);
2468
2469         /**
2470          * wnm_oper - Notify driver of the WNM frame reception
2471          * @priv: Private driver interface data
2472          * @oper: WNM operation. See %enum wnm_oper
2473          * @peer: Destination (peer) MAC address
2474          * @buf: Buffer for the driver to fill in (for getting IE)
2475          * @buf_len: Return the len of buf
2476          * Returns: 0 on success, negative (<0) on failure
2477          */
2478         int (*wnm_oper)(void *priv, enum wnm_oper oper, const u8 *peer,
2479                         u8 *buf, u16 *buf_len);
2480
2481         /**
2482          * signal_poll - Get current connection information
2483          * @priv: Private driver interface data
2484          * @signal_info: Connection info structure
2485          */
2486         int (*signal_poll)(void *priv, struct wpa_signal_info *signal_info);
2487
2488         /**
2489          * set_authmode - Set authentication algorithm(s) for static WEP
2490          * @priv: Private driver interface data
2491          * @authmode: 1=Open System, 2=Shared Key, 3=both
2492          * Returns: 0 on success, -1 on failure
2493          *
2494          * This function can be used to set authentication algorithms for AP
2495          * mode when static WEP is used. If the driver uses user space MLME/SME
2496          * implementation, there is no need to implement this function.
2497          *
2498          * DEPRECATED - use set_ap() instead
2499          */
2500         int (*set_authmode)(void *priv, int authmode);
2501
2502         /**
2503          * set_rekey_info - Set rekey information
2504          * @priv: Private driver interface data
2505          * @kek: Current KEK
2506          * @kck: Current KCK
2507          * @replay_ctr: Current EAPOL-Key Replay Counter
2508          *
2509          * This optional function can be used to provide information for the
2510          * driver/firmware to process EAPOL-Key frames in Group Key Handshake
2511          * while the host (including wpa_supplicant) is sleeping.
2512          */
2513         void (*set_rekey_info)(void *priv, const u8 *kek, const u8 *kck,
2514                                const u8 *replay_ctr);
2515
2516         /**
2517          * sta_assoc - Station association indication
2518          * @priv: Private driver interface data
2519          * @own_addr: Source address and BSSID for association frame
2520          * @addr: MAC address of the station to associate
2521          * @reassoc: flag to indicate re-association
2522          * @status: association response status code
2523          * @ie: assoc response ie buffer
2524          * @len: ie buffer length
2525          * Returns: 0 on success, -1 on failure
2526          *
2527          * This function indicates the driver to send (Re)Association
2528          * Response frame to the station.
2529          */
2530          int (*sta_assoc)(void *priv, const u8 *own_addr, const u8 *addr,
2531                           int reassoc, u16 status, const u8 *ie, size_t len);
2532
2533         /**
2534          * sta_auth - Station authentication indication
2535          * @priv: Private driver interface data
2536          * @own_addr: Source address and BSSID for authentication frame
2537          * @addr: MAC address of the station to associate
2538          * @seq: authentication sequence number
2539          * @status: authentication response status code
2540          * @ie: authentication frame ie buffer
2541          * @len: ie buffer length
2542          *
2543          * This function indicates the driver to send Authentication frame
2544          * to the station.
2545          */
2546          int (*sta_auth)(void *priv, const u8 *own_addr, const u8 *addr,
2547                          u16 seq, u16 status, const u8 *ie, size_t len);
2548
2549         /**
2550          * add_tspec - Add traffic stream
2551          * @priv: Private driver interface data
2552          * @addr: MAC address of the station to associate
2553          * @tspec_ie: tspec ie buffer
2554          * @tspec_ielen: tspec ie length
2555          * Returns: 0 on success, -1 on failure
2556          *
2557          * This function adds the traffic steam for the station
2558          * and fills the medium_time in tspec_ie.
2559          */
2560          int (*add_tspec)(void *priv, const u8 *addr, u8 *tspec_ie,
2561                           size_t tspec_ielen);
2562
2563         /**
2564          * add_sta_node - Add a station node in the driver
2565          * @priv: Private driver interface data
2566          * @addr: MAC address of the station to add
2567          * @auth_alg: authentication algorithm used by the station
2568          * Returns: 0 on success, -1 on failure
2569          *
2570          * This function adds the station node in the driver, when
2571          * the station gets added by FT-over-DS.
2572          */
2573         int (*add_sta_node)(void *priv, const u8 *addr, u16 auth_alg);
2574
2575         /**
2576          * sched_scan - Request the driver to initiate scheduled scan
2577          * @priv: Private driver interface data
2578          * @params: Scan parameters
2579          * @interval: Interval between scan cycles in milliseconds
2580          * Returns: 0 on success, -1 on failure
2581          *
2582          * This operation should be used for scheduled scan offload to
2583          * the hardware. Every time scan results are available, the
2584          * driver should report scan results event for wpa_supplicant
2585          * which will eventually request the results with
2586          * wpa_driver_get_scan_results2(). This operation is optional
2587          * and if not provided or if it returns -1, we fall back to
2588          * normal host-scheduled scans.
2589          */
2590         int (*sched_scan)(void *priv, struct wpa_driver_scan_params *params,
2591                           u32 interval);
2592
2593         /**
2594          * stop_sched_scan - Request the driver to stop a scheduled scan
2595          * @priv: Private driver interface data
2596          * Returns: 0 on success, -1 on failure
2597          *
2598          * This should cause the scheduled scan to be stopped and
2599          * results should stop being sent. Must be supported if
2600          * sched_scan is supported.
2601          */
2602         int (*stop_sched_scan)(void *priv);
2603
2604         /**
2605          * poll_client - Probe (null data or such) the given station
2606          * @priv: Private driver interface data
2607          * @own_addr: MAC address of sending interface
2608          * @addr: MAC address of the station to probe
2609          * @qos: Indicates whether station is QoS station
2610          *
2611          * This function is used to verify whether an associated station is
2612          * still present. This function does not need to be implemented if the
2613          * driver provides such inactivity polling mechanism.
2614          */
2615         void (*poll_client)(void *priv, const u8 *own_addr,
2616                             const u8 *addr, int qos);
2617
2618         /**
2619          * radio_disable - Disable/enable radio
2620          * @priv: Private driver interface data
2621          * @disabled: 1=disable 0=enable radio
2622          * Returns: 0 on success, -1 on failure
2623          *
2624          * This optional command is for testing purposes. It can be used to
2625          * disable the radio on a testbed device to simulate out-of-radio-range
2626          * conditions.
2627          */
2628         int (*radio_disable)(void *priv, int disabled);
2629
2630         /**
2631          * switch_channel - Announce channel switch and migrate the GO to the
2632          * given frequency
2633          * @priv: Private driver interface data
2634          * @freq: Frequency in MHz
2635          * Returns: 0 on success, -1 on failure
2636          *
2637          * This function is used to move the GO to the legacy STA channel to
2638          * avoid frequency conflict in single channel concurrency.
2639          */
2640         int (*switch_channel)(void *priv, unsigned int freq);
2641 };
2642
2643
2644 /**
2645  * enum wpa_event_type - Event type for wpa_supplicant_event() calls
2646  */
2647 enum wpa_event_type {
2648         /**
2649          * EVENT_ASSOC - Association completed
2650          *
2651          * This event needs to be delivered when the driver completes IEEE
2652          * 802.11 association or reassociation successfully.
2653          * wpa_driver_ops::get_bssid() is expected to provide the current BSSID
2654          * after this event has been generated. In addition, optional
2655          * EVENT_ASSOCINFO may be generated just before EVENT_ASSOC to provide
2656          * more information about the association. If the driver interface gets
2657          * both of these events at the same time, it can also include the
2658          * assoc_info data in EVENT_ASSOC call.
2659          */
2660         EVENT_ASSOC,
2661
2662         /**
2663          * EVENT_DISASSOC - Association lost
2664          *
2665          * This event should be called when association is lost either due to
2666          * receiving deauthenticate or disassociate frame from the AP or when
2667          * sending either of these frames to the current AP. If the driver
2668          * supports separate deauthentication event, EVENT_DISASSOC should only
2669          * be used for disassociation and EVENT_DEAUTH for deauthentication.
2670          * In AP mode, union wpa_event_data::disassoc_info is required.
2671          */
2672         EVENT_DISASSOC,
2673
2674         /**
2675          * EVENT_MICHAEL_MIC_FAILURE - Michael MIC (TKIP) detected
2676          *
2677          * This event must be delivered when a Michael MIC error is detected by
2678          * the local driver. Additional data for event processing is
2679          * provided with union wpa_event_data::michael_mic_failure. This
2680          * information is used to request new encyption key and to initiate
2681          * TKIP countermeasures if needed.
2682          */
2683         EVENT_MICHAEL_MIC_FAILURE,
2684
2685         /**
2686          * EVENT_SCAN_RESULTS - Scan results available
2687          *
2688          * This event must be called whenever scan results are available to be
2689          * fetched with struct wpa_driver_ops::get_scan_results(). This event
2690          * is expected to be used some time after struct wpa_driver_ops::scan()
2691          * is called. If the driver provides an unsolicited event when the scan
2692          * has been completed, this event can be used to trigger
2693          * EVENT_SCAN_RESULTS call. If such event is not available from the
2694          * driver, the driver wrapper code is expected to use a registered
2695          * timeout to generate EVENT_SCAN_RESULTS call after the time that the
2696          * scan is expected to be completed. Optional information about
2697          * completed scan can be provided with union wpa_event_data::scan_info.
2698          */
2699         EVENT_SCAN_RESULTS,
2700
2701         /**
2702          * EVENT_ASSOCINFO - Report optional extra information for association
2703          *
2704          * This event can be used to report extra association information for
2705          * EVENT_ASSOC processing. This extra information includes IEs from
2706          * association frames and Beacon/Probe Response frames in union
2707          * wpa_event_data::assoc_info. EVENT_ASSOCINFO must be send just before
2708          * EVENT_ASSOC. Alternatively, the driver interface can include
2709          * assoc_info data in the EVENT_ASSOC call if it has all the
2710          * information available at the same point.
2711          */
2712         EVENT_ASSOCINFO,
2713
2714         /**
2715          * EVENT_INTERFACE_STATUS - Report interface status changes
2716          *
2717          * This optional event can be used to report changes in interface
2718          * status (interface added/removed) using union
2719          * wpa_event_data::interface_status. This can be used to trigger
2720          * wpa_supplicant to stop and re-start processing for the interface,
2721          * e.g., when a cardbus card is ejected/inserted.
2722          */
2723         EVENT_INTERFACE_STATUS,
2724
2725         /**
2726          * EVENT_PMKID_CANDIDATE - Report a candidate AP for pre-authentication
2727          *
2728          * This event can be used to inform wpa_supplicant about candidates for
2729          * RSN (WPA2) pre-authentication. If wpa_supplicant is not responsible
2730          * for scan request (ap_scan=2 mode), this event is required for
2731          * pre-authentication. If wpa_supplicant is performing scan request
2732          * (ap_scan=1), this event is optional since scan results can be used
2733          * to add pre-authentication candidates. union
2734          * wpa_event_data::pmkid_candidate is used to report the BSSID of the
2735          * candidate and priority of the candidate, e.g., based on the signal
2736          * strength, in order to try to pre-authenticate first with candidates
2737          * that are most likely targets for re-association.
2738          *
2739          * EVENT_PMKID_CANDIDATE can be called whenever the driver has updates
2740          * on the candidate list. In addition, it can be called for the current
2741          * AP and APs that have existing PMKSA cache entries. wpa_supplicant
2742          * will automatically skip pre-authentication in cases where a valid
2743          * PMKSA exists. When more than one candidate exists, this event should
2744          * be generated once for each candidate.
2745          *
2746          * Driver will be notified about successful pre-authentication with
2747          * struct wpa_driver_ops::add_pmkid() calls.
2748          */
2749         EVENT_PMKID_CANDIDATE,
2750
2751         /**
2752          * EVENT_STKSTART - Request STK handshake (MLME-STKSTART.request)
2753          *
2754          * This event can be used to inform wpa_supplicant about desire to set
2755          * up secure direct link connection between two stations as defined in
2756          * IEEE 802.11e with a new PeerKey mechanism that replaced the original
2757          * STAKey negotiation. The caller will need to set peer address for the
2758          * event.
2759          */
2760         EVENT_STKSTART,
2761
2762         /**
2763          * EVENT_TDLS - Request TDLS operation
2764          *
2765          * This event can be used to request a TDLS operation to be performed.
2766          */
2767         EVENT_TDLS,
2768
2769         /**
2770          * EVENT_FT_RESPONSE - Report FT (IEEE 802.11r) response IEs
2771          *
2772          * The driver is expected to report the received FT IEs from
2773          * FT authentication sequence from the AP. The FT IEs are included in
2774          * the extra information in union wpa_event_data::ft_ies.
2775          */
2776         EVENT_FT_RESPONSE,
2777
2778         /**
2779          * EVENT_IBSS_RSN_START - Request RSN authentication in IBSS
2780          *
2781          * The driver can use this event to inform wpa_supplicant about a STA
2782          * in an IBSS with which protected frames could be exchanged. This
2783          * event starts RSN authentication with the other STA to authenticate
2784          * the STA and set up encryption keys with it.
2785          */
2786         EVENT_IBSS_RSN_START,
2787
2788         /**
2789          * EVENT_AUTH - Authentication result
2790          *
2791          * This event should be called when authentication attempt has been
2792          * completed. This is only used if the driver supports separate
2793          * authentication step (struct wpa_driver_ops::authenticate).
2794          * Information about authentication result is included in
2795          * union wpa_event_data::auth.
2796          */
2797         EVENT_AUTH,
2798
2799         /**
2800          * EVENT_DEAUTH - Authentication lost
2801          *
2802          * This event should be called when authentication is lost either due
2803          * to receiving deauthenticate frame from the AP or when sending that
2804          * frame to the current AP.
2805          * In AP mode, union wpa_event_data::deauth_info is required.
2806          */
2807         EVENT_DEAUTH,
2808
2809         /**
2810          * EVENT_ASSOC_REJECT - Association rejected
2811          *
2812          * This event should be called when (re)association attempt has been
2813          * rejected by the AP. Information about the association response is
2814          * included in union wpa_event_data::assoc_reject.
2815          */
2816         EVENT_ASSOC_REJECT,
2817
2818         /**
2819          * EVENT_AUTH_TIMED_OUT - Authentication timed out
2820          */
2821         EVENT_AUTH_TIMED_OUT,
2822
2823         /**
2824          * EVENT_ASSOC_TIMED_OUT - Association timed out
2825          */
2826         EVENT_ASSOC_TIMED_OUT,
2827
2828         /**
2829          * EVENT_FT_RRB_RX - FT (IEEE 802.11r) RRB frame received
2830          */
2831         EVENT_FT_RRB_RX,
2832
2833         /**
2834          * EVENT_WPS_BUTTON_PUSHED - Report hardware push button press for WPS
2835          */
2836         EVENT_WPS_BUTTON_PUSHED,
2837
2838         /**
2839          * EVENT_TX_STATUS - Report TX status
2840          */
2841         EVENT_TX_STATUS,
2842
2843         /**
2844          * EVENT_RX_FROM_UNKNOWN - Report RX from unknown STA
2845          */
2846         EVENT_RX_FROM_UNKNOWN,
2847
2848         /**
2849          * EVENT_RX_MGMT - Report RX of a management frame
2850          */
2851         EVENT_RX_MGMT,
2852
2853         /**
2854          * EVENT_RX_ACTION - Action frame received
2855          *
2856          * This event is used to indicate when an Action frame has been
2857          * received. Information about the received frame is included in
2858          * union wpa_event_data::rx_action.
2859          */
2860         EVENT_RX_ACTION,
2861
2862         /**
2863          * EVENT_REMAIN_ON_CHANNEL - Remain-on-channel duration started
2864          *
2865          * This event is used to indicate when the driver has started the
2866          * requested remain-on-channel duration. Information about the
2867          * operation is included in union wpa_event_data::remain_on_channel.
2868          */
2869         EVENT_REMAIN_ON_CHANNEL,
2870
2871         /**
2872          * EVENT_CANCEL_REMAIN_ON_CHANNEL - Remain-on-channel timed out
2873          *
2874          * This event is used to indicate when the driver has completed
2875          * remain-on-channel duration, i.e., may noot be available on the
2876          * requested channel anymore. Information about the
2877          * operation is included in union wpa_event_data::remain_on_channel.
2878          */
2879         EVENT_CANCEL_REMAIN_ON_CHANNEL,
2880
2881         /**
2882          * EVENT_MLME_RX - Report reception of frame for MLME (test use only)
2883          *
2884          * This event is used only by driver_test.c and userspace MLME.
2885          */
2886         EVENT_MLME_RX,
2887
2888         /**
2889          * EVENT_RX_PROBE_REQ - Indicate received Probe Request frame
2890          *
2891          * This event is used to indicate when a Probe Request frame has been
2892          * received. Information about the received frame is included in
2893          * union wpa_event_data::rx_probe_req. The driver is required to report
2894          * these events only after successfully completed probe_req_report()
2895          * commands to request the events (i.e., report parameter is non-zero)
2896          * in station mode. In AP mode, Probe Request frames should always be
2897          * reported.
2898          */
2899         EVENT_RX_PROBE_REQ,
2900
2901         /**
2902          * EVENT_NEW_STA - New wired device noticed
2903          *
2904          * This event is used to indicate that a new device has been detected
2905          * in a network that does not use association-like functionality (i.e.,
2906          * mainly wired Ethernet). This can be used to start EAPOL
2907          * authenticator when receiving a frame from a device. The address of
2908          * the device is included in union wpa_event_data::new_sta.
2909          */
2910         EVENT_NEW_STA,
2911
2912         /**
2913          * EVENT_EAPOL_RX - Report received EAPOL frame
2914          *
2915          * When in AP mode with hostapd, this event is required to be used to
2916          * deliver the receive EAPOL frames from the driver. With
2917          * %wpa_supplicant, this event is used only if the send_eapol() handler
2918          * is used to override the use of l2_packet for EAPOL frame TX.
2919          */
2920         EVENT_EAPOL_RX,
2921
2922         /**
2923          * EVENT_SIGNAL_CHANGE - Indicate change in signal strength
2924          *
2925          * This event is used to indicate changes in the signal strength
2926          * observed in frames received from the current AP if signal strength
2927          * monitoring has been enabled with signal_monitor().
2928          */
2929         EVENT_SIGNAL_CHANGE,
2930
2931         /**
2932          * EVENT_INTERFACE_ENABLED - Notify that interface was enabled
2933          *
2934          * This event is used to indicate that the interface was enabled after
2935          * having been previously disabled, e.g., due to rfkill.
2936          */
2937         EVENT_INTERFACE_ENABLED,
2938
2939         /**
2940          * EVENT_INTERFACE_DISABLED - Notify that interface was disabled
2941          *
2942          * This event is used to indicate that the interface was disabled,
2943          * e.g., due to rfkill.
2944          */
2945         EVENT_INTERFACE_DISABLED,
2946
2947         /**
2948          * EVENT_CHANNEL_LIST_CHANGED - Channel list changed
2949          *
2950          * This event is used to indicate that the channel list has changed,
2951          * e.g., because of a regulatory domain change triggered by scan
2952          * results including an AP advertising a country code.
2953          */
2954         EVENT_CHANNEL_LIST_CHANGED,
2955
2956         /**
2957          * EVENT_INTERFACE_UNAVAILABLE - Notify that interface is unavailable
2958          *
2959          * This event is used to indicate that the driver cannot maintain this
2960          * interface in its operation mode anymore. The most likely use for
2961          * this is to indicate that AP mode operation is not available due to
2962          * operating channel would need to be changed to a DFS channel when
2963          * the driver does not support radar detection and another virtual
2964          * interfaces caused the operating channel to change. Other similar
2965          * resource conflicts could also trigger this for station mode
2966          * interfaces.
2967          */
2968         EVENT_INTERFACE_UNAVAILABLE,
2969
2970         /**
2971          * EVENT_BEST_CHANNEL
2972          *
2973          * Driver generates this event whenever it detects a better channel
2974          * (e.g., based on RSSI or channel use). This information can be used
2975          * to improve channel selection for a new AP/P2P group.
2976          */
2977         EVENT_BEST_CHANNEL,
2978
2979         /**
2980          * EVENT_UNPROT_DEAUTH - Unprotected Deauthentication frame received
2981          *
2982          * This event should be called when a Deauthentication frame is dropped
2983          * due to it not being protected (MFP/IEEE 802.11w).
2984          * union wpa_event_data::unprot_deauth is required to provide more
2985          * details of the frame.
2986          */
2987         EVENT_UNPROT_DEAUTH,
2988
2989         /**
2990          * EVENT_UNPROT_DISASSOC - Unprotected Disassociation frame received
2991          *
2992          * This event should be called when a Disassociation frame is dropped
2993          * due to it not being protected (MFP/IEEE 802.11w).
2994          * union wpa_event_data::unprot_disassoc is required to provide more
2995          * details of the frame.
2996          */
2997         EVENT_UNPROT_DISASSOC,
2998
2999         /**
3000          * EVENT_STATION_LOW_ACK
3001          *
3002          * Driver generates this event whenever it detected that a particular
3003          * station was lost. Detection can be through massive transmission
3004          * failures for example.
3005          */
3006         EVENT_STATION_LOW_ACK,
3007
3008         /**
3009          * EVENT_P2P_DEV_FOUND - Report a discovered P2P device
3010          *
3011          * This event is used only if the driver implements P2P management
3012          * internally. Event data is stored in
3013          * union wpa_event_data::p2p_dev_found.
3014          */
3015         EVENT_P2P_DEV_FOUND,
3016
3017         /**
3018          * EVENT_P2P_GO_NEG_REQ_RX - Report reception of GO Negotiation Request
3019          *
3020          * This event is used only if the driver implements P2P management
3021          * internally. Event data is stored in
3022          * union wpa_event_data::p2p_go_neg_req_rx.
3023          */
3024         EVENT_P2P_GO_NEG_REQ_RX,
3025
3026         /**
3027          * EVENT_P2P_GO_NEG_COMPLETED - Report completion of GO Negotiation
3028          *
3029          * This event is used only if the driver implements P2P management
3030          * internally. Event data is stored in
3031          * union wpa_event_data::p2p_go_neg_completed.
3032          */
3033         EVENT_P2P_GO_NEG_COMPLETED,
3034
3035         EVENT_P2P_PROV_DISC_REQUEST,
3036         EVENT_P2P_PROV_DISC_RESPONSE,
3037         EVENT_P2P_SD_REQUEST,
3038         EVENT_P2P_SD_RESPONSE,
3039
3040         /**
3041          * EVENT_IBSS_PEER_LOST - IBSS peer not reachable anymore
3042          */
3043         EVENT_IBSS_PEER_LOST,
3044
3045         /**
3046          * EVENT_DRIVER_GTK_REKEY - Device/driver did GTK rekey
3047          *
3048          * This event carries the new replay counter to notify wpa_supplicant
3049          * of the current EAPOL-Key Replay Counter in case the driver/firmware
3050          * completed Group Key Handshake while the host (including
3051          * wpa_supplicant was sleeping).
3052          */
3053         EVENT_DRIVER_GTK_REKEY,
3054
3055         /**
3056          * EVENT_SCHED_SCAN_STOPPED - Scheduled scan was stopped
3057          */
3058         EVENT_SCHED_SCAN_STOPPED,
3059
3060         /**
3061          * EVENT_DRIVER_CLIENT_POLL_OK - Station responded to poll
3062          *
3063          * This event indicates that the station responded to the poll
3064          * initiated with @poll_client.
3065          */
3066         EVENT_DRIVER_CLIENT_POLL_OK,
3067
3068         /**
3069          * EVENT_EAPOL_TX_STATUS - notify of EAPOL TX status
3070          */
3071         EVENT_EAPOL_TX_STATUS,
3072
3073         /**
3074          * EVENT_CH_SWITCH - AP or GO decided to switch channels
3075          *
3076          * Described in wpa_event_data.ch_switch
3077          * */
3078         EVENT_CH_SWITCH,
3079
3080         /**
3081          * EVENT_WNM - Request WNM operation
3082          *
3083          * This event can be used to request a WNM operation to be performed.
3084          */
3085         EVENT_WNM,
3086
3087         /**
3088          * EVENT_CONNECT_FAILED_REASON - Connection failure reason in AP mode
3089          *
3090          * This event indicates that the driver reported a connection failure
3091          * with the specified client (for example, max client reached, etc.) in
3092          * AP mode.
3093          */
3094         EVENT_CONNECT_FAILED_REASON
3095 };
3096
3097
3098 /**
3099  * union wpa_event_data - Additional data for wpa_supplicant_event() calls
3100  */
3101 union wpa_event_data {
3102         /**
3103          * struct assoc_info - Data for EVENT_ASSOC and EVENT_ASSOCINFO events
3104          *
3105          * This structure is optional for EVENT_ASSOC calls and required for
3106          * EVENT_ASSOCINFO calls. By using EVENT_ASSOC with this data, the
3107          * driver interface does not need to generate separate EVENT_ASSOCINFO
3108          * calls.
3109          */
3110         struct assoc_info {
3111                 /**
3112                  * reassoc - Flag to indicate association or reassociation
3113                  */
3114                 int reassoc;
3115
3116                 /**
3117                  * req_ies - (Re)Association Request IEs
3118                  *
3119                  * If the driver generates WPA/RSN IE, this event data must be
3120                  * returned for WPA handshake to have needed information. If
3121                  * wpa_supplicant-generated WPA/RSN IE is used, this
3122                  * information event is optional.
3123                  *
3124                  * This should start with the first IE (fixed fields before IEs
3125                  * are not included).
3126                  */
3127                 const u8 *req_ies;
3128
3129                 /**
3130                  * req_ies_len - Length of req_ies in bytes
3131                  */
3132                 size_t req_ies_len;
3133
3134                 /**
3135                  * resp_ies - (Re)Association Response IEs
3136                  *
3137                  * Optional association data from the driver. This data is not
3138                  * required WPA, but may be useful for some protocols and as
3139                  * such, should be reported if this is available to the driver
3140                  * interface.
3141                  *
3142                  * This should start with the first IE (fixed fields before IEs
3143                  * are not included).
3144                  */
3145                 const u8 *resp_ies;
3146
3147                 /**
3148                  * resp_ies_len - Length of resp_ies in bytes
3149                  */
3150                 size_t resp_ies_len;
3151
3152                 /**
3153                  * beacon_ies - Beacon or Probe Response IEs
3154                  *
3155                  * Optional Beacon/ProbeResp data: IEs included in Beacon or
3156                  * Probe Response frames from the current AP (i.e., the one
3157                  * that the client just associated with). This information is
3158                  * used to update WPA/RSN IE for the AP. If this field is not
3159                  * set, the results from previous scan will be used. If no
3160                  * data for the new AP is found, scan results will be requested
3161                  * again (without scan request). At this point, the driver is
3162                  * expected to provide WPA/RSN IE for the AP (if WPA/WPA2 is
3163                  * used).
3164                  *
3165                  * This should start with the first IE (fixed fields before IEs
3166                  * are not included).
3167                  */
3168                 const u8 *beacon_ies;
3169
3170                 /**
3171                  * beacon_ies_len - Length of beacon_ies */
3172                 size_t beacon_ies_len;
3173
3174                 /**
3175                  * freq - Frequency of the operational channel in MHz
3176                  */
3177                 unsigned int freq;
3178
3179                 /**
3180                  * addr - Station address (for AP mode)
3181                  */
3182                 const u8 *addr;
3183         } assoc_info;
3184
3185         /**
3186          * struct disassoc_info - Data for EVENT_DISASSOC events
3187          */
3188         struct disassoc_info {
3189                 /**
3190                  * addr - Station address (for AP mode)
3191                  */
3192                 const u8 *addr;
3193
3194                 /**
3195                  * reason_code - Reason Code (host byte order) used in
3196                  *      Deauthentication frame
3197                  */
3198                 u16 reason_code;
3199
3200                 /**
3201                  * ie - Optional IE(s) in Disassociation frame
3202                  */
3203                 const u8 *ie;
3204
3205                 /**
3206                  * ie_len - Length of ie buffer in octets
3207                  */
3208                 size_t ie_len;
3209
3210                 /**
3211                  * locally_generated - Whether the frame was locally generated
3212                  */
3213                 int locally_generated;
3214         } disassoc_info;
3215
3216         /**
3217          * struct deauth_info - Data for EVENT_DEAUTH events
3218          */
3219         struct deauth_info {
3220                 /**
3221                  * addr - Station address (for AP mode)
3222                  */
3223                 const u8 *addr;
3224
3225                 /**
3226                  * reason_code - Reason Code (host byte order) used in
3227                  *      Deauthentication frame
3228                  */
3229                 u16 reason_code;
3230
3231                 /**
3232                  * ie - Optional IE(s) in Deauthentication frame
3233                  */
3234                 const u8 *ie;
3235
3236                 /**
3237                  * ie_len - Length of ie buffer in octets
3238                  */
3239                 size_t ie_len;
3240
3241                 /**
3242                  * locally_generated - Whether the frame was locally generated
3243                  */
3244                 int locally_generated;
3245         } deauth_info;
3246
3247         /**
3248          * struct michael_mic_failure - Data for EVENT_MICHAEL_MIC_FAILURE
3249          */
3250         struct michael_mic_failure {
3251                 int unicast;
3252                 const u8 *src;
3253         } michael_mic_failure;
3254
3255         /**
3256          * struct interface_status - Data for EVENT_INTERFACE_STATUS
3257          */
3258         struct interface_status {
3259                 char ifname[100];
3260                 enum {
3261                         EVENT_INTERFACE_ADDED, EVENT_INTERFACE_REMOVED
3262                 } ievent;
3263         } interface_status;
3264
3265         /**
3266          * struct pmkid_candidate - Data for EVENT_PMKID_CANDIDATE
3267          */
3268         struct pmkid_candidate {
3269                 /** BSSID of the PMKID candidate */
3270                 u8 bssid[ETH_ALEN];
3271                 /** Smaller the index, higher the priority */
3272                 int index;
3273                 /** Whether RSN IE includes pre-authenticate flag */
3274                 int preauth;
3275         } pmkid_candidate;
3276
3277         /**
3278          * struct stkstart - Data for EVENT_STKSTART
3279          */
3280         struct stkstart {
3281                 u8 peer[ETH_ALEN];
3282         } stkstart;
3283
3284         /**
3285          * struct tdls - Data for EVENT_TDLS
3286          */
3287         struct tdls {
3288                 u8 peer[ETH_ALEN];
3289                 enum {
3290                         TDLS_REQUEST_SETUP,
3291                         TDLS_REQUEST_TEARDOWN
3292                 } oper;
3293                 u16 reason_code; /* for teardown */
3294         } tdls;
3295
3296         /**
3297          * struct wnm - Data for EVENT_WNM
3298          */
3299         struct wnm {
3300                 u8 addr[ETH_ALEN];
3301                 enum {
3302                         WNM_OPER_SLEEP,
3303                 } oper;
3304                 enum {
3305                         WNM_SLEEP_ENTER,
3306                         WNM_SLEEP_EXIT
3307                 } sleep_action;
3308                 int sleep_intval;
3309                 u16 reason_code;
3310                 u8 *buf;
3311                 u16 buf_len;
3312         } wnm;
3313
3314         /**
3315          * struct ft_ies - FT information elements (EVENT_FT_RESPONSE)
3316          *
3317          * During FT (IEEE 802.11r) authentication sequence, the driver is
3318          * expected to use this event to report received FT IEs (MDIE, FTIE,
3319          * RSN IE, TIE, possible resource request) to the supplicant. The FT
3320          * IEs for the next message will be delivered through the
3321          * struct wpa_driver_ops::update_ft_ies() callback.
3322          */
3323         struct ft_ies {
3324                 const u8 *ies;
3325                 size_t ies_len;
3326                 int ft_action;
3327                 u8 target_ap[ETH_ALEN];
3328                 /** Optional IE(s), e.g., WMM TSPEC(s), for RIC-Request */
3329                 const u8 *ric_ies;
3330                 /** Length of ric_ies buffer in octets */
3331                 size_t ric_ies_len;
3332         } ft_ies;
3333
3334         /**
3335          * struct ibss_rsn_start - Data for EVENT_IBSS_RSN_START
3336          */
3337         struct ibss_rsn_start {
3338                 u8 peer[ETH_ALEN];
3339         } ibss_rsn_start;
3340
3341         /**
3342          * struct auth_info - Data for EVENT_AUTH events
3343          */
3344         struct auth_info {
3345                 u8 peer[ETH_ALEN];
3346                 u8 bssid[ETH_ALEN];
3347                 u16 auth_type;
3348                 u16 auth_transaction;
3349                 u16 status_code;
3350                 const u8 *ies;
3351                 size_t ies_len;
3352         } auth;
3353
3354         /**
3355          * struct assoc_reject - Data for EVENT_ASSOC_REJECT events
3356          */
3357         struct assoc_reject {
3358                 /**
3359                  * bssid - BSSID of the AP that rejected association
3360                  */
3361                 const u8 *bssid;
3362
3363                 /**
3364                  * resp_ies - (Re)Association Response IEs
3365                  *
3366                  * Optional association data from the driver. This data is not
3367                  * required WPA, but may be useful for some protocols and as
3368                  * such, should be reported if this is available to the driver
3369                  * interface.
3370                  *
3371                  * This should start with the first IE (fixed fields before IEs
3372                  * are not included).
3373                  */
3374                 const u8 *resp_ies;
3375
3376                 /**
3377                  * resp_ies_len - Length of resp_ies in bytes
3378                  */
3379                 size_t resp_ies_len;
3380
3381                 /**
3382                  * status_code - Status Code from (Re)association Response
3383                  */
3384                 u16 status_code;
3385         } assoc_reject;
3386
3387         struct timeout_event {
3388                 u8 addr[ETH_ALEN];
3389         } timeout_event;
3390
3391         /**
3392          * struct ft_rrb_rx - Data for EVENT_FT_RRB_RX events
3393          */
3394         struct ft_rrb_rx {
3395                 const u8 *src;
3396                 const u8 *data;
3397                 size_t data_len;
3398         } ft_rrb_rx;
3399
3400         /**
3401          * struct tx_status - Data for EVENT_TX_STATUS events
3402          */
3403         struct tx_status {
3404                 u16 type;
3405                 u16 stype;
3406                 const u8 *dst;
3407                 const u8 *data;
3408                 size_t data_len;
3409                 int ack;
3410         } tx_status;
3411
3412         /**
3413          * struct rx_from_unknown - Data for EVENT_RX_FROM_UNKNOWN events
3414          */
3415         struct rx_from_unknown {
3416                 const u8 *bssid;
3417                 const u8 *addr;
3418                 int wds;
3419         } rx_from_unknown;
3420
3421         /**
3422          * struct rx_mgmt - Data for EVENT_RX_MGMT events
3423          */
3424         struct rx_mgmt {
3425                 const u8 *frame;
3426                 size_t frame_len;
3427                 u32 datarate;
3428                 int ssi_signal; /* dBm */
3429         } rx_mgmt;
3430
3431         /**
3432          * struct rx_action - Data for EVENT_RX_ACTION events
3433          */
3434         struct rx_action {
3435                 /**
3436                  * da - Destination address of the received Action frame
3437                  */
3438                 const u8 *da;
3439
3440                 /**
3441                  * sa - Source address of the received Action frame
3442                  */
3443                 const u8 *sa;
3444
3445                 /**
3446                  * bssid - Address 3 of the received Action frame
3447                  */
3448                 const u8 *bssid;
3449
3450                 /**
3451                  * category - Action frame category
3452                  */
3453                 u8 category;
3454
3455                 /**
3456                  * data - Action frame body after category field
3457                  */
3458                 const u8 *data;
3459
3460                 /**
3461                  * len - Length of data in octets
3462                  */
3463                 size_t len;
3464
3465                 /**
3466                  * freq - Frequency (in MHz) on which the frame was received
3467                  */
3468                 int freq;
3469         } rx_action;
3470
3471         /**
3472          * struct remain_on_channel - Data for EVENT_REMAIN_ON_CHANNEL events
3473          *
3474          * This is also used with EVENT_CANCEL_REMAIN_ON_CHANNEL events.
3475          */
3476         struct remain_on_channel {
3477                 /**
3478                  * freq - Channel frequency in MHz
3479                  */
3480                 unsigned int freq;
3481
3482                 /**
3483                  * duration - Duration to remain on the channel in milliseconds
3484                  */
3485                 unsigned int duration;
3486         } remain_on_channel;
3487
3488         /**
3489          * struct scan_info - Optional data for EVENT_SCAN_RESULTS events
3490          * @aborted: Whether the scan was aborted
3491          * @freqs: Scanned frequencies in MHz (%NULL = all channels scanned)
3492          * @num_freqs: Number of entries in freqs array
3493          * @ssids: Scanned SSIDs (%NULL or zero-length SSID indicates wildcard
3494          *      SSID)
3495          * @num_ssids: Number of entries in ssids array
3496          */
3497         struct scan_info {
3498                 int aborted;
3499                 const int *freqs;
3500                 size_t num_freqs;
3501                 struct wpa_driver_scan_ssid ssids[WPAS_MAX_SCAN_SSIDS];
3502                 size_t num_ssids;
3503         } scan_info;
3504
3505         /**
3506          * struct mlme_rx - Data for EVENT_MLME_RX events
3507          */
3508         struct mlme_rx {
3509                 const u8 *buf;
3510                 size_t len;
3511                 int freq;
3512                 int channel;
3513                 int ssi;
3514         } mlme_rx;
3515
3516         /**
3517          * struct rx_probe_req - Data for EVENT_RX_PROBE_REQ events
3518          */
3519         struct rx_probe_req {
3520                 /**
3521                  * sa - Source address of the received Probe Request frame
3522                  */
3523                 const u8 *sa;
3524
3525                 /**
3526                  * da - Destination address of the received Probe Request frame
3527                  *      or %NULL if not available
3528                  */
3529                 const u8 *da;
3530
3531                 /**
3532                  * bssid - BSSID of the received Probe Request frame or %NULL
3533                  *      if not available
3534                  */
3535                 const u8 *bssid;
3536
3537                 /**
3538                  * ie - IEs from the Probe Request body
3539                  */
3540                 const u8 *ie;
3541
3542                 /**
3543                  * ie_len - Length of ie buffer in octets
3544                  */
3545                 size_t ie_len;
3546
3547                 /**
3548                  * signal - signal strength in dBm (or 0 if not available)
3549                  */
3550                 int ssi_signal;
3551         } rx_probe_req;
3552
3553         /**
3554          * struct new_sta - Data for EVENT_NEW_STA events
3555          */
3556         struct new_sta {
3557                 const u8 *addr;
3558         } new_sta;
3559
3560         /**
3561          * struct eapol_rx - Data for EVENT_EAPOL_RX events
3562          */
3563         struct eapol_rx {
3564                 const u8 *src;
3565                 const u8 *data;
3566                 size_t data_len;
3567         } eapol_rx;
3568
3569         /**
3570          * signal_change - Data for EVENT_SIGNAL_CHANGE events
3571          */
3572         struct wpa_signal_info signal_change;
3573
3574         /**
3575          * struct best_channel - Data for EVENT_BEST_CHANNEL events
3576          * @freq_24: Best 2.4 GHz band channel frequency in MHz
3577          * @freq_5: Best 5 GHz band channel frequency in MHz
3578          * @freq_overall: Best channel frequency in MHz
3579          *
3580          * 0 can be used to indicate no preference in either band.
3581          */
3582         struct best_channel {
3583                 int freq_24;
3584                 int freq_5;
3585                 int freq_overall;
3586         } best_chan;
3587
3588         struct unprot_deauth {
3589                 const u8 *sa;
3590                 const u8 *da;
3591                 u16 reason_code;
3592         } unprot_deauth;
3593
3594         struct unprot_disassoc {
3595                 const u8 *sa;
3596                 const u8 *da;
3597                 u16 reason_code;
3598         } unprot_disassoc;
3599
3600         /**
3601          * struct low_ack - Data for EVENT_STATION_LOW_ACK events
3602          * @addr: station address
3603          */
3604         struct low_ack {
3605                 u8 addr[ETH_ALEN];
3606         } low_ack;
3607
3608         /**
3609          * struct p2p_dev_found - Data for EVENT_P2P_DEV_FOUND
3610          */
3611         struct p2p_dev_found {
3612                 const u8 *addr;
3613                 const u8 *dev_addr;
3614                 const u8 *pri_dev_type;
3615                 const char *dev_name;
3616                 u16 config_methods;
3617                 u8 dev_capab;
3618                 u8 group_capab;
3619         } p2p_dev_found;
3620
3621         /**
3622          * struct p2p_go_neg_req_rx - Data for EVENT_P2P_GO_NEG_REQ_RX
3623          */
3624         struct p2p_go_neg_req_rx {
3625                 const u8 *src;
3626                 u16 dev_passwd_id;
3627         } p2p_go_neg_req_rx;
3628
3629         /**
3630          * struct p2p_go_neg_completed - Data for EVENT_P2P_GO_NEG_COMPLETED
3631          */
3632         struct p2p_go_neg_completed {
3633                 struct p2p_go_neg_results *res;
3634         } p2p_go_neg_completed;
3635
3636         struct p2p_prov_disc_req {
3637                 const u8 *peer;
3638                 u16 config_methods;
3639                 const u8 *dev_addr;
3640                 const u8 *pri_dev_type;
3641                 const char *dev_name;
3642                 u16 supp_config_methods;
3643                 u8 dev_capab;
3644                 u8 group_capab;
3645         } p2p_prov_disc_req;
3646
3647         struct p2p_prov_disc_resp {
3648                 const u8 *peer;
3649                 u16 config_methods;
3650         } p2p_prov_disc_resp;
3651
3652         struct p2p_sd_req {
3653                 int freq;
3654                 const u8 *sa;
3655                 u8 dialog_token;
3656                 u16 update_indic;
3657                 const u8 *tlvs;
3658                 size_t tlvs_len;
3659         } p2p_sd_req;
3660
3661         struct p2p_sd_resp {
3662                 const u8 *sa;
3663                 u16 update_indic;
3664                 const u8 *tlvs;
3665                 size_t tlvs_len;
3666         } p2p_sd_resp;
3667
3668         /**
3669          * struct ibss_peer_lost - Data for EVENT_IBSS_PEER_LOST
3670          */
3671         struct ibss_peer_lost {
3672                 u8 peer[ETH_ALEN];
3673         } ibss_peer_lost;
3674
3675         /**
3676          * struct driver_gtk_rekey - Data for EVENT_DRIVER_GTK_REKEY
3677          */
3678         struct driver_gtk_rekey {
3679                 const u8 *bssid;
3680                 const u8 *replay_ctr;
3681         } driver_gtk_rekey;
3682
3683         /**
3684          * struct client_poll - Data for EVENT_DRIVER_CLIENT_POLL_OK events
3685          * @addr: station address
3686          */
3687         struct client_poll {
3688                 u8 addr[ETH_ALEN];
3689         } client_poll;
3690
3691         /**
3692          * struct eapol_tx_status
3693          * @dst: Original destination
3694          * @data: Data starting with IEEE 802.1X header (!)
3695          * @data_len: Length of data
3696          * @ack: Indicates ack or lost frame
3697          *
3698          * This corresponds to hapd_send_eapol if the frame sent
3699          * there isn't just reported as EVENT_TX_STATUS.
3700          */
3701         struct eapol_tx_status {
3702                 const u8 *dst;
3703                 const u8 *data;
3704                 int data_len;
3705                 int ack;
3706         } eapol_tx_status;
3707
3708         /**
3709          * struct ch_switch
3710          * @freq: Frequency of new channel in MHz
3711          * @ht_enabled: Whether this is an HT channel
3712          * @ch_offset: Secondary channel offset
3713          */
3714         struct ch_switch {
3715                 int freq;
3716                 int ht_enabled;
3717                 int ch_offset;
3718         } ch_switch;
3719
3720         /**
3721          * struct connect_failed - Data for EVENT_CONNECT_FAILED_REASON
3722          * @addr: Remote client address
3723          * @code: Reason code for connection failure
3724          */
3725         struct connect_failed_reason {
3726                 u8 addr[ETH_ALEN];
3727                 enum {
3728                         MAX_CLIENT_REACHED,
3729                         BLOCKED_CLIENT
3730                 } code;
3731         } connect_failed_reason;
3732 };
3733
3734 /**
3735  * wpa_supplicant_event - Report a driver event for wpa_supplicant
3736  * @ctx: Context pointer (wpa_s); this is the ctx variable registered
3737  *      with struct wpa_driver_ops::init()
3738  * @event: event type (defined above)
3739  * @data: possible extra data for the event
3740  *
3741  * Driver wrapper code should call this function whenever an event is received
3742  * from the driver.
3743  */
3744 void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
3745                           union wpa_event_data *data);
3746
3747
3748 /*
3749  * The following inline functions are provided for convenience to simplify
3750  * event indication for some of the common events.
3751  */
3752
3753 static inline void drv_event_assoc(void *ctx, const u8 *addr, const u8 *ie,
3754                                    size_t ielen, int reassoc)
3755 {
3756         union wpa_event_data event;
3757         os_memset(&event, 0, sizeof(event));
3758         event.assoc_info.reassoc = reassoc;
3759         event.assoc_info.req_ies = ie;
3760         event.assoc_info.req_ies_len = ielen;
3761         event.assoc_info.addr = addr;
3762         wpa_supplicant_event(ctx, EVENT_ASSOC, &event);
3763 }
3764
3765 static inline void drv_event_disassoc(void *ctx, const u8 *addr)
3766 {
3767         union wpa_event_data event;
3768         os_memset(&event, 0, sizeof(event));
3769         event.disassoc_info.addr = addr;
3770         wpa_supplicant_event(ctx, EVENT_DISASSOC, &event);
3771 }
3772
3773 static inline void drv_event_eapol_rx(void *ctx, const u8 *src, const u8 *data,
3774                                       size_t data_len)
3775 {
3776         union wpa_event_data event;
3777         os_memset(&event, 0, sizeof(event));
3778         event.eapol_rx.src = src;
3779         event.eapol_rx.data = data;
3780         event.eapol_rx.data_len = data_len;
3781         wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event);
3782 }
3783
3784 /* driver_common.c */
3785 void wpa_scan_results_free(struct wpa_scan_results *res);
3786
3787 /* Convert wpa_event_type to a string for logging */
3788 const char * event_to_string(enum wpa_event_type event);
3789
3790 #endif /* DRIVER_H */