Fix PNO restart flow

PNO is sometimes restarted due to changes in scan parameters
(e.g., selected network changed or MAC randomization being
 enabled/disabled). Restart is done by stopping PNO and immediately
starting it again. This may result in the SCHED_SCAN_STOPPED event being
received after the request for new PNO, which will make wpa_supplicant
believe PNO is not active although it is actually is. As a result, the
next request to start PNO will fail because PNO is active and should be
stopped first.

Fix this by deferring the request to start PNO until the
SCHED_SCAN_STOPPED event is received in case sched_scan is being
stopped.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
This commit is contained in:
Avraham Stern 2016-09-05 17:33:03 +03:00 committed by Jouni Malinen
parent 14f34a7303
commit 5ac8f8623d

View File

@ -2420,6 +2420,13 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s)
}
}
if (wpa_s->sched_scan_stop_req) {
wpa_printf(MSG_DEBUG,
"Schedule PNO after previous sched scan has stopped");
wpa_s->pno_sched_pending = 1;
return 0;
}
os_memset(&params, 0, sizeof(params));
num_ssid = num_match_ssid = 0;