diff --git a/wlantest/bss.c b/wlantest/bss.c index 03baf949f..04afe2b29 100644 --- a/wlantest/bss.c +++ b/wlantest/bss.c @@ -223,6 +223,7 @@ void bss_update(struct wlantest *wt, struct wlantest_bss *bss, if (!update) return; + bss->beacon_seen = 1; bss->prev_capab_info = bss->capab_info; bss->proto = 0; bss->pairwise_cipher = 0; diff --git a/wlantest/sta.c b/wlantest/sta.c index 1268b8a09..1e53532a0 100644 --- a/wlantest/sta.c +++ b/wlantest/sta.c @@ -66,7 +66,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems) struct wpa_ie_data data; struct wlantest_bss *bss = sta->bss; - if (elems->wpa_ie && !bss->wpaie[0]) { + if (elems->wpa_ie && !bss->wpaie[0] && + (bss->beacon_seen || bss->proberesp_seen)) { wpa_printf(MSG_INFO, "WPA IE included in Association Request " "frame from " MACSTR " even though BSS does not " "use WPA - ignore IE", @@ -74,7 +75,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems) elems->wpa_ie = NULL; } - if (elems->rsn_ie && !bss->rsnie[0]) { + if (elems->rsn_ie && !bss->rsnie[0] && + (bss->beacon_seen || bss->proberesp_seen)) { wpa_printf(MSG_INFO, "RSN IE included in Association Request " "frame from " MACSTR " even though BSS does not " "use RSN - ignore IE", @@ -82,7 +84,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems) elems->rsn_ie = NULL; } - if (elems->osen && !bss->osenie[0]) { + if (elems->osen && !bss->osenie[0] && + (bss->beacon_seen || bss->proberesp_seen)) { wpa_printf(MSG_INFO, "OSEN IE included in Association Request " "frame from " MACSTR " even though BSS does not " "use OSEN - ignore IE", diff --git a/wlantest/wlantest.h b/wlantest/wlantest.h index 7a99b489c..bad005d81 100644 --- a/wlantest/wlantest.h +++ b/wlantest/wlantest.h @@ -129,6 +129,7 @@ struct wlantest_bss { u16 prev_capab_info; u8 ssid[32]; size_t ssid_len; + int beacon_seen; int proberesp_seen; int parse_error_reported; u8 wpaie[257];