Extend select_network command with freq= to reduce scan time
authorDmitry Shmidt <dimitrysh@google.com>
Thu, 3 Apr 2014 20:40:52 +0000 (13:40 -0700)
committerJouni Malinen <j@w1.fi>
Fri, 4 Apr 2014 20:07:17 +0000 (23:07 +0300)
This allows a subset of channels to be specified for the scan used to
find the network when the SELECT_NETWORK ctrl_iface command is issued.

Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
wpa_supplicant/ctrl_iface.c

index 65ee15e..13c0830 100644 (file)
@@ -2305,9 +2305,10 @@ static int wpa_supplicant_ctrl_iface_select_network(
 {
        int id;
        struct wpa_ssid *ssid;
+       char *pos;
 
        /* cmd: "<network id>" or "any" */
-       if (os_strcmp(cmd, "any") == 0) {
+       if (os_strncmp(cmd, "any", 3) == 0) {
                wpa_printf(MSG_DEBUG, "CTRL_IFACE: SELECT_NETWORK any");
                ssid = NULL;
        } else {
@@ -2327,6 +2328,16 @@ static int wpa_supplicant_ctrl_iface_select_network(
                }
        }
 
+       pos = os_strstr(cmd, " freq=");
+       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;
+               }
+       }
+
        wpa_supplicant_select_network(wpa_s, ssid);
 
        return 0;