[openwrt/openwrt] mac80211: update sta connection monitor regression fix

LEDE Commits lede-commits at lists.infradead.org
Wed Sep 23 02:40:46 EDT 2020


nbd pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/4bd7689d85d15759c7fce92c1cf9af9b98658d5c

commit 4bd7689d85d15759c7fce92c1cf9af9b98658d5c
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Tue Sep 22 13:16:18 2020 +0200

    mac80211: update sta connection monitor regression fix
    
    Reset the connection monitor on all acked frames
    
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 ...-fix-regression-in-sta-connection-monitor.patch | 42 ++++++++++++++--------
 1 file changed, 27 insertions(+), 15 deletions(-)

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 787883e217..72b6ed56c4 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
@@ -2,25 +2,37 @@ From: Felix Fietkau <nbd at nbd.name>
 Date: Mon, 21 Sep 2020 17:43:06 +0200
 Subject: [PATCH] mac80211: fix regression in sta connection monitor
 
-When the nulldata frame was acked, the probe send count needs to be reset,
-otherwise it will keep increasing until the connection is considered dead,
-even though it fine.
+When a frame was acked and probe frames were sent, the connection monitoring
+needs to be reset, otherwise it will keep probing until the connection is
+considered dead, even though frames have been acked in the mean time.
 
 Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor")
 Reported-by: Georgi Valkov <gvalkov at abv.bg>
 Signed-off-by: Felix Fietkau <nbd at nbd.name>
 ---
 
---- 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;
+--- a/net/mac80211/status.c
++++ b/net/mac80211/status.c
+@@ -1129,6 +1129,8 @@ void ieee80211_tx_status_ext(struct ieee
+ 	noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
  
--	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);
- }
+ 	if (pubsta) {
++		struct ieee80211_sub_if_data *sdata = sta->sdata;
++
+ 		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
+ 				/* 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)) {
++					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;



More information about the lede-commits mailing list