LCOV - code coverage report
Current view: top level - src/drivers - driver.h (source / functions) Hit Total Coverage
Test: wpa_supplicant/hostapd combined for hwsim test run 1475438200 Lines: 7 20 35.0 %
Date: 2016-10-02 Functions: 1 3 33.3 %

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

Generated by: LCOV version 1.10