diff options
Diffstat (limited to 'wpa_supplicant/ctrl_iface.c')
-rw-r--r-- | wpa_supplicant/ctrl_iface.c | 25 |
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"); |