mac80211: Account HT Control field in Data frame hdrlen according to 802.11n-2009
PATCH 1/1 mac80211: Account HT Control field in Data frame hdrlen according to 802.11n-2009
ieee80211_hdrlen() should account account new HT Control field in 802.11 data frame header introduced by IEEE 802.11n standard.
According to 802.11n-2009 HT Control field is present in data frames when both of following are met:
1. It is QoS data frame.
2. Order bit is set in Frame Control field.
The change might be totally compatible with legacy non-11n aware frames, because 802.11-2007 standard states that "all QoS STAs set this subfield to 0".
Signed-off-by Andriy V. Tkachuk <[email protected]>
--- include/linux/ieee80211.h | 2 ++ net/wireless/util.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletions(-)
include/linux/ieee80211.h +2 -0
@@ -138,6 +138,8 @@#define IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK 0x03#define IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT 5 +#define IEEE80211_HT_CTL_LEN 4 +struct ieee80211_hdr {__le16 frame_control;__le16 duration_id;
net/wireless/util.c +4 -1
@@ -227,8 +227,11 @@ unsigned int ieee80211_hdrlen(__le16 fc)if (ieee80211_is_data (fc)) {if (ieee80211_has_a4 (fc)) hdrlen =30 ; -if (ieee80211_is_data_qos (fc)) +if (ieee80211_is_data_qos (fc)) { hdrlen +=IEEE80211_QOS_CTL_LEN ; +if (ieee80211_has_order (fc)) + hdrlen +=IEEE80211_HT_CTL_LEN ; + } goto out; }