ap_config.h revision a54fa5fb807eaeff45464139b5a7759f060cec68
177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek/* 277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * hostapd / Configuration definitions and helpers functions 377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * 577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * This software may be distributed under the terms of the BSD license. 677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * See README for more details. 777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek */ 877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifndef HOSTAPD_CONFIG_H 1077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define HOSTAPD_CONFIG_H 1177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 1277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "common/defs.h" 1377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "ip_addr.h" 1477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "common/wpa_common.h" 1577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "common/ieee802_11_common.h" 1677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "wps/wps.h" 1777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 1877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_STA_COUNT 2007 1977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_VLAN_ID 4094 2077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 2177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenektypedef u8 macaddr[ETH_ALEN]; 2277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 2377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct mac_acl_entry { 2477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek macaddr addr; 2577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int vlan_id; 2677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 2777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 2877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_radius_servers; 2977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct ft_remote_r0kh; 3077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct ft_remote_r1kh; 3177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 3277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define HOSTAPD_MAX_SSID_LEN 32 3377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 3477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define NUM_WEP_KEYS 4 3577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_wep_keys { 3677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 idx; 3777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *key[NUM_WEP_KEYS]; 3877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t len[NUM_WEP_KEYS]; 3977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int keys_set; 4077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t default_len; /* key length used for dynamic key generation */ 4177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 4277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 4377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenektypedef enum hostap_security_policy { 4477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek SECURITY_PLAINTEXT = 0, 4577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek SECURITY_STATIC_WEP = 1, 4677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek SECURITY_IEEE_802_1X = 2, 4777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek SECURITY_WPA_PSK = 3, 4877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek SECURITY_WPA = 4 4977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek} secpolicy; 5077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 5177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_ssid { 5277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 ssid[HOSTAPD_MAX_SSID_LEN]; 5377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t ssid_len; 5477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int ssid_set:1; 5577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int utf8_ssid:1; 5677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 5777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char vlan[IFNAMSIZ + 1]; 5877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek secpolicy security_policy; 5977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 6077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_wpa_psk *wpa_psk; 6177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *wpa_passphrase; 6277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *wpa_psk_file; 6377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 6477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_wep_keys wep; 6577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 6677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_DISABLED 0 6777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_OPTIONAL 1 6877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_REQUIRED 2 6977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int dynamic_vlan; 7077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_NAMING_WITHOUT_DEVICE 0 7177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_NAMING_WITH_DEVICE 1 7277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DYNAMIC_VLAN_NAMING_END 2 7377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int vlan_naming; 7477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifdef CONFIG_FULL_DYNAMIC_VLAN 7577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *vlan_tagged_interface; 7677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#endif /* CONFIG_FULL_DYNAMIC_VLAN */ 7777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_wep_keys **dyn_vlan_keys; 7877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t max_dyn_vlan_keys; 7977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 8077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 8177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 8277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define VLAN_ID_WILDCARD -1 8377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 8477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_vlan { 8577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_vlan *next; 8677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int vlan_id; /* VLAN ID or -1 (VLAN_ID_WILDCARD) for wildcard entry */ 8777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char ifname[IFNAMSIZ + 1]; 8877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int dynamic_vlan; 8977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifdef CONFIG_FULL_DYNAMIC_VLAN 9077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 9177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DVLAN_CLEAN_BR 0x1 9277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DVLAN_CLEAN_VLAN 0x2 9377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DVLAN_CLEAN_VLAN_PORT 0x4 9477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define DVLAN_CLEAN_WLAN_PORT 0x8 9577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int clean; 9677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#endif /* CONFIG_FULL_DYNAMIC_VLAN */ 9777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 9877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 9977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define PMK_LEN 32 10077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_sta_wpa_psk_short { 10177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_sta_wpa_psk_short *next; 10277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 psk[PMK_LEN]; 10377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 10477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 10577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_wpa_psk { 10677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_wpa_psk *next; 10777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int group; 10877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 psk[PMK_LEN]; 10977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 addr[ETH_ALEN]; 11077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 11177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 11277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_eap_user { 11377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_eap_user *next; 11477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *identity; 11577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t identity_len; 11677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct { 11777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int vendor; 11877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u32 method; 11977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek } methods[EAP_MAX_METHODS]; 12077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *password; 12177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t password_len; 12277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int phase2; 12377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int force_version; 12477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int wildcard_prefix:1; 12577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int password_hash:1; /* whether password is hashed with 12677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * nt_password_hash() */ 12777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ttls_auth; /* EAP_TTLS_AUTH_* bitfield */ 12877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 12977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 13077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_radius_attr { 13177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 type; 13277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct wpabuf *val; 13377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_radius_attr *next; 13477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 13577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 13677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 13777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define NUM_TX_QUEUES 4 13877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 13977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_tx_queue_params { 14077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int aifs; 14177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int cwmin; 14277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int cwmax; 14377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */ 14477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 14577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 14677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 14777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_ROAMING_CONSORTIUM_LEN 15 14877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 14977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_roaming_consortium { 15077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 len; 15177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 oi[MAX_ROAMING_CONSORTIUM_LEN]; 15277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 15377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 15477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_lang_string { 15577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 lang[3]; 15677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 name_len; 15777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 name[252]; 15877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 15977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 16077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_NAI_REALMS 10 16177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_NAI_REALMLEN 255 16277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_NAI_EAP_METHODS 5 16377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#define MAX_NAI_AUTH_TYPES 4 16477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_nai_realm_data { 16577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 encoding; 16677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char realm_buf[MAX_NAI_REALMLEN + 1]; 16777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *realm[MAX_NAI_REALMS]; 16877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 eap_method_count; 16977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_nai_realm_eap { 17077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 eap_method; 17177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 num_auths; 17277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 auth_id[MAX_NAI_AUTH_TYPES]; 17377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 auth_val[MAX_NAI_AUTH_TYPES]; 17477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek } eap_method[MAX_NAI_EAP_METHODS]; 17577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 17677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 17777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek/** 17877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * struct hostapd_bss_config - Per-BSS configuration 17977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek */ 18077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct hostapd_bss_config { 18177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char iface[IFNAMSIZ + 1]; 18277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char bridge[IFNAMSIZ + 1]; 18377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char wds_bridge[IFNAMSIZ + 1]; 18477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 18577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek enum hostapd_logger_level logger_syslog_level, logger_stdout_level; 18677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 18777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int logger_syslog; /* module bitfield */ 18877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int logger_stdout; /* module bitfield */ 18977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 19077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *dump_log_name; /* file name for state dump (SIGUSR1) */ 19177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 19277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int max_num_sta; /* maximum number of STAs in station table */ 19377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 19477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int dtim_period; 19577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 19677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ieee802_1x; /* use IEEE 802.1X */ 19777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eapol_version; 19877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eap_server; /* Use internal EAP server instead of external 19977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * RADIUS server */ 20077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_eap_user *eap_user; 20177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *eap_user_sqlite; 20277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *eap_sim_db; 20377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_ip_addr own_ip_addr; 20477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *nas_identifier; 20577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_radius_servers *radius; 20677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int acct_interim_interval; 20777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int radius_request_cui; 20877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_radius_attr *radius_auth_req_attr; 20977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_radius_attr *radius_acct_req_attr; 21077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int radius_das_port; 21177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int radius_das_time_window; 21277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int radius_das_require_event_timestamp; 21377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_ip_addr radius_das_client_addr; 21477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *radius_das_shared_secret; 21577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t radius_das_shared_secret_len; 21677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 21777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_ssid ssid; 21877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 21977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *eap_req_id_text; /* optional displayable message sent with 22077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * EAP Request-Identity */ 22177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t eap_req_id_text_len; 22277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eapol_key_index_workaround; 22377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 22477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t default_wep_key_len; 22577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int individual_wep_key_len; 22677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wep_rekeying_period; 22777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int broadcast_key_idx_min, broadcast_key_idx_max; 22877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eap_reauth_period; 22977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 23077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ieee802_11f; /* use IEEE 802.11f (IAPP) */ 23177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast 23277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * frames */ 23377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 23477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek enum { 23577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek ACCEPT_UNLESS_DENIED = 0, 23677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek DENY_UNLESS_ACCEPTED = 1, 23777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek USE_EXTERNAL_RADIUS_AUTH = 2 23877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek } macaddr_acl; 23977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct mac_acl_entry *accept_mac; 24077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int num_accept_mac; 24177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct mac_acl_entry *deny_mac; 24277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int num_deny_mac; 24377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wds_sta; 24477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int isolate; 24577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 24677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int auth_algs; /* bitfield of allowed IEEE 802.11 authentication 24777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */ 24877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 24977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa; /* bitfield of WPA_PROTO_WPA, WPA_PROTO_RSN */ 25077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_key_mgmt; 25177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifdef CONFIG_IEEE80211W 25277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek enum mfp_options ieee80211w; 25377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek /* dot11AssociationSAQueryMaximumTimeout (in TUs) */ 25477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek unsigned int assoc_sa_query_max_timeout; 25577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek /* dot11AssociationSAQueryRetryTimeout (in TUs) */ 25677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int assoc_sa_query_retry_timeout; 25777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#endif /* CONFIG_IEEE80211W */ 25877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek enum { 25977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek PSK_RADIUS_IGNORED = 0, 26077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek PSK_RADIUS_ACCEPTED = 1, 26177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek PSK_RADIUS_REQUIRED = 2 26277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek } wpa_psk_radius; 26377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_pairwise; 26477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_group; 26577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_group_rekey; 26677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_strict_rekey; 26777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_gmk_rekey; 26877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wpa_ptk_rekey; 26977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int rsn_pairwise; 27077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int rsn_preauth; 27177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *rsn_preauth_interfaces; 27277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int peerkey; 27377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 27477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifdef CONFIG_IEEE80211R 27577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek /* IEEE 802.11r - Fast BSS Transition */ 27677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN]; 27777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 r1_key_holder[FT_R1KH_ID_LEN]; 27877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u32 r0_key_lifetime; 27977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u32 reassociation_deadline; 28077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct ft_remote_r0kh *r0kh_list; 28177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct ft_remote_r1kh *r1kh_list; 28277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int pmk_r1_push; 28377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ft_over_ds; 28477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#endif /* CONFIG_IEEE80211R */ 28577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 28677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *ctrl_interface; /* directory for UNIX domain sockets */ 28777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#ifndef CONFIG_NATIVE_WINDOWS 28877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek gid_t ctrl_interface_gid; 28977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#endif /* CONFIG_NATIVE_WINDOWS */ 29077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ctrl_interface_gid_set; 29177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 29277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *ca_cert; 29377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *server_cert; 29477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *private_key; 29577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *private_key_passwd; 29677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int check_crl; 29777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *dh_file; 29877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *pac_opaque_encr_key; 29977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u8 *eap_fast_a_id; 30077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek size_t eap_fast_a_id_len; 30177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *eap_fast_a_id_info; 30277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eap_fast_prov; 30377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int pac_key_lifetime; 30477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int pac_key_refresh_time; 30577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int eap_sim_aka_result_ind; 30677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int tnc; 30777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int fragment_size; 30877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u16 pwd_group; 30977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 31077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *radius_server_clients; 31177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int radius_server_auth_port; 31277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int radius_server_ipv6; 31377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 31477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek char *test_socket; /* UNIX domain socket path for driver_test */ 31577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 31677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int use_pae_group_addr; /* Whether to send EAPOL frames to PAE group 31777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * address instead of individual address 31877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * (for driver_wired.c). 31977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek */ 32077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 32177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ap_max_inactivity; 32277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int ignore_broadcast_ssid; 32377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 32477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wmm_enabled; 32577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int wmm_uapsd; 32677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 32777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek struct hostapd_vlan *vlan, *vlan_tail; 32877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 32977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek macaddr bssid; 33077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 33177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek /* 33277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * Maximum listen interval that STAs can use when associating with this 33377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * BSS. If a STA tries to use larger value, the association will be 33477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * denied with status code 51. 33577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek */ 33677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek u16 max_listen_interval; 33777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 33877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek int disable_pmksa_caching; 339 int okc; /* Opportunistic Key Caching */ 340 341 int wps_state; 342#ifdef CONFIG_WPS 343 int ap_setup_locked; 344 u8 uuid[16]; 345 char *wps_pin_requests; 346 char *device_name; 347 char *manufacturer; 348 char *model_name; 349 char *model_number; 350 char *serial_number; 351 u8 device_type[WPS_DEV_TYPE_LEN]; 352 char *config_methods; 353 u8 os_version[4]; 354 char *ap_pin; 355 int skip_cred_build; 356 u8 *extra_cred; 357 size_t extra_cred_len; 358 int wps_cred_processing; 359 u8 *ap_settings; 360 size_t ap_settings_len; 361 char *upnp_iface; 362 char *friendly_name; 363 char *manufacturer_url; 364 char *model_description; 365 char *model_url; 366 char *upc; 367 struct wpabuf *wps_vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; 368 int wps_nfc_dev_pw_id; 369 struct wpabuf *wps_nfc_dh_pubkey; 370 struct wpabuf *wps_nfc_dh_privkey; 371 struct wpabuf *wps_nfc_dev_pw; 372#endif /* CONFIG_WPS */ 373 int pbc_in_m1; 374 375#define P2P_ENABLED BIT(0) 376#define P2P_GROUP_OWNER BIT(1) 377#define P2P_GROUP_FORMATION BIT(2) 378#define P2P_MANAGE BIT(3) 379#define P2P_ALLOW_CROSS_CONNECTION BIT(4) 380 int p2p; 381 382 int disassoc_low_ack; 383 int skip_inactivity_poll; 384 385#define TDLS_PROHIBIT BIT(0) 386#define TDLS_PROHIBIT_CHAN_SWITCH BIT(1) 387 int tdls; 388 int disable_11n; 389 int disable_11ac; 390 391 /* IEEE 802.11v */ 392 int time_advertisement; 393 char *time_zone; 394 int wnm_sleep_mode; 395 int bss_transition; 396 397 /* IEEE 802.11u - Interworking */ 398 int interworking; 399 int access_network_type; 400 int internet; 401 int asra; 402 int esr; 403 int uesa; 404 int venue_info_set; 405 u8 venue_group; 406 u8 venue_type; 407 u8 hessid[ETH_ALEN]; 408 409 /* IEEE 802.11u - Roaming Consortium list */ 410 unsigned int roaming_consortium_count; 411 struct hostapd_roaming_consortium *roaming_consortium; 412 413 /* IEEE 802.11u - Venue Name duples */ 414 unsigned int venue_name_count; 415 struct hostapd_lang_string *venue_name; 416 417 /* IEEE 802.11u - Network Authentication Type */ 418 u8 *network_auth_type; 419 size_t network_auth_type_len; 420 421 /* IEEE 802.11u - IP Address Type Availability */ 422 u8 ipaddr_type_availability; 423 u8 ipaddr_type_configured; 424 425 /* IEEE 802.11u - 3GPP Cellular Network */ 426 u8 *anqp_3gpp_cell_net; 427 size_t anqp_3gpp_cell_net_len; 428 429 /* IEEE 802.11u - Domain Name */ 430 u8 *domain_name; 431 size_t domain_name_len; 432 433 unsigned int nai_realm_count; 434 struct hostapd_nai_realm_data *nai_realm_data; 435 436 u16 gas_comeback_delay; 437 int gas_frag_limit; 438 439#ifdef CONFIG_HS20 440 int hs20; 441 int disable_dgaf; 442 unsigned int hs20_oper_friendly_name_count; 443 struct hostapd_lang_string *hs20_oper_friendly_name; 444 u8 *hs20_wan_metrics; 445 u8 *hs20_connection_capability; 446 size_t hs20_connection_capability_len; 447 u8 *hs20_operating_class; 448 u8 hs20_operating_class_len; 449#endif /* CONFIG_HS20 */ 450 451 u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */ 452 453#ifdef CONFIG_RADIUS_TEST 454 char *dump_msk_file; 455#endif /* CONFIG_RADIUS_TEST */ 456 457 struct wpabuf *vendor_elements; 458 459 unsigned int sae_anti_clogging_threshold; 460 int *sae_groups; 461}; 462 463 464/** 465 * struct hostapd_config - Per-radio interface configuration 466 */ 467struct hostapd_config { 468 struct hostapd_bss_config *bss, *last_bss; 469 size_t num_bss; 470 471 u16 beacon_int; 472 int rts_threshold; 473 int fragm_threshold; 474 u8 send_probe_response; 475 u8 channel; 476 enum hostapd_hw_mode hw_mode; /* HOSTAPD_MODE_IEEE80211A, .. */ 477 enum { 478 LONG_PREAMBLE = 0, 479 SHORT_PREAMBLE = 1 480 } preamble; 481 482 int *supported_rates; 483 int *basic_rates; 484 485 const struct wpa_driver_ops *driver; 486 487 int ap_table_max_size; 488 int ap_table_expiration_time; 489 490 char country[3]; /* first two octets: country code as described in 491 * ISO/IEC 3166-1. Third octet: 492 * ' ' (ascii 32): all environments 493 * 'O': Outdoor environemnt only 494 * 'I': Indoor environment only 495 */ 496 497 int ieee80211d; 498 499 struct hostapd_tx_queue_params tx_queue[NUM_TX_QUEUES]; 500 501 /* 502 * WMM AC parameters, in same order as 802.1D, i.e. 503 * 0 = BE (best effort) 504 * 1 = BK (background) 505 * 2 = VI (video) 506 * 3 = VO (voice) 507 */ 508 struct hostapd_wmm_ac_params wmm_ac_params[4]; 509 510 int ht_op_mode_fixed; 511 u16 ht_capab; 512 int ieee80211n; 513 int secondary_channel; 514 int require_ht; 515 u32 vht_capab; 516 int ieee80211ac; 517 int require_vht; 518 u8 vht_oper_chwidth; 519 u8 vht_oper_centr_freq_seg0_idx; 520 u8 vht_oper_centr_freq_seg1_idx; 521}; 522 523 524int hostapd_mac_comp(const void *a, const void *b); 525int hostapd_mac_comp_empty(const void *a); 526struct hostapd_config * hostapd_config_defaults(void); 527void hostapd_config_defaults_bss(struct hostapd_bss_config *bss); 528void hostapd_config_free(struct hostapd_config *conf); 529int hostapd_maclist_found(struct mac_acl_entry *list, int num_entries, 530 const u8 *addr, int *vlan_id); 531int hostapd_rate_found(int *list, int rate); 532int hostapd_wep_key_cmp(struct hostapd_wep_keys *a, 533 struct hostapd_wep_keys *b); 534const u8 * hostapd_get_psk(const struct hostapd_bss_config *conf, 535 const u8 *addr, const u8 *prev_psk); 536int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf); 537const char * hostapd_get_vlan_id_ifname(struct hostapd_vlan *vlan, 538 int vlan_id); 539struct hostapd_radius_attr * 540hostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type); 541 542#endif /* HOSTAPD_CONFIG_H */ 543