]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Interworking: Skip extra scan after network auto-select
authorJouni Malinen <j@w1.fi>
Sun, 2 Sep 2012 17:18:48 +0000 (20:18 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 2 Sep 2012 17:18:48 +0000 (20:18 +0300)
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>

wpa_supplicant/events.c
wpa_supplicant/interworking.c
wpa_supplicant/wpa_supplicant_i.h

index ee0ebe2ed17a69d5e3b4888ce195e2f11e18db8c..6dd578796682427c0d1b62264b6c9d793d4acc5f 100644 (file)
@@ -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) {
index 7741fdce94708682077e456204ff54e5769debfe..987c79b5f4a53a47482420d2bf452d49fbcd7796 100644 (file)
@@ -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);
 }
 
index 42055ec7634d6933fcc5b6f6b3aaa22881c0fa40..4c520bacfe34236ab71391ed0932416dc94c4170 100644 (file)
@@ -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);