summaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorBob Copeland <me@bobcopeland.com>2013-08-23 09:35:38 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-08-23 15:43:38 +0200
commitc4c205f3cd17b567b8e20098522416eac2e73960 (patch)
tree0e4e0158fc9c3716c49d7f31af3f9e6d24b5cebc /net/mac80211
parenta4ef66a915b957416a89a48365aea2ec2dc551f6 (diff)
downloadlinux-c4c205f3cd17b567b8e20098522416eac2e73960.tar.gz
linux-c4c205f3cd17b567b8e20098522416eac2e73960.tar.bz2
linux-c4c205f3cd17b567b8e20098522416eac2e73960.zip
mac80211: assign seqnums for group QoS frames
According to 802.11-2012 9.3.2.10, paragraph 4, QoS data frames with a group address in the Address 1 field have sequence numbers allocated from the same counter as non-QoS data and management frames. Without this flag, some drivers may not assign sequence numbers, and in rare cases frames might get dropped. Set the control flag accordingly. Signed-off-by: Bob Copeland <bob@cozybit.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/tx.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 098ae854ad3c..3456c0486b48 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -781,9 +781,11 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
/*
* Anything but QoS data that has a sequence number field
* (is long enough) gets a sequence number from the global
- * counter.
+ * counter. QoS data frames with a multicast destination
+ * also use the global counter (802.11-2012 9.3.2.10).
*/
- if (!ieee80211_is_data_qos(hdr->frame_control)) {
+ if (!ieee80211_is_data_qos(hdr->frame_control) ||
+ is_multicast_ether_addr(hdr->addr1)) {
/* driver should assign sequence number */
info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
/* for pure STA mode without beacons, we can do it */