aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/agg-tx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/agg-tx.c')
-rw-r--r--net/mac80211/agg-tx.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 6ab731fecc20..c91b32a3f0e7 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -41,7 +41,8 @@ static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata,
41 memset(mgmt, 0, 24); 41 memset(mgmt, 0, 24);
42 memcpy(mgmt->da, da, ETH_ALEN); 42 memcpy(mgmt->da, da, ETH_ALEN);
43 memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN); 43 memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN);
44 if (sdata->vif.type == NL80211_IFTYPE_AP) 44 if (sdata->vif.type == NL80211_IFTYPE_AP ||
45 sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
45 memcpy(mgmt->bssid, sdata->dev->dev_addr, ETH_ALEN); 46 memcpy(mgmt->bssid, sdata->dev->dev_addr, ETH_ALEN);
46 else 47 else
47 memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN); 48 memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
@@ -180,6 +181,19 @@ int ieee80211_start_tx_ba_session(struct ieee80211_hw *hw, u8 *ra, u16 tid)
180 goto exit; 181 goto exit;
181 } 182 }
182 183
184 /*
185 * The aggregation code is not prepared to handle
186 * anything but STA/AP due to the BSSID handling.
187 * IBSS could work in the code but isn't supported
188 * by drivers or the standard.
189 */
190 if (sta->sdata->vif.type != NL80211_IFTYPE_STATION &&
191 sta->sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
192 sta->sdata->vif.type != NL80211_IFTYPE_AP) {
193 ret = -EINVAL;
194 goto exit;
195 }
196
183 spin_lock_bh(&sta->lock); 197 spin_lock_bh(&sta->lock);
184 198
185 /* we have tried too many times, receiver does not want A-MPDU */ 199 /* we have tried too many times, receiver does not want A-MPDU */