]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Allow wildcard SSID to be enforced for a specific BSSID scan
authorVeerendranath Jakkam <vjakkam@codeaurora.org>
Sat, 29 Feb 2020 06:56:36 +0000 (12:26 +0530)
committerJouni Malinen <j@w1.fi>
Mon, 2 Mar 2020 18:33:52 +0000 (20:33 +0200)
Specific BSSID scan was replacing wildcard SSID with the known SSID if
any BSS with the specified BSSID is available in the known BSSes list.

Add control interface support to force use of a wildcard SSID in a
specific BSSID scan by user with the new "wildcard_ssid=1" argument to
the SCAN command.

Signed-off-by: Veerendranath Jakkam <vjakkam@codeaurora.org>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/scan.c
wpa_supplicant/wpa_supplicant_i.h

index 2c540457b07be869120aa3b4c61dba685ad74d75..077bd6449e6d62a9499e93b7f4d762ced457ae5b 100644 (file)
@@ -8193,6 +8193,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
        wpa_s->disconnected = 0;
        os_free(wpa_s->next_scan_freqs);
        wpa_s->next_scan_freqs = NULL;
+       os_memset(wpa_s->next_scan_bssid, 0, ETH_ALEN);
+       wpa_s->next_scan_bssid_wildcard_ssid = 0;
        os_free(wpa_s->select_network_scan_freqs);
        wpa_s->select_network_scan_freqs = NULL;
 
@@ -8528,6 +8530,9 @@ static void wpas_ctrl_scan(struct wpa_supplicant *wpa_s, char *params,
                                goto done;
                        }
                        os_memcpy(wpa_s->next_scan_bssid, bssid, ETH_ALEN);
+
+                       wpa_s->next_scan_bssid_wildcard_ssid =
+                               os_strstr(params, "wildcard_ssid=1") != NULL;
                }
 
                pos = params;
index 17636e3b69de786148ddb1ea3bf1a74aab7d7f76..db1f6e1fa679e6ea5a391dc16ff9965e5d52a95d 100644 (file)
@@ -1251,7 +1251,8 @@ ssid_list_set:
 
                params.bssid = wpa_s->next_scan_bssid;
                bss = wpa_bss_get_bssid_latest(wpa_s, params.bssid);
-               if (bss && bss->ssid_len && params.num_ssids == 1 &&
+               if (!wpa_s->next_scan_bssid_wildcard_ssid &&
+                   bss && bss->ssid_len && params.num_ssids == 1 &&
                    params.ssids[0].ssid_len == 0) {
                        params.ssids[0].ssid = bss->ssid;
                        params.ssids[0].ssid_len = bss->ssid_len;
@@ -1328,6 +1329,7 @@ scan:
 #ifdef CONFIG_INTERWORKING
                wpa_s->interworking_fast_assoc_tried = 0;
 #endif /* CONFIG_INTERWORKING */
+               wpa_s->next_scan_bssid_wildcard_ssid = 0;
                if (params.bssid)
                        os_memset(wpa_s->next_scan_bssid, 0, ETH_ALEN);
        }
index de2e6350b8aa6ba39c98cea473a9ba9d78b6dec1..eac7cad2dcac74b61a75d358ec33d6a74dc2f10b 100644 (file)
@@ -715,6 +715,7 @@ struct wpa_supplicant {
        int scan_id[MAX_SCAN_ID];
        unsigned int scan_id_count;
        u8 next_scan_bssid[ETH_ALEN];
+       unsigned int next_scan_bssid_wildcard_ssid:1;
 
        struct wpa_ssid_value *ssids_from_scan_req;
        unsigned int num_ssids_from_scan_req;