Extend select_network command with freq= to reduce scan time

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>
This commit is contained in:
Dmitry Shmidt 2014-04-03 13:40:52 -07:00 committed by Jouni Malinen
parent 6a6afc02c0
commit 204c9ac4ee

View file

@ -2305,9 +2305,10 @@ static int wpa_supplicant_ctrl_iface_select_network(
{ {
int id; int id;
struct wpa_ssid *ssid; struct wpa_ssid *ssid;
char *pos;
/* cmd: "<network id>" or "any" */ /* 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"); wpa_printf(MSG_DEBUG, "CTRL_IFACE: SELECT_NETWORK any");
ssid = NULL; ssid = NULL;
} else { } 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); wpa_supplicant_select_network(wpa_s, ssid);
return 0; return 0;