diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-07-17 09:59:07 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-07-20 16:02:58 -0400 |
commit | 875ae5f68883c75aad826e715df8ec0619551a07 (patch) | |
tree | 6fd0fb7822a5c58b210e256738756355363e5cd7 /net | |
parent | b807b8a16bee27eb93a3393c173ce209a992ef18 (diff) |
mac80211: fix aggregation action frame handling with AP VLANs
When aggregation related action frames are enqueued for further work,
and they originate from a STA that is part of an AP VLAN, they are
currently enqueued for the AP interface. This breaks the sta_info_get()
lookup in the actual work function, and because of that, aggregation
sessions are not established for this STA.
Fix this by replacing the sta_info_get call with a call to
sta_info_get_bss.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/iface.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 910729fc18cd..8ef2fde6e920 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -741,7 +741,7 @@ static void ieee80211_iface_work(struct work_struct *work) | |||
741 | int len = skb->len; | 741 | int len = skb->len; |
742 | 742 | ||
743 | mutex_lock(&local->sta_mtx); | 743 | mutex_lock(&local->sta_mtx); |
744 | sta = sta_info_get(sdata, mgmt->sa); | 744 | sta = sta_info_get_bss(sdata, mgmt->sa); |
745 | if (sta) { | 745 | if (sta) { |
746 | switch (mgmt->u.action.u.addba_req.action_code) { | 746 | switch (mgmt->u.action.u.addba_req.action_code) { |
747 | case WLAN_ACTION_ADDBA_REQ: | 747 | case WLAN_ACTION_ADDBA_REQ: |
@@ -782,7 +782,7 @@ static void ieee80211_iface_work(struct work_struct *work) | |||
782 | * right, so terminate the session. | 782 | * right, so terminate the session. |
783 | */ | 783 | */ |
784 | mutex_lock(&local->sta_mtx); | 784 | mutex_lock(&local->sta_mtx); |
785 | sta = sta_info_get(sdata, mgmt->sa); | 785 | sta = sta_info_get_bss(sdata, mgmt->sa); |
786 | if (sta) { | 786 | if (sta) { |
787 | u16 tid = *ieee80211_get_qos_ctl(hdr) & | 787 | u16 tid = *ieee80211_get_qos_ctl(hdr) & |
788 | IEEE80211_QOS_CTL_TID_MASK; | 788 | IEEE80211_QOS_CTL_TID_MASK; |