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