wpa_supplicant: Cancel sched_scan on SELECT_NETWORK initiated scan

If a scheduled scan is running on select network command,
cancel and reset it before kicking off a regular scan request.

Signed-off-by: Max Stepanov <Max.Stepanov@intel.com>
This commit is contained in:
Max Stepanov 2016-09-05 17:32:58 +03:00 committed by Jouni Malinen
parent 8b7c5b8941
commit be7ebd892e
3 changed files with 21 additions and 0 deletions

View file

@ -2726,3 +2726,22 @@ fail:
wpa_printf(MSG_ERROR, "invalid scan plans list"); wpa_printf(MSG_ERROR, "invalid scan plans list");
return -1; return -1;
} }
/**
* wpas_scan_reset_sched_scan - Reset sched_scan state
* @wpa_s: Pointer to wpa_supplicant data
*
* This function is used to cancel a running scheduled scan and to reset an
* internal scan state to continue with a regular scan on the following
* wpa_supplicant_req_scan() calls.
*/
void wpas_scan_reset_sched_scan(struct wpa_supplicant *wpa_s)
{
wpa_s->normal_scans = 0;
if (wpa_s->sched_scanning) {
wpa_s->sched_scan_timed_out = 0;
wpa_s->prev_sched_ssid = NULL;
wpa_supplicant_cancel_sched_scan(wpa_s);
}
}

View file

@ -44,6 +44,7 @@ wpa_scan_clone_params(const struct wpa_driver_scan_params *src);
void wpa_scan_free_params(struct wpa_driver_scan_params *params); void wpa_scan_free_params(struct wpa_driver_scan_params *params);
int wpas_start_pno(struct wpa_supplicant *wpa_s); int wpas_start_pno(struct wpa_supplicant *wpa_s);
int wpas_stop_pno(struct wpa_supplicant *wpa_s); int wpas_stop_pno(struct wpa_supplicant *wpa_s);
void wpas_scan_reset_sched_scan(struct wpa_supplicant *wpa_s);
void wpas_mac_addr_rand_scan_clear(struct wpa_supplicant *wpa_s, void wpas_mac_addr_rand_scan_clear(struct wpa_supplicant *wpa_s,
unsigned int type); unsigned int type);

View file

@ -3017,6 +3017,7 @@ void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
if (wpa_s->connect_without_scan || if (wpa_s->connect_without_scan ||
wpa_supplicant_fast_associate(wpa_s) != 1) { wpa_supplicant_fast_associate(wpa_s) != 1) {
wpa_s->scan_req = NORMAL_SCAN_REQ; wpa_s->scan_req = NORMAL_SCAN_REQ;
wpas_scan_reset_sched_scan(wpa_s);
wpa_supplicant_req_scan(wpa_s, 0, disconnected ? 100000 : 0); wpa_supplicant_req_scan(wpa_s, 0, disconnected ? 100000 : 0);
} }