[PATCH 04/18] sched_scan: Restart pno/sched_scan on channel list update

andrei.otcheretianski at intel.com andrei.otcheretianski at intel.com
Mon Sep 5 07:32:57 PDT 2016


From: Arik Nemtsov <arik at 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 at intel.com>
---
 wpa_supplicant/events.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 1058115..7ec04fb 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -3223,14 +3223,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;
+			wpa_s->prev_sched_ssid = NULL;
+			wpa_supplicant_cancel_sched_scan(ifs);
+		}
 	}
 
 	wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_DRIVER);
-- 
1.9.1




More information about the Hostap mailing list