]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add more debug prints for 20/40 BSS Coexistence Management frame Rx
authorJouni Malinen <jouni@codeaurora.org>
Wed, 21 Mar 2018 14:32:35 +0000 (16:32 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 21 Mar 2018 14:32:35 +0000 (16:32 +0200)
This makes it easier to understand what kind of information a STA is
reporting about 20/40 MHz coexistence requirements.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/ap/ieee802_11.c
src/ap/ieee802_11_ht.c

index ec57f32ee6b50b7fbd2e104708d2842d75d37b00..71b6c4366c4e845cc639f46f94165f94542c650f 100644 (file)
@@ -3727,9 +3727,6 @@ static int handle_action(struct hostapd_data *hapd,
                if (len >= IEEE80211_HDRLEN + 2 &&
                    mgmt->u.action.u.public_action.action ==
                    WLAN_PA_20_40_BSS_COEX) {
-                       wpa_printf(MSG_DEBUG,
-                                  "HT20/40 coex mgmt frame received from STA "
-                                  MACSTR, MAC2STR(mgmt->sa));
                        hostapd_2040_coex_action(hapd, mgmt, len);
                        return 1;
                }
index 146e4471269f6a8f8787b4374b41efbcd66eb6db..6920184a632cfc401284cad7f219401b1b618724 100644 (file)
@@ -237,16 +237,27 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
        const u8 *start = (const u8 *) mgmt;
        const u8 *data = start + IEEE80211_HDRLEN + 2;
 
+       wpa_printf(MSG_DEBUG,
+                  "HT: Received 20/40 BSS Coexistence Management frame from "
+                  MACSTR, MAC2STR(mgmt->sa));
+
        hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211,
                       HOSTAPD_LEVEL_DEBUG, "hostapd_public_action - action=%d",
                       mgmt->u.action.u.public_action.action);
 
-       if (!(iface->conf->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))
+       if (!(iface->conf->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET)) {
+               wpa_printf(MSG_DEBUG,
+                          "Ignore 20/40 BSS Coexistence Management frame since 40 MHz capability is not enabled");
                return;
+       }
 
-       if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie))
+       if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie)) {
+               wpa_printf(MSG_DEBUG,
+                          "Ignore too short 20/40 BSS Coexistence Management frame");
                return;
+       }
 
+       /* 20/40 BSS Coexistence element */
        bc_ie = (struct ieee80211_2040_bss_coex_ie *) data;
        if (bc_ie->element_id != WLAN_EID_20_40_BSS_COEXISTENCE ||
            bc_ie->length < 1) {
@@ -254,13 +265,28 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
                           bc_ie->element_id, bc_ie->length);
                return;
        }
-       if (len < IEEE80211_HDRLEN + 2 + 2 + bc_ie->length)
+       if (len < IEEE80211_HDRLEN + 2 + 2 + bc_ie->length) {
+               wpa_printf(MSG_DEBUG,
+                          "Truncated 20/40 BSS Coexistence element");
                return;
+       }
        data += 2 + bc_ie->length;
 
-       wpa_printf(MSG_DEBUG, "20/40 BSS Coexistence Information field: 0x%x",
-                  bc_ie->coex_param);
+       wpa_printf(MSG_DEBUG,
+                  "20/40 BSS Coexistence Information field: 0x%x (%s%s%s%s%s%s)",
+                  bc_ie->coex_param,
+                  (bc_ie->coex_param & BIT(0)) ? "[InfoReq]" : "",
+                  (bc_ie->coex_param & BIT(1)) ? "[40MHzIntolerant]" : "",
+                  (bc_ie->coex_param & BIT(2)) ? "[20MHzBSSWidthReq]" : "",
+                  (bc_ie->coex_param & BIT(3)) ? "[OBSSScanExemptionReq]" : "",
+                  (bc_ie->coex_param & BIT(4)) ?
+                  "[OBSSScanExemptionGrant]" : "",
+                  (bc_ie->coex_param & (BIT(5) | BIT(6) | BIT(7))) ?
+                  "[Reserved]" : "");
+
        if (bc_ie->coex_param & WLAN_20_40_BSS_COEX_20MHZ_WIDTH_REQ) {
+               /* Intra-BSS communication prohibiting 20/40 MHz BSS operation
+                */
                hostapd_logger(hapd, mgmt->sa,
                               HOSTAPD_MODULE_IEEE80211,
                               HOSTAPD_LEVEL_DEBUG,
@@ -269,6 +295,8 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
        }
 
        if (bc_ie->coex_param & WLAN_20_40_BSS_COEX_40MHZ_INTOL) {
+               /* Inter-BSS communication prohibiting 20/40 MHz BSS operation
+                */
                hostapd_logger(hapd, mgmt->sa,
                               HOSTAPD_MODULE_IEEE80211,
                               HOSTAPD_LEVEL_DEBUG,
@@ -276,12 +304,16 @@ void hostapd_2040_coex_action(struct hostapd_data *hapd,
                is_ht40_allowed = 0;
        }
 
+       /* 20/40 BSS Intolerant Channel Report element (zero or more times) */
        if (start + len - data >= 3 &&
            data[0] == WLAN_EID_20_40_BSS_INTOLERANT && data[1] >= 1) {
                u8 ielen = data[1];
 
-               if (ielen > start + len - data - 2)
+               if (ielen > start + len - data - 2) {
+                       wpa_printf(MSG_DEBUG,
+                                  "Truncated 20/40 BSS Intolerant Channel Report element");
                        return;
+               }
                ic_report = (struct ieee80211_2040_intol_chan_report *) data;
                wpa_printf(MSG_DEBUG,
                           "20/40 BSS Intolerant Channel Report: Operating Class %u",