git: 6a40b366fce7 - stable/13 - net80211: introduce two extra ieee80211_notify_scan_done()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 29 Nov 2023 16:38:30 UTC
The branch stable/13 has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=6a40b366fce73c8e825c8a134d07f00e3a9387fe
commit 6a40b366fce73c8e825c8a134d07f00e3a9387fe
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2023-09-21 11:51:23 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2023-11-29 16:36:08 +0000
net80211: introduce two extra ieee80211_notify_scan_done()
We have multiple problems with scanning currently, one being that
an initial scan restarts itself and we are unable to start another
scan. wpa_supplicant in that case never shows scan results.
Starting wpa_cli you may see: <3>CTRL-EVENT-SCAN-FAILED ret=-1 retry=1
messages.
Add two extra calls to ieee80211_notify_scan_done() at the end of scans
(before possible restarts). That will get wpa_supplicant to get
scan results and possibly start associating to a BSSID and get us out
of scan. This is kind-of a bandaid but on short notice may help to
improve the situation for some.
Based on analysis by: enweiwu
Submitted by: enweiwu (initial version)
Sponsored by: The FreeBSD Foundation
(cherry picked from commit 3f382eb23b9fee75d05276a44feb5351d956238e)
---
sys/net80211/ieee80211_scan_sw.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/sys/net80211/ieee80211_scan_sw.c b/sys/net80211/ieee80211_scan_sw.c
index 60e9a635b94d..3b47f08ad359 100644
--- a/sys/net80211/ieee80211_scan_sw.c
+++ b/sys/net80211/ieee80211_scan_sw.c
@@ -387,9 +387,10 @@ ieee80211_swscan_bg_scan(const struct ieee80211_scanner *scan,
* scan_start method to populate it.
*/
ss->ss_next = 0;
- if (ss->ss_last != 0)
+ if (ss->ss_last != 0) {
+ ieee80211_notify_scan_done(vap);
ss->ss_ops->scan_restart(ss, vap);
- else {
+ } else {
ss->ss_ops->scan_start(ss, vap);
#ifdef IEEE80211_DEBUG
if (ieee80211_msg_scan(vap))
@@ -856,6 +857,7 @@ scan_end(struct ieee80211_scan_state *ss, int scandone)
else
vap->iv_stats.is_scan_passive++;
+ ieee80211_notify_scan_done(vap);
ss->ss_ops->scan_restart(ss, vap); /* XXX? */
ieee80211_runtask(ic, &ss_priv->ss_scan_start);
IEEE80211_UNLOCK(ic);