FT: Differentiate between FT for station and for AP in build
Previously, CONFIG_IEEE80211R enabled build that supports FT for both station mode and AP mode. However, in most wpa_supplicant cases only station mode FT is required and there is no need for AP mode FT. Add support to differentiate between station mode FT and AP mode FT in wpa_supplicant builds by adding CONFIG_IEEE80211R_AP that should be used when AP mode FT support is required in addition to station mode FT. This allows binary size to be reduced for builds that require only the station side FT functionality. Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
f0259c3f68
commit
4ec1fd8e42
19 changed files with 148 additions and 134 deletions
|
@ -247,7 +247,7 @@ NEED_AES_OMAC1=y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R
|
||||||
L_CFLAGS += -DCONFIG_IEEE80211R
|
L_CFLAGS += -DCONFIG_IEEE80211R -DCONFIG_IEEE80211R_AP
|
||||||
OBJS += src/ap/wpa_auth_ft.c
|
OBJS += src/ap/wpa_auth_ft.c
|
||||||
NEED_SHA256=y
|
NEED_SHA256=y
|
||||||
NEED_AES_OMAC1=y
|
NEED_AES_OMAC1=y
|
||||||
|
|
|
@ -290,7 +290,7 @@ NEED_AES_OMAC1=y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R
|
||||||
CFLAGS += -DCONFIG_IEEE80211R
|
CFLAGS += -DCONFIG_IEEE80211R -DCONFIG_IEEE80211R_AP
|
||||||
OBJS += ../src/ap/wpa_auth_ft.o
|
OBJS += ../src/ap/wpa_auth_ft.o
|
||||||
NEED_SHA256=y
|
NEED_SHA256=y
|
||||||
NEED_AES_OMAC1=y
|
NEED_AES_OMAC1=y
|
||||||
|
|
|
@ -12,7 +12,7 @@ CFLAGS += -DHOSTAPD
|
||||||
CFLAGS += -DNEED_AP_MLME
|
CFLAGS += -DNEED_AP_MLME
|
||||||
CFLAGS += -DCONFIG_HS20
|
CFLAGS += -DCONFIG_HS20
|
||||||
CFLAGS += -DCONFIG_INTERWORKING
|
CFLAGS += -DCONFIG_INTERWORKING
|
||||||
CFLAGS += -DCONFIG_IEEE80211R
|
CFLAGS += -DCONFIG_IEEE80211R_AP
|
||||||
CFLAGS += -DCONFIG_IEEE80211W
|
CFLAGS += -DCONFIG_IEEE80211W
|
||||||
CFLAGS += -DCONFIG_WPS
|
CFLAGS += -DCONFIG_WPS
|
||||||
CFLAGS += -DCONFIG_PROXYARP
|
CFLAGS += -DCONFIG_PROXYARP
|
||||||
|
|
|
@ -88,9 +88,9 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)
|
||||||
/* Set to -1 as defaults depends on HT in setup */
|
/* Set to -1 as defaults depends on HT in setup */
|
||||||
bss->wmm_enabled = -1;
|
bss->wmm_enabled = -1;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
bss->ft_over_ds = 1;
|
bss->ft_over_ds = 1;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
bss->radius_das_time_window = 300;
|
bss->radius_das_time_window = 300;
|
||||||
|
|
||||||
|
@ -477,7 +477,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
||||||
hostapd_config_free_vlan(conf);
|
hostapd_config_free_vlan(conf);
|
||||||
os_free(conf->time_zone);
|
os_free(conf->time_zone);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
{
|
{
|
||||||
struct ft_remote_r0kh *r0kh, *r0kh_prev;
|
struct ft_remote_r0kh *r0kh, *r0kh_prev;
|
||||||
struct ft_remote_r1kh *r1kh, *r1kh_prev;
|
struct ft_remote_r1kh *r1kh, *r1kh_prev;
|
||||||
|
@ -498,7 +498,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
||||||
os_free(r1kh_prev);
|
os_free(r1kh_prev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_WPS
|
#ifdef CONFIG_WPS
|
||||||
os_free(conf->wps_pin_requests);
|
os_free(conf->wps_pin_requests);
|
||||||
|
@ -802,7 +802,7 @@ static int hostapd_config_check_bss(struct hostapd_bss_config *bss,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (full_config && wpa_key_mgmt_ft(bss->wpa_key_mgmt) &&
|
if (full_config && wpa_key_mgmt_ft(bss->wpa_key_mgmt) &&
|
||||||
(bss->nas_identifier == NULL ||
|
(bss->nas_identifier == NULL ||
|
||||||
os_strlen(bss->nas_identifier) < 1 ||
|
os_strlen(bss->nas_identifier) < 1 ||
|
||||||
|
@ -812,7 +812,7 @@ static int hostapd_config_check_bss(struct hostapd_bss_config *bss,
|
||||||
"string");
|
"string");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211N
|
#ifdef CONFIG_IEEE80211N
|
||||||
if (full_config && conf->ieee80211n &&
|
if (full_config && conf->ieee80211n &&
|
||||||
|
|
|
@ -329,7 +329,7 @@ struct hostapd_bss_config {
|
||||||
char *rsn_preauth_interfaces;
|
char *rsn_preauth_interfaces;
|
||||||
int peerkey;
|
int peerkey;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
/* IEEE 802.11r - Fast BSS Transition */
|
/* IEEE 802.11r - Fast BSS Transition */
|
||||||
u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
|
u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
|
||||||
u8 r1_key_holder[FT_R1KH_ID_LEN];
|
u8 r1_key_holder[FT_R1KH_ID_LEN];
|
||||||
|
@ -340,7 +340,7 @@ struct hostapd_bss_config {
|
||||||
int pmk_r1_push;
|
int pmk_r1_push;
|
||||||
int ft_over_ds;
|
int ft_over_ds;
|
||||||
int ft_psk_generate_local;
|
int ft_psk_generate_local;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
char *ctrl_interface; /* directory for UNIX domain sockets */
|
char *ctrl_interface; /* directory for UNIX domain sockets */
|
||||||
#ifndef CONFIG_NATIVE_WINDOWS
|
#ifndef CONFIG_NATIVE_WINDOWS
|
||||||
|
|
|
@ -45,10 +45,10 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
||||||
struct ieee802_11_elems elems;
|
struct ieee802_11_elems elems;
|
||||||
const u8 *ie;
|
const u8 *ie;
|
||||||
size_t ielen;
|
size_t ielen;
|
||||||
#if defined(CONFIG_IEEE80211R) || defined(CONFIG_IEEE80211W)
|
#if defined(CONFIG_IEEE80211R_AP) || defined(CONFIG_IEEE80211W)
|
||||||
u8 buf[sizeof(struct ieee80211_mgmt) + 1024];
|
u8 buf[sizeof(struct ieee80211_mgmt) + 1024];
|
||||||
u8 *p = buf;
|
u8 *p = buf;
|
||||||
#endif /* CONFIG_IEEE80211R || CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211R_AP || CONFIG_IEEE80211W */
|
||||||
u16 reason = WLAN_REASON_UNSPECIFIED;
|
u16 reason = WLAN_REASON_UNSPECIFIED;
|
||||||
u16 status = WLAN_STATUS_SUCCESS;
|
u16 status = WLAN_STATUS_SUCCESS;
|
||||||
const u8 *p2p_dev_addr = NULL;
|
const u8 *p2p_dev_addr = NULL;
|
||||||
|
@ -293,7 +293,7 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
||||||
sta->flags &= ~WLAN_STA_MFP;
|
sta->flags &= ~WLAN_STA_MFP;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sta->auth_alg == WLAN_AUTH_FT) {
|
if (sta->auth_alg == WLAN_AUTH_FT) {
|
||||||
status = wpa_ft_validate_reassoc(sta->wpa_sm, req_ies,
|
status = wpa_ft_validate_reassoc(sta->wpa_sm, req_ies,
|
||||||
req_ies_len);
|
req_ies_len);
|
||||||
|
@ -307,7 +307,7 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
} else if (hapd->conf->wps_state) {
|
} else if (hapd->conf->wps_state) {
|
||||||
#ifdef CONFIG_WPS
|
#ifdef CONFIG_WPS
|
||||||
struct wpabuf *wps;
|
struct wpabuf *wps;
|
||||||
|
@ -375,7 +375,7 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
||||||
skip_wpa_check:
|
skip_wpa_check:
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
p = wpa_sm_write_assoc_resp_ies(sta->wpa_sm, buf, sizeof(buf),
|
p = wpa_sm_write_assoc_resp_ies(sta->wpa_sm, buf, sizeof(buf),
|
||||||
sta->auth_alg, req_ies, req_ies_len);
|
sta->auth_alg, req_ies, req_ies_len);
|
||||||
|
|
||||||
|
@ -383,11 +383,11 @@ skip_wpa_check:
|
||||||
|
|
||||||
if (sta->auth_alg == WLAN_AUTH_FT)
|
if (sta->auth_alg == WLAN_AUTH_FT)
|
||||||
ap_sta_set_authorized(hapd, sta, 1);
|
ap_sta_set_authorized(hapd, sta, 1);
|
||||||
#else /* CONFIG_IEEE80211R */
|
#else /* CONFIG_IEEE80211R_AP */
|
||||||
/* Keep compiler silent about unused variables */
|
/* Keep compiler silent about unused variables */
|
||||||
if (status) {
|
if (status) {
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
new_assoc = (sta->flags & WLAN_STA_ASSOC) == 0;
|
new_assoc = (sta->flags & WLAN_STA_ASSOC) == 0;
|
||||||
sta->flags |= WLAN_STA_AUTH | WLAN_STA_ASSOC;
|
sta->flags |= WLAN_STA_AUTH | WLAN_STA_ASSOC;
|
||||||
|
@ -414,9 +414,9 @@ skip_wpa_check:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
hostapd_sta_assoc(hapd, addr, reassoc, status, buf, p - buf);
|
hostapd_sta_assoc(hapd, addr, reassoc, status, buf, p - buf);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
hostapd_drv_sta_disassoc(hapd, sta->addr, reason);
|
hostapd_drv_sta_disassoc(hapd, sta->addr, reason);
|
||||||
ap_free_sta(hapd, sta);
|
ap_free_sta(hapd, sta);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -689,7 +689,7 @@ int hostapd_probe_req_rx(struct hostapd_data *hapd, const u8 *sa, const u8 *da,
|
||||||
|
|
||||||
#ifdef HOSTAPD
|
#ifdef HOSTAPD
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
static void hostapd_notify_auth_ft_finish(void *ctx, const u8 *dst,
|
static void hostapd_notify_auth_ft_finish(void *ctx, const u8 *dst,
|
||||||
const u8 *bssid,
|
const u8 *bssid,
|
||||||
u16 auth_transaction, u16 status,
|
u16 auth_transaction, u16 status,
|
||||||
|
@ -708,7 +708,7 @@ static void hostapd_notify_auth_ft_finish(void *ctx, const u8 *dst,
|
||||||
|
|
||||||
hostapd_sta_auth(hapd, dst, auth_transaction, status, ies, ies_len);
|
hostapd_sta_auth(hapd, dst, auth_transaction, status, ies, ies_len);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
|
|
||||||
static void hostapd_notif_auth(struct hostapd_data *hapd,
|
static void hostapd_notif_auth(struct hostapd_data *hapd,
|
||||||
|
@ -729,7 +729,7 @@ static void hostapd_notif_auth(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
sta->flags &= ~WLAN_STA_PREAUTH;
|
sta->flags &= ~WLAN_STA_PREAUTH;
|
||||||
ieee802_1x_notify_pre_auth(sta->eapol_sm, 0);
|
ieee802_1x_notify_pre_auth(sta->eapol_sm, 0);
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (rx_auth->auth_type == WLAN_AUTH_FT && hapd->wpa_auth) {
|
if (rx_auth->auth_type == WLAN_AUTH_FT && hapd->wpa_auth) {
|
||||||
sta->auth_alg = WLAN_AUTH_FT;
|
sta->auth_alg = WLAN_AUTH_FT;
|
||||||
if (sta->wpa_sm == NULL)
|
if (sta->wpa_sm == NULL)
|
||||||
|
@ -747,7 +747,7 @@ static void hostapd_notif_auth(struct hostapd_data *hapd,
|
||||||
hostapd_notify_auth_ft_finish, hapd);
|
hostapd_notify_auth_ft_finish, hapd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
fail:
|
fail:
|
||||||
hostapd_sta_auth(hapd, rx_auth->peer, rx_auth->auth_transaction + 1,
|
hostapd_sta_auth(hapd, rx_auth->peer, rx_auth->auth_transaction + 1,
|
||||||
status, resp_ies, resp_ies_len);
|
status, resp_ies, resp_ies_len);
|
||||||
|
@ -780,13 +780,13 @@ static void hostapd_action_rx(struct hostapd_data *hapd,
|
||||||
wpa_printf(MSG_DEBUG, "%s: station not found", __func__);
|
wpa_printf(MSG_DEBUG, "%s: station not found", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (mgmt->u.action.category == WLAN_ACTION_FT) {
|
if (mgmt->u.action.category == WLAN_ACTION_FT) {
|
||||||
const u8 *payload = drv_mgmt->frame + 24 + 1;
|
const u8 *payload = drv_mgmt->frame + 24 + 1;
|
||||||
|
|
||||||
wpa_ft_action_rx(sta->wpa_sm, payload, plen);
|
wpa_ft_action_rx(sta->wpa_sm, payload, plen);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (mgmt->u.action.category == WLAN_ACTION_SA_QUERY && plen >= 4) {
|
if (mgmt->u.action.category == WLAN_ACTION_SA_QUERY && plen >= 4) {
|
||||||
ieee802_11_sa_query_action(
|
ieee802_11_sa_query_action(
|
||||||
|
|
|
@ -956,10 +956,10 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first)
|
||||||
if (conf->wmm_enabled < 0)
|
if (conf->wmm_enabled < 0)
|
||||||
conf->wmm_enabled = hapd->iconf->ieee80211n;
|
conf->wmm_enabled = hapd->iconf->ieee80211n;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (is_zero_ether_addr(conf->r1_key_holder))
|
if (is_zero_ether_addr(conf->r1_key_holder))
|
||||||
os_memcpy(conf->r1_key_holder, hapd->own_addr, ETH_ALEN);
|
os_memcpy(conf->r1_key_holder, hapd->own_addr, ETH_ALEN);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
if (hapd->iface->mconf == NULL)
|
if (hapd->iface->mconf == NULL)
|
||||||
|
|
|
@ -303,7 +303,7 @@ static int send_auth_reply(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
static void handle_auth_ft_finish(void *ctx, const u8 *dst, const u8 *bssid,
|
static void handle_auth_ft_finish(void *ctx, const u8 *dst, const u8 *bssid,
|
||||||
u16 auth_transaction, u16 status,
|
u16 auth_transaction, u16 status,
|
||||||
const u8 *ies, size_t ies_len)
|
const u8 *ies, size_t ies_len)
|
||||||
|
@ -334,7 +334,7 @@ static void handle_auth_ft_finish(void *ctx, const u8 *dst, const u8 *bssid,
|
||||||
sta->flags |= WLAN_STA_AUTH;
|
sta->flags |= WLAN_STA_AUTH;
|
||||||
mlme_authenticate_indication(hapd, sta);
|
mlme_authenticate_indication(hapd, sta);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_SAE
|
#ifdef CONFIG_SAE
|
||||||
|
@ -1365,10 +1365,10 @@ static void handle_auth(struct hostapd_data *hapd,
|
||||||
|
|
||||||
if (!(((hapd->conf->auth_algs & WPA_AUTH_ALG_OPEN) &&
|
if (!(((hapd->conf->auth_algs & WPA_AUTH_ALG_OPEN) &&
|
||||||
auth_alg == WLAN_AUTH_OPEN) ||
|
auth_alg == WLAN_AUTH_OPEN) ||
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
(hapd->conf->wpa && wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt) &&
|
(hapd->conf->wpa && wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt) &&
|
||||||
auth_alg == WLAN_AUTH_FT) ||
|
auth_alg == WLAN_AUTH_FT) ||
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_SAE
|
#ifdef CONFIG_SAE
|
||||||
(hapd->conf->wpa && wpa_key_mgmt_sae(hapd->conf->wpa_key_mgmt) &&
|
(hapd->conf->wpa && wpa_key_mgmt_sae(hapd->conf->wpa_key_mgmt) &&
|
||||||
auth_alg == WLAN_AUTH_SAE) ||
|
auth_alg == WLAN_AUTH_SAE) ||
|
||||||
|
@ -1633,7 +1633,7 @@ static void handle_auth(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_NO_RC4 */
|
#endif /* CONFIG_NO_RC4 */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
case WLAN_AUTH_FT:
|
case WLAN_AUTH_FT:
|
||||||
sta->auth_alg = WLAN_AUTH_FT;
|
sta->auth_alg = WLAN_AUTH_FT;
|
||||||
if (sta->wpa_sm == NULL)
|
if (sta->wpa_sm == NULL)
|
||||||
|
@ -1652,7 +1652,7 @@ static void handle_auth(struct hostapd_data *hapd,
|
||||||
handle_auth_ft_finish, hapd);
|
handle_auth_ft_finish, hapd);
|
||||||
/* handle_auth_ft_finish() callback will complete auth. */
|
/* handle_auth_ft_finish() callback will complete auth. */
|
||||||
return;
|
return;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_SAE
|
#ifdef CONFIG_SAE
|
||||||
case WLAN_AUTH_SAE:
|
case WLAN_AUTH_SAE:
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
|
@ -1996,7 +1996,7 @@ static u16 check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
sta->flags &= ~WLAN_STA_MFP;
|
sta->flags &= ~WLAN_STA_MFP;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sta->auth_alg == WLAN_AUTH_FT) {
|
if (sta->auth_alg == WLAN_AUTH_FT) {
|
||||||
if (!reassoc) {
|
if (!reassoc) {
|
||||||
wpa_printf(MSG_DEBUG, "FT: " MACSTR " tried "
|
wpa_printf(MSG_DEBUG, "FT: " MACSTR " tried "
|
||||||
|
@ -2011,7 +2011,7 @@ static u16 check_assoc_ies(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
if (resp != WLAN_STATUS_SUCCESS)
|
if (resp != WLAN_STATUS_SUCCESS)
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_SAE
|
#ifdef CONFIG_SAE
|
||||||
if (wpa_auth_uses_sae(sta->wpa_sm) &&
|
if (wpa_auth_uses_sae(sta->wpa_sm) &&
|
||||||
|
@ -2229,7 +2229,7 @@ static u16 send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
/* Extended supported rates */
|
/* Extended supported rates */
|
||||||
p = hostapd_eid_ext_supp_rates(hapd, p);
|
p = hostapd_eid_ext_supp_rates(hapd, p);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (status_code == WLAN_STATUS_SUCCESS) {
|
if (status_code == WLAN_STATUS_SUCCESS) {
|
||||||
/* IEEE 802.11r: Mobility Domain Information, Fast BSS
|
/* IEEE 802.11r: Mobility Domain Information, Fast BSS
|
||||||
* Transition Information, RSN, [RIC Response] */
|
* Transition Information, RSN, [RIC Response] */
|
||||||
|
@ -2237,7 +2237,7 @@ static u16 send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
buf + sizeof(buf) - p,
|
buf + sizeof(buf) - p,
|
||||||
sta->auth_alg, ies, ies_len);
|
sta->auth_alg, ies, ies_len);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (status_code == WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY)
|
if (status_code == WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY)
|
||||||
|
@ -2449,7 +2449,7 @@ static void handle_assoc(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
|
|
||||||
sta = ap_get_sta(hapd, mgmt->sa);
|
sta = ap_get_sta(hapd, mgmt->sa);
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sta && sta->auth_alg == WLAN_AUTH_FT &&
|
if (sta && sta->auth_alg == WLAN_AUTH_FT &&
|
||||||
(sta->flags & WLAN_STA_AUTH) == 0) {
|
(sta->flags & WLAN_STA_AUTH) == 0) {
|
||||||
wpa_printf(MSG_DEBUG, "FT: Allow STA " MACSTR " to associate "
|
wpa_printf(MSG_DEBUG, "FT: Allow STA " MACSTR " to associate "
|
||||||
|
@ -2462,7 +2462,7 @@ static void handle_assoc(struct hostapd_data *hapd,
|
||||||
*/
|
*/
|
||||||
sta->flags |= WLAN_STA_AUTH;
|
sta->flags |= WLAN_STA_AUTH;
|
||||||
} else
|
} else
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
if (sta == NULL || (sta->flags & WLAN_STA_AUTH) == 0) {
|
if (sta == NULL || (sta->flags & WLAN_STA_AUTH) == 0) {
|
||||||
hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211,
|
hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211,
|
||||||
HOSTAPD_LEVEL_INFO, "Station tried to "
|
HOSTAPD_LEVEL_INFO, "Station tried to "
|
||||||
|
@ -2863,14 +2863,14 @@ static int handle_action(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mgmt->u.action.category) {
|
switch (mgmt->u.action.category) {
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
case WLAN_ACTION_FT:
|
case WLAN_ACTION_FT:
|
||||||
if (!sta ||
|
if (!sta ||
|
||||||
wpa_ft_action_rx(sta->wpa_sm, (u8 *) &mgmt->u.action,
|
wpa_ft_action_rx(sta->wpa_sm, (u8 *) &mgmt->u.action,
|
||||||
len - IEEE80211_HDRLEN))
|
len - IEEE80211_HDRLEN))
|
||||||
break;
|
break;
|
||||||
return 1;
|
return 1;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
case WLAN_ACTION_WMM:
|
case WLAN_ACTION_WMM:
|
||||||
hostapd_wmm_action(hapd, mgmt, len);
|
hostapd_wmm_action(hapd, mgmt, len);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -475,7 +475,7 @@ static int add_common_radius_sta_attr(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (hapd->conf->wpa && wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt) &&
|
if (hapd->conf->wpa && wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt) &&
|
||||||
sta->wpa_sm &&
|
sta->wpa_sm &&
|
||||||
(wpa_key_mgmt_ft(wpa_auth_sta_key_mgmt(sta->wpa_sm)) ||
|
(wpa_key_mgmt_ft(wpa_auth_sta_key_mgmt(sta->wpa_sm)) ||
|
||||||
|
@ -488,7 +488,7 @@ static int add_common_radius_sta_attr(struct hostapd_data *hapd,
|
||||||
wpa_printf(MSG_ERROR, "Could not add Mobility-Domain-Id");
|
wpa_printf(MSG_ERROR, "Could not add Mobility-Domain-Id");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
if ((hapd->conf->wpa || hapd->conf->osen) && sta->wpa_sm &&
|
if ((hapd->conf->wpa || hapd->conf->osen) && sta->wpa_sm &&
|
||||||
add_common_radius_sta_attr_rsn(hapd, req_attr, sta, msg) < 0)
|
add_common_radius_sta_attr_rsn(hapd, req_attr, sta, msg) < 0)
|
||||||
|
@ -1157,7 +1157,7 @@ void ieee802_1x_new_station(struct hostapd_data *hapd, struct sta_info *sta)
|
||||||
|
|
||||||
sta->eapol_sm->eap_if->portEnabled = TRUE;
|
sta->eapol_sm->eap_if->portEnabled = TRUE;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sta->auth_alg == WLAN_AUTH_FT) {
|
if (sta->auth_alg == WLAN_AUTH_FT) {
|
||||||
hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X,
|
hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE8021X,
|
||||||
HOSTAPD_LEVEL_DEBUG,
|
HOSTAPD_LEVEL_DEBUG,
|
||||||
|
@ -1176,7 +1176,7 @@ void ieee802_1x_new_station(struct hostapd_data *hapd, struct sta_info *sta)
|
||||||
/* TODO: get vlan_id from R0KH using RRB message */
|
/* TODO: get vlan_id from R0KH using RRB message */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
if (sta->auth_alg == WLAN_AUTH_FILS_SK ||
|
if (sta->auth_alg == WLAN_AUTH_FILS_SK ||
|
||||||
|
|
|
@ -239,10 +239,10 @@ static void wpa_sta_disconnect(struct wpa_authenticator *wpa_auth,
|
||||||
static int wpa_use_aes_cmac(struct wpa_state_machine *sm)
|
static int wpa_use_aes_cmac(struct wpa_state_machine *sm)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt))
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt))
|
||||||
ret = 1;
|
ret = 1;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (wpa_key_mgmt_sha256(sm->wpa_key_mgmt))
|
if (wpa_key_mgmt_sha256(sm->wpa_key_mgmt))
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
@ -450,7 +450,7 @@ struct wpa_authenticator * wpa_init(const u8 *addr,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
wpa_auth->ft_pmk_cache = wpa_ft_pmk_cache_init();
|
wpa_auth->ft_pmk_cache = wpa_ft_pmk_cache_init();
|
||||||
if (wpa_auth->ft_pmk_cache == NULL) {
|
if (wpa_auth->ft_pmk_cache == NULL) {
|
||||||
wpa_printf(MSG_ERROR, "FT PMK cache initialization failed.");
|
wpa_printf(MSG_ERROR, "FT PMK cache initialization failed.");
|
||||||
|
@ -460,7 +460,7 @@ struct wpa_authenticator * wpa_init(const u8 *addr,
|
||||||
os_free(wpa_auth);
|
os_free(wpa_auth);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
if (wpa_auth->conf.wpa_gmk_rekey) {
|
if (wpa_auth->conf.wpa_gmk_rekey) {
|
||||||
eloop_register_timeout(wpa_auth->conf.wpa_gmk_rekey, 0,
|
eloop_register_timeout(wpa_auth->conf.wpa_gmk_rekey, 0,
|
||||||
|
@ -520,10 +520,10 @@ void wpa_deinit(struct wpa_authenticator *wpa_auth)
|
||||||
|
|
||||||
pmksa_cache_auth_deinit(wpa_auth->pmksa);
|
pmksa_cache_auth_deinit(wpa_auth->pmksa);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
wpa_ft_pmk_cache_deinit(wpa_auth->ft_pmk_cache);
|
wpa_ft_pmk_cache_deinit(wpa_auth->ft_pmk_cache);
|
||||||
wpa_auth->ft_pmk_cache = NULL;
|
wpa_auth->ft_pmk_cache = NULL;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
bitfield_free(wpa_auth->ip_pool);
|
bitfield_free(wpa_auth->ip_pool);
|
||||||
|
@ -606,7 +606,7 @@ int wpa_auth_sta_associated(struct wpa_authenticator *wpa_auth,
|
||||||
if (wpa_auth == NULL || !wpa_auth->conf.wpa || sm == NULL)
|
if (wpa_auth == NULL || !wpa_auth->conf.wpa || sm == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sm->ft_completed) {
|
if (sm->ft_completed) {
|
||||||
wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG,
|
wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG,
|
||||||
"FT authentication already completed - do not "
|
"FT authentication already completed - do not "
|
||||||
|
@ -615,7 +615,7 @@ int wpa_auth_sta_associated(struct wpa_authenticator *wpa_auth,
|
||||||
sm->wpa_ptk_state = WPA_PTK_PTKINITDONE;
|
sm->wpa_ptk_state = WPA_PTK_PTKINITDONE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
if (sm->fils_completed) {
|
if (sm->fils_completed) {
|
||||||
|
@ -677,10 +677,10 @@ static void wpa_free_sta_sm(struct wpa_state_machine *sm)
|
||||||
sm->group->GKeyDoneStations--;
|
sm->group->GKeyDoneStations--;
|
||||||
sm->GUpdateStationKeys = FALSE;
|
sm->GUpdateStationKeys = FALSE;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
os_free(sm->assoc_resp_ftie);
|
os_free(sm->assoc_resp_ftie);
|
||||||
wpabuf_free(sm->ft_pending_req_ies);
|
wpabuf_free(sm->ft_pending_req_ies);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
os_free(sm->last_rx_eapol_key);
|
os_free(sm->last_rx_eapol_key);
|
||||||
os_free(sm->wpa_ie);
|
os_free(sm->wpa_ie);
|
||||||
wpa_group_put(sm->wpa_auth, sm->group);
|
wpa_group_put(sm->wpa_auth, sm->group);
|
||||||
|
@ -756,7 +756,7 @@ static void wpa_replay_counter_mark_invalid(struct wpa_key_replay_counter *ctr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
static int ft_check_msg_2_of_4(struct wpa_authenticator *wpa_auth,
|
static int ft_check_msg_2_of_4(struct wpa_authenticator *wpa_auth,
|
||||||
struct wpa_state_machine *sm,
|
struct wpa_state_machine *sm,
|
||||||
struct wpa_eapol_ie_parse *kde)
|
struct wpa_eapol_ie_parse *kde)
|
||||||
|
@ -803,7 +803,7 @@ static int ft_check_msg_2_of_4(struct wpa_authenticator *wpa_auth,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
|
|
||||||
static int wpa_receive_error_report(struct wpa_authenticator *wpa_auth,
|
static int wpa_receive_error_report(struct wpa_authenticator *wpa_auth,
|
||||||
|
@ -1740,7 +1740,7 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event)
|
||||||
sm->ReAuthenticationRequest = TRUE;
|
sm->ReAuthenticationRequest = TRUE;
|
||||||
break;
|
break;
|
||||||
case WPA_ASSOC_FT:
|
case WPA_ASSOC_FT:
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
wpa_printf(MSG_DEBUG, "FT: Retry PTK configuration "
|
wpa_printf(MSG_DEBUG, "FT: Retry PTK configuration "
|
||||||
"after association");
|
"after association");
|
||||||
wpa_ft_install_ptk(sm);
|
wpa_ft_install_ptk(sm);
|
||||||
|
@ -1748,14 +1748,14 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event)
|
||||||
/* Using FT protocol, not WPA auth state machine */
|
/* Using FT protocol, not WPA auth state machine */
|
||||||
sm->ft_completed = 1;
|
sm->ft_completed = 1;
|
||||||
return 0;
|
return 0;
|
||||||
#else /* CONFIG_IEEE80211R */
|
#else /* CONFIG_IEEE80211R_AP */
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
sm->ft_completed = 0;
|
sm->ft_completed = 0;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (sm->mgmt_frame_prot && event == WPA_AUTH)
|
if (sm->mgmt_frame_prot && event == WPA_AUTH)
|
||||||
|
@ -1915,9 +1915,9 @@ SM_STATE(WPA_PTK, INITPMK)
|
||||||
size_t len = 2 * PMK_LEN;
|
size_t len = 2 * PMK_LEN;
|
||||||
|
|
||||||
SM_ENTRY_MA(WPA_PTK, INITPMK, wpa_ptk);
|
SM_ENTRY_MA(WPA_PTK, INITPMK, wpa_ptk);
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
sm->xxkey_len = 0;
|
sm->xxkey_len = 0;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
if (sm->pmksa) {
|
if (sm->pmksa) {
|
||||||
wpa_printf(MSG_DEBUG, "WPA: PMK from PMKSA cache");
|
wpa_printf(MSG_DEBUG, "WPA: PMK from PMKSA cache");
|
||||||
os_memcpy(sm->PMK, sm->pmksa->pmk, sm->pmksa->pmk_len);
|
os_memcpy(sm->PMK, sm->pmksa->pmk, sm->pmksa->pmk_len);
|
||||||
|
@ -1941,12 +1941,12 @@ SM_STATE(WPA_PTK, INITPMK)
|
||||||
}
|
}
|
||||||
os_memcpy(sm->PMK, msk, pmk_len);
|
os_memcpy(sm->PMK, msk, pmk_len);
|
||||||
sm->pmk_len = pmk_len;
|
sm->pmk_len = pmk_len;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (len >= 2 * PMK_LEN) {
|
if (len >= 2 * PMK_LEN) {
|
||||||
os_memcpy(sm->xxkey, msk + PMK_LEN, PMK_LEN);
|
os_memcpy(sm->xxkey, msk + PMK_LEN, PMK_LEN);
|
||||||
sm->xxkey_len = PMK_LEN;
|
sm->xxkey_len = PMK_LEN;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_DEBUG, "WPA: Could not get PMK, get_msk: %p",
|
wpa_printf(MSG_DEBUG, "WPA: Could not get PMK, get_msk: %p",
|
||||||
sm->wpa_auth->cb.get_msk);
|
sm->wpa_auth->cb.get_msk);
|
||||||
|
@ -1976,10 +1976,10 @@ SM_STATE(WPA_PTK, INITPSK)
|
||||||
if (psk) {
|
if (psk) {
|
||||||
os_memcpy(sm->PMK, psk, PMK_LEN);
|
os_memcpy(sm->PMK, psk, PMK_LEN);
|
||||||
sm->pmk_len = PMK_LEN;
|
sm->pmk_len = PMK_LEN;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
os_memcpy(sm->xxkey, psk, PMK_LEN);
|
os_memcpy(sm->xxkey, psk, PMK_LEN);
|
||||||
sm->xxkey_len = PMK_LEN;
|
sm->xxkey_len = PMK_LEN;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
}
|
}
|
||||||
sm->req_replay_counter_used = 0;
|
sm->req_replay_counter_used = 0;
|
||||||
}
|
}
|
||||||
|
@ -2042,10 +2042,10 @@ static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce,
|
||||||
const u8 *pmk, unsigned int pmk_len,
|
const u8 *pmk, unsigned int pmk_len,
|
||||||
struct wpa_ptk *ptk)
|
struct wpa_ptk *ptk)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt))
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt))
|
||||||
return wpa_auth_derive_ptk_ft(sm, pmk, ptk);
|
return wpa_auth_derive_ptk_ft(sm, pmk, ptk);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
return wpa_pmk_to_ptk(pmk, pmk_len, "Pairwise key expansion",
|
return wpa_pmk_to_ptk(pmk, pmk_len, "Pairwise key expansion",
|
||||||
sm->wpa_auth->addr, sm->addr, sm->ANonce, snonce,
|
sm->wpa_auth->addr, sm->addr, sm->ANonce, snonce,
|
||||||
|
@ -2537,12 +2537,12 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)
|
||||||
wpa_sta_disconnect(wpa_auth, sm->addr);
|
wpa_sta_disconnect(wpa_auth, sm->addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (ft && ft_check_msg_2_of_4(wpa_auth, sm, &kde) < 0) {
|
if (ft && ft_check_msg_2_of_4(wpa_auth, sm, &kde) < 0) {
|
||||||
wpa_sta_disconnect(wpa_auth, sm->addr);
|
wpa_sta_disconnect(wpa_auth, sm->addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
if (kde.ip_addr_req && kde.ip_addr_req[0] &&
|
if (kde.ip_addr_req && kde.ip_addr_req[0] &&
|
||||||
wpa_auth->ip_pool && WPA_GET_BE32(sm->ip_addr) == 0) {
|
wpa_auth->ip_pool && WPA_GET_BE32(sm->ip_addr) == 0) {
|
||||||
|
@ -2563,7 +2563,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (sm->wpa == WPA_VERSION_WPA2 && wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
if (sm->wpa == WPA_VERSION_WPA2 && wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
||||||
/*
|
/*
|
||||||
* Verify that PMKR1Name from EAPOL-Key message 2/4 matches
|
* Verify that PMKR1Name from EAPOL-Key message 2/4 matches
|
||||||
|
@ -2582,7 +2582,7 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
sm->pending_1_of_4_timeout = 0;
|
sm->pending_1_of_4_timeout = 0;
|
||||||
eloop_cancel_timeout(wpa_send_eapol_timeout, sm->wpa_auth, sm);
|
eloop_cancel_timeout(wpa_send_eapol_timeout, sm->wpa_auth, sm);
|
||||||
|
@ -2752,12 +2752,12 @@ SM_STATE(WPA_PTK, PTKINITNEGOTIATING)
|
||||||
kde_len = wpa_ie_len + ieee80211w_kde_len(sm);
|
kde_len = wpa_ie_len + ieee80211w_kde_len(sm);
|
||||||
if (gtk)
|
if (gtk)
|
||||||
kde_len += 2 + RSN_SELECTOR_LEN + 2 + gtk_len;
|
kde_len += 2 + RSN_SELECTOR_LEN + 2 + gtk_len;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
||||||
kde_len += 2 + PMKID_LEN; /* PMKR1Name into RSN IE */
|
kde_len += 2 + PMKID_LEN; /* PMKR1Name into RSN IE */
|
||||||
kde_len += 300; /* FTIE + 2 * TIE */
|
kde_len += 300; /* FTIE + 2 * TIE */
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
if (WPA_GET_BE32(sm->ip_addr) > 0)
|
if (WPA_GET_BE32(sm->ip_addr) > 0)
|
||||||
kde_len += 2 + RSN_SELECTOR_LEN + 3 * 4;
|
kde_len += 2 + RSN_SELECTOR_LEN + 3 * 4;
|
||||||
|
@ -2769,7 +2769,7 @@ SM_STATE(WPA_PTK, PTKINITNEGOTIATING)
|
||||||
pos = kde;
|
pos = kde;
|
||||||
os_memcpy(pos, wpa_ie, wpa_ie_len);
|
os_memcpy(pos, wpa_ie, wpa_ie_len);
|
||||||
pos += wpa_ie_len;
|
pos += wpa_ie_len;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
||||||
int res;
|
int res;
|
||||||
size_t elen;
|
size_t elen;
|
||||||
|
@ -2785,7 +2785,7 @@ SM_STATE(WPA_PTK, PTKINITNEGOTIATING)
|
||||||
pos -= wpa_ie_len;
|
pos -= wpa_ie_len;
|
||||||
pos += elen;
|
pos += elen;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
if (gtk) {
|
if (gtk) {
|
||||||
u8 hdr[2];
|
u8 hdr[2];
|
||||||
hdr[0] = keyidx & 0x03;
|
hdr[0] = keyidx & 0x03;
|
||||||
|
@ -2795,7 +2795,7 @@ SM_STATE(WPA_PTK, PTKINITNEGOTIATING)
|
||||||
}
|
}
|
||||||
pos = ieee80211w_kde_add(sm, pos);
|
pos = ieee80211w_kde_add(sm, pos);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
||||||
int res;
|
int res;
|
||||||
struct wpa_auth_config *conf;
|
struct wpa_auth_config *conf;
|
||||||
|
@ -2835,7 +2835,7 @@ SM_STATE(WPA_PTK, PTKINITNEGOTIATING)
|
||||||
WPA_PUT_LE32(pos, conf->r0_key_lifetime * 60);
|
WPA_PUT_LE32(pos, conf->r0_key_lifetime * 60);
|
||||||
pos += 4;
|
pos += 4;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
if (WPA_GET_BE32(sm->ip_addr) > 0) {
|
if (WPA_GET_BE32(sm->ip_addr) > 0) {
|
||||||
u8 addr[3 * 4];
|
u8 addr[3 * 4];
|
||||||
|
@ -2905,9 +2905,9 @@ SM_STATE(WPA_PTK, PTKINITDONE)
|
||||||
"pairwise key handshake completed (%s)",
|
"pairwise key handshake completed (%s)",
|
||||||
sm->wpa == WPA_VERSION_WPA ? "WPA" : "RSN");
|
sm->wpa == WPA_VERSION_WPA ? "WPA" : "RSN");
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
wpa_ft_push_pmk_r1(sm->wpa_auth, sm->addr);
|
wpa_ft_push_pmk_r1(sm->wpa_auth, sm->addr);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@ struct wpa_auth_config {
|
||||||
enum mfp_options ieee80211w;
|
enum mfp_options ieee80211w;
|
||||||
int group_mgmt_cipher;
|
int group_mgmt_cipher;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
u8 ssid[SSID_MAX_LEN];
|
u8 ssid[SSID_MAX_LEN];
|
||||||
size_t ssid_len;
|
size_t ssid_len;
|
||||||
u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
|
u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
|
||||||
|
@ -171,7 +171,7 @@ struct wpa_auth_config {
|
||||||
int pmk_r1_push;
|
int pmk_r1_push;
|
||||||
int ft_over_ds;
|
int ft_over_ds;
|
||||||
int ft_psk_generate_local;
|
int ft_psk_generate_local;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
int disable_gtk;
|
int disable_gtk;
|
||||||
int ap_mlme;
|
int ap_mlme;
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
@ -221,13 +221,13 @@ struct wpa_auth_callbacks {
|
||||||
void *ctx), void *cb_ctx);
|
void *ctx), void *cb_ctx);
|
||||||
int (*send_ether)(void *ctx, const u8 *dst, u16 proto, const u8 *data,
|
int (*send_ether)(void *ctx, const u8 *dst, u16 proto, const u8 *data,
|
||||||
size_t data_len);
|
size_t data_len);
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
struct wpa_state_machine * (*add_sta)(void *ctx, const u8 *sta_addr);
|
struct wpa_state_machine * (*add_sta)(void *ctx, const u8 *sta_addr);
|
||||||
int (*send_ft_action)(void *ctx, const u8 *dst,
|
int (*send_ft_action)(void *ctx, const u8 *dst,
|
||||||
const u8 *data, size_t data_len);
|
const u8 *data, size_t data_len);
|
||||||
int (*add_tspec)(void *ctx, const u8 *sta_addr, u8 *tspec_ie,
|
int (*add_tspec)(void *ctx, const u8 *sta_addr, u8 *tspec_ie,
|
||||||
size_t tspec_ielen);
|
size_t tspec_ielen);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
int (*start_ampe)(void *ctx, const u8 *sta_addr);
|
int (*start_ampe)(void *ctx, const u8 *sta_addr);
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
|
@ -313,7 +313,7 @@ int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, int vlan_id);
|
||||||
void wpa_auth_eapol_key_tx_status(struct wpa_authenticator *wpa_auth,
|
void wpa_auth_eapol_key_tx_status(struct wpa_authenticator *wpa_auth,
|
||||||
struct wpa_state_machine *sm, int ack);
|
struct wpa_state_machine *sm, int ack);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
u8 * wpa_sm_write_assoc_resp_ies(struct wpa_state_machine *sm, u8 *pos,
|
u8 * wpa_sm_write_assoc_resp_ies(struct wpa_state_machine *sm, u8 *pos,
|
||||||
size_t max_len, int auth_alg,
|
size_t max_len, int auth_alg,
|
||||||
const u8 *req_ies, size_t req_ies_len);
|
const u8 *req_ies, size_t req_ies_len);
|
||||||
|
@ -329,7 +329,7 @@ int wpa_ft_action_rx(struct wpa_state_machine *sm, const u8 *data, size_t len);
|
||||||
int wpa_ft_rrb_rx(struct wpa_authenticator *wpa_auth, const u8 *src_addr,
|
int wpa_ft_rrb_rx(struct wpa_authenticator *wpa_auth, const u8 *src_addr,
|
||||||
const u8 *data, size_t data_len);
|
const u8 *data, size_t data_len);
|
||||||
void wpa_ft_push_pmk_r1(struct wpa_authenticator *wpa_auth, const u8 *addr);
|
void wpa_ft_push_pmk_r1(struct wpa_authenticator *wpa_auth, const u8 *addr);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
void wpa_wnmsleep_rekey_gtk(struct wpa_state_machine *sm);
|
void wpa_wnmsleep_rekey_gtk(struct wpa_state_machine *sm);
|
||||||
void wpa_set_wnmsleep(struct wpa_state_machine *sm, int flag);
|
void wpa_set_wnmsleep(struct wpa_state_machine *sm, int flag);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include "wpa_auth_i.h"
|
#include "wpa_auth_i.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
|
|
||||||
static int wpa_ft_send_rrb_auth_resp(struct wpa_state_machine *sm,
|
static int wpa_ft_send_rrb_auth_resp(struct wpa_state_machine *sm,
|
||||||
const u8 *current_ap, const u8 *sta_addr,
|
const u8 *current_ap, const u8 *sta_addr,
|
||||||
|
@ -1893,4 +1893,4 @@ void wpa_ft_push_pmk_r1(struct wpa_authenticator *wpa_auth, const u8 *addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
|
@ -53,7 +53,7 @@ static void hostapd_wpa_auth_conf(struct hostapd_bss_config *conf,
|
||||||
wconf->ieee80211w = conf->ieee80211w;
|
wconf->ieee80211w = conf->ieee80211w;
|
||||||
wconf->group_mgmt_cipher = conf->group_mgmt_cipher;
|
wconf->group_mgmt_cipher = conf->group_mgmt_cipher;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
wconf->ssid_len = conf->ssid.ssid_len;
|
wconf->ssid_len = conf->ssid.ssid_len;
|
||||||
if (wconf->ssid_len > SSID_MAX_LEN)
|
if (wconf->ssid_len > SSID_MAX_LEN)
|
||||||
wconf->ssid_len = SSID_MAX_LEN;
|
wconf->ssid_len = SSID_MAX_LEN;
|
||||||
|
@ -74,7 +74,7 @@ static void hostapd_wpa_auth_conf(struct hostapd_bss_config *conf,
|
||||||
wconf->pmk_r1_push = conf->pmk_r1_push;
|
wconf->pmk_r1_push = conf->pmk_r1_push;
|
||||||
wconf->ft_over_ds = conf->ft_over_ds;
|
wconf->ft_over_ds = conf->ft_over_ds;
|
||||||
wconf->ft_psk_generate_local = conf->ft_psk_generate_local;
|
wconf->ft_psk_generate_local = conf->ft_psk_generate_local;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_HS20
|
#ifdef CONFIG_HS20
|
||||||
wconf->disable_gtk = conf->disable_dgaf;
|
wconf->disable_gtk = conf->disable_dgaf;
|
||||||
if (conf->osen) {
|
if (conf->osen) {
|
||||||
|
@ -402,7 +402,7 @@ static int hostapd_wpa_auth_for_each_auth(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
|
|
||||||
struct wpa_auth_ft_iface_iter_data {
|
struct wpa_auth_ft_iface_iter_data {
|
||||||
struct hostapd_data *src_hapd;
|
struct hostapd_data *src_hapd;
|
||||||
|
@ -441,7 +441,7 @@ static int hostapd_wpa_auth_ft_iter(struct hostapd_iface *iface, void *ctx)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_wpa_auth_send_ether(void *ctx, const u8 *dst, u16 proto,
|
static int hostapd_wpa_auth_send_ether(void *ctx, const u8 *dst, u16 proto,
|
||||||
|
@ -466,7 +466,7 @@ static int hostapd_wpa_auth_send_ether(void *ctx, const u8 *dst, u16 proto,
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (proto == ETH_P_RRB && hapd->iface->interfaces &&
|
if (proto == ETH_P_RRB && hapd->iface->interfaces &&
|
||||||
hapd->iface->interfaces->for_each_interface) {
|
hapd->iface->interfaces->for_each_interface) {
|
||||||
int res;
|
int res;
|
||||||
|
@ -481,7 +481,7 @@ static int hostapd_wpa_auth_send_ether(void *ctx, const u8 *dst, u16 proto,
|
||||||
if (res == 1)
|
if (res == 1)
|
||||||
return data_len;
|
return data_len;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
if (hapd->driver && hapd->driver->send_ether)
|
if (hapd->driver && hapd->driver->send_ether)
|
||||||
return hapd->driver->send_ether(hapd->drv_priv, dst,
|
return hapd->driver->send_ether(hapd->drv_priv, dst,
|
||||||
|
@ -504,7 +504,7 @@ static int hostapd_wpa_auth_send_ether(void *ctx, const u8 *dst, u16 proto,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
|
|
||||||
static int hostapd_wpa_auth_send_ft_action(void *ctx, const u8 *dst,
|
static int hostapd_wpa_auth_send_ft_action(void *ctx, const u8 *dst,
|
||||||
const u8 *data, size_t data_len)
|
const u8 *data, size_t data_len)
|
||||||
|
@ -589,7 +589,7 @@ static int hostapd_wpa_auth_add_tspec(void *ctx, const u8 *sta_addr,
|
||||||
return hostapd_add_tspec(hapd, sta_addr, tspec_ie, tspec_ielen);
|
return hostapd_add_tspec(hapd, sta_addr, tspec_ie, tspec_ielen);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
|
|
||||||
int hostapd_setup_wpa(struct hostapd_data *hapd)
|
int hostapd_setup_wpa(struct hostapd_data *hapd)
|
||||||
|
@ -620,11 +620,11 @@ int hostapd_setup_wpa(struct hostapd_data *hapd)
|
||||||
cb.for_each_sta = hostapd_wpa_auth_for_each_sta;
|
cb.for_each_sta = hostapd_wpa_auth_for_each_sta;
|
||||||
cb.for_each_auth = hostapd_wpa_auth_for_each_auth;
|
cb.for_each_auth = hostapd_wpa_auth_for_each_auth;
|
||||||
cb.send_ether = hostapd_wpa_auth_send_ether;
|
cb.send_ether = hostapd_wpa_auth_send_ether;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
cb.send_ft_action = hostapd_wpa_auth_send_ft_action;
|
cb.send_ft_action = hostapd_wpa_auth_send_ft_action;
|
||||||
cb.add_sta = hostapd_wpa_auth_add_sta;
|
cb.add_sta = hostapd_wpa_auth_add_sta;
|
||||||
cb.add_tspec = hostapd_wpa_auth_add_tspec;
|
cb.add_tspec = hostapd_wpa_auth_add_tspec;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
hapd->wpa_auth = wpa_init(hapd->own_addr, &_conf, &cb);
|
hapd->wpa_auth = wpa_init(hapd->own_addr, &_conf, &cb);
|
||||||
if (hapd->wpa_auth == NULL) {
|
if (hapd->wpa_auth == NULL) {
|
||||||
wpa_printf(MSG_ERROR, "WPA initialization failed.");
|
wpa_printf(MSG_ERROR, "WPA initialization failed.");
|
||||||
|
@ -650,7 +650,7 @@ int hostapd_setup_wpa(struct hostapd_data *hapd)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (!hostapd_drv_none(hapd) &&
|
if (!hostapd_drv_none(hapd) &&
|
||||||
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
|
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
|
||||||
hapd->l2 = l2_packet_init(hapd->conf->bridge[0] ?
|
hapd->l2 = l2_packet_init(hapd->conf->bridge[0] ?
|
||||||
|
@ -665,7 +665,7 @@ int hostapd_setup_wpa(struct hostapd_data *hapd)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -703,8 +703,8 @@ void hostapd_deinit_wpa(struct hostapd_data *hapd)
|
||||||
}
|
}
|
||||||
ieee802_1x_deinit(hapd);
|
ieee802_1x_deinit(hapd);
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
l2_packet_deinit(hapd->l2);
|
l2_packet_deinit(hapd->l2);
|
||||||
hapd->l2 = NULL;
|
hapd->l2 = NULL;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,10 +88,10 @@ struct wpa_state_machine {
|
||||||
unsigned int rx_eapol_key_secure:1;
|
unsigned int rx_eapol_key_secure:1;
|
||||||
unsigned int update_snonce:1;
|
unsigned int update_snonce:1;
|
||||||
unsigned int alt_snonce_valid:1;
|
unsigned int alt_snonce_valid:1;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
unsigned int ft_completed:1;
|
unsigned int ft_completed:1;
|
||||||
unsigned int pmk_r1_name_valid:1;
|
unsigned int pmk_r1_name_valid:1;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
unsigned int is_wnmsleep:1;
|
unsigned int is_wnmsleep:1;
|
||||||
|
|
||||||
u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN];
|
u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN];
|
||||||
|
@ -112,7 +112,7 @@ struct wpa_state_machine {
|
||||||
u32 dot11RSNAStatsTKIPLocalMICFailures;
|
u32 dot11RSNAStatsTKIPLocalMICFailures;
|
||||||
u32 dot11RSNAStatsTKIPRemoteMICFailures;
|
u32 dot11RSNAStatsTKIPRemoteMICFailures;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */
|
u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */
|
||||||
size_t xxkey_len;
|
size_t xxkey_len;
|
||||||
u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth
|
u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth
|
||||||
|
@ -131,7 +131,7 @@ struct wpa_state_machine {
|
||||||
u8 ft_pending_pull_nonce[FT_R0KH_R1KH_PULL_NONCE_LEN];
|
u8 ft_pending_pull_nonce[FT_R0KH_R1KH_PULL_NONCE_LEN];
|
||||||
u8 ft_pending_auth_transaction;
|
u8 ft_pending_auth_transaction;
|
||||||
u8 ft_pending_current_ap[ETH_ALEN];
|
u8 ft_pending_current_ap[ETH_ALEN];
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
int pending_1_of_4_timeout;
|
int pending_1_of_4_timeout;
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ void wpa_smk_m3(struct wpa_authenticator *wpa_auth,
|
||||||
const u8 *key_data, size_t key_data_len);
|
const u8 *key_data, size_t key_data_len);
|
||||||
#endif /* CONFIG_PEERKEY */
|
#endif /* CONFIG_PEERKEY */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
int wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len);
|
int wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len);
|
||||||
int wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id,
|
int wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id,
|
||||||
size_t r0kh_id_len,
|
size_t r0kh_id_len,
|
||||||
|
@ -263,6 +263,6 @@ int wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk,
|
||||||
struct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void);
|
struct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void);
|
||||||
void wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache);
|
void wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache);
|
||||||
void wpa_ft_install_ptk(struct wpa_state_machine *sm);
|
void wpa_ft_install_ptk(struct wpa_state_machine *sm);
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
#endif /* WPA_AUTH_I_H */
|
#endif /* WPA_AUTH_I_H */
|
||||||
|
|
|
@ -164,7 +164,7 @@ int wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
num_suites++;
|
num_suites++;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X) {
|
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X) {
|
||||||
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_802_1X);
|
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_802_1X);
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
|
@ -175,7 +175,7 @@ int wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
num_suites++;
|
num_suites++;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256) {
|
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256) {
|
||||||
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_802_1X_SHA256);
|
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_802_1X_SHA256);
|
||||||
|
@ -221,7 +221,7 @@ int wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
num_suites++;
|
num_suites++;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256) {
|
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256) {
|
||||||
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_FILS_SHA256);
|
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_FILS_SHA256);
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
|
@ -232,7 +232,7 @@ int wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
|
||||||
pos += RSN_SELECTOR_LEN;
|
pos += RSN_SELECTOR_LEN;
|
||||||
num_suites++;
|
num_suites++;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#endif /* CONFIG_FILS */
|
#endif /* CONFIG_FILS */
|
||||||
|
|
||||||
#ifdef CONFIG_RSN_TESTING
|
#ifdef CONFIG_RSN_TESTING
|
||||||
|
@ -431,7 +431,7 @@ int wpa_auth_gen_wpa_ie(struct wpa_authenticator *wpa_auth)
|
||||||
return res;
|
return res;
|
||||||
pos += res;
|
pos += res;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(wpa_auth->conf.wpa_key_mgmt)) {
|
if (wpa_key_mgmt_ft(wpa_auth->conf.wpa_key_mgmt)) {
|
||||||
res = wpa_write_mdie(&wpa_auth->conf, pos,
|
res = wpa_write_mdie(&wpa_auth->conf, pos,
|
||||||
buf + sizeof(buf) - pos);
|
buf + sizeof(buf) - pos);
|
||||||
|
@ -439,7 +439,7 @@ int wpa_auth_gen_wpa_ie(struct wpa_authenticator *wpa_auth)
|
||||||
return res;
|
return res;
|
||||||
pos += res;
|
pos += res;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
if (wpa_auth->conf.wpa & WPA_PROTO_WPA) {
|
if (wpa_auth->conf.wpa & WPA_PROTO_WPA) {
|
||||||
res = wpa_write_wpa_ie(&wpa_auth->conf,
|
res = wpa_write_wpa_ie(&wpa_auth->conf,
|
||||||
pos, buf + sizeof(buf) - pos);
|
pos, buf + sizeof(buf) - pos);
|
||||||
|
@ -534,23 +534,23 @@ int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth,
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_IEEE8021X_SUITE_B)
|
else if (data.key_mgmt & WPA_KEY_MGMT_IEEE8021X_SUITE_B)
|
||||||
selector = RSN_AUTH_KEY_MGMT_802_1X_SUITE_B;
|
selector = RSN_AUTH_KEY_MGMT_802_1X_SUITE_B;
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA384)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA384)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FT_FILS_SHA384;
|
selector = RSN_AUTH_KEY_MGMT_FT_FILS_SHA384;
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FT_FILS_SHA256;
|
selector = RSN_AUTH_KEY_MGMT_FT_FILS_SHA256;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FILS_SHA384)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FILS_SHA384)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FILS_SHA384;
|
selector = RSN_AUTH_KEY_MGMT_FILS_SHA384;
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FILS_SHA256)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FILS_SHA256)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FILS_SHA256;
|
selector = RSN_AUTH_KEY_MGMT_FILS_SHA256;
|
||||||
#endif /* CONFIG_FILS */
|
#endif /* CONFIG_FILS */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FT_802_1X;
|
selector = RSN_AUTH_KEY_MGMT_FT_802_1X;
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FT_PSK)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FT_PSK)
|
||||||
selector = RSN_AUTH_KEY_MGMT_FT_PSK;
|
selector = RSN_AUTH_KEY_MGMT_FT_PSK;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256)
|
else if (data.key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256)
|
||||||
selector = RSN_AUTH_KEY_MGMT_802_1X_SHA256;
|
selector = RSN_AUTH_KEY_MGMT_802_1X_SHA256;
|
||||||
|
@ -628,23 +628,23 @@ int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth,
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_IEEE8021X_SUITE_B)
|
else if (key_mgmt & WPA_KEY_MGMT_IEEE8021X_SUITE_B)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_IEEE8021X_SUITE_B;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_IEEE8021X_SUITE_B;
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA384)
|
else if (key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA384)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA384;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA384;
|
||||||
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256)
|
else if (data.key_mgmt & WPA_KEY_MGMT_FT_FILS_SHA256)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA256;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_FILS_SHA256;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_FILS_SHA384)
|
else if (key_mgmt & WPA_KEY_MGMT_FILS_SHA384)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FILS_SHA384;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FILS_SHA384;
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_FILS_SHA256)
|
else if (key_mgmt & WPA_KEY_MGMT_FILS_SHA256)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FILS_SHA256;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FILS_SHA256;
|
||||||
#endif /* CONFIG_FILS */
|
#endif /* CONFIG_FILS */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X)
|
else if (key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_IEEE8021X;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_IEEE8021X;
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_FT_PSK)
|
else if (key_mgmt & WPA_KEY_MGMT_FT_PSK)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_PSK;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_FT_PSK;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
else if (key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256)
|
else if (key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256)
|
||||||
sm->wpa_key_mgmt = WPA_KEY_MGMT_IEEE8021X_SHA256;
|
sm->wpa_key_mgmt = WPA_KEY_MGMT_IEEE8021X_SHA256;
|
||||||
|
@ -703,7 +703,7 @@ int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth,
|
||||||
sm->mgmt_frame_prot = 1;
|
sm->mgmt_frame_prot = 1;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
if (wpa_key_mgmt_ft(sm->wpa_key_mgmt)) {
|
||||||
if (mdie == NULL || mdie_len < MOBILITY_DOMAIN_ID_LEN + 1) {
|
if (mdie == NULL || mdie_len < MOBILITY_DOMAIN_ID_LEN + 1) {
|
||||||
wpa_printf(MSG_DEBUG, "RSN: Trying to use FT, but "
|
wpa_printf(MSG_DEBUG, "RSN: Trying to use FT, but "
|
||||||
|
@ -717,7 +717,7 @@ int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth,
|
||||||
return WPA_INVALID_MDIE;
|
return WPA_INVALID_MDIE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
|
|
||||||
sm->pairwise = wpa_pick_pairwise_cipher(ciphers, 0);
|
sm->pairwise = wpa_pick_pairwise_cipher(ciphers, 0);
|
||||||
if (sm->pairwise < 0)
|
if (sm->pairwise < 0)
|
||||||
|
@ -956,14 +956,14 @@ int wpa_parse_kde_ies(const u8 *buf, size_t len, struct wpa_eapol_ie_parse *ie)
|
||||||
if (*pos == WLAN_EID_RSN) {
|
if (*pos == WLAN_EID_RSN) {
|
||||||
ie->rsn_ie = pos;
|
ie->rsn_ie = pos;
|
||||||
ie->rsn_ie_len = pos[1] + 2;
|
ie->rsn_ie_len = pos[1] + 2;
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
} else if (*pos == WLAN_EID_MOBILITY_DOMAIN) {
|
} else if (*pos == WLAN_EID_MOBILITY_DOMAIN) {
|
||||||
ie->mdie = pos;
|
ie->mdie = pos;
|
||||||
ie->mdie_len = pos[1] + 2;
|
ie->mdie_len = pos[1] + 2;
|
||||||
} else if (*pos == WLAN_EID_FAST_BSS_TRANSITION) {
|
} else if (*pos == WLAN_EID_FAST_BSS_TRANSITION) {
|
||||||
ie->ftie = pos;
|
ie->ftie = pos;
|
||||||
ie->ftie_len = pos[1] + 2;
|
ie->ftie_len = pos[1] + 2;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
} else if (*pos == WLAN_EID_VENDOR_SPECIFIC) {
|
} else if (*pos == WLAN_EID_VENDOR_SPECIFIC) {
|
||||||
ret = wpa_parse_generic(pos, end, ie);
|
ret = wpa_parse_generic(pos, end, ie);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -33,12 +33,12 @@ struct wpa_eapol_ie_parse {
|
||||||
const u8 *igtk;
|
const u8 *igtk;
|
||||||
size_t igtk_len;
|
size_t igtk_len;
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#endif /* CONFIG_IEEE80211W */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
const u8 *mdie;
|
const u8 *mdie;
|
||||||
size_t mdie_len;
|
size_t mdie_len;
|
||||||
const u8 *ftie;
|
const u8 *ftie;
|
||||||
size_t ftie_len;
|
size_t ftie_len;
|
||||||
#endif /* CONFIG_IEEE80211R */
|
#endif /* CONFIG_IEEE80211R_AP */
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
const u8 *ip_addr_req;
|
const u8 *ip_addr_req;
|
||||||
const u8 *ip_addr_alloc;
|
const u8 *ip_addr_alloc;
|
||||||
|
|
|
@ -210,6 +210,10 @@ NEED_SHA256=y
|
||||||
NEED_AES_OMAC1=y
|
NEED_AES_OMAC1=y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_IEEE80211R_AP
|
||||||
|
CONFIG_IEEE80211R=y
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R
|
||||||
L_CFLAGS += -DCONFIG_IEEE80211R
|
L_CFLAGS += -DCONFIG_IEEE80211R
|
||||||
OBJS += src/rsn_supp/wpa_ft.c
|
OBJS += src/rsn_supp/wpa_ft.c
|
||||||
|
@ -873,7 +877,8 @@ NEED_AES_WRAP=y
|
||||||
OBJS += src/ap/wpa_auth.c
|
OBJS += src/ap/wpa_auth.c
|
||||||
OBJS += src/ap/wpa_auth_ie.c
|
OBJS += src/ap/wpa_auth_ie.c
|
||||||
OBJS += src/ap/pmksa_cache_auth.c
|
OBJS += src/ap/pmksa_cache_auth.c
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R_AP
|
||||||
|
L_CFLAGS += -DCONFIG_IEEE80211R_AP
|
||||||
OBJS += src/ap/wpa_auth_ft.c
|
OBJS += src/ap/wpa_auth_ft.c
|
||||||
endif
|
endif
|
||||||
ifdef CONFIG_PEERKEY
|
ifdef CONFIG_PEERKEY
|
||||||
|
|
|
@ -243,6 +243,10 @@ NEED_SHA256=y
|
||||||
NEED_AES_OMAC1=y
|
NEED_AES_OMAC1=y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_IEEE80211R_AP
|
||||||
|
CONFIG_IEEE80211R=y
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R
|
||||||
CFLAGS += -DCONFIG_IEEE80211R
|
CFLAGS += -DCONFIG_IEEE80211R
|
||||||
OBJS += ../src/rsn_supp/wpa_ft.o
|
OBJS += ../src/rsn_supp/wpa_ft.o
|
||||||
|
@ -914,7 +918,8 @@ NEED_AES_WRAP=y
|
||||||
OBJS += ../src/ap/wpa_auth.o
|
OBJS += ../src/ap/wpa_auth.o
|
||||||
OBJS += ../src/ap/wpa_auth_ie.o
|
OBJS += ../src/ap/wpa_auth_ie.o
|
||||||
OBJS += ../src/ap/pmksa_cache_auth.o
|
OBJS += ../src/ap/pmksa_cache_auth.o
|
||||||
ifdef CONFIG_IEEE80211R
|
ifdef CONFIG_IEEE80211R_AP
|
||||||
|
CFLAGS += -DCONFIG_IEEE80211R_AP
|
||||||
OBJS += ../src/ap/wpa_auth_ft.o
|
OBJS += ../src/ap/wpa_auth_ft.o
|
||||||
endif
|
endif
|
||||||
ifdef CONFIG_PEERKEY
|
ifdef CONFIG_PEERKEY
|
||||||
|
|
|
@ -370,9 +370,13 @@ CONFIG_PEERKEY=y
|
||||||
# amount of memory/flash.
|
# amount of memory/flash.
|
||||||
#CONFIG_DYNAMIC_EAP_METHODS=y
|
#CONFIG_DYNAMIC_EAP_METHODS=y
|
||||||
|
|
||||||
# IEEE Std 802.11r-2008 (Fast BSS Transition)
|
# IEEE Std 802.11r-2008 (Fast BSS Transition) for station mode
|
||||||
#CONFIG_IEEE80211R=y
|
#CONFIG_IEEE80211R=y
|
||||||
|
|
||||||
|
# IEEE Std 802.11r-2008 (Fast BSS Transition) for AP mode (implies
|
||||||
|
# CONFIG_IEEE80211R).
|
||||||
|
#CONFIG_IEEE80211R_AP=y
|
||||||
|
|
||||||
# Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt)
|
# Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt)
|
||||||
#CONFIG_DEBUG_FILE=y
|
#CONFIG_DEBUG_FILE=y
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue