wpa_supplicant_i.h revision 64f47c5c24428834677459e048420f86e3514c20
1/* 2 * wpa_supplicant - Internal definitions 3 * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9#ifndef WPA_SUPPLICANT_I_H 10#define WPA_SUPPLICANT_I_H 11 12#include "utils/list.h" 13#include "common/defs.h" 14#include "common/sae.h" 15#include "config_ssid.h" 16 17extern const char *wpa_supplicant_version; 18extern const char *wpa_supplicant_license; 19#ifndef CONFIG_NO_STDOUT_DEBUG 20extern const char *wpa_supplicant_full_license1; 21extern const char *wpa_supplicant_full_license2; 22extern const char *wpa_supplicant_full_license3; 23extern const char *wpa_supplicant_full_license4; 24extern const char *wpa_supplicant_full_license5; 25#endif /* CONFIG_NO_STDOUT_DEBUG */ 26 27struct wpa_sm; 28struct wpa_supplicant; 29struct ibss_rsn; 30struct scan_info; 31struct wpa_bss; 32struct wpa_scan_results; 33struct hostapd_hw_modes; 34struct wpa_driver_associate_params; 35 36/* 37 * Forward declarations of private structures used within the ctrl_iface 38 * backends. Other parts of wpa_supplicant do not have access to data stored in 39 * these structures. 40 */ 41struct ctrl_iface_priv; 42struct ctrl_iface_global_priv; 43struct wpas_dbus_priv; 44 45/** 46 * struct wpa_interface - Parameters for wpa_supplicant_add_iface() 47 */ 48struct wpa_interface { 49 /** 50 * confname - Configuration name (file or profile) name 51 * 52 * This can also be %NULL when a configuration file is not used. In 53 * that case, ctrl_interface must be set to allow the interface to be 54 * configured. 55 */ 56 const char *confname; 57 58 /** 59 * confanother - Additional Configuration name (file or profile) name 60 * 61 * This can also be %NULL when a configuration file is not used. 62 */ 63 const char *confanother; 64 65 /** 66 * ctrl_interface - Control interface parameter 67 * 68 * If a configuration file is not used, this variable can be used to 69 * set the ctrl_interface parameter that would have otherwise been read 70 * from the configuration file. If both confname and ctrl_interface are 71 * set, ctrl_interface is used to override the value from configuration 72 * file. 73 */ 74 const char *ctrl_interface; 75 76 /** 77 * driver - Driver interface name, or %NULL to use the default driver 78 */ 79 const char *driver; 80 81 /** 82 * driver_param - Driver interface parameters 83 * 84 * If a configuration file is not used, this variable can be used to 85 * set the driver_param parameters that would have otherwise been read 86 * from the configuration file. If both confname and driver_param are 87 * set, driver_param is used to override the value from configuration 88 * file. 89 */ 90 const char *driver_param; 91 92 /** 93 * ifname - Interface name 94 */ 95 const char *ifname; 96 97 /** 98 * bridge_ifname - Optional bridge interface name 99 * 100 * If the driver interface (ifname) is included in a Linux bridge 101 * device, the bridge interface may need to be used for receiving EAPOL 102 * frames. This can be enabled by setting this variable to enable 103 * receiving of EAPOL frames from an additional interface. 104 */ 105 const char *bridge_ifname; 106}; 107 108/** 109 * struct wpa_params - Parameters for wpa_supplicant_init() 110 */ 111struct wpa_params { 112 /** 113 * daemonize - Run %wpa_supplicant in the background 114 */ 115 int daemonize; 116 117 /** 118 * wait_for_monitor - Wait for a monitor program before starting 119 */ 120 int wait_for_monitor; 121 122 /** 123 * pid_file - Path to a PID (process ID) file 124 * 125 * If this and daemonize are set, process ID of the background process 126 * will be written to the specified file. 127 */ 128 char *pid_file; 129 130 /** 131 * wpa_debug_level - Debugging verbosity level (e.g., MSG_INFO) 132 */ 133 int wpa_debug_level; 134 135 /** 136 * wpa_debug_show_keys - Whether keying material is included in debug 137 * 138 * This parameter can be used to allow keying material to be included 139 * in debug messages. This is a security risk and this option should 140 * not be enabled in normal configuration. If needed during 141 * development or while troubleshooting, this option can provide more 142 * details for figuring out what is happening. 143 */ 144 int wpa_debug_show_keys; 145 146 /** 147 * wpa_debug_timestamp - Whether to include timestamp in debug messages 148 */ 149 int wpa_debug_timestamp; 150 151 /** 152 * ctrl_interface - Global ctrl_iface path/parameter 153 */ 154 char *ctrl_interface; 155 156 /** 157 * dbus_ctrl_interface - Enable the DBus control interface 158 */ 159 int dbus_ctrl_interface; 160 161 /** 162 * wpa_debug_file_path - Path of debug file or %NULL to use stdout 163 */ 164 const char *wpa_debug_file_path; 165 166 /** 167 * wpa_debug_syslog - Enable log output through syslog 168 */ 169 int wpa_debug_syslog; 170 171 /** 172 * wpa_debug_tracing - Enable log output through Linux tracing 173 */ 174 int wpa_debug_tracing; 175 176 /** 177 * override_driver - Optional driver parameter override 178 * 179 * This parameter can be used to override the driver parameter in 180 * dynamic interface addition to force a specific driver wrapper to be 181 * used instead. 182 */ 183 char *override_driver; 184 185 /** 186 * override_ctrl_interface - Optional ctrl_interface override 187 * 188 * This parameter can be used to override the ctrl_interface parameter 189 * in dynamic interface addition to force a control interface to be 190 * created. 191 */ 192 char *override_ctrl_interface; 193 194 /** 195 * entropy_file - Optional entropy file 196 * 197 * This parameter can be used to configure wpa_supplicant to maintain 198 * its internal entropy store over restarts. 199 */ 200 char *entropy_file; 201}; 202 203struct p2p_srv_bonjour { 204 struct dl_list list; 205 struct wpabuf *query; 206 struct wpabuf *resp; 207}; 208 209struct p2p_srv_upnp { 210 struct dl_list list; 211 u8 version; 212 char *service; 213}; 214 215struct wpa_freq_range { 216 unsigned int min; 217 unsigned int max; 218}; 219 220 221/** 222 * struct wpa_global - Internal, global data for all %wpa_supplicant interfaces 223 * 224 * This structure is initialized by calling wpa_supplicant_init() when starting 225 * %wpa_supplicant. 226 */ 227struct wpa_global { 228 struct wpa_supplicant *ifaces; 229 struct wpa_params params; 230 struct ctrl_iface_global_priv *ctrl_iface; 231 struct wpas_dbus_priv *dbus; 232 void **drv_priv; 233 size_t drv_count; 234 struct os_time suspend_time; 235 struct p2p_data *p2p; 236 struct wpa_supplicant *p2p_init_wpa_s; 237 struct wpa_supplicant *p2p_group_formation; 238 struct wpa_supplicant *p2p_invite_group; 239 u8 p2p_dev_addr[ETH_ALEN]; 240 struct dl_list p2p_srv_bonjour; /* struct p2p_srv_bonjour */ 241 struct dl_list p2p_srv_upnp; /* struct p2p_srv_upnp */ 242 int p2p_disabled; 243 int cross_connection; 244 struct wpa_freq_range *p2p_disallow_freq; 245 unsigned int num_p2p_disallow_freq; 246 enum wpa_conc_pref { 247 WPA_CONC_PREF_NOT_SET, 248 WPA_CONC_PREF_STA, 249 WPA_CONC_PREF_P2P 250 } conc_pref; 251 unsigned int p2p_cb_on_scan_complete:1; 252 253#ifdef CONFIG_WIFI_DISPLAY 254 int wifi_display; 255#define MAX_WFD_SUBELEMS 10 256 struct wpabuf *wfd_subelem[MAX_WFD_SUBELEMS]; 257#endif /* CONFIG_WIFI_DISPLAY */ 258}; 259 260 261/** 262 * offchannel_send_action_result - Result of offchannel send Action frame 263 */ 264enum offchannel_send_action_result { 265 OFFCHANNEL_SEND_ACTION_SUCCESS /**< Frame was send and acknowledged */, 266 OFFCHANNEL_SEND_ACTION_NO_ACK /**< Frame was sent, but not acknowledged 267 */, 268 OFFCHANNEL_SEND_ACTION_FAILED /**< Frame was not sent due to a failure 269 */ 270}; 271 272struct wps_ap_info { 273 u8 bssid[ETH_ALEN]; 274 enum wps_ap_info_type { 275 WPS_AP_NOT_SEL_REG, 276 WPS_AP_SEL_REG, 277 WPS_AP_SEL_REG_OUR 278 } type; 279 unsigned int tries; 280 struct os_time last_attempt; 281}; 282 283struct wpa_ssid_value { 284 u8 ssid[32]; 285 size_t ssid_len; 286}; 287 288/** 289 * struct wpa_supplicant - Internal data for wpa_supplicant interface 290 * 291 * This structure contains the internal data for core wpa_supplicant code. This 292 * should be only used directly from the core code. However, a pointer to this 293 * data is used from other files as an arbitrary context pointer in calls to 294 * core functions. 295 */ 296struct wpa_supplicant { 297 struct wpa_global *global; 298 struct wpa_supplicant *parent; 299 struct wpa_supplicant *next; 300 struct l2_packet_data *l2; 301 struct l2_packet_data *l2_br; 302 unsigned char own_addr[ETH_ALEN]; 303 char ifname[100]; 304#ifdef CONFIG_CTRL_IFACE_DBUS 305 char *dbus_path; 306#endif /* CONFIG_CTRL_IFACE_DBUS */ 307#ifdef CONFIG_CTRL_IFACE_DBUS_NEW 308 char *dbus_new_path; 309 char *dbus_groupobj_path; 310#ifdef CONFIG_AP 311 char *preq_notify_peer; 312#endif /* CONFIG_AP */ 313#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ 314 char bridge_ifname[16]; 315 316 char *confname; 317 char *confanother; 318 struct wpa_config *conf; 319 int countermeasures; 320 os_time_t last_michael_mic_error; 321 u8 bssid[ETH_ALEN]; 322 u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this 323 * field contains the target BSSID. */ 324 int reassociate; /* reassociation requested */ 325 int disconnected; /* all connections disabled; i.e., do no reassociate 326 * before this has been cleared */ 327 struct wpa_ssid *current_ssid; 328 struct wpa_bss *current_bss; 329 int ap_ies_from_associnfo; 330 unsigned int assoc_freq; 331 332 /* Selected configuration (based on Beacon/ProbeResp WPA IE) */ 333 int pairwise_cipher; 334 int group_cipher; 335 int key_mgmt; 336 int wpa_proto; 337 int mgmt_group_cipher; 338 339 void *drv_priv; /* private data used by driver_ops */ 340 void *global_drv_priv; 341 342 u8 *bssid_filter; 343 size_t bssid_filter_count; 344 345 u8 *disallow_aps_bssid; 346 size_t disallow_aps_bssid_count; 347 struct wpa_ssid_value *disallow_aps_ssid; 348 size_t disallow_aps_ssid_count; 349 350 /* previous scan was wildcard when interleaving between 351 * wildcard scans and specific SSID scan when max_ssids=1 */ 352 int prev_scan_wildcard; 353 struct wpa_ssid *prev_scan_ssid; /* previously scanned SSID; 354 * NULL = not yet initialized (start 355 * with wildcard SSID) 356 * WILDCARD_SSID_SCAN = wildcard 357 * SSID was used in the previous scan 358 */ 359#define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1) 360 361 struct wpa_ssid *prev_sched_ssid; /* last SSID used in sched scan */ 362 int sched_scan_timeout; 363 int sched_scan_interval; 364 int first_sched_scan; 365 int sched_scan_timed_out; 366 367 void (*scan_res_handler)(struct wpa_supplicant *wpa_s, 368 struct wpa_scan_results *scan_res); 369 struct dl_list bss; /* struct wpa_bss::list */ 370 struct dl_list bss_id; /* struct wpa_bss::list_id */ 371 size_t num_bss; 372 unsigned int bss_update_idx; 373 unsigned int bss_next_id; 374 375 /* 376 * Pointers to BSS entries in the order they were in the last scan 377 * results. 378 */ 379 struct wpa_bss **last_scan_res; 380 unsigned int last_scan_res_used; 381 unsigned int last_scan_res_size; 382 int last_scan_full; 383 struct os_time last_scan; 384 385 struct wpa_driver_ops *driver; 386 int interface_removed; /* whether the network interface has been 387 * removed */ 388 struct wpa_sm *wpa; 389 struct eapol_sm *eapol; 390 391 struct ctrl_iface_priv *ctrl_iface; 392 393 enum wpa_states wpa_state; 394 int scanning; 395 int sched_scanning; 396 int new_connection; 397 398 int eapol_received; /* number of EAPOL packets received after the 399 * previous association event */ 400 401 struct scard_data *scard; 402#ifdef PCSC_FUNCS 403 char imsi[20]; 404 int mnc_len; 405#endif /* PCSC_FUNCS */ 406 407 unsigned char last_eapol_src[ETH_ALEN]; 408 409 int keys_cleared; 410 411 struct wpa_blacklist *blacklist; 412 413 /** 414 * extra_blacklist_count - Sum of blacklist counts after last connection 415 * 416 * This variable is used to maintain a count of temporary blacklisting 417 * failures (maximum number for any BSS) over blacklist clear 418 * operations. This is needed for figuring out whether there has been 419 * failures prior to the last blacklist clear operation which happens 420 * whenever no other not-blacklisted BSS candidates are available. This 421 * gets cleared whenever a connection has been established successfully. 422 */ 423 int extra_blacklist_count; 424 425 /** 426 * scan_req - Type of the scan request 427 */ 428 enum scan_req_type { 429 /** 430 * NORMAL_SCAN_REQ - Normal scan request 431 * 432 * This is used for scans initiated by wpa_supplicant to find an 433 * AP for a connection. 434 */ 435 NORMAL_SCAN_REQ, 436 437 /** 438 * INITIAL_SCAN_REQ - Initial scan request 439 * 440 * This is used for the first scan on an interface to force at 441 * least one scan to be run even if the configuration does not 442 * include any enabled networks. 443 */ 444 INITIAL_SCAN_REQ, 445 446 /** 447 * MANUAL_SCAN_REQ - Manual scan request 448 * 449 * This is used for scans where the user request a scan or 450 * a specific wpa_supplicant operation (e.g., WPS) requires scan 451 * to be run. 452 */ 453 MANUAL_SCAN_REQ 454 } scan_req; 455 struct os_time scan_trigger_time; 456 int scan_runs; /* number of scan runs since WPS was started */ 457 int *next_scan_freqs; 458 int scan_interval; /* time in sec between scans to find suitable AP */ 459 int normal_scans; /* normal scans run before sched_scan */ 460 int scan_for_connection; /* whether the scan request was triggered for 461 * finding a connection */ 462 463 unsigned int drv_flags; 464 unsigned int drv_enc; 465 466 /* 467 * A bitmap of supported protocols for probe response offload. See 468 * struct wpa_driver_capa in driver.h 469 */ 470 unsigned int probe_resp_offloads; 471 472 /* extended capabilities supported by the driver */ 473 const u8 *extended_capa, *extended_capa_mask; 474 unsigned int extended_capa_len; 475 476 int max_scan_ssids; 477 int max_sched_scan_ssids; 478 int sched_scan_supported; 479 unsigned int max_match_sets; 480 unsigned int max_remain_on_chan; 481 unsigned int max_stations; 482 483 int pending_mic_error_report; 484 int pending_mic_error_pairwise; 485 int mic_errors_seen; /* Michael MIC errors with the current PTK */ 486 487 struct wps_context *wps; 488 int wps_success; /* WPS success event received */ 489 struct wps_er *wps_er; 490 int blacklist_cleared; 491 492 struct wpabuf *pending_eapol_rx; 493 struct os_time pending_eapol_rx_time; 494 u8 pending_eapol_rx_src[ETH_ALEN]; 495 unsigned int last_eapol_matches_bssid:1; 496 497 struct ibss_rsn *ibss_rsn; 498 499 int set_sta_uapsd; 500 int sta_uapsd; 501 int set_ap_uapsd; 502 int ap_uapsd; 503 504#ifdef CONFIG_SME 505 struct { 506 u8 ssid[32]; 507 size_t ssid_len; 508 int freq; 509 u8 assoc_req_ie[200]; 510 size_t assoc_req_ie_len; 511 int mfp; 512 int ft_used; 513 u8 mobility_domain[2]; 514 u8 *ft_ies; 515 size_t ft_ies_len; 516 u8 prev_bssid[ETH_ALEN]; 517 int prev_bssid_set; 518 int auth_alg; 519 int proto; 520 521 int sa_query_count; /* number of pending SA Query requests; 522 * 0 = no SA Query in progress */ 523 int sa_query_timed_out; 524 u8 *sa_query_trans_id; /* buffer of WLAN_SA_QUERY_TR_ID_LEN * 525 * sa_query_count octets of pending 526 * SA Query transaction identifiers */ 527 struct os_time sa_query_start; 528 u8 sched_obss_scan; 529 u16 obss_scan_int; 530 u16 bss_max_idle_period; 531#ifdef CONFIG_SAE 532 struct sae_data sae; 533 struct wpabuf *sae_token; 534 int sae_group_index; 535#endif /* CONFIG_SAE */ 536 } sme; 537#endif /* CONFIG_SME */ 538 539#ifdef CONFIG_AP 540 struct hostapd_iface *ap_iface; 541 void (*ap_configured_cb)(void *ctx, void *data); 542 void *ap_configured_cb_ctx; 543 void *ap_configured_cb_data; 544#endif /* CONFIG_AP */ 545 546 unsigned int off_channel_freq; 547 struct wpabuf *pending_action_tx; 548 u8 pending_action_src[ETH_ALEN]; 549 u8 pending_action_dst[ETH_ALEN]; 550 u8 pending_action_bssid[ETH_ALEN]; 551 unsigned int pending_action_freq; 552 int pending_action_no_cck; 553 int pending_action_without_roc; 554 void (*pending_action_tx_status_cb)(struct wpa_supplicant *wpa_s, 555 unsigned int freq, const u8 *dst, 556 const u8 *src, const u8 *bssid, 557 const u8 *data, size_t data_len, 558 enum offchannel_send_action_result 559 result); 560 unsigned int roc_waiting_drv_freq; 561 int action_tx_wait_time; 562 563#ifdef CONFIG_P2P 564 struct p2p_go_neg_results *go_params; 565 int create_p2p_iface; 566 u8 pending_interface_addr[ETH_ALEN]; 567 char pending_interface_name[100]; 568 int pending_interface_type; 569 int p2p_group_idx; 570 unsigned int pending_listen_freq; 571 unsigned int pending_listen_duration; 572 enum { 573 NOT_P2P_GROUP_INTERFACE, 574 P2P_GROUP_INTERFACE_PENDING, 575 P2P_GROUP_INTERFACE_GO, 576 P2P_GROUP_INTERFACE_CLIENT 577 } p2p_group_interface; 578 struct p2p_group *p2p_group; 579 int p2p_long_listen; /* remaining time in long Listen state in ms */ 580 char p2p_pin[10]; 581 int p2p_wps_method; 582 u8 p2p_auth_invite[ETH_ALEN]; 583 int p2p_sd_over_ctrl_iface; 584 int p2p_in_provisioning; 585 int pending_invite_ssid_id; 586 int show_group_started; 587 u8 go_dev_addr[ETH_ALEN]; 588 int pending_pd_before_join; 589 u8 pending_join_iface_addr[ETH_ALEN]; 590 u8 pending_join_dev_addr[ETH_ALEN]; 591 int pending_join_wps_method; 592 int p2p_join_scan_count; 593 int auto_pd_scan_retry; 594 int force_long_sd; 595 u16 pending_pd_config_methods; 596 enum { 597 NORMAL_PD, AUTO_PD_GO_NEG, AUTO_PD_JOIN 598 } pending_pd_use; 599 600 /* 601 * Whether cross connection is disallowed by the AP to which this 602 * interface is associated (only valid if there is an association). 603 */ 604 int cross_connect_disallowed; 605 606 /* 607 * Whether this P2P group is configured to use cross connection (only 608 * valid if this is P2P GO interface). The actual cross connect packet 609 * forwarding may not be configured depending on the uplink status. 610 */ 611 int cross_connect_enabled; 612 613 /* Whether cross connection forwarding is in use at the moment. */ 614 int cross_connect_in_use; 615 616 /* 617 * Uplink interface name for cross connection 618 */ 619 char cross_connect_uplink[100]; 620 621 unsigned int sta_scan_pending:1; 622 unsigned int p2p_auto_join:1; 623 unsigned int p2p_auto_pd:1; 624 unsigned int p2p_persistent_group:1; 625 unsigned int p2p_fallback_to_go_neg:1; 626 unsigned int p2p_pd_before_go_neg:1; 627 unsigned int p2p_go_ht40:1; 628 unsigned int user_initiated_pd:1; 629 int p2p_persistent_go_freq; 630 int p2p_persistent_id; 631 int p2p_go_intent; 632 int p2p_connect_freq; 633 struct os_time p2p_auto_started; 634#endif /* CONFIG_P2P */ 635 636 struct wpa_ssid *bgscan_ssid; 637 const struct bgscan_ops *bgscan; 638 void *bgscan_priv; 639 640 const struct autoscan_ops *autoscan; 641 struct wpa_driver_scan_params *autoscan_params; 642 void *autoscan_priv; 643 644 struct wpa_ssid *connect_without_scan; 645 646 struct wps_ap_info *wps_ap; 647 size_t num_wps_ap; 648 int wps_ap_iter; 649 650 int after_wps; 651 int known_wps_freq; 652 unsigned int wps_freq; 653 u16 wps_ap_channel; 654 int wps_fragment_size; 655 int auto_reconnect_disabled; 656 657 /* Channel preferences for AP/P2P GO use */ 658 int best_24_freq; 659 int best_5_freq; 660 int best_overall_freq; 661 662 struct gas_query *gas; 663 664#ifdef CONFIG_INTERWORKING 665 unsigned int fetch_anqp_in_progress:1; 666 unsigned int network_select:1; 667 unsigned int auto_select:1; 668 unsigned int auto_network_select:1; 669 unsigned int fetch_all_anqp:1; 670 struct wpa_bss *interworking_gas_bss; 671#endif /* CONFIG_INTERWORKING */ 672 unsigned int drv_capa_known; 673 674 struct { 675 struct hostapd_hw_modes *modes; 676 u16 num_modes; 677 u16 flags; 678 } hw; 679 680 int pno; 681 682 /* WLAN_REASON_* reason codes. Negative if locally generated. */ 683 int disconnect_reason; 684 685 struct ext_password_data *ext_pw; 686 687 struct wpabuf *last_gas_resp; 688 u8 last_gas_addr[ETH_ALEN]; 689 u8 last_gas_dialog_token; 690 691 unsigned int no_keep_alive:1; 692}; 693 694 695/* wpa_supplicant.c */ 696void wpa_supplicant_apply_ht_overrides( 697 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, 698 struct wpa_driver_associate_params *params); 699void wpa_supplicant_apply_vht_overrides( 700 struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, 701 struct wpa_driver_associate_params *params); 702 703int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); 704 705int wpa_supplicant_reload_configuration(struct wpa_supplicant *wpa_s); 706 707const char * wpa_supplicant_state_txt(enum wpa_states state); 708int wpa_supplicant_update_mac_addr(struct wpa_supplicant *wpa_s); 709int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s); 710int wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s, 711 struct wpa_bss *bss, struct wpa_ssid *ssid, 712 u8 *wpa_ie, size_t *wpa_ie_len); 713void wpa_supplicant_associate(struct wpa_supplicant *wpa_s, 714 struct wpa_bss *bss, 715 struct wpa_ssid *ssid); 716void wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s, 717 struct wpa_ssid *ssid); 718void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s); 719void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr); 720void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s, 721 int sec, int usec); 722void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s); 723void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s, 724 enum wpa_states state); 725struct wpa_ssid * wpa_supplicant_get_ssid(struct wpa_supplicant *wpa_s); 726const char * wpa_supplicant_get_eap_mode(struct wpa_supplicant *wpa_s); 727void wpa_supplicant_cancel_auth_timeout(struct wpa_supplicant *wpa_s); 728void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s, 729 int reason_code); 730 731void wpa_supplicant_enable_network(struct wpa_supplicant *wpa_s, 732 struct wpa_ssid *ssid); 733void wpa_supplicant_disable_network(struct wpa_supplicant *wpa_s, 734 struct wpa_ssid *ssid); 735void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s, 736 struct wpa_ssid *ssid); 737int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s, 738 int ap_scan); 739int wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s, 740 unsigned int expire_age); 741int wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s, 742 unsigned int expire_count); 743int wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s, 744 int scan_interval); 745int wpa_supplicant_set_debug_params(struct wpa_global *global, 746 int debug_level, int debug_timestamp, 747 int debug_show_keys); 748void free_hw_features(struct wpa_supplicant *wpa_s); 749 750void wpa_show_license(void); 751 752struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global, 753 struct wpa_interface *iface); 754int wpa_supplicant_remove_iface(struct wpa_global *global, 755 struct wpa_supplicant *wpa_s, 756 int terminate); 757struct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global, 758 const char *ifname); 759struct wpa_global * wpa_supplicant_init(struct wpa_params *params); 760int wpa_supplicant_run(struct wpa_global *global); 761void wpa_supplicant_deinit(struct wpa_global *global); 762 763int wpa_supplicant_scard_init(struct wpa_supplicant *wpa_s, 764 struct wpa_ssid *ssid); 765void wpa_supplicant_terminate_proc(struct wpa_global *global); 766void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr, 767 const u8 *buf, size_t len); 768enum wpa_key_mgmt key_mgmt2driver(int key_mgmt); 769void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s); 770void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s); 771void wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid); 772int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s); 773int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s); 774void wpas_auth_failed(struct wpa_supplicant *wpa_s); 775void wpas_clear_temp_disabled(struct wpa_supplicant *wpa_s, 776 struct wpa_ssid *ssid, int clear_failures); 777int disallowed_bssid(struct wpa_supplicant *wpa_s, const u8 *bssid); 778int disallowed_ssid(struct wpa_supplicant *wpa_s, const u8 *ssid, 779 size_t ssid_len); 780void wpas_request_connection(struct wpa_supplicant *wpa_s); 781int wpas_build_ext_capab(struct wpa_supplicant *wpa_s, u8 *buf); 782 783/** 784 * wpa_supplicant_ctrl_iface_ctrl_rsp_handle - Handle a control response 785 * @wpa_s: Pointer to wpa_supplicant data 786 * @ssid: Pointer to the network block the reply is for 787 * @field: field the response is a reply for 788 * @value: value (ie, password, etc) for @field 789 * Returns: 0 on success, non-zero on error 790 * 791 * Helper function to handle replies to control interface requests. 792 */ 793int wpa_supplicant_ctrl_iface_ctrl_rsp_handle(struct wpa_supplicant *wpa_s, 794 struct wpa_ssid *ssid, 795 const char *field, 796 const char *value); 797 798/* events.c */ 799void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s); 800int wpa_supplicant_connect(struct wpa_supplicant *wpa_s, 801 struct wpa_bss *selected, 802 struct wpa_ssid *ssid); 803void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx); 804void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx); 805void wnm_bss_keep_alive_deinit(struct wpa_supplicant *wpa_s); 806int wpa_supplicant_fast_associate(struct wpa_supplicant *wpa_s); 807struct wpa_bss * wpa_supplicant_pick_network(struct wpa_supplicant *wpa_s, 808 struct wpa_ssid **selected_ssid); 809 810/* eap_register.c */ 811int eap_register_methods(void); 812 813/** 814 * Utility method to tell if a given network is a persistent group 815 * @ssid: Network object 816 * Returns: 1 if network is a persistent group, 0 otherwise 817 */ 818static inline int network_is_persistent_group(struct wpa_ssid *ssid) 819{ 820 return ((ssid->disabled == 2) || ssid->p2p_persistent_group); 821} 822 823int wpas_network_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); 824 825int wpas_init_ext_pw(struct wpa_supplicant *wpa_s); 826 827#endif /* WPA_SUPPLICANT_I_H */ 828