Add broadcast SSID for sched_scan for scan_ssid=0 networks
Previously, only networks with scan_ssid=1 were included in sched_scan. This needs to behave similarly to the normal scan where broadcast SSID is used to find networks that are not scanned for with a specific SSID. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
5edddf4175
commit
76a5249e52
1 changed files with 18 additions and 0 deletions
|
@ -701,6 +701,7 @@ int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s)
|
||||||
struct wpabuf *wps_ie = NULL;
|
struct wpabuf *wps_ie = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int max_sched_scan_ssids;
|
unsigned int max_sched_scan_ssids;
|
||||||
|
int wildcard = 0;
|
||||||
|
|
||||||
if (!wpa_s->sched_scan_supported)
|
if (!wpa_s->sched_scan_supported)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -709,6 +710,8 @@ int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s)
|
||||||
max_sched_scan_ssids = WPAS_MAX_SCAN_SSIDS;
|
max_sched_scan_ssids = WPAS_MAX_SCAN_SSIDS;
|
||||||
else
|
else
|
||||||
max_sched_scan_ssids = wpa_s->max_sched_scan_ssids;
|
max_sched_scan_ssids = wpa_s->max_sched_scan_ssids;
|
||||||
|
if (max_sched_scan_ssids < 1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (wpa_s->sched_scanning) {
|
if (wpa_s->sched_scanning) {
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Already sched scanning");
|
wpa_dbg(wpa_s, MSG_DEBUG, "Already sched scanning");
|
||||||
|
@ -726,6 +729,14 @@ int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s)
|
||||||
wpa_s->wpa_state == WPA_INACTIVE)
|
wpa_s->wpa_state == WPA_INACTIVE)
|
||||||
wpa_supplicant_set_state(wpa_s, WPA_SCANNING);
|
wpa_supplicant_set_state(wpa_s, WPA_SCANNING);
|
||||||
|
|
||||||
|
for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) {
|
||||||
|
if (!ssid->disabled && !ssid->scan_ssid) {
|
||||||
|
/* Use wildcard SSID to find this network */
|
||||||
|
wildcard = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Find the starting point from which to continue scanning */
|
/* Find the starting point from which to continue scanning */
|
||||||
ssid = wpa_s->conf->ssid;
|
ssid = wpa_s->conf->ssid;
|
||||||
if (wpa_s->prev_sched_ssid) {
|
if (wpa_s->prev_sched_ssid) {
|
||||||
|
@ -748,6 +759,11 @@ int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s)
|
||||||
wpa_s->prev_sched_ssid = ssid;
|
wpa_s->prev_sched_ssid = ssid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wildcard) {
|
||||||
|
wpa_dbg(wpa_s, MSG_DEBUG, "Add wildcard SSID to sched_scan");
|
||||||
|
params.num_ssids++;
|
||||||
|
}
|
||||||
|
|
||||||
while (ssid) {
|
while (ssid) {
|
||||||
if (ssid->disabled)
|
if (ssid->disabled)
|
||||||
goto next;
|
goto next;
|
||||||
|
@ -771,6 +787,8 @@ int wpa_supplicant_req_sched_scan(struct wpa_supplicant *wpa_s)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ssid->scan_ssid && ssid->ssid && ssid->ssid_len) {
|
if (ssid->scan_ssid && ssid->ssid && ssid->ssid_len) {
|
||||||
|
if (params.num_ssids == max_sched_scan_ssids)
|
||||||
|
break; /* only room for broadcast SSID */
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG,
|
wpa_dbg(wpa_s, MSG_DEBUG,
|
||||||
"add to active scan ssid: %s",
|
"add to active scan ssid: %s",
|
||||||
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
|
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
|
||||||
|
|
Loading…
Reference in a new issue