Fix SELECT_NETWORK freq parameter
This functionality was originally added in commit204c9ac4ee
('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 commit35d403096e
('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>
This commit is contained in:
parent
d02989f2e4
commit
88a447556e
4 changed files with 14 additions and 3 deletions
|
@ -2984,9 +2984,8 @@ static int wpa_supplicant_ctrl_iface_select_network(
|
||||||
if (pos) {
|
if (pos) {
|
||||||
int *freqs = freq_range_to_channel_list(wpa_s, pos + 6);
|
int *freqs = freq_range_to_channel_list(wpa_s, pos + 6);
|
||||||
if (freqs) {
|
if (freqs) {
|
||||||
wpa_s->scan_req = MANUAL_SCAN_REQ;
|
os_free(wpa_s->select_network_scan_freqs);
|
||||||
os_free(wpa_s->manual_scan_freqs);
|
wpa_s->select_network_scan_freqs = freqs;
|
||||||
wpa_s->manual_scan_freqs = freqs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7601,6 +7600,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
|
||||||
wpa_s->disconnected = 0;
|
wpa_s->disconnected = 0;
|
||||||
os_free(wpa_s->next_scan_freqs);
|
os_free(wpa_s->next_scan_freqs);
|
||||||
wpa_s->next_scan_freqs = NULL;
|
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);
|
wpa_bss_flush(wpa_s);
|
||||||
if (!dl_list_empty(&wpa_s->bss)) {
|
if (!dl_list_empty(&wpa_s->bss)) {
|
||||||
|
|
|
@ -1018,6 +1018,13 @@ ssid_list_set:
|
||||||
wpa_s->manual_scan_freqs = NULL;
|
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) {
|
if (params.freqs == NULL && wpa_s->next_scan_freqs) {
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Optimize scan based on previously "
|
wpa_dbg(wpa_s, MSG_DEBUG, "Optimize scan based on previously "
|
||||||
"generated frequency list");
|
"generated frequency list");
|
||||||
|
|
|
@ -526,6 +526,8 @@ static void wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s)
|
||||||
|
|
||||||
os_free(wpa_s->manual_scan_freqs);
|
os_free(wpa_s->manual_scan_freqs);
|
||||||
wpa_s->manual_scan_freqs = NULL;
|
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);
|
os_free(wpa_s->manual_sched_scan_freqs);
|
||||||
wpa_s->manual_sched_scan_freqs = NULL;
|
wpa_s->manual_sched_scan_freqs = NULL;
|
||||||
|
|
|
@ -665,6 +665,7 @@ struct wpa_supplicant {
|
||||||
struct os_reltime scan_min_time;
|
struct os_reltime scan_min_time;
|
||||||
int scan_runs; /* number of scan runs since WPS was started */
|
int scan_runs; /* number of scan runs since WPS was started */
|
||||||
int *next_scan_freqs;
|
int *next_scan_freqs;
|
||||||
|
int *select_network_scan_freqs;
|
||||||
int *manual_scan_freqs;
|
int *manual_scan_freqs;
|
||||||
int *manual_sched_scan_freqs;
|
int *manual_sched_scan_freqs;
|
||||||
unsigned int manual_scan_passive:1;
|
unsigned int manual_scan_passive:1;
|
||||||
|
|
Loading…
Reference in a new issue