diff options
author | Jouni Malinen <jouni@qca.qualcomm.com> | 2011-10-26 00:06:06 +0300 |
---|---|---|
committer | Jouni Malinen <j@w1.fi> | 2011-10-26 00:06:06 +0300 |
commit | 62f05ce9c54d6cbbfe57d69a5bf126fd96ee5265 (patch) | |
tree | f2f41a73f3a3a49c82a8d84e3ae5537e7c03f913 /wlantest | |
parent | 1d21e9dd5a5ae29681fa5095c1d79eff7f0ad546 (diff) | |
download | external_wpa_supplicant_8_ti-62f05ce9c54d6cbbfe57d69a5bf126fd96ee5265.zip external_wpa_supplicant_8_ti-62f05ce9c54d6cbbfe57d69a5bf126fd96ee5265.tar.gz external_wpa_supplicant_8_ti-62f05ce9c54d6cbbfe57d69a5bf126fd96ee5265.tar.bz2 |
wlantest: Add STA counters for disconnect reason 6/7 RX
These can be useful in tests involving association state mismatch
between the AP and the STA (i.e., STA assumes it is still associated
but the AP does not have association state). In such a case, the AP
would be sending out unprotected Deauthentication or Disassociation
frames with reason code 6 or 7 depending on what frame is triggering
this.
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 }; |