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