xref: /freebsd/contrib/wpa/src/ap/ap_config.h (revision 325151a32e114f02699a301c1e74080e7c1f1a26)
1e28a4053SRui Paulo /*
2e28a4053SRui Paulo  * hostapd / Configuration definitions and helpers functions
3*325151a3SRui Paulo  * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
4e28a4053SRui Paulo  *
5f05cddf9SRui Paulo  * This software may be distributed under the terms of the BSD license.
6f05cddf9SRui Paulo  * See README for more details.
7e28a4053SRui Paulo  */
8e28a4053SRui Paulo 
9e28a4053SRui Paulo #ifndef HOSTAPD_CONFIG_H
10e28a4053SRui Paulo #define HOSTAPD_CONFIG_H
11e28a4053SRui Paulo 
12e28a4053SRui Paulo #include "common/defs.h"
13e28a4053SRui Paulo #include "ip_addr.h"
14e28a4053SRui Paulo #include "common/wpa_common.h"
15*325151a3SRui Paulo #include "common/ieee802_11_defs.h"
16f05cddf9SRui Paulo #include "common/ieee802_11_common.h"
17f05cddf9SRui Paulo #include "wps/wps.h"
18*325151a3SRui Paulo #include "fst/fst.h"
19e28a4053SRui Paulo 
205b9c547cSRui Paulo /**
215b9c547cSRui Paulo  * mesh_conf - local MBSS state and settings
225b9c547cSRui Paulo  */
235b9c547cSRui Paulo struct mesh_conf {
245b9c547cSRui Paulo 	u8 meshid[32];
255b9c547cSRui Paulo 	u8 meshid_len;
265b9c547cSRui Paulo 	/* Active Path Selection Protocol Identifier */
275b9c547cSRui Paulo 	u8 mesh_pp_id;
285b9c547cSRui Paulo 	/* Active Path Selection Metric Identifier */
295b9c547cSRui Paulo 	u8 mesh_pm_id;
305b9c547cSRui Paulo 	/* Congestion Control Mode Identifier */
315b9c547cSRui Paulo 	u8 mesh_cc_id;
325b9c547cSRui Paulo 	/* Synchronization Protocol Identifier */
335b9c547cSRui Paulo 	u8 mesh_sp_id;
345b9c547cSRui Paulo 	/* Authentication Protocol Identifier */
355b9c547cSRui Paulo 	u8 mesh_auth_id;
36*325151a3SRui Paulo 	u8 *rsn_ie;
37*325151a3SRui Paulo 	int rsn_ie_len;
385b9c547cSRui Paulo #define MESH_CONF_SEC_NONE BIT(0)
395b9c547cSRui Paulo #define MESH_CONF_SEC_AUTH BIT(1)
405b9c547cSRui Paulo #define MESH_CONF_SEC_AMPE BIT(2)
415b9c547cSRui Paulo 	unsigned int security;
425b9c547cSRui Paulo 	int dot11MeshMaxRetries;
435b9c547cSRui Paulo 	int dot11MeshRetryTimeout; /* msec */
445b9c547cSRui Paulo 	int dot11MeshConfirmTimeout; /* msec */
455b9c547cSRui Paulo 	int dot11MeshHoldingTimeout; /* msec */
465b9c547cSRui Paulo };
475b9c547cSRui Paulo 
48e28a4053SRui Paulo #define MAX_STA_COUNT 2007
49e28a4053SRui Paulo #define MAX_VLAN_ID 4094
50e28a4053SRui Paulo 
51e28a4053SRui Paulo typedef u8 macaddr[ETH_ALEN];
52e28a4053SRui Paulo 
53e28a4053SRui Paulo struct mac_acl_entry {
54e28a4053SRui Paulo 	macaddr addr;
55e28a4053SRui Paulo 	int vlan_id;
56e28a4053SRui Paulo };
57e28a4053SRui Paulo 
58e28a4053SRui Paulo struct hostapd_radius_servers;
59e28a4053SRui Paulo struct ft_remote_r0kh;
60e28a4053SRui Paulo struct ft_remote_r1kh;
61e28a4053SRui Paulo 
62e28a4053SRui Paulo #define NUM_WEP_KEYS 4
63e28a4053SRui Paulo struct hostapd_wep_keys {
64e28a4053SRui Paulo 	u8 idx;
65e28a4053SRui Paulo 	u8 *key[NUM_WEP_KEYS];
66e28a4053SRui Paulo 	size_t len[NUM_WEP_KEYS];
67e28a4053SRui Paulo 	int keys_set;
68e28a4053SRui Paulo 	size_t default_len; /* key length used for dynamic key generation */
69e28a4053SRui Paulo };
70e28a4053SRui Paulo 
71e28a4053SRui Paulo typedef enum hostap_security_policy {
72e28a4053SRui Paulo 	SECURITY_PLAINTEXT = 0,
73e28a4053SRui Paulo 	SECURITY_STATIC_WEP = 1,
74e28a4053SRui Paulo 	SECURITY_IEEE_802_1X = 2,
75e28a4053SRui Paulo 	SECURITY_WPA_PSK = 3,
765b9c547cSRui Paulo 	SECURITY_WPA = 4,
775b9c547cSRui Paulo 	SECURITY_OSEN = 5
78e28a4053SRui Paulo } secpolicy;
79e28a4053SRui Paulo 
80e28a4053SRui Paulo struct hostapd_ssid {
81*325151a3SRui Paulo 	u8 ssid[SSID_MAX_LEN];
82e28a4053SRui Paulo 	size_t ssid_len;
83f05cddf9SRui Paulo 	unsigned int ssid_set:1;
84f05cddf9SRui Paulo 	unsigned int utf8_ssid:1;
855b9c547cSRui Paulo 	unsigned int wpa_passphrase_set:1;
865b9c547cSRui Paulo 	unsigned int wpa_psk_set:1;
87e28a4053SRui Paulo 
88e28a4053SRui Paulo 	char vlan[IFNAMSIZ + 1];
89e28a4053SRui Paulo 	secpolicy security_policy;
90e28a4053SRui Paulo 
91e28a4053SRui Paulo 	struct hostapd_wpa_psk *wpa_psk;
92e28a4053SRui Paulo 	char *wpa_passphrase;
93e28a4053SRui Paulo 	char *wpa_psk_file;
94e28a4053SRui Paulo 
95e28a4053SRui Paulo 	struct hostapd_wep_keys wep;
96e28a4053SRui Paulo 
97e28a4053SRui Paulo #define DYNAMIC_VLAN_DISABLED 0
98e28a4053SRui Paulo #define DYNAMIC_VLAN_OPTIONAL 1
99e28a4053SRui Paulo #define DYNAMIC_VLAN_REQUIRED 2
100e28a4053SRui Paulo 	int dynamic_vlan;
101f05cddf9SRui Paulo #define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0
102f05cddf9SRui Paulo #define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1
103f05cddf9SRui Paulo #define DYNAMIC_VLAN_NAMING_END 2
104f05cddf9SRui Paulo 	int vlan_naming;
105e28a4053SRui Paulo #ifdef CONFIG_FULL_DYNAMIC_VLAN
106e28a4053SRui Paulo 	char *vlan_tagged_interface;
107e28a4053SRui Paulo #endif /* CONFIG_FULL_DYNAMIC_VLAN */
108e28a4053SRui Paulo };
109e28a4053SRui Paulo 
110e28a4053SRui Paulo 
111e28a4053SRui Paulo #define VLAN_ID_WILDCARD -1
112e28a4053SRui Paulo 
113e28a4053SRui Paulo struct hostapd_vlan {
114e28a4053SRui Paulo 	struct hostapd_vlan *next;
115e28a4053SRui Paulo 	int vlan_id; /* VLAN ID or -1 (VLAN_ID_WILDCARD) for wildcard entry */
116e28a4053SRui Paulo 	char ifname[IFNAMSIZ + 1];
117*325151a3SRui Paulo 	int configured;
118e28a4053SRui Paulo 	int dynamic_vlan;
119e28a4053SRui Paulo #ifdef CONFIG_FULL_DYNAMIC_VLAN
120e28a4053SRui Paulo 
121e28a4053SRui Paulo #define DVLAN_CLEAN_WLAN_PORT	0x8
122e28a4053SRui Paulo 	int clean;
123e28a4053SRui Paulo #endif /* CONFIG_FULL_DYNAMIC_VLAN */
124e28a4053SRui Paulo };
125e28a4053SRui Paulo 
126e28a4053SRui Paulo #define PMK_LEN 32
127f05cddf9SRui Paulo struct hostapd_sta_wpa_psk_short {
128f05cddf9SRui Paulo 	struct hostapd_sta_wpa_psk_short *next;
129f05cddf9SRui Paulo 	u8 psk[PMK_LEN];
130f05cddf9SRui Paulo };
131f05cddf9SRui Paulo 
132e28a4053SRui Paulo struct hostapd_wpa_psk {
133e28a4053SRui Paulo 	struct hostapd_wpa_psk *next;
134e28a4053SRui Paulo 	int group;
135e28a4053SRui Paulo 	u8 psk[PMK_LEN];
136e28a4053SRui Paulo 	u8 addr[ETH_ALEN];
1375b9c547cSRui Paulo 	u8 p2p_dev_addr[ETH_ALEN];
138e28a4053SRui Paulo };
139e28a4053SRui Paulo 
140e28a4053SRui Paulo struct hostapd_eap_user {
141e28a4053SRui Paulo 	struct hostapd_eap_user *next;
142e28a4053SRui Paulo 	u8 *identity;
143e28a4053SRui Paulo 	size_t identity_len;
144e28a4053SRui Paulo 	struct {
145e28a4053SRui Paulo 		int vendor;
146e28a4053SRui Paulo 		u32 method;
147f05cddf9SRui Paulo 	} methods[EAP_MAX_METHODS];
148e28a4053SRui Paulo 	u8 *password;
149e28a4053SRui Paulo 	size_t password_len;
150e28a4053SRui Paulo 	int phase2;
151e28a4053SRui Paulo 	int force_version;
152e28a4053SRui Paulo 	unsigned int wildcard_prefix:1;
153e28a4053SRui Paulo 	unsigned int password_hash:1; /* whether password is hashed with
154e28a4053SRui Paulo 				       * nt_password_hash() */
1555b9c547cSRui Paulo 	unsigned int remediation:1;
1565b9c547cSRui Paulo 	unsigned int macacl:1;
157e28a4053SRui Paulo 	int ttls_auth; /* EAP_TTLS_AUTH_* bitfield */
1585b9c547cSRui Paulo 	struct hostapd_radius_attr *accept_attr;
159e28a4053SRui Paulo };
160e28a4053SRui Paulo 
161f05cddf9SRui Paulo struct hostapd_radius_attr {
162f05cddf9SRui Paulo 	u8 type;
163f05cddf9SRui Paulo 	struct wpabuf *val;
164f05cddf9SRui Paulo 	struct hostapd_radius_attr *next;
165f05cddf9SRui Paulo };
166e28a4053SRui Paulo 
167f05cddf9SRui Paulo 
168f05cddf9SRui Paulo #define NUM_TX_QUEUES 4
169e28a4053SRui Paulo 
170e28a4053SRui Paulo struct hostapd_tx_queue_params {
171e28a4053SRui Paulo 	int aifs;
172e28a4053SRui Paulo 	int cwmin;
173e28a4053SRui Paulo 	int cwmax;
174e28a4053SRui Paulo 	int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
175e28a4053SRui Paulo };
176e28a4053SRui Paulo 
177f05cddf9SRui Paulo 
178f05cddf9SRui Paulo #define MAX_ROAMING_CONSORTIUM_LEN 15
179f05cddf9SRui Paulo 
180f05cddf9SRui Paulo struct hostapd_roaming_consortium {
181f05cddf9SRui Paulo 	u8 len;
182f05cddf9SRui Paulo 	u8 oi[MAX_ROAMING_CONSORTIUM_LEN];
183e28a4053SRui Paulo };
184e28a4053SRui Paulo 
185f05cddf9SRui Paulo struct hostapd_lang_string {
186f05cddf9SRui Paulo 	u8 lang[3];
187f05cddf9SRui Paulo 	u8 name_len;
188f05cddf9SRui Paulo 	u8 name[252];
189f05cddf9SRui Paulo };
190f05cddf9SRui Paulo 
191f05cddf9SRui Paulo #define MAX_NAI_REALMS 10
192f05cddf9SRui Paulo #define MAX_NAI_REALMLEN 255
193f05cddf9SRui Paulo #define MAX_NAI_EAP_METHODS 5
194f05cddf9SRui Paulo #define MAX_NAI_AUTH_TYPES 4
195f05cddf9SRui Paulo struct hostapd_nai_realm_data {
196f05cddf9SRui Paulo 	u8 encoding;
197f05cddf9SRui Paulo 	char realm_buf[MAX_NAI_REALMLEN + 1];
198f05cddf9SRui Paulo 	char *realm[MAX_NAI_REALMS];
199f05cddf9SRui Paulo 	u8 eap_method_count;
200f05cddf9SRui Paulo 	struct hostapd_nai_realm_eap {
201f05cddf9SRui Paulo 		u8 eap_method;
202f05cddf9SRui Paulo 		u8 num_auths;
203f05cddf9SRui Paulo 		u8 auth_id[MAX_NAI_AUTH_TYPES];
204f05cddf9SRui Paulo 		u8 auth_val[MAX_NAI_AUTH_TYPES];
205f05cddf9SRui Paulo 	} eap_method[MAX_NAI_EAP_METHODS];
206f05cddf9SRui Paulo };
207e28a4053SRui Paulo 
208e28a4053SRui Paulo /**
209e28a4053SRui Paulo  * struct hostapd_bss_config - Per-BSS configuration
210e28a4053SRui Paulo  */
211e28a4053SRui Paulo struct hostapd_bss_config {
212e28a4053SRui Paulo 	char iface[IFNAMSIZ + 1];
213e28a4053SRui Paulo 	char bridge[IFNAMSIZ + 1];
2145b9c547cSRui Paulo 	char vlan_bridge[IFNAMSIZ + 1];
215f05cddf9SRui Paulo 	char wds_bridge[IFNAMSIZ + 1];
216e28a4053SRui Paulo 
217e28a4053SRui Paulo 	enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
218e28a4053SRui Paulo 
219e28a4053SRui Paulo 	unsigned int logger_syslog; /* module bitfield */
220e28a4053SRui Paulo 	unsigned int logger_stdout; /* module bitfield */
221e28a4053SRui Paulo 
222e28a4053SRui Paulo 	int max_num_sta; /* maximum number of STAs in station table */
223e28a4053SRui Paulo 
224e28a4053SRui Paulo 	int dtim_period;
2255b9c547cSRui Paulo 	int bss_load_update_period;
226e28a4053SRui Paulo 
227e28a4053SRui Paulo 	int ieee802_1x; /* use IEEE 802.1X */
228e28a4053SRui Paulo 	int eapol_version;
229e28a4053SRui Paulo 	int eap_server; /* Use internal EAP server instead of external
230e28a4053SRui Paulo 			 * RADIUS server */
231e28a4053SRui Paulo 	struct hostapd_eap_user *eap_user;
232f05cddf9SRui Paulo 	char *eap_user_sqlite;
233e28a4053SRui Paulo 	char *eap_sim_db;
2345b9c547cSRui Paulo 	int eap_server_erp; /* Whether ERP is enabled on internal EAP server */
235e28a4053SRui Paulo 	struct hostapd_ip_addr own_ip_addr;
236e28a4053SRui Paulo 	char *nas_identifier;
237e28a4053SRui Paulo 	struct hostapd_radius_servers *radius;
238e28a4053SRui Paulo 	int acct_interim_interval;
239f05cddf9SRui Paulo 	int radius_request_cui;
240f05cddf9SRui Paulo 	struct hostapd_radius_attr *radius_auth_req_attr;
241f05cddf9SRui Paulo 	struct hostapd_radius_attr *radius_acct_req_attr;
242f05cddf9SRui Paulo 	int radius_das_port;
243f05cddf9SRui Paulo 	unsigned int radius_das_time_window;
244f05cddf9SRui Paulo 	int radius_das_require_event_timestamp;
245f05cddf9SRui Paulo 	struct hostapd_ip_addr radius_das_client_addr;
246f05cddf9SRui Paulo 	u8 *radius_das_shared_secret;
247f05cddf9SRui Paulo 	size_t radius_das_shared_secret_len;
248e28a4053SRui Paulo 
249e28a4053SRui Paulo 	struct hostapd_ssid ssid;
250e28a4053SRui Paulo 
251e28a4053SRui Paulo 	char *eap_req_id_text; /* optional displayable message sent with
252e28a4053SRui Paulo 				* EAP Request-Identity */
253e28a4053SRui Paulo 	size_t eap_req_id_text_len;
254e28a4053SRui Paulo 	int eapol_key_index_workaround;
255e28a4053SRui Paulo 
256e28a4053SRui Paulo 	size_t default_wep_key_len;
257e28a4053SRui Paulo 	int individual_wep_key_len;
258e28a4053SRui Paulo 	int wep_rekeying_period;
259e28a4053SRui Paulo 	int broadcast_key_idx_min, broadcast_key_idx_max;
260e28a4053SRui Paulo 	int eap_reauth_period;
2615b9c547cSRui Paulo 	int erp_send_reauth_start;
2625b9c547cSRui Paulo 	char *erp_domain;
263e28a4053SRui Paulo 
264e28a4053SRui Paulo 	int ieee802_11f; /* use IEEE 802.11f (IAPP) */
265e28a4053SRui Paulo 	char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast
266e28a4053SRui Paulo 					* frames */
267e28a4053SRui Paulo 
268e28a4053SRui Paulo 	enum {
269e28a4053SRui Paulo 		ACCEPT_UNLESS_DENIED = 0,
270e28a4053SRui Paulo 		DENY_UNLESS_ACCEPTED = 1,
271e28a4053SRui Paulo 		USE_EXTERNAL_RADIUS_AUTH = 2
272e28a4053SRui Paulo 	} macaddr_acl;
273e28a4053SRui Paulo 	struct mac_acl_entry *accept_mac;
274e28a4053SRui Paulo 	int num_accept_mac;
275e28a4053SRui Paulo 	struct mac_acl_entry *deny_mac;
276e28a4053SRui Paulo 	int num_deny_mac;
277e28a4053SRui Paulo 	int wds_sta;
278f05cddf9SRui Paulo 	int isolate;
2795b9c547cSRui Paulo 	int start_disabled;
280e28a4053SRui Paulo 
281e28a4053SRui Paulo 	int auth_algs; /* bitfield of allowed IEEE 802.11 authentication
282e28a4053SRui Paulo 			* algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */
283e28a4053SRui Paulo 
284e28a4053SRui Paulo 	int wpa; /* bitfield of WPA_PROTO_WPA, WPA_PROTO_RSN */
285e28a4053SRui Paulo 	int wpa_key_mgmt;
286e28a4053SRui Paulo #ifdef CONFIG_IEEE80211W
287e28a4053SRui Paulo 	enum mfp_options ieee80211w;
2885b9c547cSRui Paulo 	int group_mgmt_cipher;
289e28a4053SRui Paulo 	/* dot11AssociationSAQueryMaximumTimeout (in TUs) */
290e28a4053SRui Paulo 	unsigned int assoc_sa_query_max_timeout;
291e28a4053SRui Paulo 	/* dot11AssociationSAQueryRetryTimeout (in TUs) */
292e28a4053SRui Paulo 	int assoc_sa_query_retry_timeout;
293e28a4053SRui Paulo #endif /* CONFIG_IEEE80211W */
294f05cddf9SRui Paulo 	enum {
295f05cddf9SRui Paulo 		PSK_RADIUS_IGNORED = 0,
296f05cddf9SRui Paulo 		PSK_RADIUS_ACCEPTED = 1,
297f05cddf9SRui Paulo 		PSK_RADIUS_REQUIRED = 2
298f05cddf9SRui Paulo 	} wpa_psk_radius;
299e28a4053SRui Paulo 	int wpa_pairwise;
300e28a4053SRui Paulo 	int wpa_group;
301e28a4053SRui Paulo 	int wpa_group_rekey;
302e28a4053SRui Paulo 	int wpa_strict_rekey;
303e28a4053SRui Paulo 	int wpa_gmk_rekey;
304e28a4053SRui Paulo 	int wpa_ptk_rekey;
305e28a4053SRui Paulo 	int rsn_pairwise;
306e28a4053SRui Paulo 	int rsn_preauth;
307e28a4053SRui Paulo 	char *rsn_preauth_interfaces;
308e28a4053SRui Paulo 	int peerkey;
309e28a4053SRui Paulo 
310e28a4053SRui Paulo #ifdef CONFIG_IEEE80211R
311e28a4053SRui Paulo 	/* IEEE 802.11r - Fast BSS Transition */
312e28a4053SRui Paulo 	u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
313e28a4053SRui Paulo 	u8 r1_key_holder[FT_R1KH_ID_LEN];
314e28a4053SRui Paulo 	u32 r0_key_lifetime;
315e28a4053SRui Paulo 	u32 reassociation_deadline;
316e28a4053SRui Paulo 	struct ft_remote_r0kh *r0kh_list;
317e28a4053SRui Paulo 	struct ft_remote_r1kh *r1kh_list;
318e28a4053SRui Paulo 	int pmk_r1_push;
319f05cddf9SRui Paulo 	int ft_over_ds;
320e28a4053SRui Paulo #endif /* CONFIG_IEEE80211R */
321e28a4053SRui Paulo 
322e28a4053SRui Paulo 	char *ctrl_interface; /* directory for UNIX domain sockets */
323e28a4053SRui Paulo #ifndef CONFIG_NATIVE_WINDOWS
324e28a4053SRui Paulo 	gid_t ctrl_interface_gid;
325e28a4053SRui Paulo #endif /* CONFIG_NATIVE_WINDOWS */
326e28a4053SRui Paulo 	int ctrl_interface_gid_set;
327e28a4053SRui Paulo 
328e28a4053SRui Paulo 	char *ca_cert;
329e28a4053SRui Paulo 	char *server_cert;
330e28a4053SRui Paulo 	char *private_key;
331e28a4053SRui Paulo 	char *private_key_passwd;
332e28a4053SRui Paulo 	int check_crl;
333*325151a3SRui Paulo 	unsigned int tls_session_lifetime;
3345b9c547cSRui Paulo 	char *ocsp_stapling_response;
335e28a4053SRui Paulo 	char *dh_file;
3365b9c547cSRui Paulo 	char *openssl_ciphers;
337e28a4053SRui Paulo 	u8 *pac_opaque_encr_key;
338e28a4053SRui Paulo 	u8 *eap_fast_a_id;
339e28a4053SRui Paulo 	size_t eap_fast_a_id_len;
340e28a4053SRui Paulo 	char *eap_fast_a_id_info;
341e28a4053SRui Paulo 	int eap_fast_prov;
342e28a4053SRui Paulo 	int pac_key_lifetime;
343e28a4053SRui Paulo 	int pac_key_refresh_time;
344e28a4053SRui Paulo 	int eap_sim_aka_result_ind;
345e28a4053SRui Paulo 	int tnc;
346f05cddf9SRui Paulo 	int fragment_size;
347f05cddf9SRui Paulo 	u16 pwd_group;
348e28a4053SRui Paulo 
349e28a4053SRui Paulo 	char *radius_server_clients;
350e28a4053SRui Paulo 	int radius_server_auth_port;
3515b9c547cSRui Paulo 	int radius_server_acct_port;
352e28a4053SRui Paulo 	int radius_server_ipv6;
353e28a4053SRui Paulo 
354e28a4053SRui Paulo 	int use_pae_group_addr; /* Whether to send EAPOL frames to PAE group
355e28a4053SRui Paulo 				 * address instead of individual address
356e28a4053SRui Paulo 				 * (for driver_wired.c).
357e28a4053SRui Paulo 				 */
358e28a4053SRui Paulo 
359e28a4053SRui Paulo 	int ap_max_inactivity;
360e28a4053SRui Paulo 	int ignore_broadcast_ssid;
361e28a4053SRui Paulo 
362e28a4053SRui Paulo 	int wmm_enabled;
363e28a4053SRui Paulo 	int wmm_uapsd;
364e28a4053SRui Paulo 
3655b9c547cSRui Paulo 	struct hostapd_vlan *vlan;
366e28a4053SRui Paulo 
367e28a4053SRui Paulo 	macaddr bssid;
368e28a4053SRui Paulo 
369e28a4053SRui Paulo 	/*
370e28a4053SRui Paulo 	 * Maximum listen interval that STAs can use when associating with this
371e28a4053SRui Paulo 	 * BSS. If a STA tries to use larger value, the association will be
372e28a4053SRui Paulo 	 * denied with status code 51.
373e28a4053SRui Paulo 	 */
374e28a4053SRui Paulo 	u16 max_listen_interval;
375e28a4053SRui Paulo 
376f05cddf9SRui Paulo 	int disable_pmksa_caching;
377e28a4053SRui Paulo 	int okc; /* Opportunistic Key Caching */
378e28a4053SRui Paulo 
379e28a4053SRui Paulo 	int wps_state;
380e28a4053SRui Paulo #ifdef CONFIG_WPS
3815b9c547cSRui Paulo 	int wps_independent;
382e28a4053SRui Paulo 	int ap_setup_locked;
383e28a4053SRui Paulo 	u8 uuid[16];
384e28a4053SRui Paulo 	char *wps_pin_requests;
385e28a4053SRui Paulo 	char *device_name;
386e28a4053SRui Paulo 	char *manufacturer;
387e28a4053SRui Paulo 	char *model_name;
388e28a4053SRui Paulo 	char *model_number;
389e28a4053SRui Paulo 	char *serial_number;
390f05cddf9SRui Paulo 	u8 device_type[WPS_DEV_TYPE_LEN];
391e28a4053SRui Paulo 	char *config_methods;
392e28a4053SRui Paulo 	u8 os_version[4];
393e28a4053SRui Paulo 	char *ap_pin;
394e28a4053SRui Paulo 	int skip_cred_build;
395e28a4053SRui Paulo 	u8 *extra_cred;
396e28a4053SRui Paulo 	size_t extra_cred_len;
397e28a4053SRui Paulo 	int wps_cred_processing;
3985b9c547cSRui Paulo 	int force_per_enrollee_psk;
399e28a4053SRui Paulo 	u8 *ap_settings;
400e28a4053SRui Paulo 	size_t ap_settings_len;
401e28a4053SRui Paulo 	char *upnp_iface;
402e28a4053SRui Paulo 	char *friendly_name;
403e28a4053SRui Paulo 	char *manufacturer_url;
404e28a4053SRui Paulo 	char *model_description;
405e28a4053SRui Paulo 	char *model_url;
406e28a4053SRui Paulo 	char *upc;
407f05cddf9SRui Paulo 	struct wpabuf *wps_vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];
4085b9c547cSRui Paulo 	int wps_nfc_pw_from_config;
409f05cddf9SRui Paulo 	int wps_nfc_dev_pw_id;
410f05cddf9SRui Paulo 	struct wpabuf *wps_nfc_dh_pubkey;
411f05cddf9SRui Paulo 	struct wpabuf *wps_nfc_dh_privkey;
412f05cddf9SRui Paulo 	struct wpabuf *wps_nfc_dev_pw;
413e28a4053SRui Paulo #endif /* CONFIG_WPS */
414f05cddf9SRui Paulo 	int pbc_in_m1;
4155b9c547cSRui Paulo 	char *server_id;
416f05cddf9SRui Paulo 
417f05cddf9SRui Paulo #define P2P_ENABLED BIT(0)
418f05cddf9SRui Paulo #define P2P_GROUP_OWNER BIT(1)
419f05cddf9SRui Paulo #define P2P_GROUP_FORMATION BIT(2)
420f05cddf9SRui Paulo #define P2P_MANAGE BIT(3)
421f05cddf9SRui Paulo #define P2P_ALLOW_CROSS_CONNECTION BIT(4)
422f05cddf9SRui Paulo 	int p2p;
4235b9c547cSRui Paulo #ifdef CONFIG_P2P
4245b9c547cSRui Paulo 	u8 ip_addr_go[4];
4255b9c547cSRui Paulo 	u8 ip_addr_mask[4];
4265b9c547cSRui Paulo 	u8 ip_addr_start[4];
4275b9c547cSRui Paulo 	u8 ip_addr_end[4];
4285b9c547cSRui Paulo #endif /* CONFIG_P2P */
429f05cddf9SRui Paulo 
430f05cddf9SRui Paulo 	int disassoc_low_ack;
431f05cddf9SRui Paulo 	int skip_inactivity_poll;
432f05cddf9SRui Paulo 
433f05cddf9SRui Paulo #define TDLS_PROHIBIT BIT(0)
434f05cddf9SRui Paulo #define TDLS_PROHIBIT_CHAN_SWITCH BIT(1)
435f05cddf9SRui Paulo 	int tdls;
436f05cddf9SRui Paulo 	int disable_11n;
437f05cddf9SRui Paulo 	int disable_11ac;
438f05cddf9SRui Paulo 
439f05cddf9SRui Paulo 	/* IEEE 802.11v */
440f05cddf9SRui Paulo 	int time_advertisement;
441f05cddf9SRui Paulo 	char *time_zone;
442f05cddf9SRui Paulo 	int wnm_sleep_mode;
443f05cddf9SRui Paulo 	int bss_transition;
444f05cddf9SRui Paulo 
445f05cddf9SRui Paulo 	/* IEEE 802.11u - Interworking */
446f05cddf9SRui Paulo 	int interworking;
447f05cddf9SRui Paulo 	int access_network_type;
448f05cddf9SRui Paulo 	int internet;
449f05cddf9SRui Paulo 	int asra;
450f05cddf9SRui Paulo 	int esr;
451f05cddf9SRui Paulo 	int uesa;
452f05cddf9SRui Paulo 	int venue_info_set;
453f05cddf9SRui Paulo 	u8 venue_group;
454f05cddf9SRui Paulo 	u8 venue_type;
455f05cddf9SRui Paulo 	u8 hessid[ETH_ALEN];
456f05cddf9SRui Paulo 
457f05cddf9SRui Paulo 	/* IEEE 802.11u - Roaming Consortium list */
458f05cddf9SRui Paulo 	unsigned int roaming_consortium_count;
459f05cddf9SRui Paulo 	struct hostapd_roaming_consortium *roaming_consortium;
460f05cddf9SRui Paulo 
461f05cddf9SRui Paulo 	/* IEEE 802.11u - Venue Name duples */
462f05cddf9SRui Paulo 	unsigned int venue_name_count;
463f05cddf9SRui Paulo 	struct hostapd_lang_string *venue_name;
464f05cddf9SRui Paulo 
465f05cddf9SRui Paulo 	/* IEEE 802.11u - Network Authentication Type */
466f05cddf9SRui Paulo 	u8 *network_auth_type;
467f05cddf9SRui Paulo 	size_t network_auth_type_len;
468f05cddf9SRui Paulo 
469f05cddf9SRui Paulo 	/* IEEE 802.11u - IP Address Type Availability */
470f05cddf9SRui Paulo 	u8 ipaddr_type_availability;
471f05cddf9SRui Paulo 	u8 ipaddr_type_configured;
472f05cddf9SRui Paulo 
473f05cddf9SRui Paulo 	/* IEEE 802.11u - 3GPP Cellular Network */
474f05cddf9SRui Paulo 	u8 *anqp_3gpp_cell_net;
475f05cddf9SRui Paulo 	size_t anqp_3gpp_cell_net_len;
476f05cddf9SRui Paulo 
477f05cddf9SRui Paulo 	/* IEEE 802.11u - Domain Name */
478f05cddf9SRui Paulo 	u8 *domain_name;
479f05cddf9SRui Paulo 	size_t domain_name_len;
480f05cddf9SRui Paulo 
481f05cddf9SRui Paulo 	unsigned int nai_realm_count;
482f05cddf9SRui Paulo 	struct hostapd_nai_realm_data *nai_realm_data;
483f05cddf9SRui Paulo 
484f05cddf9SRui Paulo 	u16 gas_comeback_delay;
485f05cddf9SRui Paulo 	int gas_frag_limit;
486f05cddf9SRui Paulo 
4875b9c547cSRui Paulo 	u8 qos_map_set[16 + 2 * 21];
4885b9c547cSRui Paulo 	unsigned int qos_map_set_len;
4895b9c547cSRui Paulo 
4905b9c547cSRui Paulo 	int osen;
4915b9c547cSRui Paulo 	int proxy_arp;
492*325151a3SRui Paulo 	int na_mcast_to_ucast;
493f05cddf9SRui Paulo #ifdef CONFIG_HS20
494f05cddf9SRui Paulo 	int hs20;
495f05cddf9SRui Paulo 	int disable_dgaf;
4965b9c547cSRui Paulo 	u16 anqp_domain_id;
497f05cddf9SRui Paulo 	unsigned int hs20_oper_friendly_name_count;
498f05cddf9SRui Paulo 	struct hostapd_lang_string *hs20_oper_friendly_name;
499f05cddf9SRui Paulo 	u8 *hs20_wan_metrics;
500f05cddf9SRui Paulo 	u8 *hs20_connection_capability;
501f05cddf9SRui Paulo 	size_t hs20_connection_capability_len;
502f05cddf9SRui Paulo 	u8 *hs20_operating_class;
503f05cddf9SRui Paulo 	u8 hs20_operating_class_len;
5045b9c547cSRui Paulo 	struct hs20_icon {
5055b9c547cSRui Paulo 		u16 width;
5065b9c547cSRui Paulo 		u16 height;
5075b9c547cSRui Paulo 		char language[3];
5085b9c547cSRui Paulo 		char type[256];
5095b9c547cSRui Paulo 		char name[256];
5105b9c547cSRui Paulo 		char file[256];
5115b9c547cSRui Paulo 	} *hs20_icons;
5125b9c547cSRui Paulo 	size_t hs20_icons_count;
513*325151a3SRui Paulo 	u8 osu_ssid[SSID_MAX_LEN];
5145b9c547cSRui Paulo 	size_t osu_ssid_len;
5155b9c547cSRui Paulo 	struct hs20_osu_provider {
5165b9c547cSRui Paulo 		unsigned int friendly_name_count;
5175b9c547cSRui Paulo 		struct hostapd_lang_string *friendly_name;
5185b9c547cSRui Paulo 		char *server_uri;
5195b9c547cSRui Paulo 		int *method_list;
5205b9c547cSRui Paulo 		char **icons;
5215b9c547cSRui Paulo 		size_t icons_count;
5225b9c547cSRui Paulo 		char *osu_nai;
5235b9c547cSRui Paulo 		unsigned int service_desc_count;
5245b9c547cSRui Paulo 		struct hostapd_lang_string *service_desc;
5255b9c547cSRui Paulo 	} *hs20_osu_providers, *last_osu;
5265b9c547cSRui Paulo 	size_t hs20_osu_providers_count;
5275b9c547cSRui Paulo 	unsigned int hs20_deauth_req_timeout;
5285b9c547cSRui Paulo 	char *subscr_remediation_url;
5295b9c547cSRui Paulo 	u8 subscr_remediation_method;
530f05cddf9SRui Paulo #endif /* CONFIG_HS20 */
531f05cddf9SRui Paulo 
532f05cddf9SRui Paulo 	u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */
533f05cddf9SRui Paulo 
534f05cddf9SRui Paulo #ifdef CONFIG_RADIUS_TEST
535f05cddf9SRui Paulo 	char *dump_msk_file;
536f05cddf9SRui Paulo #endif /* CONFIG_RADIUS_TEST */
537f05cddf9SRui Paulo 
538f05cddf9SRui Paulo 	struct wpabuf *vendor_elements;
5395b9c547cSRui Paulo 
5405b9c547cSRui Paulo 	unsigned int sae_anti_clogging_threshold;
5415b9c547cSRui Paulo 	int *sae_groups;
5425b9c547cSRui Paulo 
5435b9c547cSRui Paulo 	char *wowlan_triggers; /* Wake-on-WLAN triggers */
5445b9c547cSRui Paulo 
5455b9c547cSRui Paulo #ifdef CONFIG_TESTING_OPTIONS
5465b9c547cSRui Paulo 	u8 bss_load_test[5];
5475b9c547cSRui Paulo 	u8 bss_load_test_set;
548*325151a3SRui Paulo 	struct wpabuf *own_ie_override;
5495b9c547cSRui Paulo #endif /* CONFIG_TESTING_OPTIONS */
5505b9c547cSRui Paulo 
5515b9c547cSRui Paulo #define MESH_ENABLED BIT(0)
5525b9c547cSRui Paulo 	int mesh;
5535b9c547cSRui Paulo 
5545b9c547cSRui Paulo 	int radio_measurements;
5555b9c547cSRui Paulo 
5565b9c547cSRui Paulo 	int vendor_vht;
557*325151a3SRui Paulo 
558*325151a3SRui Paulo 	char *no_probe_resp_if_seen_on;
559*325151a3SRui Paulo 	char *no_auth_if_seen_on;
560e28a4053SRui Paulo };
561e28a4053SRui Paulo 
562e28a4053SRui Paulo 
563e28a4053SRui Paulo /**
564e28a4053SRui Paulo  * struct hostapd_config - Per-radio interface configuration
565e28a4053SRui Paulo  */
566e28a4053SRui Paulo struct hostapd_config {
5675b9c547cSRui Paulo 	struct hostapd_bss_config **bss, *last_bss;
568e28a4053SRui Paulo 	size_t num_bss;
569e28a4053SRui Paulo 
570e28a4053SRui Paulo 	u16 beacon_int;
571e28a4053SRui Paulo 	int rts_threshold;
572e28a4053SRui Paulo 	int fragm_threshold;
573e28a4053SRui Paulo 	u8 send_probe_response;
574e28a4053SRui Paulo 	u8 channel;
575*325151a3SRui Paulo 	u8 acs;
576*325151a3SRui Paulo 	struct wpa_freq_range_list acs_ch_list;
577e28a4053SRui Paulo 	enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */
578e28a4053SRui Paulo 	enum {
579e28a4053SRui Paulo 		LONG_PREAMBLE = 0,
580e28a4053SRui Paulo 		SHORT_PREAMBLE = 1
581e28a4053SRui Paulo 	} preamble;
582e28a4053SRui Paulo 
583e28a4053SRui Paulo 	int *supported_rates;
584e28a4053SRui Paulo 	int *basic_rates;
585e28a4053SRui Paulo 
586e28a4053SRui Paulo 	const struct wpa_driver_ops *driver;
5875b9c547cSRui Paulo 	char *driver_params;
588e28a4053SRui Paulo 
589e28a4053SRui Paulo 	int ap_table_max_size;
590e28a4053SRui Paulo 	int ap_table_expiration_time;
591e28a4053SRui Paulo 
592*325151a3SRui Paulo 	unsigned int track_sta_max_num;
593*325151a3SRui Paulo 	unsigned int track_sta_max_age;
594*325151a3SRui Paulo 
595e28a4053SRui Paulo 	char country[3]; /* first two octets: country code as described in
596e28a4053SRui Paulo 			  * ISO/IEC 3166-1. Third octet:
597e28a4053SRui Paulo 			  * ' ' (ascii 32): all environments
598e28a4053SRui Paulo 			  * 'O': Outdoor environemnt only
599e28a4053SRui Paulo 			  * 'I': Indoor environment only
600e28a4053SRui Paulo 			  */
601e28a4053SRui Paulo 
602e28a4053SRui Paulo 	int ieee80211d;
603e28a4053SRui Paulo 
6045b9c547cSRui Paulo 	int ieee80211h; /* DFS */
6055b9c547cSRui Paulo 
6065b9c547cSRui Paulo 	/*
6075b9c547cSRui Paulo 	 * Local power constraint is an octet encoded as an unsigned integer in
6085b9c547cSRui Paulo 	 * units of decibels. Invalid value -1 indicates that Power Constraint
6095b9c547cSRui Paulo 	 * element will not be added.
6105b9c547cSRui Paulo 	 */
6115b9c547cSRui Paulo 	int local_pwr_constraint;
6125b9c547cSRui Paulo 
6135b9c547cSRui Paulo 	/* Control Spectrum Management bit */
6145b9c547cSRui Paulo 	int spectrum_mgmt_required;
6155b9c547cSRui Paulo 
616e28a4053SRui Paulo 	struct hostapd_tx_queue_params tx_queue[NUM_TX_QUEUES];
617e28a4053SRui Paulo 
618e28a4053SRui Paulo 	/*
619e28a4053SRui Paulo 	 * WMM AC parameters, in same order as 802.1D, i.e.
620e28a4053SRui Paulo 	 * 0 = BE (best effort)
621e28a4053SRui Paulo 	 * 1 = BK (background)
622e28a4053SRui Paulo 	 * 2 = VI (video)
623e28a4053SRui Paulo 	 * 3 = VO (voice)
624e28a4053SRui Paulo 	 */
625e28a4053SRui Paulo 	struct hostapd_wmm_ac_params wmm_ac_params[4];
626e28a4053SRui Paulo 
627e28a4053SRui Paulo 	int ht_op_mode_fixed;
628e28a4053SRui Paulo 	u16 ht_capab;
629e28a4053SRui Paulo 	int ieee80211n;
630e28a4053SRui Paulo 	int secondary_channel;
631*325151a3SRui Paulo 	int no_pri_sec_switch;
632f05cddf9SRui Paulo 	int require_ht;
6335b9c547cSRui Paulo 	int obss_interval;
634f05cddf9SRui Paulo 	u32 vht_capab;
635f05cddf9SRui Paulo 	int ieee80211ac;
636f05cddf9SRui Paulo 	int require_vht;
637f05cddf9SRui Paulo 	u8 vht_oper_chwidth;
638f05cddf9SRui Paulo 	u8 vht_oper_centr_freq_seg0_idx;
639f05cddf9SRui Paulo 	u8 vht_oper_centr_freq_seg1_idx;
6405b9c547cSRui Paulo 
641*325151a3SRui Paulo #ifdef CONFIG_FST
642*325151a3SRui Paulo 	struct fst_iface_cfg fst_cfg;
643*325151a3SRui Paulo #endif /* CONFIG_FST */
644*325151a3SRui Paulo 
6455b9c547cSRui Paulo #ifdef CONFIG_P2P
6465b9c547cSRui Paulo 	u8 p2p_go_ctwindow;
6475b9c547cSRui Paulo #endif /* CONFIG_P2P */
6485b9c547cSRui Paulo 
6495b9c547cSRui Paulo #ifdef CONFIG_TESTING_OPTIONS
6505b9c547cSRui Paulo 	double ignore_probe_probability;
6515b9c547cSRui Paulo 	double ignore_auth_probability;
6525b9c547cSRui Paulo 	double ignore_assoc_probability;
6535b9c547cSRui Paulo 	double ignore_reassoc_probability;
6545b9c547cSRui Paulo 	double corrupt_gtk_rekey_mic_probability;
6555b9c547cSRui Paulo #endif /* CONFIG_TESTING_OPTIONS */
6565b9c547cSRui Paulo 
6575b9c547cSRui Paulo #ifdef CONFIG_ACS
6585b9c547cSRui Paulo 	unsigned int acs_num_scans;
6595b9c547cSRui Paulo 	struct acs_bias {
6605b9c547cSRui Paulo 		int channel;
6615b9c547cSRui Paulo 		double bias;
6625b9c547cSRui Paulo 	} *acs_chan_bias;
6635b9c547cSRui Paulo 	unsigned int num_acs_chan_bias;
6645b9c547cSRui Paulo #endif /* CONFIG_ACS */
665e28a4053SRui Paulo };
666e28a4053SRui Paulo 
667e28a4053SRui Paulo 
668e28a4053SRui Paulo int hostapd_mac_comp(const void *a, const void *b);
669e28a4053SRui Paulo int hostapd_mac_comp_empty(const void *a);
670e28a4053SRui Paulo struct hostapd_config * hostapd_config_defaults(void);
671e28a4053SRui Paulo void hostapd_config_defaults_bss(struct hostapd_bss_config *bss);
6725b9c547cSRui Paulo void hostapd_config_free_eap_user(struct hostapd_eap_user *user);
6735b9c547cSRui Paulo void hostapd_config_clear_wpa_psk(struct hostapd_wpa_psk **p);
6745b9c547cSRui Paulo void hostapd_config_free_bss(struct hostapd_bss_config *conf);
675e28a4053SRui Paulo void hostapd_config_free(struct hostapd_config *conf);
676e28a4053SRui Paulo int hostapd_maclist_found(struct mac_acl_entry *list, int num_entries,
677e28a4053SRui Paulo 			  const u8 *addr, int *vlan_id);
678e28a4053SRui Paulo int hostapd_rate_found(int *list, int rate);
679e28a4053SRui Paulo const u8 * hostapd_get_psk(const struct hostapd_bss_config *conf,
6805b9c547cSRui Paulo 			   const u8 *addr, const u8 *p2p_dev_addr,
6815b9c547cSRui Paulo 			   const u8 *prev_psk);
682e28a4053SRui Paulo int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf);
6835b9c547cSRui Paulo int hostapd_vlan_id_valid(struct hostapd_vlan *vlan, int vlan_id);
684e28a4053SRui Paulo const char * hostapd_get_vlan_id_ifname(struct hostapd_vlan *vlan,
685e28a4053SRui Paulo 					int vlan_id);
686f05cddf9SRui Paulo struct hostapd_radius_attr *
687f05cddf9SRui Paulo hostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type);
6885b9c547cSRui Paulo int hostapd_config_check(struct hostapd_config *conf, int full_config);
6895b9c547cSRui Paulo void hostapd_set_security_params(struct hostapd_bss_config *bss,
6905b9c547cSRui Paulo 				 int full_config);
691e28a4053SRui Paulo 
692e28a4053SRui Paulo #endif /* HOSTAPD_CONFIG_H */
693