1 /* 2 * hostapd / Initialization and configuration 3 * Copyright (c) 2002-2014, 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 HOSTAPD_H 10 #define HOSTAPD_H 11 12 #ifdef CONFIG_SQLITE 13 #include <sqlite3.h> 14 #endif /* CONFIG_SQLITE */ 15 16 #include "common/defs.h" 17 #include "utils/list.h" 18 #include "ap_config.h" 19 #include "drivers/driver.h" 20 21 #define OCE_STA_CFON_ENABLED(hapd) \ 22 ((hapd->conf->oce & OCE_STA_CFON) && \ 23 (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_OCE_STA_CFON)) 24 #define OCE_AP_ENABLED(hapd) \ 25 ((hapd->conf->oce & OCE_AP) && \ 26 (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_OCE_AP)) 27 28 struct wpa_ctrl_dst; 29 struct radius_server_data; 30 struct upnp_wps_device_sm; 31 struct hostapd_data; 32 struct sta_info; 33 struct ieee80211_ht_capabilities; 34 struct full_dynamic_vlan; 35 enum wps_event; 36 union wps_event_data; 37 #ifdef CONFIG_MESH 38 struct mesh_conf; 39 #endif /* CONFIG_MESH */ 40 41 struct hostapd_iface; 42 43 struct hapd_interfaces { 44 int (*reload_config)(struct hostapd_iface *iface); 45 struct hostapd_config * (*config_read_cb)(const char *config_fname); 46 int (*ctrl_iface_init)(struct hostapd_data *hapd); 47 void (*ctrl_iface_deinit)(struct hostapd_data *hapd); 48 int (*for_each_interface)(struct hapd_interfaces *interfaces, 49 int (*cb)(struct hostapd_iface *iface, 50 void *ctx), void *ctx); 51 int (*driver_init)(struct hostapd_iface *iface); 52 53 size_t count; 54 int global_ctrl_sock; 55 struct dl_list global_ctrl_dst; 56 char *global_iface_path; 57 char *global_iface_name; 58 #ifndef CONFIG_NATIVE_WINDOWS 59 gid_t ctrl_iface_group; 60 #endif /* CONFIG_NATIVE_WINDOWS */ 61 struct hostapd_iface **iface; 62 63 size_t terminate_on_error; 64 #ifndef CONFIG_NO_VLAN 65 struct dynamic_iface *vlan_priv; 66 #endif /* CONFIG_NO_VLAN */ 67 #ifdef CONFIG_ETH_P_OUI 68 struct dl_list eth_p_oui; /* OUI Extended EtherType handlers */ 69 #endif /* CONFIG_ETH_P_OUI */ 70 int eloop_initialized; 71 72 #ifdef CONFIG_DPP 73 struct dpp_global *dpp; 74 #endif /* CONFIG_DPP */ 75 }; 76 77 enum hostapd_chan_status { 78 HOSTAPD_CHAN_VALID = 0, /* channel is ready */ 79 HOSTAPD_CHAN_INVALID = 1, /* no usable channel found */ 80 HOSTAPD_CHAN_ACS = 2, /* ACS work being performed */ 81 }; 82 83 struct hostapd_probereq_cb { 84 int (*cb)(void *ctx, const u8 *sa, const u8 *da, const u8 *bssid, 85 const u8 *ie, size_t ie_len, int ssi_signal); 86 void *ctx; 87 }; 88 89 #define HOSTAPD_RATE_BASIC 0x00000001 90 91 struct hostapd_rate_data { 92 int rate; /* rate in 100 kbps */ 93 int flags; /* HOSTAPD_RATE_ flags */ 94 }; 95 96 struct hostapd_frame_info { 97 unsigned int freq; 98 u32 channel; 99 u32 datarate; 100 int ssi_signal; /* dBm */ 101 }; 102 103 enum wps_status { 104 WPS_STATUS_SUCCESS = 1, 105 WPS_STATUS_FAILURE 106 }; 107 108 enum pbc_status { 109 WPS_PBC_STATUS_DISABLE, 110 WPS_PBC_STATUS_ACTIVE, 111 WPS_PBC_STATUS_TIMEOUT, 112 WPS_PBC_STATUS_OVERLAP 113 }; 114 115 struct wps_stat { 116 enum wps_status status; 117 enum wps_error_indication failure_reason; 118 enum pbc_status pbc_status; 119 u8 peer_addr[ETH_ALEN]; 120 }; 121 122 struct hostapd_neighbor_entry { 123 struct dl_list list; 124 u8 bssid[ETH_ALEN]; 125 struct wpa_ssid_value ssid; 126 struct wpabuf *nr; 127 struct wpabuf *lci; 128 struct wpabuf *civic; 129 /* LCI update time */ 130 struct os_time lci_date; 131 int stationary; 132 }; 133 134 struct hostapd_sae_commit_queue { 135 struct dl_list list; 136 int rssi; 137 size_t len; 138 u8 msg[]; 139 }; 140 141 /** 142 * struct hostapd_data - hostapd per-BSS data structure 143 */ 144 struct hostapd_data { 145 struct hostapd_iface *iface; 146 struct hostapd_config *iconf; 147 struct hostapd_bss_config *conf; 148 int interface_added; /* virtual interface added for this BSS */ 149 unsigned int started:1; 150 unsigned int disabled:1; 151 unsigned int reenable_beacon:1; 152 153 u8 own_addr[ETH_ALEN]; 154 155 int num_sta; /* number of entries in sta_list */ 156 struct sta_info *sta_list; /* STA info list head */ 157 #define STA_HASH_SIZE 256 158 #define STA_HASH(sta) (sta[5]) 159 struct sta_info *sta_hash[STA_HASH_SIZE]; 160 161 /* 162 * Bitfield for indicating which AIDs are allocated. Only AID values 163 * 1-2007 are used and as such, the bit at index 0 corresponds to AID 164 * 1. 165 */ 166 #define AID_WORDS ((2008 + 31) / 32) 167 u32 sta_aid[AID_WORDS]; 168 169 const struct wpa_driver_ops *driver; 170 void *drv_priv; 171 172 void (*new_assoc_sta_cb)(struct hostapd_data *hapd, 173 struct sta_info *sta, int reassoc); 174 175 void *msg_ctx; /* ctx for wpa_msg() calls */ 176 void *msg_ctx_parent; /* parent interface ctx for wpa_msg() calls */ 177 178 struct radius_client_data *radius; 179 u64 acct_session_id; 180 struct radius_das_data *radius_das; 181 182 struct iapp_data *iapp; 183 184 struct hostapd_cached_radius_acl *acl_cache; 185 struct hostapd_acl_query_data *acl_queries; 186 187 struct wpa_authenticator *wpa_auth; 188 struct eapol_authenticator *eapol_auth; 189 190 struct rsn_preauth_interface *preauth_iface; 191 struct os_reltime michael_mic_failure; 192 int michael_mic_failures; 193 int tkip_countermeasures; 194 195 int ctrl_sock; 196 struct dl_list ctrl_dst; 197 198 void *ssl_ctx; 199 void *eap_sim_db_priv; 200 struct radius_server_data *radius_srv; 201 struct dl_list erp_keys; /* struct eap_server_erp_key */ 202 203 int parameter_set_count; 204 205 /* Time Advertisement */ 206 u8 time_update_counter; 207 struct wpabuf *time_adv; 208 209 #ifdef CONFIG_FULL_DYNAMIC_VLAN 210 struct full_dynamic_vlan *full_dynamic_vlan; 211 #endif /* CONFIG_FULL_DYNAMIC_VLAN */ 212 213 struct l2_packet_data *l2; 214 215 #ifdef CONFIG_IEEE80211R_AP 216 struct dl_list l2_queue; 217 struct dl_list l2_oui_queue; 218 struct eth_p_oui_ctx *oui_pull; 219 struct eth_p_oui_ctx *oui_resp; 220 struct eth_p_oui_ctx *oui_push; 221 struct eth_p_oui_ctx *oui_sreq; 222 struct eth_p_oui_ctx *oui_sresp; 223 #endif /* CONFIG_IEEE80211R_AP */ 224 225 struct wps_context *wps; 226 227 int beacon_set_done; 228 struct wpabuf *wps_beacon_ie; 229 struct wpabuf *wps_probe_resp_ie; 230 #ifdef CONFIG_WPS 231 unsigned int ap_pin_failures; 232 unsigned int ap_pin_failures_consecutive; 233 struct upnp_wps_device_sm *wps_upnp; 234 unsigned int ap_pin_lockout_time; 235 236 struct wps_stat wps_stats; 237 #endif /* CONFIG_WPS */ 238 239 #ifdef CONFIG_MACSEC 240 struct ieee802_1x_kay *kay; 241 #endif /* CONFIG_MACSEC */ 242 243 struct hostapd_probereq_cb *probereq_cb; 244 size_t num_probereq_cb; 245 246 void (*public_action_cb)(void *ctx, const u8 *buf, size_t len, 247 int freq); 248 void *public_action_cb_ctx; 249 void (*public_action_cb2)(void *ctx, const u8 *buf, size_t len, 250 int freq); 251 void *public_action_cb2_ctx; 252 253 int (*vendor_action_cb)(void *ctx, const u8 *buf, size_t len, 254 int freq); 255 void *vendor_action_cb_ctx; 256 257 void (*wps_reg_success_cb)(void *ctx, const u8 *mac_addr, 258 const u8 *uuid_e); 259 void *wps_reg_success_cb_ctx; 260 261 void (*wps_event_cb)(void *ctx, enum wps_event event, 262 union wps_event_data *data); 263 void *wps_event_cb_ctx; 264 265 void (*sta_authorized_cb)(void *ctx, const u8 *mac_addr, 266 int authorized, const u8 *p2p_dev_addr); 267 void *sta_authorized_cb_ctx; 268 269 void (*setup_complete_cb)(void *ctx); 270 void *setup_complete_cb_ctx; 271 272 void (*new_psk_cb)(void *ctx, const u8 *mac_addr, 273 const u8 *p2p_dev_addr, const u8 *psk, 274 size_t psk_len); 275 void *new_psk_cb_ctx; 276 277 /* channel switch parameters */ 278 struct hostapd_freq_params cs_freq_params; 279 u8 cs_count; 280 int cs_block_tx; 281 unsigned int cs_c_off_beacon; 282 unsigned int cs_c_off_proberesp; 283 int csa_in_progress; 284 unsigned int cs_c_off_ecsa_beacon; 285 unsigned int cs_c_off_ecsa_proberesp; 286 287 #ifdef CONFIG_P2P 288 struct p2p_data *p2p; 289 struct p2p_group *p2p_group; 290 struct wpabuf *p2p_beacon_ie; 291 struct wpabuf *p2p_probe_resp_ie; 292 293 /* Number of non-P2P association stations */ 294 int num_sta_no_p2p; 295 296 /* Periodic NoA (used only when no non-P2P clients in the group) */ 297 int noa_enabled; 298 int noa_start; 299 int noa_duration; 300 #endif /* CONFIG_P2P */ 301 #ifdef CONFIG_PROXYARP 302 struct l2_packet_data *sock_dhcp; 303 struct l2_packet_data *sock_ndisc; 304 #endif /* CONFIG_PROXYARP */ 305 #ifdef CONFIG_MESH 306 int num_plinks; 307 int max_plinks; 308 void (*mesh_sta_free_cb)(struct hostapd_data *hapd, 309 struct sta_info *sta); 310 struct wpabuf *mesh_pending_auth; 311 struct os_reltime mesh_pending_auth_time; 312 u8 mesh_required_peer[ETH_ALEN]; 313 #endif /* CONFIG_MESH */ 314 315 #ifdef CONFIG_SQLITE 316 struct hostapd_eap_user tmp_eap_user; 317 #endif /* CONFIG_SQLITE */ 318 319 #ifdef CONFIG_SAE 320 /** Key used for generating SAE anti-clogging tokens */ 321 u8 sae_token_key[8]; 322 struct os_reltime last_sae_token_key_update; 323 u16 sae_token_idx; 324 u16 sae_pending_token_idx[256]; 325 int dot11RSNASAERetransPeriod; /* msec */ 326 struct dl_list sae_commit_queue; /* struct hostapd_sae_commit_queue */ 327 #endif /* CONFIG_SAE */ 328 329 #ifdef CONFIG_TESTING_OPTIONS 330 unsigned int ext_mgmt_frame_handling:1; 331 unsigned int ext_eapol_frame_io:1; 332 333 struct l2_packet_data *l2_test; 334 335 enum wpa_alg last_gtk_alg; 336 int last_gtk_key_idx; 337 u8 last_gtk[WPA_GTK_MAX_LEN]; 338 size_t last_gtk_len; 339 340 #ifdef CONFIG_IEEE80211W 341 enum wpa_alg last_igtk_alg; 342 int last_igtk_key_idx; 343 u8 last_igtk[WPA_IGTK_MAX_LEN]; 344 size_t last_igtk_len; 345 #endif /* CONFIG_IEEE80211W */ 346 #endif /* CONFIG_TESTING_OPTIONS */ 347 348 #ifdef CONFIG_MBO 349 unsigned int mbo_assoc_disallow; 350 #endif /* CONFIG_MBO */ 351 352 struct dl_list nr_db; 353 354 u8 beacon_req_token; 355 u8 lci_req_token; 356 u8 range_req_token; 357 unsigned int lci_req_active:1; 358 unsigned int range_req_active:1; 359 360 int dhcp_sock; /* UDP socket used with the DHCP server */ 361 362 #ifdef CONFIG_DPP 363 int dpp_init_done; 364 struct dpp_authentication *dpp_auth; 365 u8 dpp_allowed_roles; 366 int dpp_qr_mutual; 367 int dpp_auth_ok_on_ack; 368 int dpp_in_response_listen; 369 struct gas_query_ap *gas; 370 struct dpp_pkex *dpp_pkex; 371 struct dpp_bootstrap_info *dpp_pkex_bi; 372 char *dpp_pkex_code; 373 char *dpp_pkex_identifier; 374 char *dpp_pkex_auth_cmd; 375 char *dpp_configurator_params; 376 struct os_reltime dpp_last_init; 377 struct os_reltime dpp_init_iter_start; 378 unsigned int dpp_init_max_tries; 379 unsigned int dpp_init_retry_time; 380 unsigned int dpp_resp_wait_time; 381 unsigned int dpp_resp_max_tries; 382 unsigned int dpp_resp_retry_time; 383 #ifdef CONFIG_TESTING_OPTIONS 384 char *dpp_config_obj_override; 385 char *dpp_discovery_override; 386 char *dpp_groups_override; 387 unsigned int dpp_ignore_netaccesskey_mismatch:1; 388 #endif /* CONFIG_TESTING_OPTIONS */ 389 #endif /* CONFIG_DPP */ 390 391 #ifdef CONFIG_AIRTIME_POLICY 392 unsigned int num_backlogged_sta; 393 unsigned int airtime_weight; 394 #endif /* CONFIG_AIRTIME_POLICY */ 395 396 u8 last_1x_eapol_key_replay_counter[8]; 397 398 #ifdef CONFIG_SQLITE 399 sqlite3 *rad_attr_db; 400 #endif /* CONFIG_SQLITE */ 401 }; 402 403 404 struct hostapd_sta_info { 405 struct dl_list list; 406 u8 addr[ETH_ALEN]; 407 struct os_reltime last_seen; 408 int ssi_signal; 409 #ifdef CONFIG_TAXONOMY 410 struct wpabuf *probe_ie_taxonomy; 411 #endif /* CONFIG_TAXONOMY */ 412 }; 413 414 /** 415 * struct hostapd_iface - hostapd per-interface data structure 416 */ 417 struct hostapd_iface { 418 struct hapd_interfaces *interfaces; 419 void *owner; 420 char *config_fname; 421 struct hostapd_config *conf; 422 char phy[16]; /* Name of the PHY (radio) */ 423 424 enum hostapd_iface_state { 425 HAPD_IFACE_UNINITIALIZED, 426 HAPD_IFACE_DISABLED, 427 HAPD_IFACE_COUNTRY_UPDATE, 428 HAPD_IFACE_ACS, 429 HAPD_IFACE_HT_SCAN, 430 HAPD_IFACE_DFS, 431 HAPD_IFACE_ENABLED 432 } state; 433 434 #ifdef CONFIG_MESH 435 struct mesh_conf *mconf; 436 #endif /* CONFIG_MESH */ 437 438 size_t num_bss; 439 struct hostapd_data **bss; 440 441 unsigned int wait_channel_update:1; 442 unsigned int cac_started:1; 443 #ifdef CONFIG_FST 444 struct fst_iface *fst; 445 const struct wpabuf *fst_ies; 446 #endif /* CONFIG_FST */ 447 448 /* 449 * When set, indicates that the driver will handle the AP 450 * teardown: delete global keys, station keys, and stations. 451 */ 452 unsigned int driver_ap_teardown:1; 453 454 /* 455 * When set, indicates that this interface is part of list of 456 * interfaces that need to be started together (synchronously). 457 */ 458 unsigned int need_to_start_in_sync:1; 459 460 /* Ready to start but waiting for other interfaces to become ready. */ 461 unsigned int ready_to_start_in_sync:1; 462 463 int num_ap; /* number of entries in ap_list */ 464 struct ap_info *ap_list; /* AP info list head */ 465 struct ap_info *ap_hash[STA_HASH_SIZE]; 466 467 u64 drv_flags; 468 469 /* SMPS modes supported by the driver (WPA_DRIVER_SMPS_MODE_*) */ 470 unsigned int smps_modes; 471 472 /* 473 * A bitmap of supported protocols for probe response offload. See 474 * struct wpa_driver_capa in driver.h 475 */ 476 unsigned int probe_resp_offloads; 477 478 /* extended capabilities supported by the driver */ 479 const u8 *extended_capa, *extended_capa_mask; 480 unsigned int extended_capa_len; 481 482 unsigned int drv_max_acl_mac_addrs; 483 484 struct hostapd_hw_modes *hw_features; 485 int num_hw_features; 486 struct hostapd_hw_modes *current_mode; 487 /* Rates that are currently used (i.e., filtered copy of 488 * current_mode->channels */ 489 int num_rates; 490 struct hostapd_rate_data *current_rates; 491 int *basic_rates; 492 int freq; 493 494 u16 hw_flags; 495 496 /* Number of associated Non-ERP stations (i.e., stations using 802.11b 497 * in 802.11g BSS) */ 498 int num_sta_non_erp; 499 500 /* Number of associated stations that do not support Short Slot Time */ 501 int num_sta_no_short_slot_time; 502 503 /* Number of associated stations that do not support Short Preamble */ 504 int num_sta_no_short_preamble; 505 506 int olbc; /* Overlapping Legacy BSS Condition */ 507 508 /* Number of HT associated stations that do not support greenfield */ 509 int num_sta_ht_no_gf; 510 511 /* Number of associated non-HT stations */ 512 int num_sta_no_ht; 513 514 /* Number of HT associated stations 20 MHz */ 515 int num_sta_ht_20mhz; 516 517 /* Number of HT40 intolerant stations */ 518 int num_sta_ht40_intolerant; 519 520 /* Overlapping BSS information */ 521 int olbc_ht; 522 523 u16 ht_op_mode; 524 525 /* surveying helpers */ 526 527 /* number of channels surveyed */ 528 unsigned int chans_surveyed; 529 530 /* lowest observed noise floor in dBm */ 531 s8 lowest_nf; 532 533 /* channel utilization calculation */ 534 u64 last_channel_time; 535 u64 last_channel_time_busy; 536 u8 channel_utilization; 537 538 unsigned int chan_util_samples_sum; 539 unsigned int chan_util_num_sample_periods; 540 unsigned int chan_util_average; 541 542 /* eCSA IE will be added only if operating class is specified */ 543 u8 cs_oper_class; 544 545 unsigned int dfs_cac_ms; 546 struct os_reltime dfs_cac_start; 547 548 /* Latched with the actual secondary channel information and will be 549 * used while juggling between HT20 and HT40 modes. */ 550 int secondary_ch; 551 552 #ifdef CONFIG_ACS 553 unsigned int acs_num_completed_scans; 554 #endif /* CONFIG_ACS */ 555 556 void (*scan_cb)(struct hostapd_iface *iface); 557 int num_ht40_scan_tries; 558 559 struct dl_list sta_seen; /* struct hostapd_sta_info */ 560 unsigned int num_sta_seen; 561 562 u8 dfs_domain; 563 #ifdef CONFIG_AIRTIME_POLICY 564 unsigned int airtime_quantum; 565 #endif /* CONFIG_AIRTIME_POLICY */ 566 567 /* Previous WMM element information */ 568 struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM]; 569 }; 570 571 /* hostapd.c */ 572 int hostapd_for_each_interface(struct hapd_interfaces *interfaces, 573 int (*cb)(struct hostapd_iface *iface, 574 void *ctx), void *ctx); 575 int hostapd_reload_config(struct hostapd_iface *iface); 576 void hostapd_reconfig_encryption(struct hostapd_data *hapd); 577 struct hostapd_data * 578 hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface, 579 struct hostapd_config *conf, 580 struct hostapd_bss_config *bss); 581 int hostapd_setup_interface(struct hostapd_iface *iface); 582 int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err); 583 void hostapd_interface_deinit(struct hostapd_iface *iface); 584 void hostapd_interface_free(struct hostapd_iface *iface); 585 struct hostapd_iface * hostapd_alloc_iface(void); 586 struct hostapd_iface * hostapd_init(struct hapd_interfaces *interfaces, 587 const char *config_file); 588 struct hostapd_iface * 589 hostapd_interface_init_bss(struct hapd_interfaces *interfaces, const char *phy, 590 const char *config_fname, int debug); 591 void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, 592 int reassoc); 593 void hostapd_interface_deinit_free(struct hostapd_iface *iface); 594 int hostapd_enable_iface(struct hostapd_iface *hapd_iface); 595 int hostapd_reload_iface(struct hostapd_iface *hapd_iface); 596 int hostapd_disable_iface(struct hostapd_iface *hapd_iface); 597 int hostapd_add_iface(struct hapd_interfaces *ifaces, char *buf); 598 int hostapd_remove_iface(struct hapd_interfaces *ifaces, char *buf); 599 void hostapd_channel_list_updated(struct hostapd_iface *iface, int initiator); 600 void hostapd_set_state(struct hostapd_iface *iface, enum hostapd_iface_state s); 601 const char * hostapd_state_text(enum hostapd_iface_state s); 602 int hostapd_csa_in_progress(struct hostapd_iface *iface); 603 void hostapd_chan_switch_vht_config(struct hostapd_data *hapd, int vht_enabled); 604 int hostapd_switch_channel(struct hostapd_data *hapd, 605 struct csa_settings *settings); 606 void 607 hostapd_switch_channel_fallback(struct hostapd_iface *iface, 608 const struct hostapd_freq_params *freq_params); 609 void hostapd_cleanup_cs_params(struct hostapd_data *hapd); 610 void hostapd_periodic_iface(struct hostapd_iface *iface); 611 int hostapd_owe_trans_get_info(struct hostapd_data *hapd); 612 613 /* utils.c */ 614 int hostapd_register_probereq_cb(struct hostapd_data *hapd, 615 int (*cb)(void *ctx, const u8 *sa, 616 const u8 *da, const u8 *bssid, 617 const u8 *ie, size_t ie_len, 618 int ssi_signal), 619 void *ctx); 620 void hostapd_prune_associations(struct hostapd_data *hapd, const u8 *addr); 621 622 /* drv_callbacks.c (TODO: move to somewhere else?) */ 623 void hostapd_notify_assoc_fils_finish(struct hostapd_data *hapd, 624 struct sta_info *sta); 625 int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr, 626 const u8 *ie, size_t ielen, int reassoc); 627 void hostapd_notif_disassoc(struct hostapd_data *hapd, const u8 *addr); 628 void hostapd_event_sta_low_ack(struct hostapd_data *hapd, const u8 *addr); 629 void hostapd_event_connect_failed_reason(struct hostapd_data *hapd, 630 const u8 *addr, int reason_code); 631 int hostapd_probe_req_rx(struct hostapd_data *hapd, const u8 *sa, const u8 *da, 632 const u8 *bssid, const u8 *ie, size_t ie_len, 633 int ssi_signal); 634 void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht, 635 int offset, int width, int cf1, int cf2, 636 int finished); 637 struct survey_results; 638 void hostapd_event_get_survey(struct hostapd_iface *iface, 639 struct survey_results *survey_results); 640 void hostapd_acs_channel_selected(struct hostapd_data *hapd, 641 struct acs_selected_channels *acs_res); 642 643 const struct hostapd_eap_user * 644 hostapd_get_eap_user(struct hostapd_data *hapd, const u8 *identity, 645 size_t identity_len, int phase2); 646 647 struct hostapd_data * hostapd_get_iface(struct hapd_interfaces *interfaces, 648 const char *ifname); 649 void hostapd_event_sta_opmode_changed(struct hostapd_data *hapd, const u8 *addr, 650 enum smps_mode smps_mode, 651 enum chan_width chan_width, u8 rx_nss); 652 653 #ifdef CONFIG_FST 654 void fst_hostapd_fill_iface_obj(struct hostapd_data *hapd, 655 struct fst_wpa_obj *iface_obj); 656 #endif /* CONFIG_FST */ 657 658 #endif /* HOSTAPD_H */ 659