diff options
Diffstat (limited to 'wlantest')
-rw-r--r-- | wlantest/rx_mgmt.c | 20 | ||||
-rw-r--r-- | wlantest/wlantest_cli.c | 4 | ||||
-rw-r--r-- | wlantest/wlantest_ctrl.h | 4 |
3 files changed, 26 insertions, 2 deletions
diff --git a/wlantest/rx_mgmt.c b/wlantest/rx_mgmt.c index 6f7fd40..c7a9390 100644 --- a/wlantest/rx_mgmt.c +++ b/wlantest/rx_mgmt.c @@ -190,6 +190,7 @@ static void rx_mgmt_deauth(struct wlantest *wt, const u8 *data, size_t len, const struct ieee80211_mgmt *mgmt; struct wlantest_bss *bss; struct wlantest_sta *sta; + u16 fc, reason; mgmt = (const struct ieee80211_mgmt *) data; bss = bss_get(wt, mgmt->bssid); @@ -206,10 +207,11 @@ static void rx_mgmt_deauth(struct wlantest *wt, const u8 *data, size_t len, return; } + reason = le_to_host16(mgmt->u.deauth.reason_code); wpa_printf(MSG_DEBUG, "DEAUTH " MACSTR " -> " MACSTR " (reason=%u) (valid=%d)", MAC2STR(mgmt->sa), MAC2STR(mgmt->da), - le_to_host16(mgmt->u.deauth.reason_code), valid); + reason, valid); wpa_hexdump(MSG_MSGDUMP, "DEAUTH payload", data + 24, len - 24); if (sta == NULL) { @@ -225,6 +227,12 @@ static void rx_mgmt_deauth(struct wlantest *wt, const u8 *data, size_t len, sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_ASLEEP]++; else sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_AWAKE]++; + + fc = le_to_host16(mgmt->frame_control); + if (!(fc & WLAN_FC_ISWEP) && reason == 6) + sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_RC6]++; + else if (!(fc & WLAN_FC_ISWEP) && reason == 7) + sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_RC7]++; } else sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DEAUTH_TX : WLANTEST_STA_COUNTER_INVALID_DEAUTH_TX]++; @@ -526,6 +534,7 @@ static void rx_mgmt_disassoc(struct wlantest *wt, const u8 *data, size_t len, const struct ieee80211_mgmt *mgmt; struct wlantest_bss *bss; struct wlantest_sta *sta; + u16 fc, reason; mgmt = (const struct ieee80211_mgmt *) data; bss = bss_get(wt, mgmt->bssid); @@ -542,10 +551,11 @@ static void rx_mgmt_disassoc(struct wlantest *wt, const u8 *data, size_t len, return; } + reason = le_to_host16(mgmt->u.disassoc.reason_code); wpa_printf(MSG_DEBUG, "DISASSOC " MACSTR " -> " MACSTR " (reason=%u) (valid=%d)", MAC2STR(mgmt->sa), MAC2STR(mgmt->da), - le_to_host16(mgmt->u.disassoc.reason_code), valid); + reason, valid); wpa_hexdump(MSG_MSGDUMP, "DISASSOC payload", data + 24, len - 24); if (sta == NULL) { @@ -563,6 +573,12 @@ static void rx_mgmt_disassoc(struct wlantest *wt, const u8 *data, size_t len, else sta->counters[ WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE]++; + + fc = le_to_host16(mgmt->frame_control); + if (!(fc & WLAN_FC_ISWEP) && reason == 6) + sta->counters[WLANTEST_STA_COUNTER_DISASSOC_RX_RC6]++; + else if (!(fc & WLAN_FC_ISWEP) && reason == 7) + sta->counters[WLANTEST_STA_COUNTER_DISASSOC_RX_RC7]++; } else sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DISASSOC_TX : WLANTEST_STA_COUNTER_INVALID_DISASSOC_TX]++; diff --git a/wlantest/wlantest_cli.c b/wlantest/wlantest_cli.c index 3194677..6377fc1 100644 --- a/wlantest/wlantest_cli.c +++ b/wlantest/wlantest_cli.c @@ -552,6 +552,10 @@ static const struct sta_counters sta_counters[] = { { "disassoc_rx_asleep", WLANTEST_STA_COUNTER_DISASSOC_RX_ASLEEP }, { "disassoc_rx_awake", WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE }, { "prot_data_tx", WLANTEST_STA_COUNTER_PROT_DATA_TX }, + { "deauth_rx_rc6", WLANTEST_STA_COUNTER_DEAUTH_RX_RC6 }, + { "deauth_rx_rc7", WLANTEST_STA_COUNTER_DEAUTH_RX_RC7 }, + { "disassoc_rx_rc6", WLANTEST_STA_COUNTER_DISASSOC_RX_RC6 }, + { "disassoc_rx_rc7", WLANTEST_STA_COUNTER_DISASSOC_RX_RC7 }, { NULL, 0 } }; diff --git a/wlantest/wlantest_ctrl.h b/wlantest/wlantest_ctrl.h index 91f5af6..9731bd6 100644 --- a/wlantest/wlantest_ctrl.h +++ b/wlantest/wlantest_ctrl.h @@ -107,6 +107,10 @@ enum wlantest_sta_counter { WLANTEST_STA_COUNTER_DISASSOC_RX_ASLEEP, WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE, WLANTEST_STA_COUNTER_PROT_DATA_TX, + WLANTEST_STA_COUNTER_DEAUTH_RX_RC6, + WLANTEST_STA_COUNTER_DEAUTH_RX_RC7, + WLANTEST_STA_COUNTER_DISASSOC_RX_RC6, + WLANTEST_STA_COUNTER_DISASSOC_RX_RC7, NUM_WLANTEST_STA_COUNTER }; |