aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant/ctrl_iface.c
diff options
context:
space:
mode:
Diffstat (limited to 'wpa_supplicant/ctrl_iface.c')
-rw-r--r--wpa_supplicant/ctrl_iface.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 63da94c..81cd363 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -4200,6 +4200,7 @@ static int wpa_supplicant_driver_cmd(struct wpa_supplicant *wpa_s, char *cmd,
ret = pno_stop(wpa_s);
else if (os_strncasecmp(cmd, "SETBAND ", 8) == 0) {
int val = atoi(cmd + 8);
+ uint setband = 0;
/*
* Use driver_cmd for drivers that support it, but ignore the
* return value since scan requests from wpa_supplicant will
@@ -4210,20 +4211,29 @@ static int wpa_supplicant_driver_cmd(struct wpa_supplicant *wpa_s, char *cmd,
wpa_drv_driver_cmd(wpa_s, cmd, buf, buflen);
ret = 0;
if (val == 0)
- wpa_s->setband = WPA_SETBAND_AUTO;
+ setband = WPA_SETBAND_AUTO;
else if (val == 1)
- wpa_s->setband = WPA_SETBAND_5G;
+ setband = WPA_SETBAND_5G;
else if (val == 2)
- wpa_s->setband = WPA_SETBAND_2G;
- else
+ setband = WPA_SETBAND_2G;
+ else {
ret = -1;
+ goto out;
+ }
+
+ if (wpa_s->setband == setband) {
+ wpa_printf(MSG_DEBUG, "Same setband as before");
+ goto out;
+ }
+ wpa_s->setband = setband;
if (wpa_s->current_bss && !wpa_bss_in_current_band(wpa_s, wpa_s->current_bss))
wpa_supplicant_disable_network(wpa_s, wpa_s->current_ssid);
wpa_supplicant_select_network(wpa_s, NULL);
} else
ret = wpa_drv_driver_cmd(wpa_s, cmd, buf, buflen);
+out:
if (ret == 0)
ret = sprintf(buf, "%s\n", "OK");
return ret;
@@ -4584,13 +4594,16 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED)
reply_len = -1;
else {
- if (!wpa_s->sched_scanning && !wpa_s->scanning &&
+ if ((wpa_s->conf->concurrent_sched_scan ||
+ !wpa_s->sched_scanning) &&
+ !wpa_s->scanning &&
((wpa_s->wpa_state <= WPA_SCANNING) ||
(wpa_s->wpa_state == WPA_COMPLETED))) {
wpa_s->normal_scans = 0;
wpa_s->scan_req = 2;
wpa_supplicant_req_scan(wpa_s, 0, 0);
- } else if (wpa_s->sched_scanning) {
+ } else if (wpa_s->sched_scanning &&
+ !wpa_s->conf->concurrent_sched_scan) {
wpa_printf(MSG_DEBUG, "Stop ongoing "
"sched_scan to allow requested "
"full scan to proceed");