diff options
Diffstat (limited to 'net/mac80211/agg-tx.c')
-rw-r--r-- | net/mac80211/agg-tx.c | 16 |
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 */ |