summaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-09-15 09:37:46 +0200
committerJohn W. Linville <linville@tuxdriver.com>2011-09-16 16:45:42 -0400
commit7107676a3a46415c27186bc7d5ce988498897c66 (patch)
treea70b00e5ab4646044cb47d9def3b204bde1ab437 /net/mac80211
parent4245d31347bdc99a608dc1d1cfe64e44aa3d1771 (diff)
mac80211: fix endian issues and comments for BAR failure handling
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Cc: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/status.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index 14268465f1d..d50358c45ab 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -278,17 +278,19 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
}
if (!acked && ieee80211_is_back_req(fc)) {
+ u16 control;
+
/*
- * BAR failed, let's tear down the BA session as a
- * last resort as some STAs (Intel 5100 on Windows)
- * can get stuck when the BA window isn't flushed
- * correctly.
+ * BAR failed, store the last SSN and retry sending
+ * the BAR when the next unicast transmission on the
+ * same TID succeeds.
*/
bar = (struct ieee80211_bar *) skb->data;
- if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+ control = le16_to_cpu(bar->control);
+ if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) {
u16 ssn = le16_to_cpu(bar->start_seq_num);
- tid = (bar->control &
+ tid = (control &
IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
IEEE80211_BAR_CTRL_TID_INFO_SHIFT;