LCOV - code coverage report
Current view: top level - src/drivers - driver.h (source / functions) Hit Total Coverage
Test: wpa_supplicant hwsim test run 1388943092 Lines: 0 20 0.0 %
Date: 2014-01-05 Functions: 0 3 0.0 %
Branches: 0 0 -

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

Generated by: LCOV version 1.9