aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--wpa_supplicant/events.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 4493772..904b533 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -46,7 +46,7 @@
#ifndef CONFIG_NO_SCAN_PROCESSING
static int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s,
- int new_scan);
+ int new_scan, int own_request);
#endif /* CONFIG_NO_SCAN_PROCESSING */
@@ -1302,12 +1302,12 @@ 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, 1);
+ return wpas_select_network_from_last_scan(wpa_s, 1, own_request);
}
static int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s,
- int new_scan)
+ int new_scan, int own_request)
{
struct wpa_bss *selected;
struct wpa_ssid *ssid = NULL;
@@ -1342,7 +1342,12 @@ static int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s,
wpa_supplicant_associate(wpa_s, NULL, ssid);
if (new_scan)
wpa_supplicant_rsn_preauth_scan_results(wpa_s);
- } else {
+ } else if (own_request) {
+ /*
+ * No SSID found. If SCAN results are as a result of
+ * own scan request and not due to a scan request on
+ * another shared interface, try another scan.
+ */
int timeout_sec = wpa_s->scan_interval;
int timeout_usec = 0;
#ifdef CONFIG_P2P
@@ -1446,7 +1451,7 @@ int wpa_supplicant_fast_associate(struct wpa_supplicant *wpa_s)
return -1;
}
- return wpas_select_network_from_last_scan(wpa_s, 0);
+ return wpas_select_network_from_last_scan(wpa_s, 0, 1);
#endif /* CONFIG_NO_SCAN_PROCESSING */
}