[PATCH v2] sched_scan: Restart pno/sched_scan on channel list update
Ilan Peer
ilan.peer at intel.com
Tue Sep 27 03:09:58 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 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);
--
1.9.1
More information about the Hostap
mailing list