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