diff options
author | Bob Copeland <me@bobcopeland.com> | 2013-08-23 09:35:38 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-08-23 09:43:38 -0400 |
commit | c4c205f3cd17b567b8e20098522416eac2e73960 (patch) | |
tree | 0e4e0158fc9c3716c49d7f31af3f9e6d24b5cebc /net/mac80211/tx.c | |
parent | a4ef66a915b957416a89a48365aea2ec2dc551f6 (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.c | 6 |
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 */ |