hostapd: Fix vht_capab 'Maximum A-MPDU Length Exponent' handling
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>
This commit is contained in:
parent
3bdc651a62
commit
905828fea4
3 changed files with 23 additions and 4 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in a new issue