aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/tx.c
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 09:43:38 -0400
commitc4c205f3cd17b567b8e20098522416eac2e73960 (patch)
tree0e4e0158fc9c3716c49d7f31af3f9e6d24b5cebc /net/mac80211/tx.c
parenta4ef66a915b957416a89a48365aea2ec2dc551f6 (diff)
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/tx.c')
-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)
781 /* 781 /*
782 * Anything but QoS data that has a sequence number field 782 * Anything but QoS data that has a sequence number field
783 * (is long enough) gets a sequence number from the global 783 * (is long enough) gets a sequence number from the global
784 * counter. 784 * counter. QoS data frames with a multicast destination
785 * also use the global counter (802.11-2012 9.3.2.10).
785 */ 786 */
786 if (!ieee80211_is_data_qos(hdr->frame_control)) { 787 if (!ieee80211_is_data_qos(hdr->frame_control) ||
788 is_multicast_ether_addr(hdr->addr1)) {
787 /* driver should assign sequence number */ 789 /* driver should assign sequence number */
788 info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ; 790 info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
789 /* for pure STA mode without beacons, we can do it */ 791 /* for pure STA mode without beacons, we can do it */