Parcourir la source

wlantest: Add counters for AP deauth/disassoc while asleep/awake

These can be used to check whether the STA is in power save mode
and because of that, is not seeing disconnection notifications.
Jouni Malinen il y a 14 ans
Parent
commit
e7ba4e2c74
3 fichiers modifiés avec 22 ajouts et 4 suppressions
  1. 14 4
      wlantest/rx_mgmt.c
  2. 4 0
      wlantest/wlantest_cli.c
  3. 4 0
      wlantest/wlantest_ctrl.h

+ 14 - 4
wlantest/rx_mgmt.c

@@ -204,10 +204,14 @@ static void rx_mgmt_deauth(struct wlantest *wt, const u8 *data, size_t len,
 		return;
 	}
 
-	if (os_memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN) == 0)
+	if (os_memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN) == 0) {
 		sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DEAUTH_RX :
 			      WLANTEST_STA_COUNTER_INVALID_DEAUTH_RX]++;
-	else
+		if (sta->pwrmgt && !sta->pspoll)
+			sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_ASLEEP]++;
+		else
+			sta->counters[WLANTEST_STA_COUNTER_DEAUTH_RX_AWAKE]++;
+	} else
 		sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DEAUTH_TX :
 			      WLANTEST_STA_COUNTER_INVALID_DEAUTH_TX]++;
 
@@ -529,10 +533,16 @@ static void rx_mgmt_disassoc(struct wlantest *wt, const u8 *data, size_t len,
 		return;
 	}
 
-	if (os_memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN) == 0)
+	if (os_memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN) == 0) {
 		sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DISASSOC_RX :
 			      WLANTEST_STA_COUNTER_INVALID_DISASSOC_RX]++;
-	else
+		if (sta->pwrmgt && !sta->pspoll)
+			sta->counters[
+				WLANTEST_STA_COUNTER_DISASSOC_RX_ASLEEP]++;
+		else
+			sta->counters[
+				WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE]++;
+	} else
 		sta->counters[valid ? WLANTEST_STA_COUNTER_VALID_DISASSOC_TX :
 			      WLANTEST_STA_COUNTER_INVALID_DISASSOC_TX]++;
 

+ 4 - 0
wlantest/wlantest_cli.c

@@ -547,6 +547,10 @@ static const struct sta_counters sta_counters[] = {
 	  WLANTEST_STA_COUNTER_INVALID_DEAUTH_RX_ACK },
 	{ "invalid_disassoc_rx_ack",
 	  WLANTEST_STA_COUNTER_INVALID_DISASSOC_RX_ACK },
+	{ "deauth_rx_asleep", WLANTEST_STA_COUNTER_DEAUTH_RX_ASLEEP },
+	{ "deauth_rx_awake", WLANTEST_STA_COUNTER_DEAUTH_RX_AWAKE },
+	{ "disassoc_rx_asleep", WLANTEST_STA_COUNTER_DISASSOC_RX_ASLEEP },
+	{ "disassoc_rx_awake", WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE },
 	{ NULL, 0 }
 };
 

+ 4 - 0
wlantest/wlantest_ctrl.h

@@ -101,6 +101,10 @@ enum wlantest_sta_counter {
 	WLANTEST_STA_COUNTER_VALID_DISASSOC_RX_ACK,
 	WLANTEST_STA_COUNTER_INVALID_DEAUTH_RX_ACK,
 	WLANTEST_STA_COUNTER_INVALID_DISASSOC_RX_ACK,
+	WLANTEST_STA_COUNTER_DEAUTH_RX_ASLEEP,
+	WLANTEST_STA_COUNTER_DEAUTH_RX_AWAKE,
+	WLANTEST_STA_COUNTER_DISASSOC_RX_ASLEEP,
+	WLANTEST_STA_COUNTER_DISASSOC_RX_AWAKE,
 	NUM_WLANTEST_STA_COUNTER
 };