]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Fix SELECT_NETWORK freq parameter
authorJouni Malinen <j@w1.fi>
Sat, 25 Feb 2017 17:15:24 +0000 (19:15 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 26 Feb 2017 10:05:40 +0000 (12:05 +0200)
This functionality was originally added in commit
204c9ac4eed9f0ad69497f2efcd0d095dfd6e61c ('Extend select_network command
with freq= to reduce scan time') re-using wpa_s->manual_scan_freqs and
MANUAL_SCAN_REQ. That got broken when commit
35d403096eb63c787bd736dd8ba0902c34398fa8 ('Set NORMAL_SCAN_REQ on
SELECT_NETWORK/ENABLE_NETWORK') started overriding wpa_s->scan_req for
SELECT_NETWORK.

Fix this by adding a new scan frequency list specifically for
SELECT_NETWORK so that this does not need to depend on any specific
wpa_s->scan_req value.

Signed-off-by: Jouni Malinen <j@w1.fi>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/scan.c
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index ad7922aa9865dbdf4c071d9403c4f206b5c7b652..14dcdcd9cc94a1a3e28740f78a73a3b9aafe9ca1 100644 (file)
@@ -2984,9 +2984,8 @@ static int wpa_supplicant_ctrl_iface_select_network(
        if (pos) {
                int *freqs = freq_range_to_channel_list(wpa_s, pos + 6);
                if (freqs) {
-                       wpa_s->scan_req = MANUAL_SCAN_REQ;
-                       os_free(wpa_s->manual_scan_freqs);
-                       wpa_s->manual_scan_freqs = freqs;
+                       os_free(wpa_s->select_network_scan_freqs);
+                       wpa_s->select_network_scan_freqs = freqs;
                }
        }
 
@@ -7601,6 +7600,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
        wpa_s->disconnected = 0;
        os_free(wpa_s->next_scan_freqs);
        wpa_s->next_scan_freqs = NULL;
+       os_free(wpa_s->select_network_scan_freqs);
+       wpa_s->select_network_scan_freqs = NULL;
 
        wpa_bss_flush(wpa_s);
        if (!dl_list_empty(&wpa_s->bss)) {
index 3a100cd20fa83800ec90d5c085ec57c7e18c4bc7..f3ff4cdd828b65d675547e4feef45801d02c532a 100644 (file)
@@ -1018,6 +1018,13 @@ ssid_list_set:
                wpa_s->manual_scan_freqs = NULL;
        }
 
+       if (params.freqs == NULL && wpa_s->select_network_scan_freqs) {
+               wpa_dbg(wpa_s, MSG_DEBUG,
+                       "Limit select_network scan to specified channels");
+               params.freqs = wpa_s->select_network_scan_freqs;
+               wpa_s->select_network_scan_freqs = NULL;
+       }
+
        if (params.freqs == NULL && wpa_s->next_scan_freqs) {
                wpa_dbg(wpa_s, MSG_DEBUG, "Optimize scan based on previously "
                        "generated frequency list");
index 7757a03f5a9481d4a10d6d85f38072815da51211..774d2c737db24998487964c3fbb889cedcd8e930 100644 (file)
@@ -526,6 +526,8 @@ static void wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s)
 
        os_free(wpa_s->manual_scan_freqs);
        wpa_s->manual_scan_freqs = NULL;
+       os_free(wpa_s->select_network_scan_freqs);
+       wpa_s->select_network_scan_freqs = NULL;
 
        os_free(wpa_s->manual_sched_scan_freqs);
        wpa_s->manual_sched_scan_freqs = NULL;
index 83bfbd5431aaf544122a35a049ac9330946c605a..50cdf86cee10686367c160d563b782fef2e49f3f 100644 (file)
@@ -665,6 +665,7 @@ struct wpa_supplicant {
        struct os_reltime scan_min_time;
        int scan_runs; /* number of scan runs since WPS was started */
        int *next_scan_freqs;
+       int *select_network_scan_freqs;
        int *manual_scan_freqs;
        int *manual_sched_scan_freqs;
        unsigned int manual_scan_passive:1;