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