From: Felix Fietkau Date: Mon, 28 Sep 2020 13:11:51 +0000 (+0200) Subject: mac80211: another fix for the sta connection monitor X-Git-Tag: v21.02.0-rc1~1439 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=5b296141c2f7c0a7026ad0c7910d1aa1bacb14bd;p=openwrt%2Fstaging%2Fhauke.git mac80211: another fix for the sta connection monitor Make the code more closely match the original behavior Signed-off-by: Felix Fietkau --- diff --git a/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch b/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch index 72b6ed56c4..cff8045c05 100644 --- a/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch +++ b/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch @@ -13,7 +13,18 @@ Signed-off-by: Felix Fietkau --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -1129,6 +1129,8 @@ void ieee80211_tx_status_ext(struct ieee +@@ -991,10 +991,6 @@ static void __ieee80211_tx_status(struct + if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) + ieee80211_frame_acked(sta, skb); + +- if ((sta->sdata->vif.type == NL80211_IFTYPE_STATION) && +- ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) +- ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data, +- acked, info->status.tx_time); + } + + /* SNMP counters +@@ -1129,11 +1125,18 @@ void ieee80211_tx_status_ext(struct ieee noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED); if (pubsta) { @@ -22,17 +33,38 @@ Signed-off-by: Felix Fietkau if (!acked && !noack_success) sta->status_stats.retry_failed++; sta->status_stats.retry_count += retry_count; -@@ -1143,6 +1145,13 @@ void ieee80211_tx_status_ext(struct ieee + + if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) { ++ if (sdata->vif.type == NL80211_IFTYPE_STATION && ++ skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)) ++ ieee80211_sta_tx_notify(sdata, (void *) skb->data, ++ acked, info->status.tx_time); ++ + if (acked) { + sta->status_stats.last_ack = jiffies; + +@@ -1143,6 +1146,11 @@ void ieee80211_tx_status_ext(struct ieee /* Track when last packet was ACKed */ sta->status_stats.last_pkt_time = jiffies; + /* Reset connection monitor */ + if (sdata->vif.type == NL80211_IFTYPE_STATION && -+ unlikely(sdata->u.mgd.probe_send_count > 0)) { ++ unlikely(sdata->u.mgd.probe_send_count > 0)) + sdata->u.mgd.probe_send_count = 0; -+ ieee80211_queue_work(&local->hw, &sdata->work); -+ } + if (info->status.is_valid_ack_signal) { sta->status_stats.last_ack_signal = (s8)info->status.ack_signal; +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -2508,7 +2508,9 @@ void ieee80211_sta_tx_notify(struct ieee + !sdata->u.mgd.probe_send_count) + return; + +- if (!ack) ++ if (ack) ++ sdata->u.mgd.probe_send_count = 0; ++ else + sdata->u.mgd.nullfunc_failed = true; + ieee80211_queue_work(&sdata->local->hw, &sdata->work); + }