path: root/wpa_supplicant/events.c
diff options
authorJouni Malinen <jouni@qca.qualcomm.com>2012-12-21 19:35:35 (GMT)
committerJouni Malinen <j@w1.fi>2012-12-21 19:35:35 (GMT)
commit3ab35a660364dc68eaebfc0df6130071bbee6be5 (patch)
tree294c1a72019f93e9d969d11e0ca9db2491f39fa4 /wpa_supplicant/events.c
parent318e772ad1ee056b3ed8f5e3fdd4037e01fe3f5e (diff)
Extend EAPOL frames processing workaround for roaming cases
Commit 1ff733383f3d5c73233ef452a738765667021609 added a mechanism to work around issues due to association events and EAPOL RX events being getting reordered. However, this applied only for the case where wpa_supplicant is not in associated state. The same issue can happen in roaming case with drivers that perform BSS selection internally (or in firmware). Handle that case similarly by delaying received EAPOL frame processing if the source address of the EAPOL frame does not match the current BSSID. Since wired IEEE 802.1X do not have BSSID, make this additional workaround conditional on BSSID match having been observed during the previous association. This fixes issues where the initial EAPOL frame after reassociation was either dropped (e.g., due to replay counter not increasing) or replied to with incorrect destination address (the BSSID of the old AP). This can result in significantly more robust roaming behavior with drivers that do not use wpa_supplicant for BSS selection. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
Diffstat (limited to 'wpa_supplicant/events.c')
1 files changed, 2 insertions, 0 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 68b407b..441718d 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -1743,6 +1743,8 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
eapol_sm_notify_eap_success(wpa_s->eapol, TRUE);
+ wpa_s->last_eapol_matches_bssid = 0;
if (wpa_s->pending_eapol_rx) {
struct os_time now, age;