aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-09-29 19:43:49 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-09-29 19:43:49 +0000
commit294eeb8c977464caa8f882e5f9e3aee9494228f8 (patch)
tree07516c4dc37398419108030ef3322dd6935996f6
parent9913be8a047dcf96ccc051db123f90fb036a9f7b (diff)
downloadupstream-294eeb8c977464caa8f882e5f9e3aee9494228f8.tar.gz
upstream-294eeb8c977464caa8f882e5f9e3aee9494228f8.tar.bz2
upstream-294eeb8c977464caa8f882e5f9e3aee9494228f8.zip
mac80211: add AP inactivity handling / probing fixes to improve stability
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Backport of r38257 git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@38258 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/mac80211/patches/300-pending_work.patch35
1 files changed, 35 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index f3b53097e9..be7b52a8df 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -1105,3 +1105,38 @@
if (local->hw.conf.power_level != power) {
changed |= IEEE80211_CONF_CHANGE_POWER;
local->hw.conf.power_level = power;
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -3332,7 +3332,7 @@ static int ieee80211_probe_client(struct
+ return -EINVAL;
+ }
+ band = chanctx_conf->def.chan->band;
+- sta = sta_info_get(sdata, peer);
++ sta = sta_info_get_bss(sdata, peer);
+ if (sta) {
+ qos = test_sta_flag(sta, WLAN_STA_WME);
+ } else {
+--- a/net/mac80211/status.c
++++ b/net/mac80211/status.c
+@@ -180,6 +180,9 @@ static void ieee80211_frame_acked(struct
+ struct ieee80211_local *local = sta->local;
+ struct ieee80211_sub_if_data *sdata = sta->sdata;
+
++ if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
++ sta->last_rx = jiffies;
++
+ if (ieee80211_is_data_qos(mgmt->frame_control)) {
+ struct ieee80211_hdr *hdr = (void *) skb->data;
+ u8 *qc = ieee80211_get_qos_ctl(hdr);
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -1101,7 +1101,8 @@ ieee80211_tx_prepare(struct ieee80211_su
+ tx->sta = rcu_dereference(sdata->u.vlan.sta);
+ if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)
+ return TX_DROP;
+- } else if (info->flags & IEEE80211_TX_CTL_INJECTED ||
++ } else if (info->flags & (IEEE80211_TX_CTL_INJECTED |
++ IEEE80211_TX_INTFL_NL80211_FRAME_TX) ||
+ tx->sdata->control_port_protocol == tx->skb->protocol) {
+ tx->sta = sta_info_get_bss(sdata, hdr->addr1);
+ }