ap_config.h revision 9c17526f86859e2b6aebac0ed4f2561601816103
1/*
2 * hostapd / Configuration definitions and helpers functions
3 * Copyright (c) 2003-2015, 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_CONFIG_H
10#define HOSTAPD_CONFIG_H
11
12#include "common/defs.h"
13#include "utils/list.h"
14#include "ip_addr.h"
15#include "common/wpa_common.h"
16#include "common/ieee802_11_defs.h"
17#include "common/ieee802_11_common.h"
18#include "wps/wps.h"
19#include "fst/fst.h"
20#include "vlan.h"
21
22/**
23 * mesh_conf - local MBSS state and settings
24 */
25struct mesh_conf {
26	u8 meshid[32];
27	u8 meshid_len;
28	/* Active Path Selection Protocol Identifier */
29	u8 mesh_pp_id;
30	/* Active Path Selection Metric Identifier */
31	u8 mesh_pm_id;
32	/* Congestion Control Mode Identifier */
33	u8 mesh_cc_id;
34	/* Synchronization Protocol Identifier */
35	u8 mesh_sp_id;
36	/* Authentication Protocol Identifier */
37	u8 mesh_auth_id;
38	u8 *rsn_ie;
39	int rsn_ie_len;
40#define MESH_CONF_SEC_NONE BIT(0)
41#define MESH_CONF_SEC_AUTH BIT(1)
42#define MESH_CONF_SEC_AMPE BIT(2)
43	unsigned int security;
44	int dot11MeshMaxRetries;
45	int dot11MeshRetryTimeout; /* msec */
46	int dot11MeshConfirmTimeout; /* msec */
47	int dot11MeshHoldingTimeout; /* msec */
48};
49
50#define MAX_STA_COUNT 2007
51#define MAX_VLAN_ID 4094
52
53typedef u8 macaddr[ETH_ALEN];
54
55struct mac_acl_entry {
56	macaddr addr;
57	struct vlan_description vlan_id;
58};
59
60struct hostapd_radius_servers;
61struct ft_remote_r0kh;
62struct ft_remote_r1kh;
63
64#define NUM_WEP_KEYS 4
65struct hostapd_wep_keys {
66	u8 idx;
67	u8 *key[NUM_WEP_KEYS];
68	size_t len[NUM_WEP_KEYS];
69	int keys_set;
70	size_t default_len; /* key length used for dynamic key generation */
71};
72
73typedef enum hostap_security_policy {
74	SECURITY_PLAINTEXT = 0,
75	SECURITY_STATIC_WEP = 1,
76	SECURITY_IEEE_802_1X = 2,
77	SECURITY_WPA_PSK = 3,
78	SECURITY_WPA = 4,
79	SECURITY_OSEN = 5
80} secpolicy;
81
82struct hostapd_ssid {
83	u8 ssid[SSID_MAX_LEN];
84	size_t ssid_len;
85	unsigned int ssid_set:1;
86	unsigned int utf8_ssid:1;
87	unsigned int wpa_passphrase_set:1;
88	unsigned int wpa_psk_set:1;
89
90	char vlan[IFNAMSIZ + 1];
91	secpolicy security_policy;
92
93	struct hostapd_wpa_psk *wpa_psk;
94	char *wpa_passphrase;
95	char *wpa_psk_file;
96
97	struct hostapd_wep_keys wep;
98
99#define DYNAMIC_VLAN_DISABLED 0
100#define DYNAMIC_VLAN_OPTIONAL 1
101#define DYNAMIC_VLAN_REQUIRED 2
102	int dynamic_vlan;
103#define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0
104#define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1
105#define DYNAMIC_VLAN_NAMING_END 2
106	int vlan_naming;
107	int per_sta_vif;
108#ifdef CONFIG_FULL_DYNAMIC_VLAN
109	char *vlan_tagged_interface;
110#endif /* CONFIG_FULL_DYNAMIC_VLAN */
111};
112
113
114#define VLAN_ID_WILDCARD -1
115
116struct hostapd_vlan {
117	struct hostapd_vlan *next;
118	int vlan_id; /* VLAN ID or -1 (VLAN_ID_WILDCARD) for wildcard entry */
119	struct vlan_description vlan_desc;
120	char ifname[IFNAMSIZ + 1];
121	int configured;
122	int dynamic_vlan;
123#ifdef CONFIG_FULL_DYNAMIC_VLAN
124
125#define DVLAN_CLEAN_WLAN_PORT	0x8
126	int clean;
127#endif /* CONFIG_FULL_DYNAMIC_VLAN */
128};
129
130#define PMK_LEN 32
131#define MIN_PASSPHRASE_LEN 8
132#define MAX_PASSPHRASE_LEN 63
133struct hostapd_sta_wpa_psk_short {
134	struct hostapd_sta_wpa_psk_short *next;
135	unsigned int is_passphrase:1;
136	u8 psk[PMK_LEN];
137	char passphrase[MAX_PASSPHRASE_LEN + 1];
138	int ref; /* (number of references held) - 1 */
139};
140
141struct hostapd_wpa_psk {
142	struct hostapd_wpa_psk *next;
143	int group;
144	u8 psk[PMK_LEN];
145	u8 addr[ETH_ALEN];
146	u8 p2p_dev_addr[ETH_ALEN];
147};
148
149struct hostapd_eap_user {
150	struct hostapd_eap_user *next;
151	u8 *identity;
152	size_t identity_len;
153	struct {
154		int vendor;
155		u32 method;
156	} methods[EAP_MAX_METHODS];
157	u8 *password;
158	size_t password_len;
159	int phase2;
160	int force_version;
161	unsigned int wildcard_prefix:1;
162	unsigned int password_hash:1; /* whether password is hashed with
163				       * nt_password_hash() */
164	unsigned int remediation:1;
165	unsigned int macacl:1;
166	int ttls_auth; /* EAP_TTLS_AUTH_* bitfield */
167	struct hostapd_radius_attr *accept_attr;
168};
169
170struct hostapd_radius_attr {
171	u8 type;
172	struct wpabuf *val;
173	struct hostapd_radius_attr *next;
174};
175
176
177#define NUM_TX_QUEUES 4
178
179struct hostapd_tx_queue_params {
180	int aifs;
181	int cwmin;
182	int cwmax;
183	int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
184};
185
186
187#define MAX_ROAMING_CONSORTIUM_LEN 15
188
189struct hostapd_roaming_consortium {
190	u8 len;
191	u8 oi[MAX_ROAMING_CONSORTIUM_LEN];
192};
193
194struct hostapd_lang_string {
195	u8 lang[3];
196	u8 name_len;
197	u8 name[252];
198};
199
200#define MAX_NAI_REALMS 10
201#define MAX_NAI_REALMLEN 255
202#define MAX_NAI_EAP_METHODS 5
203#define MAX_NAI_AUTH_TYPES 4
204struct hostapd_nai_realm_data {
205	u8 encoding;
206	char realm_buf[MAX_NAI_REALMLEN + 1];
207	char *realm[MAX_NAI_REALMS];
208	u8 eap_method_count;
209	struct hostapd_nai_realm_eap {
210		u8 eap_method;
211		u8 num_auths;
212		u8 auth_id[MAX_NAI_AUTH_TYPES];
213		u8 auth_val[MAX_NAI_AUTH_TYPES];
214	} eap_method[MAX_NAI_EAP_METHODS];
215};
216
217struct anqp_element {
218	struct dl_list list;
219	u16 infoid;
220	struct wpabuf *payload;
221};
222
223
224/**
225 * struct hostapd_bss_config - Per-BSS configuration
226 */
227struct hostapd_bss_config {
228	char iface[IFNAMSIZ + 1];
229	char bridge[IFNAMSIZ + 1];
230	char vlan_bridge[IFNAMSIZ + 1];
231	char wds_bridge[IFNAMSIZ + 1];
232
233	enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
234
235	unsigned int logger_syslog; /* module bitfield */
236	unsigned int logger_stdout; /* module bitfield */
237
238	int max_num_sta; /* maximum number of STAs in station table */
239
240	int dtim_period;
241	int bss_load_update_period;
242
243	int ieee802_1x; /* use IEEE 802.1X */
244	int eapol_version;
245	int eap_server; /* Use internal EAP server instead of external
246			 * RADIUS server */
247	struct hostapd_eap_user *eap_user;
248	char *eap_user_sqlite;
249	char *eap_sim_db;
250	unsigned int eap_sim_db_timeout;
251	int eap_server_erp; /* Whether ERP is enabled on internal EAP server */
252	struct hostapd_ip_addr own_ip_addr;
253	char *nas_identifier;
254	struct hostapd_radius_servers *radius;
255	int acct_interim_interval;
256	int radius_request_cui;
257	struct hostapd_radius_attr *radius_auth_req_attr;
258	struct hostapd_radius_attr *radius_acct_req_attr;
259	int radius_das_port;
260	unsigned int radius_das_time_window;
261	int radius_das_require_event_timestamp;
262	struct hostapd_ip_addr radius_das_client_addr;
263	u8 *radius_das_shared_secret;
264	size_t radius_das_shared_secret_len;
265
266	struct hostapd_ssid ssid;
267
268	char *eap_req_id_text; /* optional displayable message sent with
269				* EAP Request-Identity */
270	size_t eap_req_id_text_len;
271	int eapol_key_index_workaround;
272
273	size_t default_wep_key_len;
274	int individual_wep_key_len;
275	int wep_rekeying_period;
276	int broadcast_key_idx_min, broadcast_key_idx_max;
277	int eap_reauth_period;
278	int erp_send_reauth_start;
279	char *erp_domain;
280
281	int ieee802_11f; /* use IEEE 802.11f (IAPP) */
282	char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast
283					* frames */
284
285	enum {
286		ACCEPT_UNLESS_DENIED = 0,
287		DENY_UNLESS_ACCEPTED = 1,
288		USE_EXTERNAL_RADIUS_AUTH = 2
289	} macaddr_acl;
290	struct mac_acl_entry *accept_mac;
291	int num_accept_mac;
292	struct mac_acl_entry *deny_mac;
293	int num_deny_mac;
294	int wds_sta;
295	int isolate;
296	int start_disabled;
297
298	int auth_algs; /* bitfield of allowed IEEE 802.11 authentication
299			* algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */
300
301	int wpa; /* bitfield of WPA_PROTO_WPA, WPA_PROTO_RSN */
302	int wpa_key_mgmt;
303#ifdef CONFIG_IEEE80211W
304	enum mfp_options ieee80211w;
305	int group_mgmt_cipher;
306	/* dot11AssociationSAQueryMaximumTimeout (in TUs) */
307	unsigned int assoc_sa_query_max_timeout;
308	/* dot11AssociationSAQueryRetryTimeout (in TUs) */
309	int assoc_sa_query_retry_timeout;
310#endif /* CONFIG_IEEE80211W */
311	enum {
312		PSK_RADIUS_IGNORED = 0,
313		PSK_RADIUS_ACCEPTED = 1,
314		PSK_RADIUS_REQUIRED = 2
315	} wpa_psk_radius;
316	int wpa_pairwise;
317	int wpa_group;
318	int wpa_group_rekey;
319	int wpa_strict_rekey;
320	int wpa_gmk_rekey;
321	int wpa_ptk_rekey;
322	int rsn_pairwise;
323	int rsn_preauth;
324	char *rsn_preauth_interfaces;
325	int peerkey;
326
327#ifdef CONFIG_IEEE80211R
328	/* IEEE 802.11r - Fast BSS Transition */
329	u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
330	u8 r1_key_holder[FT_R1KH_ID_LEN];
331	u32 r0_key_lifetime;
332	u32 reassociation_deadline;
333	struct ft_remote_r0kh *r0kh_list;
334	struct ft_remote_r1kh *r1kh_list;
335	int pmk_r1_push;
336	int ft_over_ds;
337#endif /* CONFIG_IEEE80211R */
338
339	char *ctrl_interface; /* directory for UNIX domain sockets */
340#ifndef CONFIG_NATIVE_WINDOWS
341	gid_t ctrl_interface_gid;
342#endif /* CONFIG_NATIVE_WINDOWS */
343	int ctrl_interface_gid_set;
344
345	char *ca_cert;
346	char *server_cert;
347	char *private_key;
348	char *private_key_passwd;
349	int check_crl;
350	unsigned int tls_session_lifetime;
351	char *ocsp_stapling_response;
352	char *ocsp_stapling_response_multi;
353	char *dh_file;
354	char *openssl_ciphers;
355	u8 *pac_opaque_encr_key;
356	u8 *eap_fast_a_id;
357	size_t eap_fast_a_id_len;
358	char *eap_fast_a_id_info;
359	int eap_fast_prov;
360	int pac_key_lifetime;
361	int pac_key_refresh_time;
362	int eap_sim_aka_result_ind;
363	int tnc;
364	int fragment_size;
365	u16 pwd_group;
366
367	char *radius_server_clients;
368	int radius_server_auth_port;
369	int radius_server_acct_port;
370	int radius_server_ipv6;
371
372	int use_pae_group_addr; /* Whether to send EAPOL frames to PAE group
373				 * address instead of individual address
374				 * (for driver_wired.c).
375				 */
376
377	int ap_max_inactivity;
378	int ignore_broadcast_ssid;
379	int no_probe_resp_if_max_sta;
380
381	int wmm_enabled;
382	int wmm_uapsd;
383
384	struct hostapd_vlan *vlan;
385
386	macaddr bssid;
387
388	/*
389	 * Maximum listen interval that STAs can use when associating with this
390	 * BSS. If a STA tries to use larger value, the association will be
391	 * denied with status code 51.
392	 */
393	u16 max_listen_interval;
394
395	int disable_pmksa_caching;
396	int okc; /* Opportunistic Key Caching */
397
398	int wps_state;
399#ifdef CONFIG_WPS
400	int wps_independent;
401	int ap_setup_locked;
402	u8 uuid[16];
403	char *wps_pin_requests;
404	char *device_name;
405	char *manufacturer;
406	char *model_name;
407	char *model_number;
408	char *serial_number;
409	u8 device_type[WPS_DEV_TYPE_LEN];
410	char *config_methods;
411	u8 os_version[4];
412	char *ap_pin;
413	int skip_cred_build;
414	u8 *extra_cred;
415	size_t extra_cred_len;
416	int wps_cred_processing;
417	int force_per_enrollee_psk;
418	u8 *ap_settings;
419	size_t ap_settings_len;
420	char *upnp_iface;
421	char *friendly_name;
422	char *manufacturer_url;
423	char *model_description;
424	char *model_url;
425	char *upc;
426	struct wpabuf *wps_vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];
427	int wps_nfc_pw_from_config;
428	int wps_nfc_dev_pw_id;
429	struct wpabuf *wps_nfc_dh_pubkey;
430	struct wpabuf *wps_nfc_dh_privkey;
431	struct wpabuf *wps_nfc_dev_pw;
432#endif /* CONFIG_WPS */
433	int pbc_in_m1;
434	char *server_id;
435
436#define P2P_ENABLED BIT(0)
437#define P2P_GROUP_OWNER BIT(1)
438#define P2P_GROUP_FORMATION BIT(2)
439#define P2P_MANAGE BIT(3)
440#define P2P_ALLOW_CROSS_CONNECTION BIT(4)
441	int p2p;
442#ifdef CONFIG_P2P
443	u8 ip_addr_go[4];
444	u8 ip_addr_mask[4];
445	u8 ip_addr_start[4];
446	u8 ip_addr_end[4];
447#endif /* CONFIG_P2P */
448
449	int disassoc_low_ack;
450	int skip_inactivity_poll;
451
452#define TDLS_PROHIBIT BIT(0)
453#define TDLS_PROHIBIT_CHAN_SWITCH BIT(1)
454	int tdls;
455	int disable_11n;
456	int disable_11ac;
457
458	/* IEEE 802.11v */
459	int time_advertisement;
460	char *time_zone;
461	int wnm_sleep_mode;
462	int bss_transition;
463
464	/* IEEE 802.11u - Interworking */
465	int interworking;
466	int access_network_type;
467	int internet;
468	int asra;
469	int esr;
470	int uesa;
471	int venue_info_set;
472	u8 venue_group;
473	u8 venue_type;
474	u8 hessid[ETH_ALEN];
475
476	/* IEEE 802.11u - Roaming Consortium list */
477	unsigned int roaming_consortium_count;
478	struct hostapd_roaming_consortium *roaming_consortium;
479
480	/* IEEE 802.11u - Venue Name duples */
481	unsigned int venue_name_count;
482	struct hostapd_lang_string *venue_name;
483
484	/* IEEE 802.11u - Network Authentication Type */
485	u8 *network_auth_type;
486	size_t network_auth_type_len;
487
488	/* IEEE 802.11u - IP Address Type Availability */
489	u8 ipaddr_type_availability;
490	u8 ipaddr_type_configured;
491
492	/* IEEE 802.11u - 3GPP Cellular Network */
493	u8 *anqp_3gpp_cell_net;
494	size_t anqp_3gpp_cell_net_len;
495
496	/* IEEE 802.11u - Domain Name */
497	u8 *domain_name;
498	size_t domain_name_len;
499
500	unsigned int nai_realm_count;
501	struct hostapd_nai_realm_data *nai_realm_data;
502
503	struct dl_list anqp_elem; /* list of struct anqp_element */
504
505	u16 gas_comeback_delay;
506	int gas_frag_limit;
507
508	u8 qos_map_set[16 + 2 * 21];
509	unsigned int qos_map_set_len;
510
511	int osen;
512	int proxy_arp;
513	int na_mcast_to_ucast;
514#ifdef CONFIG_HS20
515	int hs20;
516	int disable_dgaf;
517	u16 anqp_domain_id;
518	unsigned int hs20_oper_friendly_name_count;
519	struct hostapd_lang_string *hs20_oper_friendly_name;
520	u8 *hs20_wan_metrics;
521	u8 *hs20_connection_capability;
522	size_t hs20_connection_capability_len;
523	u8 *hs20_operating_class;
524	u8 hs20_operating_class_len;
525	struct hs20_icon {
526		u16 width;
527		u16 height;
528		char language[3];
529		char type[256];
530		char name[256];
531		char file[256];
532	} *hs20_icons;
533	size_t hs20_icons_count;
534	u8 osu_ssid[SSID_MAX_LEN];
535	size_t osu_ssid_len;
536	struct hs20_osu_provider {
537		unsigned int friendly_name_count;
538		struct hostapd_lang_string *friendly_name;
539		char *server_uri;
540		int *method_list;
541		char **icons;
542		size_t icons_count;
543		char *osu_nai;
544		unsigned int service_desc_count;
545		struct hostapd_lang_string *service_desc;
546	} *hs20_osu_providers, *last_osu;
547	size_t hs20_osu_providers_count;
548	unsigned int hs20_deauth_req_timeout;
549	char *subscr_remediation_url;
550	u8 subscr_remediation_method;
551#endif /* CONFIG_HS20 */
552
553	u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */
554
555#ifdef CONFIG_RADIUS_TEST
556	char *dump_msk_file;
557#endif /* CONFIG_RADIUS_TEST */
558
559	struct wpabuf *vendor_elements;
560
561	unsigned int sae_anti_clogging_threshold;
562	int *sae_groups;
563
564	char *wowlan_triggers; /* Wake-on-WLAN triggers */
565
566#ifdef CONFIG_TESTING_OPTIONS
567	u8 bss_load_test[5];
568	u8 bss_load_test_set;
569	struct wpabuf *own_ie_override;
570#endif /* CONFIG_TESTING_OPTIONS */
571
572#define MESH_ENABLED BIT(0)
573	int mesh;
574
575	int radio_measurements;
576
577	int vendor_vht;
578
579	char *no_probe_resp_if_seen_on;
580	char *no_auth_if_seen_on;
581
582	int pbss;
583
584#ifdef CONFIG_MBO
585	int mbo_enabled;
586#endif /* CONFIG_MBO */
587};
588
589
590/**
591 * struct hostapd_config - Per-radio interface configuration
592 */
593struct hostapd_config {
594	struct hostapd_bss_config **bss, *last_bss;
595	size_t num_bss;
596
597	u16 beacon_int;
598	int rts_threshold;
599	int fragm_threshold;
600	u8 send_probe_response;
601	u8 channel;
602	u8 acs;
603	struct wpa_freq_range_list acs_ch_list;
604	enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */
605	enum {
606		LONG_PREAMBLE = 0,
607		SHORT_PREAMBLE = 1
608	} preamble;
609
610	int *supported_rates;
611	int *basic_rates;
612
613	const struct wpa_driver_ops *driver;
614	char *driver_params;
615
616	int ap_table_max_size;
617	int ap_table_expiration_time;
618
619	unsigned int track_sta_max_num;
620	unsigned int track_sta_max_age;
621
622	char country[3]; /* first two octets: country code as described in
623			  * ISO/IEC 3166-1. Third octet:
624			  * ' ' (ascii 32): all environments
625			  * 'O': Outdoor environemnt only
626			  * 'I': Indoor environment only
627			  */
628
629	int ieee80211d;
630
631	int ieee80211h; /* DFS */
632
633	/*
634	 * Local power constraint is an octet encoded as an unsigned integer in
635	 * units of decibels. Invalid value -1 indicates that Power Constraint
636	 * element will not be added.
637	 */
638	int local_pwr_constraint;
639
640	/* Control Spectrum Management bit */
641	int spectrum_mgmt_required;
642
643	struct hostapd_tx_queue_params tx_queue[NUM_TX_QUEUES];
644
645	/*
646	 * WMM AC parameters, in same order as 802.1D, i.e.
647	 * 0 = BE (best effort)
648	 * 1 = BK (background)
649	 * 2 = VI (video)
650	 * 3 = VO (voice)
651	 */
652	struct hostapd_wmm_ac_params wmm_ac_params[4];
653
654	int ht_op_mode_fixed;
655	u16 ht_capab;
656	int ieee80211n;
657	int secondary_channel;
658	int no_pri_sec_switch;
659	int require_ht;
660	int obss_interval;
661	u32 vht_capab;
662	int ieee80211ac;
663	int require_vht;
664	u8 vht_oper_chwidth;
665	u8 vht_oper_centr_freq_seg0_idx;
666	u8 vht_oper_centr_freq_seg1_idx;
667
668#ifdef CONFIG_FST
669	struct fst_iface_cfg fst_cfg;
670#endif /* CONFIG_FST */
671
672#ifdef CONFIG_P2P
673	u8 p2p_go_ctwindow;
674#endif /* CONFIG_P2P */
675
676#ifdef CONFIG_TESTING_OPTIONS
677	double ignore_probe_probability;
678	double ignore_auth_probability;
679	double ignore_assoc_probability;
680	double ignore_reassoc_probability;
681	double corrupt_gtk_rekey_mic_probability;
682	int ecsa_ie_only;
683#endif /* CONFIG_TESTING_OPTIONS */
684
685#ifdef CONFIG_ACS
686	unsigned int acs_num_scans;
687	struct acs_bias {
688		int channel;
689		double bias;
690	} *acs_chan_bias;
691	unsigned int num_acs_chan_bias;
692#endif /* CONFIG_ACS */
693};
694
695
696int hostapd_mac_comp(const void *a, const void *b);
697struct hostapd_config * hostapd_config_defaults(void);
698void hostapd_config_defaults_bss(struct hostapd_bss_config *bss);
699void hostapd_config_free_eap_user(struct hostapd_eap_user *user);
700void hostapd_config_clear_wpa_psk(struct hostapd_wpa_psk **p);
701void hostapd_config_free_bss(struct hostapd_bss_config *conf);
702void hostapd_config_free(struct hostapd_config *conf);
703int hostapd_maclist_found(struct mac_acl_entry *list, int num_entries,
704			  const u8 *addr, struct vlan_description *vlan_id);
705int hostapd_rate_found(int *list, int rate);
706const u8 * hostapd_get_psk(const struct hostapd_bss_config *conf,
707			   const u8 *addr, const u8 *p2p_dev_addr,
708			   const u8 *prev_psk);
709int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf);
710int hostapd_vlan_valid(struct hostapd_vlan *vlan,
711		       struct vlan_description *vlan_desc);
712const char * hostapd_get_vlan_id_ifname(struct hostapd_vlan *vlan,
713					int vlan_id);
714struct hostapd_radius_attr *
715hostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type);
716int hostapd_config_check(struct hostapd_config *conf, int full_config);
717void hostapd_set_security_params(struct hostapd_bss_config *bss,
718				 int full_config);
719
720#endif /* HOSTAPD_CONFIG_H */
721