aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/wme.c
diff options
context:
space:
mode:
authorThomas Pedersen <thomas@cozybit.com>2011-11-04 00:11:11 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-11-09 16:05:48 -0500
commit6cc00d545a21ed26696f3bda865ebf11eccbf2b5 (patch)
treee048b70728f9fcb8dac02b72b421c037d03c1e5d /net/mac80211/wme.c
parentf3011cf9deb689bd68279c728c501a4166983c19 (diff)
mac80211: QoS multicast frames have No Ack policy
Previously QoS multicast frames had the Normal Acknowledgment QoS control bits set. This would cause broadcast frames to be discarded by peers with which we have a BA session, since their sequence number would fall outside the allowed range. Set No Ack QoS control bits on multicast QoS frames and filter these in de-aggregation code. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> v2: Use proper QoS Ack Policy ctl field mask (Christian) v3: Clean up conditional (Johannes) Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wme.c')
-rw-r--r--net/mac80211/wme.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c
index d0240bba45f3..d4f789a4e4f1 100644
--- a/net/mac80211/wme.c
+++ b/net/mac80211/wme.c
@@ -150,7 +150,8 @@ void ieee80211_set_qos_hdr(struct ieee80211_sub_if_data *sdata,
150 /* preserve EOSP bit */ 150 /* preserve EOSP bit */
151 ack_policy = *p & IEEE80211_QOS_CTL_EOSP; 151 ack_policy = *p & IEEE80211_QOS_CTL_EOSP;
152 152
153 if (unlikely(sdata->local->wifi_wme_noack_test)) 153 if (unlikely(sdata->local->wifi_wme_noack_test) ||
154 is_multicast_ether_addr(hdr->addr1))
154 ack_policy |= IEEE80211_QOS_CTL_ACK_POLICY_NOACK; 155 ack_policy |= IEEE80211_QOS_CTL_ACK_POLICY_NOACK;
155 /* qos header is 2 bytes */ 156 /* qos header is 2 bytes */
156 *p++ = ack_policy | tid; 157 *p++ = ack_policy | tid;