From 03a9a57aca3566c542e0edfcf342d21238e6bb01 Mon Sep 17 00:00:00 2001 From: Kaidong Wang Date: Tue, 10 Oct 2023 19:52:02 +0000 Subject: [PATCH] dbus: Add NonColoc6GHz and 6GHzOnly flags in wpa_supplicant scan Handler function for "Scan" method call of a network device doesn't set non_coloc_6ghz, therefore wpa_supplicant doesn't scan non-PSC channels on 6GHz band only if a co-located AP was reported on the channel. Add NonColoc6GHz and 6GHzOnly flags to the wpas_dbus_handler_scan, so that dBus scan requests can cover non-PSC channels and scan only 6 GHz channels. Signed-off-by: Kaidong Wang --- doc/dbus.doxygen | 2 ++ wpa_supplicant/dbus/dbus_new_handlers.c | 37 +++++++++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index 87f4c02fb..409db9522 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -212,6 +212,8 @@ fi.w1.wpa_supplicant1.CreateInterface. IEsaayInformation elements to used in active scan (applies only if scan type is active)No Channelsa(uu)Array of frequencies to scan in form of (center, width) in MHz.No AllowRoambTRUE (or absent) to allow a roaming decision based on the results of this scan, FALSE to prevent a roaming decision.No + NonColoc6GHzbTRUE to force scanning of non-PSC 6 GHz channels, FALSE (or absent) to skip scanning of non-PSC 6 GHz channels.No + 6GHzOnlybTRUE to scan only 6 GHz channels, FALSE (or absent) to scan all channels. Applies only if Channels is absent.No diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index 67ce970d0..12d6f6759 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -1594,10 +1594,10 @@ static int wpas_dbus_get_scan_channels(DBusMessage *message, } -static int wpas_dbus_get_scan_allow_roam(DBusMessage *message, - DBusMessageIter *var, - dbus_bool_t *allow, - DBusMessage **reply) +static int wpas_dbus_get_scan_boolean(DBusMessage *message, + DBusMessageIter *var, + dbus_bool_t *allow, + DBusMessage **reply) { if (dbus_message_iter_get_arg_type(var) != DBUS_TYPE_BOOLEAN) { wpa_printf(MSG_DEBUG, "%s[dbus]: Type must be a boolean", @@ -1630,6 +1630,8 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, struct wpa_driver_scan_params params; size_t i; dbus_bool_t allow_roam = 1; + dbus_bool_t non_coloc_6ghz = FALSE; + dbus_bool_t scan_6ghz_only = FALSE; os_memset(¶ms, 0, sizeof(params)); @@ -1661,10 +1663,22 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, ¶ms, &reply) < 0) goto out; } else if (os_strcmp(key, "AllowRoam") == 0) { - if (wpas_dbus_get_scan_allow_roam(message, - &variant_iter, - &allow_roam, - &reply) < 0) + if (wpas_dbus_get_scan_boolean(message, + &variant_iter, + &allow_roam, + &reply) < 0) + goto out; + } else if (os_strcmp(key, "NonColoc6GHz") == 0) { + if (wpas_dbus_get_scan_boolean(message, + &variant_iter, + &non_coloc_6ghz, + &reply) < 0) + goto out; + } else if (os_strcmp(key, "6GHzOnly") == 0) { + if (wpas_dbus_get_scan_boolean(message, + &variant_iter, + &scan_6ghz_only, + &reply) < 0) goto out; } else { wpa_printf(MSG_DEBUG, "%s[dbus]: Unknown argument %s", @@ -1683,6 +1697,13 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, goto out; } + if (non_coloc_6ghz) + params.non_coloc_6ghz = 1; + + if (scan_6ghz_only && !params.freqs) + wpa_add_scan_freqs_list(wpa_s, HOSTAPD_MODE_IEEE80211A, ¶ms, + true, false, false); + if (os_strcmp(type, "passive") == 0) { if (params.num_ssids || params.extra_ies_len) { wpa_printf(MSG_DEBUG,