diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-01-09 00:00:38 +0100 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-01-10 09:50:02 +0100 |
commit | b77cf4f8e1892e192ec52df5dd8c158b300fc496 (patch) | |
tree | ae0ba22c24b9c125a004ae672113cf1b8236d4f7 /include | |
parent | 03c8c06f2d080b841ecbfc63253228ba6efcab08 (diff) | |
download | linux-b77cf4f8e1892e192ec52df5dd8c158b300fc496.tar.gz linux-b77cf4f8e1892e192ec52df5dd8c158b300fc496.tar.bz2 linux-b77cf4f8e1892e192ec52df5dd8c158b300fc496.zip |
mac80211: handle MMPDUs at EOSP correctly
If a uAPSD service period ends with an MMPDU, we currently just
send that MMPDU, but it obviously won't get the EOSP bit set as
it doesn't have a QoS header. This contradicts the standard, so
add a QoS-nulldata frame after the MMPDU to properly terminate
the service period with a frame that has EOSP set.
Also fix a bug wrt. the TID for the MMPDU, it shouldn't be set
to 0 unconditionally but use the actual TID that was assigned.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/mac80211.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 25b18877747f..f4ab2fb4d50c 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -2119,6 +2119,11 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP) * and also take care of the EOSP and MORE_DATA bits in the frame. * The driver may also use ieee80211_sta_eosp() in this case. + * + * Note that if the driver ever buffers frames other than QoS-data + * frames, it must take care to never send a non-QoS-data frame as + * the last frame in a service period, adding a QoS-nulldata frame + * after a non-QoS-data frame if needed. */ /** |