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