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