diff mbox

[v2] sched_scan: Restart pno/sched_scan on channel list update

Message ID 1474970998-20581-1-git-send-email-ilan.peer@intel.com
State Accepted
Headers show

Commit Message

Ilan Peer Sept. 27, 2016, 10:09 a.m. UTC
From: Arik Nemtsov <arik@wizery.com>

As the scan channels might need to change when the channel list has
been updated by the kernel.

Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
---
 wpa_supplicant/events.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

Comments

Jouni Malinen Sept. 30, 2016, 8:58 p.m. UTC | #1
On Tue, Sep 27, 2016 at 01:09:58PM +0300, Ilan Peer wrote:
> As the scan channels might need to change when the channel list has
> been updated by the kernel.

Thanks, applied.
diff mbox

Patch

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 6f8fc81..84745a4 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -3219,14 +3219,22 @@  static void wpa_supplicant_update_channel_list(
 		free_hw_features(ifs);
 		ifs->hw.modes = wpa_drv_get_hw_feature_data(
 			ifs, &ifs->hw.num_modes, &ifs->hw.flags);
-	}
 
-	/* Restart sched_scan with updated channel list */
-	if (wpa_s->sched_scanning) {
-		wpa_dbg(wpa_s, MSG_DEBUG,
-			"Channel list changed restart sched scan.");
-		wpa_supplicant_cancel_sched_scan(wpa_s);
-		wpa_supplicant_req_scan(wpa_s, 0, 0);
+		/* Restart pno/sched_scan with updated channel list */
+		if (ifs->pno) {
+			wpas_stop_pno(ifs);
+			wpas_start_pno(ifs);
+		} else if (ifs->sched_scanning && !ifs->pno_sched_pending) {
+			/*
+			 * simulate a timeout to restart it. reset the state
+			 * to start from the beginning.
+			 */
+			wpa_dbg(ifs, MSG_DEBUG,
+				"Channel list changed restart sched scan.");
+			ifs->sched_scan_timed_out = 1;
+			ifs->prev_sched_ssid = NULL;
+			wpa_supplicant_cancel_sched_scan(ifs);
+		}
 	}
 
 	wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_DRIVER);