From 294eeb8c977464caa8f882e5f9e3aee9494228f8 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 29 Sep 2013 19:43:49 +0000 Subject: mac80211: add AP inactivity handling / probing fixes to improve stability Signed-off-by: Felix Fietkau Backport of r38257 git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@38258 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/mac80211/patches/300-pending_work.patch | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) 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); + } -- cgit v1.2.3