]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
privsep: Support frequency list for scan requests
authorJouni Malinen <j@w1.fi>
Sat, 3 Dec 2016 16:27:16 +0000 (18:27 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 3 Dec 2016 16:27:16 +0000 (18:27 +0200)
Signed-off-by: Jouni Malinen <j@w1.fi>
src/common/privsep_commands.h
src/drivers/driver_privsep.c
wpa_supplicant/wpa_priv.c

index fa350cb696a74a530215d1dc3a99a6ff77cecbfc..0f47518aa9bcbdfc1bd489c9a38b27b95d3b02d5 100644 (file)
@@ -30,10 +30,14 @@ enum privsep_cmd {
        PRIVSEP_CMD_AUTHENTICATE,
 };
 
+#define PRIVSEP_MAX_SCAN_FREQS 50
+
 struct privsep_cmd_scan {
        unsigned int num_ssids;
        u8 ssids[WPAS_MAX_SCAN_SSIDS][32];
        u8 ssid_lens[WPAS_MAX_SCAN_SSIDS];
+       unsigned int num_freqs;
+       u16 freqs[PRIVSEP_MAX_SCAN_FREQS];
 };
 
 struct privsep_cmd_authenticate {
index 5a22a14d1076cdee255f211fd194f0eac761d53c..8c93d26416e5224bdda4f560ee6d290c2ec0580e 100644 (file)
@@ -116,6 +116,11 @@ static int wpa_driver_privsep_scan(void *priv,
                          scan.ssid_lens[i]);
        }
 
+       for (i = 0; i < PRIVSEP_MAX_SCAN_FREQS &&
+                    params->freqs && params->freqs[i]; i++)
+               scan.freqs[i] = params->freqs[i];
+       scan.num_freqs = i;
+
        return wpa_priv_cmd(drv, PRIVSEP_CMD_SCAN, &scan, sizeof(scan),
                            NULL, NULL);
 }
index 61d43a66a26f7bd976cd13ad8b3eba5a3515634e..9b81fc1cb5dbfd6f27d7c8bc91cc2eae1d1266a2 100644 (file)
@@ -139,6 +139,7 @@ static void wpa_priv_cmd_scan(struct wpa_priv_interface *iface,
        struct wpa_driver_scan_params params;
        struct privsep_cmd_scan *scan;
        unsigned int i;
+       int freqs[PRIVSEP_MAX_SCAN_FREQS + 1];
 
        if (iface->drv_priv == NULL)
                return;
@@ -161,6 +162,17 @@ static void wpa_priv_cmd_scan(struct wpa_priv_interface *iface,
                params.ssids[i].ssid_len = scan->ssid_lens[i];
        }
 
+       if (scan->num_freqs > PRIVSEP_MAX_SCAN_FREQS) {
+               wpa_printf(MSG_DEBUG, "Invalid scan request (num_freqs)");
+               return;
+       }
+       if (scan->num_freqs) {
+               for (i = 0; i < scan->num_freqs; i++)
+                       freqs[i] = scan->freqs[i];
+               freqs[i] = 0;
+               params.freqs = freqs;
+       }
+
        if (iface->driver->scan2)
                iface->driver->scan2(iface->drv_priv, &params);
 }