summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_proto.h
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-06-09 16:32:07 +0000
committersam <sam@FreeBSD.org>2009-06-09 16:32:07 +0000
commit61418971f4dc85a3632054e202ccf76013a93e36 (patch)
tree0cfaff84cbdaf337d6e9b77890834939c8a50988 /sys/net80211/ieee80211_proto.h
parentaf60635fabd4377e14bc00ac6a5d6723f01308ed (diff)
downloadFreeBSD-src-61418971f4dc85a3632054e202ccf76013a93e36.zip
FreeBSD-src-61418971f4dc85a3632054e202ccf76013a93e36.tar.gz
Correct ieee80211_gettid:
o don't increment extracted tid, this was a vestige of IEEE80211_NONQOS_TID being defined as 0 (w/ real tid's +1) o handle 4-address frames (add IEEE80211_IS_DSTODS to check if an 802.11 header is DSTODS) Submitted by: cbzimmer Reviewed by: avatar
Diffstat (limited to 'sys/net80211/ieee80211_proto.h')
-rw-r--r--sys/net80211/ieee80211_proto.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/net80211/ieee80211_proto.h b/sys/net80211/ieee80211_proto.h
index e55fde9..de043c3 100644
--- a/sys/net80211/ieee80211_proto.h
+++ b/sys/net80211/ieee80211_proto.h
@@ -122,7 +122,7 @@ ieee80211_hdrsize(const void *data)
/* NB: we don't handle control frames */
KASSERT((wh->i_fc[0]&IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_CTL,
("%s: control frame", __func__));
- if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)
+ if (IEEE80211_IS_DSTODS(wh))
size += IEEE80211_ADDR_LEN;
if (IEEE80211_QOS_HAS_SEQ(wh))
size += sizeof(uint16_t);
@@ -255,9 +255,12 @@ ieee80211_gettid(const struct ieee80211_frame *wh)
uint8_t tid;
if (IEEE80211_QOS_HAS_SEQ(wh)) {
- tid = ((const struct ieee80211_qosframe *)wh)->
- i_qos[0] & IEEE80211_QOS_TID;
- tid++;
+ if (IEEE80211_IS_DSTODS(wh))
+ tid = ((const struct ieee80211_qosframe_addr4 *)wh)->
+ i_qos[0];
+ else
+ tid = ((const struct ieee80211_qosframe *)wh)->i_qos[0];
+ tid &= IEEE80211_QOS_TID;
} else
tid = IEEE80211_NONQOS_TID;
return tid;
OpenPOWER on IntegriCloud