Skip to contentSkip to conversation

mac80211: Account HT Control field in Data frame hdrlen according to 802.11n-2009

PATCH In review Andriy Tkachuk 2 participants 3 messages Jan 20, 2010 – Jan 21, 2010 802.11 (including cfg80211/NL80211)

lore
Share & tools
lore
#0 lore raw

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".

---
 include/linux/ieee80211.h |    2 ++
 net/wireless/util.c       |    5 ++++-
 2 files changed, 6 insertions(+), 1 deletions(-)

Prev. patch may be ignored since its format was invalid - it extended tabs to spaces (copy/paste from PuTTY issue). Hope this one will be better. Sorry for inconvenience.

include/linux/ieee80211.h +2 -0
index 8427019..1998495 100644
@@ -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
index 23557c1..be2ab8c 100644
@@ -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;
 	}
 
#1 lore raw
Quoted 9 lines · Andriy Tkachuk

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.

Quoted 6 lines

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".

Very nice, thanks for the fuller commit log. Hm, the question I also wanted to address was whether or not this is a stable fix to go for 2.6.32 and 2.6.33, I suppose we'd have to look at all callers of ieee80211_hdrlen() but this seems like a stable fix to me.

Luis

#2 lore raw
Quoted 4 lines · Luis R. Rodriguez

Very nice, thanks for the fuller commit log. Hm, the question I also wanted to address was whether or not this is a stable fix to go for 2.6.32 and 2.6.33, I suppose we'd have to look at all callers of ieee80211_hdrlen() but this seems like a stable fix to me.

As I already said, I would rather classify this change as a feature then a fix, so I would advise to give the code more time for breaking-in starting from the current branch and not put the stable at an odd risk (which seem to be the minor one, though).

Regards,
Andriy