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