mac80211: update sta connection monitor regression fix
Reset the connection monitor on all acked frames Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
0cfdc7d446
commit
4bd7689d85
@ -2,25 +2,37 @@ From: Felix Fietkau <nbd@nbd.name>
|
|||||||
Date: Mon, 21 Sep 2020 17:43:06 +0200
|
Date: Mon, 21 Sep 2020 17:43:06 +0200
|
||||||
Subject: [PATCH] mac80211: fix regression in sta connection monitor
|
Subject: [PATCH] mac80211: fix regression in sta connection monitor
|
||||||
|
|
||||||
When the nulldata frame was acked, the probe send count needs to be reset,
|
When a frame was acked and probe frames were sent, the connection monitoring
|
||||||
otherwise it will keep increasing until the connection is considered dead,
|
needs to be reset, otherwise it will keep probing until the connection is
|
||||||
even though it fine.
|
considered dead, even though frames have been acked in the mean time.
|
||||||
|
|
||||||
Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor")
|
Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor")
|
||||||
Reported-by: Georgi Valkov <gvalkov@abv.bg>
|
Reported-by: Georgi Valkov <gvalkov@abv.bg>
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
---
|
---
|
||||||
|
|
||||||
--- a/net/mac80211/mlme.c
|
--- a/net/mac80211/status.c
|
||||||
+++ b/net/mac80211/mlme.c
|
+++ b/net/mac80211/status.c
|
||||||
@@ -2508,7 +2508,9 @@ void ieee80211_sta_tx_notify(struct ieee
|
@@ -1129,6 +1129,8 @@ void ieee80211_tx_status_ext(struct ieee
|
||||||
!sdata->u.mgd.probe_send_count)
|
noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
|
||||||
return;
|
|
||||||
|
|
||||||
- if (!ack)
|
if (pubsta) {
|
||||||
+ if (ack)
|
+ 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;
|
+ sdata->u.mgd.probe_send_count = 0;
|
||||||
+ else
|
+ ieee80211_queue_work(&local->hw, &sdata->work);
|
||||||
sdata->u.mgd.nullfunc_failed = true;
|
+ }
|
||||||
ieee80211_queue_work(&sdata->local->hw, &sdata->work);
|
+
|
||||||
}
|
if (info->status.is_valid_ack_signal) {
|
||||||
|
sta->status_stats.last_ack_signal =
|
||||||
|
(s8)info->status.ack_signal;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user