From: Felix Fietkau Date: Sun, 23 Sep 2012 10:23:16 +0000 (+0300) Subject: hostapd: Clear WLAN_STA_ASSOC_REQ_OK if sending the assoc response failed X-Git-Tag: hostap_2_0~214 X-Git-Url: http://www.project-moonshot.org/gitweb/?a=commitdiff_plain;h=22b42372d081eb8e310742f718ebe9abcfacb51c;p=mech_eap.git hostapd: Clear WLAN_STA_ASSOC_REQ_OK if sending the assoc response failed As long as WLAN_STA_ASSOC_REQ_OK is set in sta->flags, Class 3 frames do not trigger a disassoc/deauth. If it is still set even after the assoc response tx has already failed, it may take somewhat longer for clients to realize that the connection wasn't fully established. Signed-hostap: Felix Fietkau --- diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index 211ee1b..4b6e9d7 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -1506,13 +1506,6 @@ static void handle_assoc_cb(struct hostapd_data *hapd, int new_assoc = 1; struct ieee80211_ht_capabilities ht_cap; - if (!ok) { - hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211, - HOSTAPD_LEVEL_DEBUG, - "did not acknowledge association response"); - return; - } - if (len < IEEE80211_HDRLEN + (reassoc ? sizeof(mgmt->u.reassoc_resp) : sizeof(mgmt->u.assoc_resp))) { printf("handle_assoc_cb(reassoc=%d) - too short payload " @@ -1520,11 +1513,6 @@ static void handle_assoc_cb(struct hostapd_data *hapd, return; } - if (reassoc) - status = le_to_host16(mgmt->u.reassoc_resp.status_code); - else - status = le_to_host16(mgmt->u.assoc_resp.status_code); - sta = ap_get_sta(hapd, mgmt->da); if (!sta) { printf("handle_assoc_cb: STA " MACSTR " not found\n", @@ -1532,6 +1520,19 @@ static void handle_assoc_cb(struct hostapd_data *hapd, return; } + if (!ok) { + hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211, + HOSTAPD_LEVEL_DEBUG, + "did not acknowledge association response"); + sta->flags &= ~WLAN_STA_ASSOC_REQ_OK; + return; + } + + if (reassoc) + status = le_to_host16(mgmt->u.reassoc_resp.status_code); + else + status = le_to_host16(mgmt->u.assoc_resp.status_code); + if (status != WLAN_STATUS_SUCCESS) goto fail;