1189251Ssam/* 2189251Ssam * wpa_supplicant - Internal definitions 3252726Srpaulo * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 4189251Ssam * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7189251Ssam */ 8189251Ssam 9189251Ssam#ifndef WPA_SUPPLICANT_I_H 10189251Ssam#define WPA_SUPPLICANT_I_H 11189251Ssam 12214734Srpaulo#include "utils/list.h" 13214734Srpaulo#include "common/defs.h" 14252726Srpaulo#include "config_ssid.h" 15189251Ssam 16189251Ssamextern const char *wpa_supplicant_version; 17189251Ssamextern const char *wpa_supplicant_license; 18189251Ssam#ifndef CONFIG_NO_STDOUT_DEBUG 19189251Ssamextern const char *wpa_supplicant_full_license1; 20189251Ssamextern const char *wpa_supplicant_full_license2; 21189251Ssamextern const char *wpa_supplicant_full_license3; 22189251Ssamextern const char *wpa_supplicant_full_license4; 23189251Ssamextern const char *wpa_supplicant_full_license5; 24189251Ssam#endif /* CONFIG_NO_STDOUT_DEBUG */ 25189251Ssam 26189251Ssamstruct wpa_sm; 27189251Ssamstruct wpa_supplicant; 28214734Srpaulostruct ibss_rsn; 29214734Srpaulostruct scan_info; 30214734Srpaulostruct wpa_bss; 31214734Srpaulostruct wpa_scan_results; 32252726Srpaulostruct hostapd_hw_modes; 33252726Srpaulostruct wpa_driver_associate_params; 34189251Ssam 35189251Ssam/* 36189251Ssam * Forward declarations of private structures used within the ctrl_iface 37189251Ssam * backends. Other parts of wpa_supplicant do not have access to data stored in 38189251Ssam * these structures. 39189251Ssam */ 40189251Ssamstruct ctrl_iface_priv; 41189251Ssamstruct ctrl_iface_global_priv; 42214734Srpaulostruct wpas_dbus_priv; 43189251Ssam 44189251Ssam/** 45189251Ssam * struct wpa_interface - Parameters for wpa_supplicant_add_iface() 46189251Ssam */ 47189251Ssamstruct wpa_interface { 48189251Ssam /** 49189251Ssam * confname - Configuration name (file or profile) name 50189251Ssam * 51189251Ssam * This can also be %NULL when a configuration file is not used. In 52189251Ssam * that case, ctrl_interface must be set to allow the interface to be 53189251Ssam * configured. 54189251Ssam */ 55189251Ssam const char *confname; 56189251Ssam 57189251Ssam /** 58189251Ssam * ctrl_interface - Control interface parameter 59189251Ssam * 60189251Ssam * If a configuration file is not used, this variable can be used to 61189251Ssam * set the ctrl_interface parameter that would have otherwise been read 62189251Ssam * from the configuration file. If both confname and ctrl_interface are 63189251Ssam * set, ctrl_interface is used to override the value from configuration 64189251Ssam * file. 65189251Ssam */ 66189251Ssam const char *ctrl_interface; 67189251Ssam 68189251Ssam /** 69189251Ssam * driver - Driver interface name, or %NULL to use the default driver 70189251Ssam */ 71189251Ssam const char *driver; 72189251Ssam 73189251Ssam /** 74189251Ssam * driver_param - Driver interface parameters 75189251Ssam * 76189251Ssam * If a configuration file is not used, this variable can be used to 77189251Ssam * set the driver_param parameters that would have otherwise been read 78189251Ssam * from the configuration file. If both confname and driver_param are 79189251Ssam * set, driver_param is used to override the value from configuration 80189251Ssam * file. 81189251Ssam */ 82189251Ssam const char *driver_param; 83189251Ssam 84189251Ssam /** 85189251Ssam * ifname - Interface name 86189251Ssam */ 87189251Ssam const char *ifname; 88189251Ssam 89189251Ssam /** 90189251Ssam * bridge_ifname - Optional bridge interface name 91189251Ssam * 92189251Ssam * If the driver interface (ifname) is included in a Linux bridge 93189251Ssam * device, the bridge interface may need to be used for receiving EAPOL 94189251Ssam * frames. This can be enabled by setting this variable to enable 95189251Ssam * receiving of EAPOL frames from an additional interface. 96189251Ssam */ 97189251Ssam const char *bridge_ifname; 98189251Ssam}; 99189251Ssam 100189251Ssam/** 101189251Ssam * struct wpa_params - Parameters for wpa_supplicant_init() 102189251Ssam */ 103189251Ssamstruct wpa_params { 104189251Ssam /** 105189251Ssam * daemonize - Run %wpa_supplicant in the background 106189251Ssam */ 107189251Ssam int daemonize; 108189251Ssam 109189251Ssam /** 110189251Ssam * wait_for_monitor - Wait for a monitor program before starting 111189251Ssam */ 112189251Ssam int wait_for_monitor; 113189251Ssam 114189251Ssam /** 115189251Ssam * pid_file - Path to a PID (process ID) file 116189251Ssam * 117189251Ssam * If this and daemonize are set, process ID of the background process 118189251Ssam * will be written to the specified file. 119189251Ssam */ 120189251Ssam char *pid_file; 121189251Ssam 122189251Ssam /** 123189251Ssam * wpa_debug_level - Debugging verbosity level (e.g., MSG_INFO) 124189251Ssam */ 125189251Ssam int wpa_debug_level; 126189251Ssam 127189251Ssam /** 128189251Ssam * wpa_debug_show_keys - Whether keying material is included in debug 129189251Ssam * 130189251Ssam * This parameter can be used to allow keying material to be included 131189251Ssam * in debug messages. This is a security risk and this option should 132189251Ssam * not be enabled in normal configuration. If needed during 133189251Ssam * development or while troubleshooting, this option can provide more 134189251Ssam * details for figuring out what is happening. 135189251Ssam */ 136189251Ssam int wpa_debug_show_keys; 137189251Ssam 138189251Ssam /** 139189251Ssam * wpa_debug_timestamp - Whether to include timestamp in debug messages 140189251Ssam */ 141189251Ssam int wpa_debug_timestamp; 142189251Ssam 143189251Ssam /** 144189251Ssam * ctrl_interface - Global ctrl_iface path/parameter 145189251Ssam */ 146189251Ssam char *ctrl_interface; 147189251Ssam 148189251Ssam /** 149189251Ssam * dbus_ctrl_interface - Enable the DBus control interface 150189251Ssam */ 151189251Ssam int dbus_ctrl_interface; 152189251Ssam 153189251Ssam /** 154189251Ssam * wpa_debug_file_path - Path of debug file or %NULL to use stdout 155189251Ssam */ 156189251Ssam const char *wpa_debug_file_path; 157189262Ssam 158189262Ssam /** 159189262Ssam * wpa_debug_syslog - Enable log output through syslog 160189262Ssam */ 161214734Srpaulo int wpa_debug_syslog; 162214734Srpaulo 163214734Srpaulo /** 164252726Srpaulo * wpa_debug_tracing - Enable log output through Linux tracing 165252726Srpaulo */ 166252726Srpaulo int wpa_debug_tracing; 167252726Srpaulo 168252726Srpaulo /** 169214734Srpaulo * override_driver - Optional driver parameter override 170214734Srpaulo * 171214734Srpaulo * This parameter can be used to override the driver parameter in 172214734Srpaulo * dynamic interface addition to force a specific driver wrapper to be 173214734Srpaulo * used instead. 174214734Srpaulo */ 175214734Srpaulo char *override_driver; 176214734Srpaulo 177214734Srpaulo /** 178214734Srpaulo * override_ctrl_interface - Optional ctrl_interface override 179214734Srpaulo * 180214734Srpaulo * This parameter can be used to override the ctrl_interface parameter 181214734Srpaulo * in dynamic interface addition to force a control interface to be 182214734Srpaulo * created. 183214734Srpaulo */ 184214734Srpaulo char *override_ctrl_interface; 185252726Srpaulo 186252726Srpaulo /** 187252726Srpaulo * entropy_file - Optional entropy file 188252726Srpaulo * 189252726Srpaulo * This parameter can be used to configure wpa_supplicant to maintain 190252726Srpaulo * its internal entropy store over restarts. 191252726Srpaulo */ 192252726Srpaulo char *entropy_file; 193189251Ssam}; 194189251Ssam 195252726Srpaulostruct p2p_srv_bonjour { 196252726Srpaulo struct dl_list list; 197252726Srpaulo struct wpabuf *query; 198252726Srpaulo struct wpabuf *resp; 199252726Srpaulo}; 200252726Srpaulo 201252726Srpaulostruct p2p_srv_upnp { 202252726Srpaulo struct dl_list list; 203252726Srpaulo u8 version; 204252726Srpaulo char *service; 205252726Srpaulo}; 206252726Srpaulo 207252726Srpaulostruct wpa_freq_range { 208252726Srpaulo unsigned int min; 209252726Srpaulo unsigned int max; 210252726Srpaulo}; 211252726Srpaulo 212252726Srpaulo 213189251Ssam/** 214189251Ssam * struct wpa_global - Internal, global data for all %wpa_supplicant interfaces 215189251Ssam * 216189251Ssam * This structure is initialized by calling wpa_supplicant_init() when starting 217189251Ssam * %wpa_supplicant. 218189251Ssam */ 219189251Ssamstruct wpa_global { 220189251Ssam struct wpa_supplicant *ifaces; 221189251Ssam struct wpa_params params; 222189251Ssam struct ctrl_iface_global_priv *ctrl_iface; 223214734Srpaulo struct wpas_dbus_priv *dbus; 224189251Ssam void **drv_priv; 225189251Ssam size_t drv_count; 226214734Srpaulo struct os_time suspend_time; 227252726Srpaulo struct p2p_data *p2p; 228252726Srpaulo struct wpa_supplicant *p2p_init_wpa_s; 229252726Srpaulo struct wpa_supplicant *p2p_group_formation; 230252726Srpaulo u8 p2p_dev_addr[ETH_ALEN]; 231252726Srpaulo struct dl_list p2p_srv_bonjour; /* struct p2p_srv_bonjour */ 232252726Srpaulo struct dl_list p2p_srv_upnp; /* struct p2p_srv_upnp */ 233252726Srpaulo int p2p_disabled; 234252726Srpaulo int cross_connection; 235252726Srpaulo struct wpa_freq_range *p2p_disallow_freq; 236252726Srpaulo unsigned int num_p2p_disallow_freq; 237252726Srpaulo enum wpa_conc_pref { 238252726Srpaulo WPA_CONC_PREF_NOT_SET, 239252726Srpaulo WPA_CONC_PREF_STA, 240252726Srpaulo WPA_CONC_PREF_P2P 241252726Srpaulo } conc_pref; 242252726Srpaulo unsigned int p2p_cb_on_scan_complete:1; 243252726Srpaulo 244252726Srpaulo#ifdef CONFIG_WIFI_DISPLAY 245252726Srpaulo int wifi_display; 246252726Srpaulo#define MAX_WFD_SUBELEMS 10 247252726Srpaulo struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS]; 248252726Srpaulo#endif /* CONFIG_WIFI_DISPLAY */ 249189251Ssam}; 250189251Ssam 251189251Ssam 252252726Srpaulo/** 253252726Srpaulo * offchannel_send_action_result - Result of offchannel send Action frame 254252726Srpaulo */ 255252726Srpauloenum offchannel_send_action_result { 256252726Srpaulo OFFCHANNEL_SEND_ACTION_SUCCESS /**< Frame was send and acknowledged */, 257252726Srpaulo OFFCHANNEL_SEND_ACTION_NO_ACK /**< Frame was sent, but not acknowledged 258252726Srpaulo */, 259252726Srpaulo OFFCHANNEL_SEND_ACTION_FAILED /**< Frame was not sent due to a failure 260252726Srpaulo */ 261252726Srpaulo}; 262252726Srpaulo 263252726Srpaulostruct wps_ap_info { 264252726Srpaulo u8 bssid[ETH_ALEN]; 265252726Srpaulo enum wps_ap_info_type { 266252726Srpaulo WPS_AP_NOT_SEL_REG, 267252726Srpaulo WPS_AP_SEL_REG, 268252726Srpaulo WPS_AP_SEL_REG_OUR 269252726Srpaulo } type; 270252726Srpaulo unsigned int tries; 271252726Srpaulo struct os_time last_attempt; 272252726Srpaulo}; 273252726Srpaulo 274252726Srpaulostruct wpa_ssid_value { 275189251Ssam u8 ssid[32]; 276189251Ssam size_t ssid_len; 277189251Ssam}; 278189251Ssam 279189251Ssam/** 280189251Ssam * struct wpa_supplicant - Internal data for wpa_supplicant interface 281189251Ssam * 282189251Ssam * This structure contains the internal data for core wpa_supplicant code. This 283189251Ssam * should be only used directly from the core code. However, a pointer to this 284189251Ssam * data is used from other files as an arbitrary context pointer in calls to 285189251Ssam * core functions. 286189251Ssam */ 287189251Ssamstruct wpa_supplicant { 288189251Ssam struct wpa_global *global; 289252726Srpaulo struct wpa_supplicant *parent; 290189251Ssam struct wpa_supplicant *next; 291189251Ssam struct l2_packet_data *l2; 292189251Ssam struct l2_packet_data *l2_br; 293189251Ssam unsigned char own_addr[ETH_ALEN]; 294189251Ssam char ifname[100]; 295189251Ssam#ifdef CONFIG_CTRL_IFACE_DBUS 296189251Ssam char *dbus_path; 297189251Ssam#endif /* CONFIG_CTRL_IFACE_DBUS */ 298214734Srpaulo#ifdef CONFIG_CTRL_IFACE_DBUS_NEW 299214734Srpaulo char *dbus_new_path; 300252726Srpaulo char *dbus_groupobj_path; 301252726Srpaulo#ifdef CONFIG_AP 302252726Srpaulo char *preq_notify_peer; 303252726Srpaulo#endif /* CONFIG_AP */ 304214734Srpaulo#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ 305189251Ssam char bridge_ifname[16]; 306189251Ssam 307189251Ssam char *confname; 308189251Ssam struct wpa_config *conf; 309189251Ssam int countermeasures; 310189251Ssam os_time_t last_michael_mic_error; 311189251Ssam u8 bssid[ETH_ALEN]; 312189251Ssam u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this 313252726Srpaulo * field contains the target BSSID. */ 314189251Ssam int reassociate; /* reassociation requested */ 315189251Ssam int disconnected; /* all connections disabled; i.e., do no reassociate 316189251Ssam * before this has been cleared */ 317189251Ssam struct wpa_ssid *current_ssid; 318214734Srpaulo struct wpa_bss *current_bss; 319189251Ssam int ap_ies_from_associnfo; 320214734Srpaulo unsigned int assoc_freq; 321189251Ssam 322189251Ssam /* Selected configuration (based on Beacon/ProbeResp WPA IE) */ 323189251Ssam int pairwise_cipher; 324189251Ssam int group_cipher; 325189251Ssam int key_mgmt; 326252726Srpaulo int wpa_proto; 327189251Ssam int mgmt_group_cipher; 328189251Ssam 329189251Ssam void *drv_priv; /* private data used by driver_ops */ 330209158Srpaulo void *global_drv_priv; 331189251Ssam 332252726Srpaulo u8 *bssid_filter; 333252726Srpaulo size_t bssid_filter_count; 334252726Srpaulo 335252726Srpaulo u8 *disallow_aps_bssid; 336252726Srpaulo size_t disallow_aps_bssid_count; 337252726Srpaulo struct wpa_ssid_value *disallow_aps_ssid; 338252726Srpaulo size_t disallow_aps_ssid_count; 339252726Srpaulo 340252726Srpaulo /* previous scan was wildcard when interleaving between 341252726Srpaulo * wildcard scans and specific SSID scan when max_ssids=1 */ 342252726Srpaulo int prev_scan_wildcard; 343189251Ssam struct wpa_ssid *prev_scan_ssid; /* previously scanned SSID; 344189251Ssam * NULL = not yet initialized (start 345214734Srpaulo * with wildcard SSID) 346214734Srpaulo * WILDCARD_SSID_SCAN = wildcard 347189251Ssam * SSID was used in the previous scan 348189251Ssam */ 349214734Srpaulo#define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1) 350189251Ssam 351252726Srpaulo struct wpa_ssid *prev_sched_ssid; /* last SSID used in sched scan */ 352252726Srpaulo int sched_scan_timeout; 353252726Srpaulo int sched_scan_interval; 354252726Srpaulo int first_sched_scan; 355252726Srpaulo int sched_scan_timed_out; 356252726Srpaulo 357214734Srpaulo void (*scan_res_handler)(struct wpa_supplicant *wpa_s, 358214734Srpaulo struct wpa_scan_results *scan_res); 359214734Srpaulo struct dl_list bss; /* struct wpa_bss::list */ 360214734Srpaulo struct dl_list bss_id; /* struct wpa_bss::list_id */ 361214734Srpaulo size_t num_bss; 362214734Srpaulo unsigned int bss_update_idx; 363214734Srpaulo unsigned int bss_next_id; 364189251Ssam 365252726Srpaulo /* 366252726Srpaulo * Pointers to BSS entries in the order they were in the last scan 367252726Srpaulo * results. 368252726Srpaulo */ 369252726Srpaulo struct wpa_bss **last_scan_res; 370252726Srpaulo unsigned int last_scan_res_used; 371252726Srpaulo unsigned int last_scan_res_size; 372252726Srpaulo int last_scan_full; 373252726Srpaulo struct os_time last_scan; 374252726Srpaulo 375189251Ssam struct wpa_driver_ops *driver; 376189251Ssam int interface_removed; /* whether the network interface has been 377189251Ssam * removed */ 378189251Ssam struct wpa_sm *wpa; 379189251Ssam struct eapol_sm *eapol; 380189251Ssam 381189251Ssam struct ctrl_iface_priv *ctrl_iface; 382189251Ssam 383214734Srpaulo enum wpa_states wpa_state; 384209158Srpaulo int scanning; 385252726Srpaulo int sched_scanning; 386189251Ssam int new_connection; 387189251Ssam 388189251Ssam int eapol_received; /* number of EAPOL packets received after the 389189251Ssam * previous association event */ 390189251Ssam 391189251Ssam struct scard_data *scard; 392252726Srpaulo#ifdef PCSC_FUNCS 393252726Srpaulo char imsi[20]; 394252726Srpaulo int mnc_len; 395252726Srpaulo#endif /* PCSC_FUNCS */ 396189251Ssam 397189251Ssam unsigned char last_eapol_src[ETH_ALEN]; 398189251Ssam 399189251Ssam int keys_cleared; 400189251Ssam 401189251Ssam struct wpa_blacklist *blacklist; 402189251Ssam 403252726Srpaulo /** 404252726Srpaulo * extra_blacklist_count - Sum of blacklist counts after last connection 405252726Srpaulo * 406252726Srpaulo * This variable is used to maintain a count of temporary blacklisting 407252726Srpaulo * failures (maximum number for any BSS) over blacklist clear 408252726Srpaulo * operations. This is needed for figuring out whether there has been 409252726Srpaulo * failures prior to the last blacklist clear operation which happens 410252726Srpaulo * whenever no other not-blacklisted BSS candidates are available. This 411252726Srpaulo * gets cleared whenever a connection has been established successfully. 412252726Srpaulo */ 413252726Srpaulo int extra_blacklist_count; 414252726Srpaulo 415252726Srpaulo /** 416252726Srpaulo * scan_req - Type of the scan request 417252726Srpaulo */ 418252726Srpaulo enum scan_req_type { 419252726Srpaulo /** 420252726Srpaulo * NORMAL_SCAN_REQ - Normal scan request 421252726Srpaulo * 422252726Srpaulo * This is used for scans initiated by wpa_supplicant to find an 423252726Srpaulo * AP for a connection. 424252726Srpaulo */ 425252726Srpaulo NORMAL_SCAN_REQ, 426252726Srpaulo 427252726Srpaulo /** 428252726Srpaulo * INITIAL_SCAN_REQ - Initial scan request 429252726Srpaulo * 430252726Srpaulo * This is used for the first scan on an interface to force at 431252726Srpaulo * least one scan to be run even if the configuration does not 432252726Srpaulo * include any enabled networks. 433252726Srpaulo */ 434252726Srpaulo INITIAL_SCAN_REQ, 435252726Srpaulo 436252726Srpaulo /** 437252726Srpaulo * MANUAL_SCAN_REQ - Manual scan request 438252726Srpaulo * 439252726Srpaulo * This is used for scans where the user request a scan or 440252726Srpaulo * a specific wpa_supplicant operation (e.g., WPS) requires scan 441252726Srpaulo * to be run. 442252726Srpaulo */ 443252726Srpaulo MANUAL_SCAN_REQ 444252726Srpaulo } scan_req; 445189251Ssam int scan_runs; /* number of scan runs since WPS was started */ 446252726Srpaulo int *next_scan_freqs; 447252726Srpaulo int scan_interval; /* time in sec between scans to find suitable AP */ 448252726Srpaulo int normal_scans; /* normal scans run before sched_scan */ 449252726Srpaulo int scan_for_connection; /* whether the scan request was triggered for 450252726Srpaulo * finding a connection */ 451189251Ssam 452214734Srpaulo unsigned int drv_flags; 453252726Srpaulo unsigned int drv_enc; 454252726Srpaulo 455252726Srpaulo /* 456252726Srpaulo * A bitmap of supported protocols for probe response offload. See 457252726Srpaulo * struct wpa_driver_capa in driver.h 458252726Srpaulo */ 459252726Srpaulo unsigned int probe_resp_offloads; 460252726Srpaulo 461214734Srpaulo int max_scan_ssids; 462252726Srpaulo int max_sched_scan_ssids; 463252726Srpaulo int sched_scan_supported; 464252726Srpaulo unsigned int max_match_sets; 465214734Srpaulo unsigned int max_remain_on_chan; 466252726Srpaulo unsigned int max_stations; 467189251Ssam 468189251Ssam int pending_mic_error_report; 469189251Ssam int pending_mic_error_pairwise; 470189251Ssam int mic_errors_seen; /* Michael MIC errors with the current PTK */ 471189251Ssam 472189251Ssam struct wps_context *wps; 473189251Ssam int wps_success; /* WPS success event received */ 474214734Srpaulo struct wps_er *wps_er; 475189251Ssam int blacklist_cleared; 476209158Srpaulo 477209158Srpaulo struct wpabuf *pending_eapol_rx; 478209158Srpaulo struct os_time pending_eapol_rx_time; 479209158Srpaulo u8 pending_eapol_rx_src[ETH_ALEN]; 480252726Srpaulo unsigned int last_eapol_matches_bssid:1; 481324740Sgordon unsigned int wnmsleep_used:1; 482214734Srpaulo 483214734Srpaulo struct ibss_rsn *ibss_rsn; 484214734Srpaulo 485252726Srpaulo int set_sta_uapsd; 486252726Srpaulo int sta_uapsd; 487252726Srpaulo int set_ap_uapsd; 488252726Srpaulo int ap_uapsd; 489252726Srpaulo 490214734Srpaulo#ifdef CONFIG_SME 491214734Srpaulo struct { 492214734Srpaulo u8 ssid[32]; 493214734Srpaulo size_t ssid_len; 494214734Srpaulo int freq; 495252726Srpaulo u8 assoc_req_ie[200]; 496214734Srpaulo size_t assoc_req_ie_len; 497214734Srpaulo int mfp; 498214734Srpaulo int ft_used; 499214734Srpaulo u8 mobility_domain[2]; 500214734Srpaulo u8 *ft_ies; 501214734Srpaulo size_t ft_ies_len; 502214734Srpaulo u8 prev_bssid[ETH_ALEN]; 503214734Srpaulo int prev_bssid_set; 504214734Srpaulo int auth_alg; 505252726Srpaulo int proto; 506252726Srpaulo 507252726Srpaulo int sa_query_count; /* number of pending SA Query requests; 508252726Srpaulo * 0 = no SA Query in progress */ 509252726Srpaulo int sa_query_timed_out; 510252726Srpaulo u8 *sa_query_trans_id; /* buffer of WLAN_SA_QUERY_TR_ID_LEN * 511252726Srpaulo * sa_query_count octets of pending 512252726Srpaulo * SA Query transaction identifiers */ 513252726Srpaulo struct os_time sa_query_start; 514252726Srpaulo u8 sched_obss_scan; 515252726Srpaulo u16 obss_scan_int; 516252726Srpaulo u16 bss_max_idle_period; 517252726Srpaulo enum { 518252726Srpaulo SME_SAE_INIT, 519252726Srpaulo SME_SAE_COMMIT, 520252726Srpaulo SME_SAE_CONFIRM 521252726Srpaulo } sae_state; 522252726Srpaulo u16 sae_send_confirm; 523214734Srpaulo } sme; 524214734Srpaulo#endif /* CONFIG_SME */ 525214734Srpaulo 526214734Srpaulo#ifdef CONFIG_AP 527214734Srpaulo struct hostapd_iface *ap_iface; 528214734Srpaulo void (*ap_configured_cb)(void *ctx, void *data); 529214734Srpaulo void *ap_configured_cb_ctx; 530214734Srpaulo void *ap_configured_cb_data; 531214734Srpaulo#endif /* CONFIG_AP */ 532214734Srpaulo 533252726Srpaulo unsigned int off_channel_freq; 534252726Srpaulo struct wpabuf *pending_action_tx; 535252726Srpaulo u8 pending_action_src[ETH_ALEN]; 536252726Srpaulo u8 pending_action_dst[ETH_ALEN]; 537252726Srpaulo u8 pending_action_bssid[ETH_ALEN]; 538252726Srpaulo unsigned int pending_action_freq; 539252726Srpaulo int pending_action_no_cck; 540252726Srpaulo int pending_action_without_roc; 541252726Srpaulo void (*pending_action_tx_status_cb)(struct wpa_supplicant *wpa_s, 542252726Srpaulo unsigned int freq, const u8 *dst, 543252726Srpaulo const u8 *src, const u8 *bssid, 544252726Srpaulo const u8 *data, size_t data_len, 545252726Srpaulo enum offchannel_send_action_result 546252726Srpaulo result); 547252726Srpaulo unsigned int roc_waiting_drv_freq; 548252726Srpaulo int action_tx_wait_time; 549252726Srpaulo 550252726Srpaulo#ifdef CONFIG_P2P 551252726Srpaulo struct p2p_go_neg_results *go_params; 552252726Srpaulo int create_p2p_iface; 553252726Srpaulo u8 pending_interface_addr[ETH_ALEN]; 554252726Srpaulo char pending_interface_name[100]; 555252726Srpaulo int pending_interface_type; 556252726Srpaulo int p2p_group_idx; 557252726Srpaulo unsigned int pending_listen_freq; 558252726Srpaulo unsigned int pending_listen_duration; 559252726Srpaulo enum { 560252726Srpaulo NOT_P2P_GROUP_INTERFACE, 561252726Srpaulo P2P_GROUP_INTERFACE_PENDING, 562252726Srpaulo P2P_GROUP_INTERFACE_GO, 563252726Srpaulo P2P_GROUP_INTERFACE_CLIENT 564252726Srpaulo } p2p_group_interface; 565252726Srpaulo struct p2p_group *p2p_group; 566252726Srpaulo int p2p_long_listen; /* remaining time in long Listen state in ms */ 567252726Srpaulo char p2p_pin[10]; 568252726Srpaulo int p2p_wps_method; 569252726Srpaulo u8 p2p_auth_invite[ETH_ALEN]; 570252726Srpaulo int p2p_sd_over_ctrl_iface; 571252726Srpaulo int p2p_in_provisioning; 572252726Srpaulo int pending_invite_ssid_id; 573252726Srpaulo int show_group_started; 574252726Srpaulo u8 go_dev_addr[ETH_ALEN]; 575252726Srpaulo int pending_pd_before_join; 576252726Srpaulo u8 pending_join_iface_addr[ETH_ALEN]; 577252726Srpaulo u8 pending_join_dev_addr[ETH_ALEN]; 578252726Srpaulo int pending_join_wps_method; 579252726Srpaulo int p2p_join_scan_count; 580252726Srpaulo int auto_pd_scan_retry; 581252726Srpaulo int force_long_sd; 582252726Srpaulo u16 pending_pd_config_methods; 583252726Srpaulo enum { 584252726Srpaulo NORMAL_PD, AUTO_PD_GO_NEG, AUTO_PD_JOIN 585252726Srpaulo } pending_pd_use; 586252726Srpaulo 587252726Srpaulo /* 588252726Srpaulo * Whether cross connection is disallowed by the AP to which this 589252726Srpaulo * interface is associated (only valid if there is an association). 590252726Srpaulo */ 591252726Srpaulo int cross_connect_disallowed; 592252726Srpaulo 593252726Srpaulo /* 594252726Srpaulo * Whether this P2P group is configured to use cross connection (only 595252726Srpaulo * valid if this is P2P GO interface). The actual cross connect packet 596252726Srpaulo * forwarding may not be configured depending on the uplink status. 597252726Srpaulo */ 598252726Srpaulo int cross_connect_enabled; 599252726Srpaulo 600252726Srpaulo /* Whether cross connection forwarding is in use at the moment. */ 601252726Srpaulo int cross_connect_in_use; 602252726Srpaulo 603252726Srpaulo /* 604252726Srpaulo * Uplink interface name for cross connection 605252726Srpaulo */ 606252726Srpaulo char cross_connect_uplink[100]; 607252726Srpaulo 608252726Srpaulo unsigned int sta_scan_pending:1; 609252726Srpaulo unsigned int p2p_auto_join:1; 610252726Srpaulo unsigned int p2p_auto_pd:1; 611252726Srpaulo unsigned int p2p_persistent_group:1; 612252726Srpaulo unsigned int p2p_fallback_to_go_neg:1; 613252726Srpaulo unsigned int p2p_pd_before_go_neg:1; 614252726Srpaulo unsigned int p2p_go_ht40:1; 615252726Srpaulo unsigned int user_initiated_pd:1; 616252726Srpaulo int p2p_persistent_go_freq; 617252726Srpaulo int p2p_persistent_id; 618252726Srpaulo int p2p_go_intent; 619252726Srpaulo int p2p_connect_freq; 620252726Srpaulo struct os_time p2p_auto_started; 621252726Srpaulo#endif /* CONFIG_P2P */ 622252726Srpaulo 623214734Srpaulo struct wpa_ssid *bgscan_ssid; 624214734Srpaulo const struct bgscan_ops *bgscan; 625214734Srpaulo void *bgscan_priv; 626214734Srpaulo 627252726Srpaulo const struct autoscan_ops *autoscan; 628252726Srpaulo struct wpa_driver_scan_params *autoscan_params; 629252726Srpaulo void *autoscan_priv; 630214734Srpaulo 631252726Srpaulo struct wpa_ssid *connect_without_scan; 632252726Srpaulo 633252726Srpaulo struct wps_ap_info *wps_ap; 634252726Srpaulo size_t num_wps_ap; 635252726Srpaulo int wps_ap_iter; 636252726Srpaulo 637214734Srpaulo int after_wps; 638252726Srpaulo int known_wps_freq; 639214734Srpaulo unsigned int wps_freq; 640252726Srpaulo u16 wps_ap_channel; 641252726Srpaulo int wps_fragment_size; 642252726Srpaulo int auto_reconnect_disabled; 643252726Srpaulo 644252726Srpaulo /* Channel preferences for AP/P2P GO use */ 645252726Srpaulo int best_24_freq; 646252726Srpaulo int best_5_freq; 647252726Srpaulo int best_overall_freq; 648252726Srpaulo 649252726Srpaulo struct gas_query *gas; 650252726Srpaulo 651252726Srpaulo#ifdef CONFIG_INTERWORKING 652252726Srpaulo unsigned int fetch_anqp_in_progress:1; 653252726Srpaulo unsigned int network_select:1; 654252726Srpaulo unsigned int auto_select:1; 655252726Srpaulo unsigned int auto_network_select:1; 656252726Srpaulo unsigned int fetch_all_anqp:1; 657252726Srpaulo#endif /* CONFIG_INTERWORKING */ 658252726Srpaulo unsigned int drv_capa_known; 659252726Srpaulo 660252726Srpaulo struct { 661252726Srpaulo struct hostapd_hw_modes *modes; 662252726Srpaulo u16 num_modes; 663252726Srpaulo u16 flags; 664252726Srpaulo } hw; 665252726Srpaulo 666252726Srpaulo int pno; 667252726Srpaulo 668252726Srpaulo /* WLAN_REASON_* reason codes. Negative if locally generated. */ 669252726Srpaulo int disconnect_reason; 670252726Srpaulo 671252726Srpaulo struct ext_password_data *ext_pw; 672252726Srpaulo 673252726Srpaulo struct wpabuf *last_gas_resp; 674252726Srpaulo u8 last_gas_addr[ETH_ALEN]; 675252726Srpaulo u8 last_gas_dialog_token; 676252726Srpaulo 677252726Srpaulo unsigned int no_keep_alive:1; 678189251Ssam}; 679189251Ssam 680189251Ssam 681189251Ssam/* wpa_supplicant.c */ 682252726Srpaulovoid wpa_supplicant_apply_ht_overrides( 683252726Srpaulo struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, 684252726Srpaulo struct wpa_driver_associate_params *params); 685252726Srpaulo 686214734Srpauloint wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); 687214734Srpaulo 688189251Ssamint wpa_supplicant_reload_configuration(struct wpa_supplicant *wpa_s); 689189251Ssam 690214734Srpauloconst char * wpa_supplicant_state_txt(enum wpa_states state); 691252726Srpauloint wpa_supplicant_update_mac_addr(struct wpa_supplicant *wpa_s); 692189251Ssamint wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s); 693189251Ssamint wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s, 694214734Srpaulo struct wpa_bss *bss, struct wpa_ssid *ssid, 695189251Ssam u8 *wpa_ie, size_t *wpa_ie_len); 696189251Ssamvoid wpa_supplicant_associate(struct wpa_supplicant *wpa_s, 697214734Srpaulo struct wpa_bss *bss, 698189251Ssam struct wpa_ssid *ssid); 699189251Ssamvoid wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s, 700189251Ssam struct wpa_ssid *ssid); 701189251Ssamvoid wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s); 702189251Ssamvoid wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr); 703189251Ssamvoid wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s, 704189251Ssam int sec, int usec); 705252726Srpaulovoid wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s); 706214734Srpaulovoid wpa_supplicant_set_state(struct wpa_supplicant *wpa_s, 707214734Srpaulo enum wpa_states state); 708189251Ssamstruct wpa_ssid * wpa_supplicant_get_ssid(struct wpa_supplicant *wpa_s); 709252726Srpauloconst char * wpa_supplicant_get_eap_mode(struct wpa_supplicant *wpa_s); 710189251Ssamvoid wpa_supplicant_cancel_auth_timeout(struct wpa_supplicant *wpa_s); 711189251Ssamvoid wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s, 712189251Ssam int reason_code); 713189251Ssam 714214734Srpaulovoid wpa_supplicant_enable_network(struct wpa_supplicant *wpa_s, 715214734Srpaulo struct wpa_ssid *ssid); 716214734Srpaulovoid wpa_supplicant_disable_network(struct wpa_supplicant *wpa_s, 717214734Srpaulo struct wpa_ssid *ssid); 718214734Srpaulovoid wpa_supplicant_select_network(struct wpa_supplicant *wpa_s, 719214734Srpaulo struct wpa_ssid *ssid); 720214734Srpauloint wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s, 721214734Srpaulo int ap_scan); 722252726Srpauloint wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s, 723252726Srpaulo unsigned int expire_age); 724252726Srpauloint wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s, 725252726Srpaulo unsigned int expire_count); 726252726Srpauloint wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s, 727252726Srpaulo int scan_interval); 728214734Srpauloint wpa_supplicant_set_debug_params(struct wpa_global *global, 729214734Srpaulo int debug_level, int debug_timestamp, 730214734Srpaulo int debug_show_keys); 731252726Srpaulovoid free_hw_features(struct wpa_supplicant *wpa_s); 732214734Srpaulo 733189251Ssamvoid wpa_show_license(void); 734189251Ssam 735189251Ssamstruct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global, 736189251Ssam struct wpa_interface *iface); 737189251Ssamint wpa_supplicant_remove_iface(struct wpa_global *global, 738252726Srpaulo struct wpa_supplicant *wpa_s, 739252726Srpaulo int terminate); 740189251Ssamstruct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global, 741189251Ssam const char *ifname); 742189251Ssamstruct wpa_global * wpa_supplicant_init(struct wpa_params *params); 743189251Ssamint wpa_supplicant_run(struct wpa_global *global); 744189251Ssamvoid wpa_supplicant_deinit(struct wpa_global *global); 745189251Ssam 746189251Ssamint wpa_supplicant_scard_init(struct wpa_supplicant *wpa_s, 747189251Ssam struct wpa_ssid *ssid); 748214734Srpaulovoid wpa_supplicant_terminate_proc(struct wpa_global *global); 749214734Srpaulovoid wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr, 750214734Srpaulo const u8 *buf, size_t len); 751214734Srpauloenum wpa_key_mgmt key_mgmt2driver(int key_mgmt); 752214734Srpauloenum wpa_cipher cipher_suite2driver(int cipher); 753252726Srpaulovoid wpa_supplicant_update_config(struct wpa_supplicant *wpa_s); 754252726Srpaulovoid wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s); 755252726Srpaulovoid wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid); 756252726Srpauloint wpas_driver_bss_selection(struct wpa_supplicant *wpa_s); 757252726Srpauloint wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s); 758252726Srpaulovoid wpas_auth_failed(struct wpa_supplicant *wpa_s); 759252726Srpaulovoid wpas_clear_temp_disabled(struct wpa_supplicant *wpa_s, 760252726Srpaulo struct wpa_ssid *ssid, int clear_failures); 761252726Srpauloint disallowed_bssid(struct wpa_supplicant *wpa_s, const u8 *bssid); 762252726Srpauloint disallowed_ssid(struct wpa_supplicant *wpa_s, const u8 *ssid, 763252726Srpaulo size_t ssid_len); 764252726Srpaulovoid wpas_request_connection(struct wpa_supplicant *wpa_s); 765252726Srpauloint wpas_build_ext_capab(struct wpa_supplicant *wpa_s, u8 *buf); 766189251Ssam 767252726Srpaulo/** 768252726Srpaulo * wpa_supplicant_ctrl_iface_ctrl_rsp_handle - Handle a control response 769252726Srpaulo * @wpa_s: Pointer to wpa_supplicant data 770252726Srpaulo * @ssid: Pointer to the network block the reply is for 771252726Srpaulo * @field: field the response is a reply for 772252726Srpaulo * @value: value (ie, password, etc) for @field 773252726Srpaulo * Returns: 0 on success, non-zero on error 774252726Srpaulo * 775252726Srpaulo * Helper function to handle replies to control interface requests. 776252726Srpaulo */ 777252726Srpauloint wpa_supplicant_ctrl_iface_ctrl_rsp_handle(struct wpa_supplicant *wpa_s, 778252726Srpaulo struct wpa_ssid *ssid, 779252726Srpaulo const char *field, 780252726Srpaulo const char *value); 781252726Srpaulo 782189251Ssam/* events.c */ 783189251Ssamvoid wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s); 784252726Srpauloint wpa_supplicant_connect(struct wpa_supplicant *wpa_s, 785252726Srpaulo struct wpa_bss *selected, 786252726Srpaulo struct wpa_ssid *ssid); 787252726Srpaulovoid wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx); 788252726Srpaulovoid wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx); 789252726Srpaulovoid wnm_bss_keep_alive_deinit(struct wpa_supplicant *wpa_s); 790252726Srpauloint wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s); 791189251Ssam 792214734Srpaulo/* eap_register.c */ 793214734Srpauloint eap_register_methods(void); 794189251Ssam 795252726Srpaulo/** 796252726Srpaulo * Utility method to tell if a given network is a persistent group 797252726Srpaulo * @ssid: Network object 798252726Srpaulo * Returns: 1 if network is a persistent group, 0 otherwise 799252726Srpaulo */ 800252726Srpaulostatic inline int network_is_persistent_group(struct wpa_ssid *ssid) 801252726Srpaulo{ 802252726Srpaulo return ((ssid->disabled == 2) || ssid->p2p_persistent_group); 803252726Srpaulo} 804252726Srpaulo 805252726Srpauloint wpas_network_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); 806252726Srpaulo 807252726Srpauloint wpas_init_ext_pw(struct wpa_supplicant *wpa_s); 808252726Srpaulo 809189251Ssam#endif /* WPA_SUPPLICANT_I_H */ 810