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