mac80211: add AP inactivity handling / probing fixes to improve stability
authorFelix Fietkau <nbd@openwrt.org>
Sun, 29 Sep 2013 19:43:49 +0000 (19:43 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 29 Sep 2013 19:43:49 +0000 (19:43 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Backport of r38257

SVN-Revision: 38258

package/mac80211/patches/300-pending_work.patch

index f3b53097e937d8540ac1e2b72fb1e487fa7e656d..be7b52a8df0ab928bd28e6f0b7426ff61da46bd7 100644 (file)
        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);
+       }