Interworking: Skip extra scan after network auto-select
If the scan results from before ANQP fetch are fresh (less than five seconds old), do not run a new scan when selecting the BSS after having used Interworking network selection. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
620c783753
commit
a594e2a9ab
3 changed files with 22 additions and 2 deletions
|
@ -1035,8 +1035,6 @@ static int wpa_supplicant_need_to_roam(struct wpa_supplicant *wpa_s,
|
|||
static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
|
||||
union wpa_event_data *data)
|
||||
{
|
||||
struct wpa_bss *selected;
|
||||
struct wpa_ssid *ssid = NULL;
|
||||
struct wpa_scan_results *scan_res;
|
||||
int ap = 0;
|
||||
#ifndef CONFIG_NO_RANDOM_POOL
|
||||
|
@ -1150,6 +1148,15 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
|
|||
|
||||
wpa_scan_results_free(scan_res);
|
||||
|
||||
return wpas_select_network_from_last_scan(wpa_s);
|
||||
}
|
||||
|
||||
|
||||
int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s)
|
||||
{
|
||||
struct wpa_bss *selected;
|
||||
struct wpa_ssid *ssid = NULL;
|
||||
|
||||
selected = wpa_supplicant_pick_network(wpa_s, &ssid);
|
||||
|
||||
if (selected) {
|
||||
|
|
|
@ -52,6 +52,18 @@ static void interworking_reconnect(struct wpa_supplicant *wpa_s)
|
|||
}
|
||||
wpa_s->disconnected = 0;
|
||||
wpa_s->reassociate = 1;
|
||||
|
||||
if (wpa_s->last_scan_res_used > 0) {
|
||||
struct os_time now;
|
||||
os_get_time(&now);
|
||||
if (now.sec - wpa_s->last_scan.sec <= 5) {
|
||||
wpa_printf(MSG_DEBUG, "Interworking: Old scan results "
|
||||
"are fresh - connect without new scan");
|
||||
if (wpas_select_network_from_last_scan(wpa_s) == 0)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -717,6 +717,7 @@ int wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
|
|||
void wpa_supplicant_stop_countermeasures(void *eloop_ctx, void *sock_ctx);
|
||||
void wpa_supplicant_delayed_mic_error_report(void *eloop_ctx, void *sock_ctx);
|
||||
void wnm_bss_keep_alive_deinit(struct wpa_supplicant *wpa_s);
|
||||
int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s);
|
||||
|
||||
/* eap_register.c */
|
||||
int eap_register_methods(void);
|
||||
|
|
Loading…
Reference in a new issue