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