ap_config.h revision 252726
1214501Srpaulo/* 2214501Srpaulo * hostapd / Configuration definitions and helpers functions 3252726Srpaulo * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#ifndef HOSTAPD_CONFIG_H 10214501Srpaulo#define HOSTAPD_CONFIG_H 11214501Srpaulo 12214501Srpaulo#include "common/defs.h" 13214501Srpaulo#include "ip_addr.h" 14214501Srpaulo#include "common/wpa_common.h" 15252726Srpaulo#include "common/ieee802_11_common.h" 16252726Srpaulo#include "wps/wps.h" 17214501Srpaulo 18214501Srpaulo#define MAX_STA_COUNT 2007 19214501Srpaulo#define MAX_VLAN_ID 4094 20214501Srpaulo 21214501Srpaulotypedef u8 macaddr[ETH_ALEN]; 22214501Srpaulo 23214501Srpaulostruct mac_acl_entry { 24214501Srpaulo macaddr addr; 25214501Srpaulo int vlan_id; 26214501Srpaulo}; 27214501Srpaulo 28214501Srpaulostruct hostapd_radius_servers; 29214501Srpaulostruct ft_remote_r0kh; 30214501Srpaulostruct ft_remote_r1kh; 31214501Srpaulo 32214501Srpaulo#define HOSTAPD_MAX_SSID_LEN 32 33214501Srpaulo 34214501Srpaulo#define NUM_WEP_KEYS 4 35214501Srpaulostruct hostapd_wep_keys { 36214501Srpaulo u8 idx; 37214501Srpaulo u8 *key[NUM_WEP_KEYS]; 38214501Srpaulo size_t len[NUM_WEP_KEYS]; 39214501Srpaulo int keys_set; 40214501Srpaulo size_t default_len; /* key length used for dynamic key generation */ 41214501Srpaulo}; 42214501Srpaulo 43214501Srpaulotypedef enum hostap_security_policy { 44214501Srpaulo SECURITY_PLAINTEXT = 0, 45214501Srpaulo SECURITY_STATIC_WEP = 1, 46214501Srpaulo SECURITY_IEEE_802_1X = 2, 47214501Srpaulo SECURITY_WPA_PSK = 3, 48214501Srpaulo SECURITY_WPA = 4 49214501Srpaulo} secpolicy; 50214501Srpaulo 51214501Srpaulostruct hostapd_ssid { 52252726Srpaulo u8 ssid[HOSTAPD_MAX_SSID_LEN]; 53214501Srpaulo size_t ssid_len; 54252726Srpaulo unsigned int ssid_set:1; 55252726Srpaulo unsigned int utf8_ssid:1; 56214501Srpaulo 57214501Srpaulo char vlan[IFNAMSIZ + 1]; 58214501Srpaulo secpolicy security_policy; 59214501Srpaulo 60214501Srpaulo struct hostapd_wpa_psk *wpa_psk; 61214501Srpaulo char *wpa_passphrase; 62214501Srpaulo char *wpa_psk_file; 63214501Srpaulo 64214501Srpaulo struct hostapd_wep_keys wep; 65214501Srpaulo 66214501Srpaulo#define DYNAMIC_VLAN_DISABLED 0 67214501Srpaulo#define DYNAMIC_VLAN_OPTIONAL 1 68214501Srpaulo#define DYNAMIC_VLAN_REQUIRED 2 69214501Srpaulo int dynamic_vlan; 70252726Srpaulo#define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0 71252726Srpaulo#define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1 72252726Srpaulo#define DYNAMIC_VLAN_NAMING_END 2 73252726Srpaulo int vlan_naming; 74214501Srpaulo#ifdef CONFIG_FULL_DYNAMIC_VLAN 75214501Srpaulo char *vlan_tagged_interface; 76214501Srpaulo#endif /* CONFIG_FULL_DYNAMIC_VLAN */ 77214501Srpaulo struct hostapd_wep_keys **dyn_vlan_keys; 78214501Srpaulo size_t max_dyn_vlan_keys; 79214501Srpaulo}; 80214501Srpaulo 81214501Srpaulo 82214501Srpaulo#define VLAN_ID_WILDCARD -1 83214501Srpaulo 84214501Srpaulostruct hostapd_vlan { 85214501Srpaulo struct hostapd_vlan *next; 86214501Srpaulo int vlan_id; /* VLAN ID or -1 (VLAN_ID_WILDCARD) for wildcard entry */ 87214501Srpaulo char ifname[IFNAMSIZ + 1]; 88214501Srpaulo int dynamic_vlan; 89214501Srpaulo#ifdef CONFIG_FULL_DYNAMIC_VLAN 90214501Srpaulo 91214501Srpaulo#define DVLAN_CLEAN_BR 0x1 92214501Srpaulo#define DVLAN_CLEAN_VLAN 0x2 93214501Srpaulo#define DVLAN_CLEAN_VLAN_PORT 0x4 94214501Srpaulo#define DVLAN_CLEAN_WLAN_PORT 0x8 95214501Srpaulo int clean; 96214501Srpaulo#endif /* CONFIG_FULL_DYNAMIC_VLAN */ 97214501Srpaulo}; 98214501Srpaulo 99214501Srpaulo#define PMK_LEN 32 100252726Srpaulostruct hostapd_sta_wpa_psk_short { 101252726Srpaulo struct hostapd_sta_wpa_psk_short *next; 102252726Srpaulo u8 psk[PMK_LEN]; 103252726Srpaulo}; 104252726Srpaulo 105214501Srpaulostruct hostapd_wpa_psk { 106214501Srpaulo struct hostapd_wpa_psk *next; 107214501Srpaulo int group; 108214501Srpaulo u8 psk[PMK_LEN]; 109214501Srpaulo u8 addr[ETH_ALEN]; 110214501Srpaulo}; 111214501Srpaulo 112214501Srpaulostruct hostapd_eap_user { 113214501Srpaulo struct hostapd_eap_user *next; 114214501Srpaulo u8 *identity; 115214501Srpaulo size_t identity_len; 116214501Srpaulo struct { 117214501Srpaulo int vendor; 118214501Srpaulo u32 method; 119252726Srpaulo } methods[EAP_MAX_METHODS]; 120214501Srpaulo u8 *password; 121214501Srpaulo size_t password_len; 122214501Srpaulo int phase2; 123214501Srpaulo int force_version; 124214501Srpaulo unsigned int wildcard_prefix:1; 125214501Srpaulo unsigned int password_hash:1; /* whether password is hashed with 126214501Srpaulo * nt_password_hash() */ 127214501Srpaulo int ttls_auth; /* EAP_TTLS_AUTH_* bitfield */ 128214501Srpaulo}; 129214501Srpaulo 130252726Srpaulostruct hostapd_radius_attr { 131252726Srpaulo u8 type; 132252726Srpaulo struct wpabuf *val; 133252726Srpaulo struct hostapd_radius_attr *next; 134252726Srpaulo}; 135214501Srpaulo 136214501Srpaulo 137252726Srpaulo#define NUM_TX_QUEUES 4 138252726Srpaulo 139214501Srpaulostruct hostapd_tx_queue_params { 140214501Srpaulo int aifs; 141214501Srpaulo int cwmin; 142214501Srpaulo int cwmax; 143214501Srpaulo int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */ 144214501Srpaulo}; 145214501Srpaulo 146252726Srpaulo 147252726Srpaulo#define MAX_ROAMING_CONSORTIUM_LEN 15 148252726Srpaulo 149252726Srpaulostruct hostapd_roaming_consortium { 150252726Srpaulo u8 len; 151252726Srpaulo u8 oi[MAX_ROAMING_CONSORTIUM_LEN]; 152214501Srpaulo}; 153214501Srpaulo 154252726Srpaulostruct hostapd_lang_string { 155252726Srpaulo u8 lang[3]; 156252726Srpaulo u8 name_len; 157252726Srpaulo u8 name[252]; 158252726Srpaulo}; 159214501Srpaulo 160252726Srpaulo#define MAX_NAI_REALMS 10 161252726Srpaulo#define MAX_NAI_REALMLEN 255 162252726Srpaulo#define MAX_NAI_EAP_METHODS 5 163252726Srpaulo#define MAX_NAI_AUTH_TYPES 4 164252726Srpaulostruct hostapd_nai_realm_data { 165252726Srpaulo u8 encoding; 166252726Srpaulo char realm_buf[MAX_NAI_REALMLEN + 1]; 167252726Srpaulo char *realm[MAX_NAI_REALMS]; 168252726Srpaulo u8 eap_method_count; 169252726Srpaulo struct hostapd_nai_realm_eap { 170252726Srpaulo u8 eap_method; 171252726Srpaulo u8 num_auths; 172252726Srpaulo u8 auth_id[MAX_NAI_AUTH_TYPES]; 173252726Srpaulo u8 auth_val[MAX_NAI_AUTH_TYPES]; 174252726Srpaulo } eap_method[MAX_NAI_EAP_METHODS]; 175252726Srpaulo}; 176252726Srpaulo 177214501Srpaulo/** 178214501Srpaulo * struct hostapd_bss_config - Per-BSS configuration 179214501Srpaulo */ 180214501Srpaulostruct hostapd_bss_config { 181214501Srpaulo char iface[IFNAMSIZ + 1]; 182214501Srpaulo char bridge[IFNAMSIZ + 1]; 183252726Srpaulo char wds_bridge[IFNAMSIZ + 1]; 184214501Srpaulo 185214501Srpaulo enum hostapd_logger_level logger_syslog_level, logger_stdout_level; 186214501Srpaulo 187214501Srpaulo unsigned int logger_syslog; /* module bitfield */ 188214501Srpaulo unsigned int logger_stdout; /* module bitfield */ 189214501Srpaulo 190214501Srpaulo char *dump_log_name; /* file name for state dump (SIGUSR1) */ 191214501Srpaulo 192214501Srpaulo int max_num_sta; /* maximum number of STAs in station table */ 193214501Srpaulo 194214501Srpaulo int dtim_period; 195214501Srpaulo 196214501Srpaulo int ieee802_1x; /* use IEEE 802.1X */ 197214501Srpaulo int eapol_version; 198214501Srpaulo int eap_server; /* Use internal EAP server instead of external 199214501Srpaulo * RADIUS server */ 200214501Srpaulo struct hostapd_eap_user *eap_user; 201252726Srpaulo char *eap_user_sqlite; 202214501Srpaulo char *eap_sim_db; 203214501Srpaulo struct hostapd_ip_addr own_ip_addr; 204214501Srpaulo char *nas_identifier; 205214501Srpaulo struct hostapd_radius_servers *radius; 206214501Srpaulo int acct_interim_interval; 207252726Srpaulo int radius_request_cui; 208252726Srpaulo struct hostapd_radius_attr *radius_auth_req_attr; 209252726Srpaulo struct hostapd_radius_attr *radius_acct_req_attr; 210252726Srpaulo int radius_das_port; 211252726Srpaulo unsigned int radius_das_time_window; 212252726Srpaulo int radius_das_require_event_timestamp; 213252726Srpaulo struct hostapd_ip_addr radius_das_client_addr; 214252726Srpaulo u8 *radius_das_shared_secret; 215252726Srpaulo size_t radius_das_shared_secret_len; 216214501Srpaulo 217214501Srpaulo struct hostapd_ssid ssid; 218214501Srpaulo 219214501Srpaulo char *eap_req_id_text; /* optional displayable message sent with 220214501Srpaulo * EAP Request-Identity */ 221214501Srpaulo size_t eap_req_id_text_len; 222214501Srpaulo int eapol_key_index_workaround; 223214501Srpaulo 224214501Srpaulo size_t default_wep_key_len; 225214501Srpaulo int individual_wep_key_len; 226214501Srpaulo int wep_rekeying_period; 227214501Srpaulo int broadcast_key_idx_min, broadcast_key_idx_max; 228214501Srpaulo int eap_reauth_period; 229214501Srpaulo 230214501Srpaulo int ieee802_11f; /* use IEEE 802.11f (IAPP) */ 231214501Srpaulo char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast 232214501Srpaulo * frames */ 233214501Srpaulo 234214501Srpaulo enum { 235214501Srpaulo ACCEPT_UNLESS_DENIED = 0, 236214501Srpaulo DENY_UNLESS_ACCEPTED = 1, 237214501Srpaulo USE_EXTERNAL_RADIUS_AUTH = 2 238214501Srpaulo } macaddr_acl; 239214501Srpaulo struct mac_acl_entry *accept_mac; 240214501Srpaulo int num_accept_mac; 241214501Srpaulo struct mac_acl_entry *deny_mac; 242214501Srpaulo int num_deny_mac; 243214501Srpaulo int wds_sta; 244252726Srpaulo int isolate; 245214501Srpaulo 246214501Srpaulo int auth_algs; /* bitfield of allowed IEEE 802.11 authentication 247214501Srpaulo * algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */ 248214501Srpaulo 249214501Srpaulo int wpa; /* bitfield of WPA_PROTO_WPA, WPA_PROTO_RSN */ 250214501Srpaulo int wpa_key_mgmt; 251214501Srpaulo#ifdef CONFIG_IEEE80211W 252214501Srpaulo enum mfp_options ieee80211w; 253214501Srpaulo /* dot11AssociationSAQueryMaximumTimeout (in TUs) */ 254214501Srpaulo unsigned int assoc_sa_query_max_timeout; 255214501Srpaulo /* dot11AssociationSAQueryRetryTimeout (in TUs) */ 256214501Srpaulo int assoc_sa_query_retry_timeout; 257214501Srpaulo#endif /* CONFIG_IEEE80211W */ 258252726Srpaulo enum { 259252726Srpaulo PSK_RADIUS_IGNORED = 0, 260252726Srpaulo PSK_RADIUS_ACCEPTED = 1, 261252726Srpaulo PSK_RADIUS_REQUIRED = 2 262252726Srpaulo } wpa_psk_radius; 263214501Srpaulo int wpa_pairwise; 264214501Srpaulo int wpa_group; 265214501Srpaulo int wpa_group_rekey; 266214501Srpaulo int wpa_strict_rekey; 267214501Srpaulo int wpa_gmk_rekey; 268214501Srpaulo int wpa_ptk_rekey; 269214501Srpaulo int rsn_pairwise; 270214501Srpaulo int rsn_preauth; 271214501Srpaulo char *rsn_preauth_interfaces; 272214501Srpaulo int peerkey; 273214501Srpaulo 274214501Srpaulo#ifdef CONFIG_IEEE80211R 275214501Srpaulo /* IEEE 802.11r - Fast BSS Transition */ 276214501Srpaulo u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN]; 277214501Srpaulo u8 r1_key_holder[FT_R1KH_ID_LEN]; 278214501Srpaulo u32 r0_key_lifetime; 279214501Srpaulo u32 reassociation_deadline; 280214501Srpaulo struct ft_remote_r0kh *r0kh_list; 281214501Srpaulo struct ft_remote_r1kh *r1kh_list; 282214501Srpaulo int pmk_r1_push; 283252726Srpaulo int ft_over_ds; 284214501Srpaulo#endif /* CONFIG_IEEE80211R */ 285214501Srpaulo 286214501Srpaulo char *ctrl_interface; /* directory for UNIX domain sockets */ 287214501Srpaulo#ifndef CONFIG_NATIVE_WINDOWS 288214501Srpaulo gid_t ctrl_interface_gid; 289214501Srpaulo#endif /* CONFIG_NATIVE_WINDOWS */ 290214501Srpaulo int ctrl_interface_gid_set; 291214501Srpaulo 292214501Srpaulo char *ca_cert; 293214501Srpaulo char *server_cert; 294214501Srpaulo char *private_key; 295214501Srpaulo char *private_key_passwd; 296214501Srpaulo int check_crl; 297214501Srpaulo char *dh_file; 298214501Srpaulo u8 *pac_opaque_encr_key; 299214501Srpaulo u8 *eap_fast_a_id; 300214501Srpaulo size_t eap_fast_a_id_len; 301214501Srpaulo char *eap_fast_a_id_info; 302214501Srpaulo int eap_fast_prov; 303214501Srpaulo int pac_key_lifetime; 304214501Srpaulo int pac_key_refresh_time; 305214501Srpaulo int eap_sim_aka_result_ind; 306214501Srpaulo int tnc; 307252726Srpaulo int fragment_size; 308252726Srpaulo u16 pwd_group; 309214501Srpaulo 310214501Srpaulo char *radius_server_clients; 311214501Srpaulo int radius_server_auth_port; 312214501Srpaulo int radius_server_ipv6; 313214501Srpaulo 314214501Srpaulo char *test_socket; /* UNIX domain socket path for driver_test */ 315214501Srpaulo 316214501Srpaulo int use_pae_group_addr; /* Whether to send EAPOL frames to PAE group 317214501Srpaulo * address instead of individual address 318214501Srpaulo * (for driver_wired.c). 319214501Srpaulo */ 320214501Srpaulo 321214501Srpaulo int ap_max_inactivity; 322214501Srpaulo int ignore_broadcast_ssid; 323214501Srpaulo 324214501Srpaulo int wmm_enabled; 325214501Srpaulo int wmm_uapsd; 326214501Srpaulo 327214501Srpaulo struct hostapd_vlan *vlan, *vlan_tail; 328214501Srpaulo 329214501Srpaulo macaddr bssid; 330214501Srpaulo 331214501Srpaulo /* 332214501Srpaulo * Maximum listen interval that STAs can use when associating with this 333214501Srpaulo * BSS. If a STA tries to use larger value, the association will be 334214501Srpaulo * denied with status code 51. 335214501Srpaulo */ 336214501Srpaulo u16 max_listen_interval; 337214501Srpaulo 338252726Srpaulo int disable_pmksa_caching; 339214501Srpaulo int okc; /* Opportunistic Key Caching */ 340214501Srpaulo 341214501Srpaulo int wps_state; 342214501Srpaulo#ifdef CONFIG_WPS 343214501Srpaulo int ap_setup_locked; 344214501Srpaulo u8 uuid[16]; 345214501Srpaulo char *wps_pin_requests; 346214501Srpaulo char *device_name; 347214501Srpaulo char *manufacturer; 348214501Srpaulo char *model_name; 349214501Srpaulo char *model_number; 350214501Srpaulo char *serial_number; 351252726Srpaulo u8 device_type[WPS_DEV_TYPE_LEN]; 352214501Srpaulo char *config_methods; 353214501Srpaulo u8 os_version[4]; 354214501Srpaulo char *ap_pin; 355214501Srpaulo int skip_cred_build; 356214501Srpaulo u8 *extra_cred; 357214501Srpaulo size_t extra_cred_len; 358214501Srpaulo int wps_cred_processing; 359214501Srpaulo u8 *ap_settings; 360214501Srpaulo size_t ap_settings_len; 361214501Srpaulo char *upnp_iface; 362214501Srpaulo char *friendly_name; 363214501Srpaulo char *manufacturer_url; 364214501Srpaulo char *model_description; 365214501Srpaulo char *model_url; 366214501Srpaulo char *upc; 367252726Srpaulo struct wpabuf *wps_vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; 368252726Srpaulo int wps_nfc_dev_pw_id; 369252726Srpaulo struct wpabuf *wps_nfc_dh_pubkey; 370252726Srpaulo struct wpabuf *wps_nfc_dh_privkey; 371252726Srpaulo struct wpabuf *wps_nfc_dev_pw; 372214501Srpaulo#endif /* CONFIG_WPS */ 373252726Srpaulo int pbc_in_m1; 374252726Srpaulo 375252726Srpaulo#define P2P_ENABLED BIT(0) 376252726Srpaulo#define P2P_GROUP_OWNER BIT(1) 377252726Srpaulo#define P2P_GROUP_FORMATION BIT(2) 378252726Srpaulo#define P2P_MANAGE BIT(3) 379252726Srpaulo#define P2P_ALLOW_CROSS_CONNECTION BIT(4) 380252726Srpaulo int p2p; 381252726Srpaulo 382252726Srpaulo int disassoc_low_ack; 383252726Srpaulo int skip_inactivity_poll; 384252726Srpaulo 385252726Srpaulo#define TDLS_PROHIBIT BIT(0) 386252726Srpaulo#define TDLS_PROHIBIT_CHAN_SWITCH BIT(1) 387252726Srpaulo int tdls; 388252726Srpaulo int disable_11n; 389252726Srpaulo int disable_11ac; 390252726Srpaulo 391252726Srpaulo /* IEEE 802.11v */ 392252726Srpaulo int time_advertisement; 393252726Srpaulo char *time_zone; 394252726Srpaulo int wnm_sleep_mode; 395252726Srpaulo int bss_transition; 396252726Srpaulo 397252726Srpaulo /* IEEE 802.11u - Interworking */ 398252726Srpaulo int interworking; 399252726Srpaulo int access_network_type; 400252726Srpaulo int internet; 401252726Srpaulo int asra; 402252726Srpaulo int esr; 403252726Srpaulo int uesa; 404252726Srpaulo int venue_info_set; 405252726Srpaulo u8 venue_group; 406252726Srpaulo u8 venue_type; 407252726Srpaulo u8 hessid[ETH_ALEN]; 408252726Srpaulo 409252726Srpaulo /* IEEE 802.11u - Roaming Consortium list */ 410252726Srpaulo unsigned int roaming_consortium_count; 411252726Srpaulo struct hostapd_roaming_consortium *roaming_consortium; 412252726Srpaulo 413252726Srpaulo /* IEEE 802.11u - Venue Name duples */ 414252726Srpaulo unsigned int venue_name_count; 415252726Srpaulo struct hostapd_lang_string *venue_name; 416252726Srpaulo 417252726Srpaulo /* IEEE 802.11u - Network Authentication Type */ 418252726Srpaulo u8 *network_auth_type; 419252726Srpaulo size_t network_auth_type_len; 420252726Srpaulo 421252726Srpaulo /* IEEE 802.11u - IP Address Type Availability */ 422252726Srpaulo u8 ipaddr_type_availability; 423252726Srpaulo u8 ipaddr_type_configured; 424252726Srpaulo 425252726Srpaulo /* IEEE 802.11u - 3GPP Cellular Network */ 426252726Srpaulo u8 *anqp_3gpp_cell_net; 427252726Srpaulo size_t anqp_3gpp_cell_net_len; 428252726Srpaulo 429252726Srpaulo /* IEEE 802.11u - Domain Name */ 430252726Srpaulo u8 *domain_name; 431252726Srpaulo size_t domain_name_len; 432252726Srpaulo 433252726Srpaulo unsigned int nai_realm_count; 434252726Srpaulo struct hostapd_nai_realm_data *nai_realm_data; 435252726Srpaulo 436252726Srpaulo u16 gas_comeback_delay; 437252726Srpaulo int gas_frag_limit; 438252726Srpaulo 439252726Srpaulo#ifdef CONFIG_HS20 440252726Srpaulo int hs20; 441252726Srpaulo int disable_dgaf; 442252726Srpaulo unsigned int hs20_oper_friendly_name_count; 443252726Srpaulo struct hostapd_lang_string *hs20_oper_friendly_name; 444252726Srpaulo u8 *hs20_wan_metrics; 445252726Srpaulo u8 *hs20_connection_capability; 446252726Srpaulo size_t hs20_connection_capability_len; 447252726Srpaulo u8 *hs20_operating_class; 448252726Srpaulo u8 hs20_operating_class_len; 449252726Srpaulo#endif /* CONFIG_HS20 */ 450252726Srpaulo 451252726Srpaulo u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */ 452252726Srpaulo 453252726Srpaulo#ifdef CONFIG_RADIUS_TEST 454252726Srpaulo char *dump_msk_file; 455252726Srpaulo#endif /* CONFIG_RADIUS_TEST */ 456252726Srpaulo 457252726Srpaulo struct wpabuf *vendor_elements; 458214501Srpaulo}; 459214501Srpaulo 460214501Srpaulo 461214501Srpaulo/** 462214501Srpaulo * struct hostapd_config - Per-radio interface configuration 463214501Srpaulo */ 464214501Srpaulostruct hostapd_config { 465214501Srpaulo struct hostapd_bss_config *bss, *last_bss; 466214501Srpaulo size_t num_bss; 467214501Srpaulo 468214501Srpaulo u16 beacon_int; 469214501Srpaulo int rts_threshold; 470214501Srpaulo int fragm_threshold; 471214501Srpaulo u8 send_probe_response; 472214501Srpaulo u8 channel; 473214501Srpaulo enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */ 474214501Srpaulo enum { 475214501Srpaulo LONG_PREAMBLE = 0, 476214501Srpaulo SHORT_PREAMBLE = 1 477214501Srpaulo } preamble; 478214501Srpaulo 479214501Srpaulo int *supported_rates; 480214501Srpaulo int *basic_rates; 481214501Srpaulo 482214501Srpaulo const struct wpa_driver_ops *driver; 483214501Srpaulo 484214501Srpaulo int ap_table_max_size; 485214501Srpaulo int ap_table_expiration_time; 486214501Srpaulo 487214501Srpaulo char country[3]; /* first two octets: country code as described in 488214501Srpaulo * ISO/IEC 3166-1. Third octet: 489214501Srpaulo * ' ' (ascii 32): all environments 490214501Srpaulo * 'O': Outdoor environemnt only 491214501Srpaulo * 'I': Indoor environment only 492214501Srpaulo */ 493214501Srpaulo 494214501Srpaulo int ieee80211d; 495214501Srpaulo 496214501Srpaulo struct hostapd_tx_queue_params tx_queue[NUM_TX_QUEUES]; 497214501Srpaulo 498214501Srpaulo /* 499214501Srpaulo * WMM AC parameters, in same order as 802.1D, i.e. 500214501Srpaulo * 0 = BE (best effort) 501214501Srpaulo * 1 = BK (background) 502214501Srpaulo * 2 = VI (video) 503214501Srpaulo * 3 = VO (voice) 504214501Srpaulo */ 505214501Srpaulo struct hostapd_wmm_ac_params wmm_ac_params[4]; 506214501Srpaulo 507214501Srpaulo int ht_op_mode_fixed; 508214501Srpaulo u16 ht_capab; 509214501Srpaulo int ieee80211n; 510214501Srpaulo int secondary_channel; 511252726Srpaulo int require_ht; 512252726Srpaulo u32 vht_capab; 513252726Srpaulo int ieee80211ac; 514252726Srpaulo int require_vht; 515252726Srpaulo u8 vht_oper_chwidth; 516252726Srpaulo u8 vht_oper_centr_freq_seg0_idx; 517252726Srpaulo u8 vht_oper_centr_freq_seg1_idx; 518214501Srpaulo}; 519214501Srpaulo 520214501Srpaulo 521214501Srpauloint hostapd_mac_comp(const void *a, const void *b); 522214501Srpauloint hostapd_mac_comp_empty(const void *a); 523214501Srpaulostruct hostapd_config * hostapd_config_defaults(void); 524214501Srpaulovoid hostapd_config_defaults_bss(struct hostapd_bss_config *bss); 525214501Srpaulovoid hostapd_config_free(struct hostapd_config *conf); 526214501Srpauloint hostapd_maclist_found(struct mac_acl_entry *list, int num_entries, 527214501Srpaulo const u8 *addr, int *vlan_id); 528214501Srpauloint hostapd_rate_found(int *list, int rate); 529214501Srpauloint hostapd_wep_key_cmp(struct hostapd_wep_keys *a, 530214501Srpaulo struct hostapd_wep_keys *b); 531214501Srpauloconst u8 * hostapd_get_psk(const struct hostapd_bss_config *conf, 532214501Srpaulo const u8 *addr, const u8 *prev_psk); 533214501Srpauloint hostapd_setup_wpa_psk(struct hostapd_bss_config *conf); 534214501Srpauloconst char * hostapd_get_vlan_id_ifname(struct hostapd_vlan *vlan, 535214501Srpaulo int vlan_id); 536252726Srpaulostruct hostapd_radius_attr * 537252726Srpaulohostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type); 538214501Srpaulo 539214501Srpaulo#endif /* HOSTAPD_CONFIG_H */ 540