139beb93cSSam Leffler /* 239beb93cSSam Leffler * WPA Supplicant - Common definitions 385732ac8SCy Schubert * Copyright (c) 2004-2018, Jouni Malinen <j@w1.fi> 439beb93cSSam Leffler * 5f05cddf9SRui Paulo * This software may be distributed under the terms of the BSD license. 6f05cddf9SRui Paulo * See README for more details. 739beb93cSSam Leffler */ 839beb93cSSam Leffler 939beb93cSSam Leffler #ifndef DEFS_H 1039beb93cSSam Leffler #define DEFS_H 1139beb93cSSam Leffler 1239beb93cSSam Leffler #define WPA_CIPHER_NONE BIT(0) 1339beb93cSSam Leffler #define WPA_CIPHER_WEP40 BIT(1) 1439beb93cSSam Leffler #define WPA_CIPHER_WEP104 BIT(2) 1539beb93cSSam Leffler #define WPA_CIPHER_TKIP BIT(3) 1639beb93cSSam Leffler #define WPA_CIPHER_CCMP BIT(4) 1739beb93cSSam Leffler #define WPA_CIPHER_AES_128_CMAC BIT(5) 18f05cddf9SRui Paulo #define WPA_CIPHER_GCMP BIT(6) 19f05cddf9SRui Paulo #define WPA_CIPHER_SMS4 BIT(7) 205b9c547cSRui Paulo #define WPA_CIPHER_GCMP_256 BIT(8) 215b9c547cSRui Paulo #define WPA_CIPHER_CCMP_256 BIT(9) 225b9c547cSRui Paulo #define WPA_CIPHER_BIP_GMAC_128 BIT(11) 235b9c547cSRui Paulo #define WPA_CIPHER_BIP_GMAC_256 BIT(12) 245b9c547cSRui Paulo #define WPA_CIPHER_BIP_CMAC_256 BIT(13) 255b9c547cSRui Paulo #define WPA_CIPHER_GTK_NOT_USED BIT(14) 2639beb93cSSam Leffler 2739beb93cSSam Leffler #define WPA_KEY_MGMT_IEEE8021X BIT(0) 2839beb93cSSam Leffler #define WPA_KEY_MGMT_PSK BIT(1) 2939beb93cSSam Leffler #define WPA_KEY_MGMT_NONE BIT(2) 3039beb93cSSam Leffler #define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3) 3139beb93cSSam Leffler #define WPA_KEY_MGMT_WPA_NONE BIT(4) 3239beb93cSSam Leffler #define WPA_KEY_MGMT_FT_IEEE8021X BIT(5) 3339beb93cSSam Leffler #define WPA_KEY_MGMT_FT_PSK BIT(6) 3439beb93cSSam Leffler #define WPA_KEY_MGMT_IEEE8021X_SHA256 BIT(7) 3539beb93cSSam Leffler #define WPA_KEY_MGMT_PSK_SHA256 BIT(8) 3639beb93cSSam Leffler #define WPA_KEY_MGMT_WPS BIT(9) 37f05cddf9SRui Paulo #define WPA_KEY_MGMT_SAE BIT(10) 38f05cddf9SRui Paulo #define WPA_KEY_MGMT_FT_SAE BIT(11) 39f05cddf9SRui Paulo #define WPA_KEY_MGMT_WAPI_PSK BIT(12) 40f05cddf9SRui Paulo #define WPA_KEY_MGMT_WAPI_CERT BIT(13) 41f05cddf9SRui Paulo #define WPA_KEY_MGMT_CCKM BIT(14) 425b9c547cSRui Paulo #define WPA_KEY_MGMT_OSEN BIT(15) 435b9c547cSRui Paulo #define WPA_KEY_MGMT_IEEE8021X_SUITE_B BIT(16) 445b9c547cSRui Paulo #define WPA_KEY_MGMT_IEEE8021X_SUITE_B_192 BIT(17) 4585732ac8SCy Schubert #define WPA_KEY_MGMT_FILS_SHA256 BIT(18) 4685732ac8SCy Schubert #define WPA_KEY_MGMT_FILS_SHA384 BIT(19) 4785732ac8SCy Schubert #define WPA_KEY_MGMT_FT_FILS_SHA256 BIT(20) 4885732ac8SCy Schubert #define WPA_KEY_MGMT_FT_FILS_SHA384 BIT(21) 4985732ac8SCy Schubert #define WPA_KEY_MGMT_OWE BIT(22) 5085732ac8SCy Schubert #define WPA_KEY_MGMT_DPP BIT(23) 5185732ac8SCy Schubert #define WPA_KEY_MGMT_FT_IEEE8021X_SHA384 BIT(24) 52c1d255d3SCy Schubert #define WPA_KEY_MGMT_PASN BIT(25) 53*a90b9d01SCy Schubert #define WPA_KEY_MGMT_SAE_EXT_KEY BIT(26) 54*a90b9d01SCy Schubert #define WPA_KEY_MGMT_FT_SAE_EXT_KEY BIT(27) 55*a90b9d01SCy Schubert #define WPA_KEY_MGMT_IEEE8021X_SHA384 BIT(28) 56c1d255d3SCy Schubert 5739beb93cSSam Leffler 584bc52338SCy Schubert #define WPA_KEY_MGMT_FT (WPA_KEY_MGMT_FT_PSK | \ 594bc52338SCy Schubert WPA_KEY_MGMT_FT_IEEE8021X | \ 604bc52338SCy Schubert WPA_KEY_MGMT_FT_IEEE8021X_SHA384 | \ 614bc52338SCy Schubert WPA_KEY_MGMT_FT_SAE | \ 62*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE_EXT_KEY | \ 634bc52338SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA256 | \ 644bc52338SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA384) 654bc52338SCy Schubert 6639beb93cSSam Leffler static inline int wpa_key_mgmt_wpa_ieee8021x(int akm) 6739beb93cSSam Leffler { 68f05cddf9SRui Paulo return !!(akm & (WPA_KEY_MGMT_IEEE8021X | 69f05cddf9SRui Paulo WPA_KEY_MGMT_FT_IEEE8021X | 7085732ac8SCy Schubert WPA_KEY_MGMT_FT_IEEE8021X_SHA384 | 71f05cddf9SRui Paulo WPA_KEY_MGMT_CCKM | 725b9c547cSRui Paulo WPA_KEY_MGMT_OSEN | 735b9c547cSRui Paulo WPA_KEY_MGMT_IEEE8021X_SHA256 | 745b9c547cSRui Paulo WPA_KEY_MGMT_IEEE8021X_SUITE_B | 7585732ac8SCy Schubert WPA_KEY_MGMT_IEEE8021X_SUITE_B_192 | 7685732ac8SCy Schubert WPA_KEY_MGMT_FILS_SHA256 | 7785732ac8SCy Schubert WPA_KEY_MGMT_FILS_SHA384 | 7885732ac8SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA256 | 79*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA384 | 80*a90b9d01SCy Schubert WPA_KEY_MGMT_IEEE8021X_SHA384)); 8139beb93cSSam Leffler } 8239beb93cSSam Leffler 83c1d255d3SCy Schubert static inline int wpa_key_mgmt_wpa_psk_no_sae(int akm) 84c1d255d3SCy Schubert { 85c1d255d3SCy Schubert return !!(akm & (WPA_KEY_MGMT_PSK | 86c1d255d3SCy Schubert WPA_KEY_MGMT_FT_PSK | 87c1d255d3SCy Schubert WPA_KEY_MGMT_PSK_SHA256)); 88c1d255d3SCy Schubert } 89c1d255d3SCy Schubert 9039beb93cSSam Leffler static inline int wpa_key_mgmt_wpa_psk(int akm) 9139beb93cSSam Leffler { 92f05cddf9SRui Paulo return !!(akm & (WPA_KEY_MGMT_PSK | 93f05cddf9SRui Paulo WPA_KEY_MGMT_FT_PSK | 94f05cddf9SRui Paulo WPA_KEY_MGMT_PSK_SHA256 | 955b9c547cSRui Paulo WPA_KEY_MGMT_SAE | 96*a90b9d01SCy Schubert WPA_KEY_MGMT_SAE_EXT_KEY | 97*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE | 98*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE_EXT_KEY)); 9939beb93cSSam Leffler } 10039beb93cSSam Leffler 10139beb93cSSam Leffler static inline int wpa_key_mgmt_ft(int akm) 10239beb93cSSam Leffler { 1034bc52338SCy Schubert return !!(akm & WPA_KEY_MGMT_FT); 1044bc52338SCy Schubert } 1054bc52338SCy Schubert 1064bc52338SCy Schubert static inline int wpa_key_mgmt_only_ft(int akm) 1074bc52338SCy Schubert { 1084bc52338SCy Schubert int ft = wpa_key_mgmt_ft(akm); 1094bc52338SCy Schubert akm &= ~WPA_KEY_MGMT_FT; 1104bc52338SCy Schubert return ft && !akm; 11185732ac8SCy Schubert } 11285732ac8SCy Schubert 11385732ac8SCy Schubert static inline int wpa_key_mgmt_ft_psk(int akm) 11485732ac8SCy Schubert { 11585732ac8SCy Schubert return !!(akm & WPA_KEY_MGMT_FT_PSK); 116f05cddf9SRui Paulo } 117f05cddf9SRui Paulo 118f05cddf9SRui Paulo static inline int wpa_key_mgmt_sae(int akm) 119f05cddf9SRui Paulo { 120f05cddf9SRui Paulo return !!(akm & (WPA_KEY_MGMT_SAE | 121*a90b9d01SCy Schubert WPA_KEY_MGMT_SAE_EXT_KEY | 122*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE | 123*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE_EXT_KEY)); 124*a90b9d01SCy Schubert } 125*a90b9d01SCy Schubert 126*a90b9d01SCy Schubert static inline int wpa_key_mgmt_sae_ext_key(int akm) 127*a90b9d01SCy Schubert { 128*a90b9d01SCy Schubert return !!(akm & (WPA_KEY_MGMT_SAE_EXT_KEY | 129*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_SAE_EXT_KEY)); 13039beb93cSSam Leffler } 13139beb93cSSam Leffler 13285732ac8SCy Schubert static inline int wpa_key_mgmt_fils(int akm) 13385732ac8SCy Schubert { 13485732ac8SCy Schubert return !!(akm & (WPA_KEY_MGMT_FILS_SHA256 | 13585732ac8SCy Schubert WPA_KEY_MGMT_FILS_SHA384 | 13685732ac8SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA256 | 13785732ac8SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA384)); 13885732ac8SCy Schubert } 13985732ac8SCy Schubert 14039beb93cSSam Leffler static inline int wpa_key_mgmt_sha256(int akm) 14139beb93cSSam Leffler { 142*a90b9d01SCy Schubert return !!(akm & (WPA_KEY_MGMT_FT_IEEE8021X | 143*a90b9d01SCy Schubert WPA_KEY_MGMT_PSK_SHA256 | 1445b9c547cSRui Paulo WPA_KEY_MGMT_IEEE8021X_SHA256 | 14585732ac8SCy Schubert WPA_KEY_MGMT_SAE | 14685732ac8SCy Schubert WPA_KEY_MGMT_FT_SAE | 1475b9c547cSRui Paulo WPA_KEY_MGMT_OSEN | 14885732ac8SCy Schubert WPA_KEY_MGMT_IEEE8021X_SUITE_B | 14985732ac8SCy Schubert WPA_KEY_MGMT_FILS_SHA256 | 15085732ac8SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA256)); 1515b9c547cSRui Paulo } 1525b9c547cSRui Paulo 1535b9c547cSRui Paulo static inline int wpa_key_mgmt_sha384(int akm) 1545b9c547cSRui Paulo { 15585732ac8SCy Schubert return !!(akm & (WPA_KEY_MGMT_IEEE8021X_SUITE_B_192 | 15685732ac8SCy Schubert WPA_KEY_MGMT_FT_IEEE8021X_SHA384 | 15785732ac8SCy Schubert WPA_KEY_MGMT_FILS_SHA384 | 158*a90b9d01SCy Schubert WPA_KEY_MGMT_FT_FILS_SHA384 | 159*a90b9d01SCy Schubert WPA_KEY_MGMT_IEEE8021X_SHA384)); 1605b9c547cSRui Paulo } 1615b9c547cSRui Paulo 1625b9c547cSRui Paulo static inline int wpa_key_mgmt_suite_b(int akm) 1635b9c547cSRui Paulo { 1645b9c547cSRui Paulo return !!(akm & (WPA_KEY_MGMT_IEEE8021X_SUITE_B | 1655b9c547cSRui Paulo WPA_KEY_MGMT_IEEE8021X_SUITE_B_192)); 166f05cddf9SRui Paulo } 167f05cddf9SRui Paulo 168f05cddf9SRui Paulo static inline int wpa_key_mgmt_wpa(int akm) 169f05cddf9SRui Paulo { 170f05cddf9SRui Paulo return wpa_key_mgmt_wpa_ieee8021x(akm) || 1715b9c547cSRui Paulo wpa_key_mgmt_wpa_psk(akm) || 17285732ac8SCy Schubert wpa_key_mgmt_fils(akm) || 17385732ac8SCy Schubert wpa_key_mgmt_sae(akm) || 17485732ac8SCy Schubert akm == WPA_KEY_MGMT_OWE || 17585732ac8SCy Schubert akm == WPA_KEY_MGMT_DPP; 176f05cddf9SRui Paulo } 177f05cddf9SRui Paulo 178f05cddf9SRui Paulo static inline int wpa_key_mgmt_wpa_any(int akm) 179f05cddf9SRui Paulo { 180f05cddf9SRui Paulo return wpa_key_mgmt_wpa(akm) || (akm & WPA_KEY_MGMT_WPA_NONE); 181f05cddf9SRui Paulo } 182f05cddf9SRui Paulo 183f05cddf9SRui Paulo static inline int wpa_key_mgmt_cckm(int akm) 184f05cddf9SRui Paulo { 185f05cddf9SRui Paulo return akm == WPA_KEY_MGMT_CCKM; 18639beb93cSSam Leffler } 18739beb93cSSam Leffler 188*a90b9d01SCy Schubert static inline int wpa_key_mgmt_cross_akm(int akm) 189*a90b9d01SCy Schubert { 190*a90b9d01SCy Schubert return !!(akm & (WPA_KEY_MGMT_PSK | 191*a90b9d01SCy Schubert WPA_KEY_MGMT_PSK_SHA256 | 192*a90b9d01SCy Schubert WPA_KEY_MGMT_SAE | 193*a90b9d01SCy Schubert WPA_KEY_MGMT_SAE_EXT_KEY)); 194*a90b9d01SCy Schubert } 19539beb93cSSam Leffler 19639beb93cSSam Leffler #define WPA_PROTO_WPA BIT(0) 19739beb93cSSam Leffler #define WPA_PROTO_RSN BIT(1) 198f05cddf9SRui Paulo #define WPA_PROTO_WAPI BIT(2) 1995b9c547cSRui Paulo #define WPA_PROTO_OSEN BIT(3) 20039beb93cSSam Leffler 20139beb93cSSam Leffler #define WPA_AUTH_ALG_OPEN BIT(0) 20239beb93cSSam Leffler #define WPA_AUTH_ALG_SHARED BIT(1) 20339beb93cSSam Leffler #define WPA_AUTH_ALG_LEAP BIT(2) 204e28a4053SRui Paulo #define WPA_AUTH_ALG_FT BIT(3) 205f05cddf9SRui Paulo #define WPA_AUTH_ALG_SAE BIT(4) 20685732ac8SCy Schubert #define WPA_AUTH_ALG_FILS BIT(5) 20785732ac8SCy Schubert #define WPA_AUTH_ALG_FILS_SK_PFS BIT(6) 20839beb93cSSam Leffler 20985732ac8SCy Schubert static inline int wpa_auth_alg_fils(int alg) 21085732ac8SCy Schubert { 21185732ac8SCy Schubert return !!(alg & (WPA_AUTH_ALG_FILS | WPA_AUTH_ALG_FILS_SK_PFS)); 21285732ac8SCy Schubert } 21339beb93cSSam Leffler 214e28a4053SRui Paulo enum wpa_alg { 215e28a4053SRui Paulo WPA_ALG_NONE, 216e28a4053SRui Paulo WPA_ALG_WEP, 217e28a4053SRui Paulo WPA_ALG_TKIP, 218e28a4053SRui Paulo WPA_ALG_CCMP, 219c1d255d3SCy Schubert WPA_ALG_BIP_CMAC_128, 220f05cddf9SRui Paulo WPA_ALG_GCMP, 221f05cddf9SRui Paulo WPA_ALG_SMS4, 2225b9c547cSRui Paulo WPA_ALG_KRK, 2235b9c547cSRui Paulo WPA_ALG_GCMP_256, 2245b9c547cSRui Paulo WPA_ALG_CCMP_256, 2255b9c547cSRui Paulo WPA_ALG_BIP_GMAC_128, 2265b9c547cSRui Paulo WPA_ALG_BIP_GMAC_256, 2275b9c547cSRui Paulo WPA_ALG_BIP_CMAC_256 228e28a4053SRui Paulo }; 22939beb93cSSam Leffler 230c1d255d3SCy Schubert static inline int wpa_alg_bip(enum wpa_alg alg) 231c1d255d3SCy Schubert { 232c1d255d3SCy Schubert return alg == WPA_ALG_BIP_CMAC_128 || 233c1d255d3SCy Schubert alg == WPA_ALG_BIP_GMAC_128 || 234c1d255d3SCy Schubert alg == WPA_ALG_BIP_GMAC_256 || 235c1d255d3SCy Schubert alg == WPA_ALG_BIP_CMAC_256; 236c1d255d3SCy Schubert } 237c1d255d3SCy Schubert 23839beb93cSSam Leffler /** 23939beb93cSSam Leffler * enum wpa_states - wpa_supplicant state 24039beb93cSSam Leffler * 24139beb93cSSam Leffler * These enumeration values are used to indicate the current wpa_supplicant 24239beb93cSSam Leffler * state (wpa_s->wpa_state). The current state can be retrieved with 24339beb93cSSam Leffler * wpa_supplicant_get_state() function and the state can be changed by calling 24439beb93cSSam Leffler * wpa_supplicant_set_state(). In WPA state machine (wpa.c and preauth.c), the 24539beb93cSSam Leffler * wrapper functions wpa_sm_get_state() and wpa_sm_set_state() should be used 24639beb93cSSam Leffler * to access the state variable. 24739beb93cSSam Leffler */ 248e28a4053SRui Paulo enum wpa_states { 24939beb93cSSam Leffler /** 25039beb93cSSam Leffler * WPA_DISCONNECTED - Disconnected state 25139beb93cSSam Leffler * 25239beb93cSSam Leffler * This state indicates that client is not associated, but is likely to 25339beb93cSSam Leffler * start looking for an access point. This state is entered when a 25439beb93cSSam Leffler * connection is lost. 25539beb93cSSam Leffler */ 25639beb93cSSam Leffler WPA_DISCONNECTED, 25739beb93cSSam Leffler 25839beb93cSSam Leffler /** 259f05cddf9SRui Paulo * WPA_INTERFACE_DISABLED - Interface disabled 260f05cddf9SRui Paulo * 261f05cddf9SRui Paulo * This state is entered if the network interface is disabled, e.g., 262f05cddf9SRui Paulo * due to rfkill. wpa_supplicant refuses any new operations that would 263f05cddf9SRui Paulo * use the radio until the interface has been enabled. 264f05cddf9SRui Paulo */ 265f05cddf9SRui Paulo WPA_INTERFACE_DISABLED, 266f05cddf9SRui Paulo 267f05cddf9SRui Paulo /** 26839beb93cSSam Leffler * WPA_INACTIVE - Inactive state (wpa_supplicant disabled) 26939beb93cSSam Leffler * 27039beb93cSSam Leffler * This state is entered if there are no enabled networks in the 27139beb93cSSam Leffler * configuration. wpa_supplicant is not trying to associate with a new 27239beb93cSSam Leffler * network and external interaction (e.g., ctrl_iface call to add or 27339beb93cSSam Leffler * enable a network) is needed to start association. 27439beb93cSSam Leffler */ 27539beb93cSSam Leffler WPA_INACTIVE, 27639beb93cSSam Leffler 27739beb93cSSam Leffler /** 27839beb93cSSam Leffler * WPA_SCANNING - Scanning for a network 27939beb93cSSam Leffler * 28039beb93cSSam Leffler * This state is entered when wpa_supplicant starts scanning for a 28139beb93cSSam Leffler * network. 28239beb93cSSam Leffler */ 28339beb93cSSam Leffler WPA_SCANNING, 28439beb93cSSam Leffler 28539beb93cSSam Leffler /** 286e28a4053SRui Paulo * WPA_AUTHENTICATING - Trying to authenticate with a BSS/SSID 287e28a4053SRui Paulo * 288e28a4053SRui Paulo * This state is entered when wpa_supplicant has found a suitable BSS 289e28a4053SRui Paulo * to authenticate with and the driver is configured to try to 290e28a4053SRui Paulo * authenticate with this BSS. This state is used only with drivers 291e28a4053SRui Paulo * that use wpa_supplicant as the SME. 292e28a4053SRui Paulo */ 293e28a4053SRui Paulo WPA_AUTHENTICATING, 294e28a4053SRui Paulo 295e28a4053SRui Paulo /** 29639beb93cSSam Leffler * WPA_ASSOCIATING - Trying to associate with a BSS/SSID 29739beb93cSSam Leffler * 29839beb93cSSam Leffler * This state is entered when wpa_supplicant has found a suitable BSS 29939beb93cSSam Leffler * to associate with and the driver is configured to try to associate 30039beb93cSSam Leffler * with this BSS in ap_scan=1 mode. When using ap_scan=2 mode, this 30139beb93cSSam Leffler * state is entered when the driver is configured to try to associate 30239beb93cSSam Leffler * with a network using the configured SSID and security policy. 30339beb93cSSam Leffler */ 30439beb93cSSam Leffler WPA_ASSOCIATING, 30539beb93cSSam Leffler 30639beb93cSSam Leffler /** 30739beb93cSSam Leffler * WPA_ASSOCIATED - Association completed 30839beb93cSSam Leffler * 30939beb93cSSam Leffler * This state is entered when the driver reports that association has 31039beb93cSSam Leffler * been successfully completed with an AP. If IEEE 802.1X is used 31139beb93cSSam Leffler * (with or without WPA/WPA2), wpa_supplicant remains in this state 31239beb93cSSam Leffler * until the IEEE 802.1X/EAPOL authentication has been completed. 31339beb93cSSam Leffler */ 31439beb93cSSam Leffler WPA_ASSOCIATED, 31539beb93cSSam Leffler 31639beb93cSSam Leffler /** 31739beb93cSSam Leffler * WPA_4WAY_HANDSHAKE - WPA 4-Way Key Handshake in progress 31839beb93cSSam Leffler * 31939beb93cSSam Leffler * This state is entered when WPA/WPA2 4-Way Handshake is started. In 32039beb93cSSam Leffler * case of WPA-PSK, this happens when receiving the first EAPOL-Key 32139beb93cSSam Leffler * frame after association. In case of WPA-EAP, this state is entered 32239beb93cSSam Leffler * when the IEEE 802.1X/EAPOL authentication has been completed. 32339beb93cSSam Leffler */ 32439beb93cSSam Leffler WPA_4WAY_HANDSHAKE, 32539beb93cSSam Leffler 32639beb93cSSam Leffler /** 32739beb93cSSam Leffler * WPA_GROUP_HANDSHAKE - WPA Group Key Handshake in progress 32839beb93cSSam Leffler * 32939beb93cSSam Leffler * This state is entered when 4-Way Key Handshake has been completed 33039beb93cSSam Leffler * (i.e., when the supplicant sends out message 4/4) and when Group 33139beb93cSSam Leffler * Key rekeying is started by the AP (i.e., when supplicant receives 33239beb93cSSam Leffler * message 1/2). 33339beb93cSSam Leffler */ 33439beb93cSSam Leffler WPA_GROUP_HANDSHAKE, 33539beb93cSSam Leffler 33639beb93cSSam Leffler /** 33739beb93cSSam Leffler * WPA_COMPLETED - All authentication completed 33839beb93cSSam Leffler * 33939beb93cSSam Leffler * This state is entered when the full authentication process is 34039beb93cSSam Leffler * completed. In case of WPA2, this happens when the 4-Way Handshake is 34139beb93cSSam Leffler * successfully completed. With WPA, this state is entered after the 34239beb93cSSam Leffler * Group Key Handshake; with IEEE 802.1X (non-WPA) connection is 34339beb93cSSam Leffler * completed after dynamic keys are received (or if not used, after 34439beb93cSSam Leffler * the EAP authentication has been completed). With static WEP keys and 34539beb93cSSam Leffler * plaintext connections, this state is entered when an association 34639beb93cSSam Leffler * has been completed. 34739beb93cSSam Leffler * 34839beb93cSSam Leffler * This state indicates that the supplicant has completed its 34939beb93cSSam Leffler * processing for the association phase and that data connection is 35039beb93cSSam Leffler * fully configured. 35139beb93cSSam Leffler */ 35239beb93cSSam Leffler WPA_COMPLETED 353e28a4053SRui Paulo }; 35439beb93cSSam Leffler 35539beb93cSSam Leffler #define MLME_SETPROTECTION_PROTECT_TYPE_NONE 0 35639beb93cSSam Leffler #define MLME_SETPROTECTION_PROTECT_TYPE_RX 1 35739beb93cSSam Leffler #define MLME_SETPROTECTION_PROTECT_TYPE_TX 2 35839beb93cSSam Leffler #define MLME_SETPROTECTION_PROTECT_TYPE_RX_TX 3 35939beb93cSSam Leffler 36039beb93cSSam Leffler #define MLME_SETPROTECTION_KEY_TYPE_GROUP 0 36139beb93cSSam Leffler #define MLME_SETPROTECTION_KEY_TYPE_PAIRWISE 1 36239beb93cSSam Leffler 363e28a4053SRui Paulo 364e28a4053SRui Paulo /** 365e28a4053SRui Paulo * enum mfp_options - Management frame protection (IEEE 802.11w) options 366e28a4053SRui Paulo */ 367e28a4053SRui Paulo enum mfp_options { 368e28a4053SRui Paulo NO_MGMT_FRAME_PROTECTION = 0, 369e28a4053SRui Paulo MGMT_FRAME_PROTECTION_OPTIONAL = 1, 370f05cddf9SRui Paulo MGMT_FRAME_PROTECTION_REQUIRED = 2, 371e28a4053SRui Paulo }; 372f05cddf9SRui Paulo #define MGMT_FRAME_PROTECTION_DEFAULT 3 373e28a4053SRui Paulo 374e28a4053SRui Paulo /** 375e28a4053SRui Paulo * enum hostapd_hw_mode - Hardware mode 376e28a4053SRui Paulo */ 377e28a4053SRui Paulo enum hostapd_hw_mode { 378e28a4053SRui Paulo HOSTAPD_MODE_IEEE80211B, 379e28a4053SRui Paulo HOSTAPD_MODE_IEEE80211G, 380e28a4053SRui Paulo HOSTAPD_MODE_IEEE80211A, 381f05cddf9SRui Paulo HOSTAPD_MODE_IEEE80211AD, 382325151a3SRui Paulo HOSTAPD_MODE_IEEE80211ANY, 383e28a4053SRui Paulo NUM_HOSTAPD_MODES 384e28a4053SRui Paulo }; 385e28a4053SRui Paulo 386f05cddf9SRui Paulo /** 387f05cddf9SRui Paulo * enum wpa_ctrl_req_type - Control interface request types 388f05cddf9SRui Paulo */ 389f05cddf9SRui Paulo enum wpa_ctrl_req_type { 390f05cddf9SRui Paulo WPA_CTRL_REQ_UNKNOWN, 391f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_IDENTITY, 392f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_PASSWORD, 393f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_NEW_PASSWORD, 394f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_PIN, 395f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_OTP, 396f05cddf9SRui Paulo WPA_CTRL_REQ_EAP_PASSPHRASE, 3975b9c547cSRui Paulo WPA_CTRL_REQ_SIM, 398325151a3SRui Paulo WPA_CTRL_REQ_PSK_PASSPHRASE, 399780fb4a2SCy Schubert WPA_CTRL_REQ_EXT_CERT_CHECK, 400f05cddf9SRui Paulo NUM_WPA_CTRL_REQS 401f05cddf9SRui Paulo }; 402f05cddf9SRui Paulo 403f05cddf9SRui Paulo /* Maximum number of EAP methods to store for EAP server user information */ 404f05cddf9SRui Paulo #define EAP_MAX_METHODS 8 405f05cddf9SRui Paulo 4065b9c547cSRui Paulo enum mesh_plink_state { 407780fb4a2SCy Schubert PLINK_IDLE = 1, 408780fb4a2SCy Schubert PLINK_OPN_SNT, 409780fb4a2SCy Schubert PLINK_OPN_RCVD, 4105b9c547cSRui Paulo PLINK_CNF_RCVD, 4115b9c547cSRui Paulo PLINK_ESTAB, 4125b9c547cSRui Paulo PLINK_HOLDING, 413780fb4a2SCy Schubert PLINK_BLOCKED, /* not defined in the IEEE 802.11 standard */ 4145b9c547cSRui Paulo }; 4155b9c547cSRui Paulo 416325151a3SRui Paulo enum set_band { 417c1d255d3SCy Schubert WPA_SETBAND_AUTO = 0, 418c1d255d3SCy Schubert WPA_SETBAND_5G = BIT(0), 419c1d255d3SCy Schubert WPA_SETBAND_2G = BIT(1), 420c1d255d3SCy Schubert WPA_SETBAND_6G = BIT(2), 421325151a3SRui Paulo }; 422325151a3SRui Paulo 423780fb4a2SCy Schubert enum wpa_radio_work_band { 424780fb4a2SCy Schubert BAND_2_4_GHZ = BIT(0), 425780fb4a2SCy Schubert BAND_5_GHZ = BIT(1), 426780fb4a2SCy Schubert BAND_60_GHZ = BIT(2), 427780fb4a2SCy Schubert }; 428780fb4a2SCy Schubert 42985732ac8SCy Schubert enum beacon_rate_type { 43085732ac8SCy Schubert BEACON_RATE_LEGACY, 43185732ac8SCy Schubert BEACON_RATE_HT, 432c1d255d3SCy Schubert BEACON_RATE_VHT, 433c1d255d3SCy Schubert BEACON_RATE_HE 43485732ac8SCy Schubert }; 43585732ac8SCy Schubert 43685732ac8SCy Schubert enum eap_proxy_sim_state { 43785732ac8SCy Schubert SIM_STATE_ERROR, 43885732ac8SCy Schubert }; 43985732ac8SCy Schubert 44085732ac8SCy Schubert #define OCE_STA BIT(0) 44185732ac8SCy Schubert #define OCE_STA_CFON BIT(1) 44285732ac8SCy Schubert #define OCE_AP BIT(2) 44385732ac8SCy Schubert 4444bc52338SCy Schubert /* enum chan_width - Channel width definitions */ 4454bc52338SCy Schubert enum chan_width { 4464bc52338SCy Schubert CHAN_WIDTH_20_NOHT, 4474bc52338SCy Schubert CHAN_WIDTH_20, 4484bc52338SCy Schubert CHAN_WIDTH_40, 4494bc52338SCy Schubert CHAN_WIDTH_80, 4504bc52338SCy Schubert CHAN_WIDTH_80P80, 4514bc52338SCy Schubert CHAN_WIDTH_160, 452c1d255d3SCy Schubert CHAN_WIDTH_2160, 453c1d255d3SCy Schubert CHAN_WIDTH_4320, 454c1d255d3SCy Schubert CHAN_WIDTH_6480, 455c1d255d3SCy Schubert CHAN_WIDTH_8640, 456*a90b9d01SCy Schubert CHAN_WIDTH_320, 4574bc52338SCy Schubert CHAN_WIDTH_UNKNOWN 4584bc52338SCy Schubert }; 4594bc52338SCy Schubert 460*a90b9d01SCy Schubert /* VHT/EDMG/etc. channel widths 461*a90b9d01SCy Schubert * Note: The first four values are used in hostapd.conf and as such, must 462*a90b9d01SCy Schubert * maintain their defined values. Other values are used internally. */ 463*a90b9d01SCy Schubert enum oper_chan_width { 464*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_USE_HT = 0, 465*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_80MHZ = 1, 466*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_160MHZ = 2, 467*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_80P80MHZ = 3, 468*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_2160MHZ, 469*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_4320MHZ, 470*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_6480MHZ, 471*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_8640MHZ, 472*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_40MHZ_6GHZ, 473*a90b9d01SCy Schubert CONF_OPER_CHWIDTH_320MHZ, 474*a90b9d01SCy Schubert }; 475*a90b9d01SCy Schubert 476c1d255d3SCy Schubert enum key_flag { 477c1d255d3SCy Schubert KEY_FLAG_MODIFY = BIT(0), 478c1d255d3SCy Schubert KEY_FLAG_DEFAULT = BIT(1), 479c1d255d3SCy Schubert KEY_FLAG_RX = BIT(2), 480c1d255d3SCy Schubert KEY_FLAG_TX = BIT(3), 481c1d255d3SCy Schubert KEY_FLAG_GROUP = BIT(4), 482c1d255d3SCy Schubert KEY_FLAG_PAIRWISE = BIT(5), 483c1d255d3SCy Schubert KEY_FLAG_PMK = BIT(6), 484c1d255d3SCy Schubert /* Used flag combinations */ 485c1d255d3SCy Schubert KEY_FLAG_RX_TX = KEY_FLAG_RX | KEY_FLAG_TX, 486c1d255d3SCy Schubert KEY_FLAG_GROUP_RX_TX = KEY_FLAG_GROUP | KEY_FLAG_RX_TX, 487c1d255d3SCy Schubert KEY_FLAG_GROUP_RX_TX_DEFAULT = KEY_FLAG_GROUP_RX_TX | 488c1d255d3SCy Schubert KEY_FLAG_DEFAULT, 489c1d255d3SCy Schubert KEY_FLAG_GROUP_RX = KEY_FLAG_GROUP | KEY_FLAG_RX, 490c1d255d3SCy Schubert KEY_FLAG_GROUP_TX_DEFAULT = KEY_FLAG_GROUP | KEY_FLAG_TX | 491c1d255d3SCy Schubert KEY_FLAG_DEFAULT, 492c1d255d3SCy Schubert KEY_FLAG_PAIRWISE_RX_TX = KEY_FLAG_PAIRWISE | KEY_FLAG_RX_TX, 493c1d255d3SCy Schubert KEY_FLAG_PAIRWISE_RX = KEY_FLAG_PAIRWISE | KEY_FLAG_RX, 494c1d255d3SCy Schubert KEY_FLAG_PAIRWISE_RX_TX_MODIFY = KEY_FLAG_PAIRWISE_RX_TX | 495c1d255d3SCy Schubert KEY_FLAG_MODIFY, 496c1d255d3SCy Schubert /* Max allowed flags for each key type */ 497c1d255d3SCy Schubert KEY_FLAG_PAIRWISE_MASK = KEY_FLAG_PAIRWISE_RX_TX_MODIFY, 498c1d255d3SCy Schubert KEY_FLAG_GROUP_MASK = KEY_FLAG_GROUP_RX_TX_DEFAULT, 499c1d255d3SCy Schubert KEY_FLAG_PMK_MASK = KEY_FLAG_PMK, 500c1d255d3SCy Schubert }; 501c1d255d3SCy Schubert 502c1d255d3SCy Schubert static inline int check_key_flag(enum key_flag key_flag) 503c1d255d3SCy Schubert { 504c1d255d3SCy Schubert return !!(!key_flag || 505c1d255d3SCy Schubert ((key_flag & (KEY_FLAG_PAIRWISE | KEY_FLAG_MODIFY)) && 506c1d255d3SCy Schubert (key_flag & ~KEY_FLAG_PAIRWISE_MASK)) || 507c1d255d3SCy Schubert ((key_flag & KEY_FLAG_GROUP) && 508c1d255d3SCy Schubert (key_flag & ~KEY_FLAG_GROUP_MASK)) || 509c1d255d3SCy Schubert ((key_flag & KEY_FLAG_PMK) && 510c1d255d3SCy Schubert (key_flag & ~KEY_FLAG_PMK_MASK))); 511c1d255d3SCy Schubert } 512c1d255d3SCy Schubert 513c1d255d3SCy Schubert enum ptk0_rekey_handling { 514c1d255d3SCy Schubert PTK0_REKEY_ALLOW_ALWAYS, 515c1d255d3SCy Schubert PTK0_REKEY_ALLOW_LOCAL_OK, 516c1d255d3SCy Schubert PTK0_REKEY_ALLOW_NEVER 517c1d255d3SCy Schubert }; 518c1d255d3SCy Schubert 519*a90b9d01SCy Schubert enum frame_encryption { 520*a90b9d01SCy Schubert FRAME_ENCRYPTION_UNKNOWN = -1, 521*a90b9d01SCy Schubert FRAME_NOT_ENCRYPTED = 0, 522*a90b9d01SCy Schubert FRAME_ENCRYPTED = 1 523*a90b9d01SCy Schubert }; 524*a90b9d01SCy Schubert 525*a90b9d01SCy Schubert #define MAX_NUM_MLD_LINKS 15 526*a90b9d01SCy Schubert 527*a90b9d01SCy Schubert enum sae_pwe { 528*a90b9d01SCy Schubert SAE_PWE_HUNT_AND_PECK = 0, 529*a90b9d01SCy Schubert SAE_PWE_HASH_TO_ELEMENT = 1, 530*a90b9d01SCy Schubert SAE_PWE_BOTH = 2, 531*a90b9d01SCy Schubert SAE_PWE_FORCE_HUNT_AND_PECK = 3, 532*a90b9d01SCy Schubert SAE_PWE_NOT_SET = 4, 533*a90b9d01SCy Schubert }; 534*a90b9d01SCy Schubert 53539beb93cSSam Leffler #endif /* DEFS_H */ 536