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