aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-09-07 06:06:34 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-09-07 06:06:34 +0000
commit52eb1003cde34bae7792982c900e58413b987614 (patch)
treefa5d08061c37989285a640859acc8108b59629c2
parente8fe5418ff994acee9f3f8faa161cb7618de564c (diff)
downloadmaster-187ad058-52eb1003cde34bae7792982c900e58413b987614.tar.gz
master-187ad058-52eb1003cde34bae7792982c900e58413b987614.tar.bz2
master-187ad058-52eb1003cde34bae7792982c900e58413b987614.zip
mac80211: fix an endian issue in BlockAckReq handling
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28190 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/mac80211/patches/560-mac80211_defer_bar_tx.patch19
1 files changed, 16 insertions, 3 deletions
diff --git a/package/mac80211/patches/560-mac80211_defer_bar_tx.patch b/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
index 9bf89183e8..15f812c6fa 100644
--- a/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
+++ b/package/mac80211/patches/560-mac80211_defer_bar_tx.patch
@@ -73,13 +73,26 @@
/*
* Use a static threshold for now, best value to be determined
* by testing ...
-@@ -254,10 +286,13 @@ void ieee80211_tx_status(struct ieee8021
+@@ -246,6 +278,8 @@ void ieee80211_tx_status(struct ieee8021
+ }
+
+ 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)
+@@ -253,11 +287,15 @@ void ieee80211_tx_status(struct ieee8021
+ * correctly.
*/
bar = (struct ieee80211_bar *) skb->data;
- if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+- if (!(bar->control & IEEE80211_BAR_CTRL_MULTI_TID)) {
+- tid = (bar->control &
++ 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;
- ieee80211_stop_tx_ba_session(&sta->sta, tid);