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