mac80211: fix an endian issue in BlockAckReq handling

SVN-Revision: 28190
master
Felix Fietkau 13 years ago
parent 1c0d12c935
commit 5da0d9dda1
  1. 19
      package/mac80211/patches/560-mac80211_defer_bar_tx.patch

@ -73,13 +73,26 @@
/* /*
* Use a static threshold for now, best value to be determined * Use a static threshold for now, best value to be determined
* by testing ... * 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; 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); + 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_MASK) >>
IEEE80211_BAR_CTRL_TID_INFO_SHIFT; IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
- ieee80211_stop_tx_ba_session(&sta->sta, tid); - ieee80211_stop_tx_ba_session(&sta->sta, tid);

Loading…
Cancel
Save