]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: Fix vht_capab 'Maximum A-MPDU Length Exponent' handling
authorBartosz Markowski <bartosz.markowski@tieto.com>
Wed, 26 Feb 2014 09:39:47 +0000 (10:39 +0100)
committerJouni Malinen <j@w1.fi>
Wed, 5 Mar 2014 22:09:37 +0000 (00:09 +0200)
As per IEEE Std 802.11ac-2013, 'Maximum A-MPDU Length Exponent' field
value is in the range of 0 to 7. Previous implementation assumed EXP0 to
be the maximum length (bits 23, 24 and 25 set) what is incorrect.

This patch adds options to set it up within the 0 to 7 range.

Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com>
hostapd/config_file.c
src/ap/hw_features.c
src/common/ieee802_11_defs.h

index fa7d14a8ac36fb2209eeb01ccff1eed7096d55b6..bd66474392dc8a32141a589d01034a44badc7911 100644 (file)
@@ -1096,8 +1096,20 @@ static int hostapd_config_vht_capab(struct hostapd_config *conf,
                conf->vht_capab |= VHT_CAP_VHT_TXOP_PS;
        if (os_strstr(capab, "[HTC-VHT]"))
                conf->vht_capab |= VHT_CAP_HTC_VHT;
-       if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP0]"))
-               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT;
+       if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP7]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP6]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_6;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP5]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_5;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP4]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_4;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP3]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_3;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP2]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_2;
+       else if (os_strstr(capab, "[MAX-A-MPDU-LEN-EXP1]"))
+               conf->vht_capab |= VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_1;
        if (os_strstr(capab, "[VHT-LINK-ADAPT2]") &&
            (conf->vht_capab & VHT_CAP_HTC_VHT))
                conf->vht_capab |= VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB;
index af1bc9bb424cea6c4e1504070dedb1089d511bb9..28e92fd8d9beb74aeb8957eb2d1c3bdeab934248 100644 (file)
@@ -764,7 +764,7 @@ static int ieee80211ac_supported_vht_capab(struct hostapd_iface *iface)
        VHT_CAP_CHECK(VHT_CAP_MU_BEAMFORMEE_CAPABLE);
        VHT_CAP_CHECK(VHT_CAP_VHT_TXOP_PS);
        VHT_CAP_CHECK(VHT_CAP_HTC_VHT);
-       VHT_CAP_CHECK_MAX(VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT);
+       VHT_CAP_CHECK_MAX(VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX);
        VHT_CAP_CHECK(VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB);
        VHT_CAP_CHECK(VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB);
        VHT_CAP_CHECK(VHT_CAP_RX_ANTENNA_PATTERN);
index cf4664fd14de4dbd701899f946a491adaa933b71..dcee679d2bd6a9ed5050b33e475c93e27f39ea3d 100644 (file)
@@ -758,7 +758,14 @@ struct ieee80211_vht_operation {
 #define VHT_CAP_MU_BEAMFORMEE_CAPABLE               ((u32) BIT(20))
 #define VHT_CAP_VHT_TXOP_PS                         ((u32) BIT(21))
 #define VHT_CAP_HTC_VHT                             ((u32) BIT(22))
-#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT          ((u32) BIT(23) | \
+
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_1        ((u32) BIT(23))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_2        ((u32) BIT(24))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_3        ((u32) BIT(23) | BIT(24))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_4        ((u32) BIT(25))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_5        ((u32) BIT(23) | BIT(25))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_6        ((u32) BIT(24) | BIT(25))
+#define VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MAX      ((u32) BIT(23) | \
                                                           BIT(24) | BIT(25))
 #define VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB   ((u32) BIT(27))
 #define VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB     ((u32) BIT(26) | BIT(27))