[PATCH v2] Emit ScanInProgress6GHz property
Ruth Mekonnen
rmekonnen at chromium.org
Wed Jun 5 17:05:11 PDT 2024
Expose whether a 6GHz scan is in progress with the
ScanInProgress6GHz property and flush properties as soon as the
property is updated, so that platforms can choose not to
disconnect while a 6GHz scan is in progress. Once the 6GHz scan
has completed the ScanInProgress6GHz property is reset to false.
Signed-off-by: Ruth Mekonnen <rmekonnen at chromium.org>
---
Changelog since v1: flush properties as soon as
ScanInProgress6GHz is updated
doc/dbus.doxygen | 5 +++++
wpa_supplicant/dbus/dbus_new.c | 10 ++++++++++
wpa_supplicant/dbus/dbus_new.h | 1 +
wpa_supplicant/dbus/dbus_new_handlers.c | 21 +++++++++++++++++++++
wpa_supplicant/dbus/dbus_new_handlers.h | 1 +
wpa_supplicant/events.c | 7 +++++++
wpa_supplicant/notify.c | 8 ++++++++
wpa_supplicant/notify.h | 1 +
wpa_supplicant/wpa_supplicant_i.h | 1 +
9 files changed, 55 insertions(+)
diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
index 9f72614d4..3c689cf55 100644
--- a/doc/dbus.doxygen
+++ b/doc/dbus.doxygen
@@ -883,6 +883,11 @@ fi.w1.wpa_supplicant1.CreateInterface.
<p>The most recent roam success or failure.</p>
</li>
+ <li>
+ <h3>ScanInProgress6GHz - b - (read)</h3>
+ <p>Whether a 6GHz scan is currently in progress.</p>
+ </li>
+
<li>
<h3>SessionLength - u - (read)</h3>
<p>The most recent BSS session length in milliseconds.</p>
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index ef7076934..b8d13e111 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -2396,6 +2396,10 @@ void wpas_dbus_signal_prop_changed(struct wpa_supplicant *wpa_s,
case WPAS_DBUS_PROP_ROAM_COMPLETE:
prop = "RoamComplete";
break;
+ case WPAS_DBUS_PROP_SCAN_IN_PROGRESS_6GHZ:
+ prop = "ScanInProgress6GHz";
+ flush = TRUE;
+ break;
case WPAS_DBUS_PROP_SESSION_LENGTH:
prop = "SessionLength";
break;
@@ -3983,6 +3987,12 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = {
NULL,
NULL
},
+ {
+ "ScanInProgress6GHz", WPAS_DBUS_NEW_IFACE_INTERFACE, "b",
+ wpas_dbus_getter_scan_in_progress_6ghz,
+ NULL,
+ NULL
+ },
{
"SessionLength", WPAS_DBUS_NEW_IFACE_INTERFACE, "u",
wpas_dbus_getter_session_length,
diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
index 952bb422a..1db5fe8ae 100644
--- a/wpa_supplicant/dbus/dbus_new.h
+++ b/wpa_supplicant/dbus/dbus_new.h
@@ -36,6 +36,7 @@ enum wpas_dbus_prop {
WPAS_DBUS_PROP_ASSOC_STATUS_CODE,
WPAS_DBUS_PROP_ROAM_TIME,
WPAS_DBUS_PROP_ROAM_COMPLETE,
+ WPAS_DBUS_PROP_SCAN_IN_PROGRESS_6GHZ,
WPAS_DBUS_PROP_SESSION_LENGTH,
WPAS_DBUS_PROP_BSS_TM_STATUS,
WPAS_DBUS_PROP_MAC_ADDRESS,
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index 3897d98f4..ee8a7c4bd 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -3832,6 +3832,27 @@ dbus_bool_t wpas_dbus_getter_roam_complete(
&roam_complete, error);
}
+/**
+ * wpas_dbus_getter_scan_in_progress_6ghz - Get whether a 6ghz scan is in
+ * progress
+ * @iter: Pointer to incoming dbus message iter
+ * @error: Location to store error on failure
+ * @user_data: Function specific data
+ * Returns: TRUE on success, FALSE on failure
+ *
+ * Getter function for "ScanInProgress6GHz" property.
+ */
+dbus_bool_t wpas_dbus_getter_scan_in_progress_6ghz(
+ const struct wpa_dbus_property_desc *property_desc,
+ DBusMessageIter *iter, DBusError *error, void *user_data)
+{
+ struct wpa_supplicant *wpa_s = user_data;
+ dbus_bool_t scan_in_progress_6ghz = wpa_s->scan_in_progress_6ghz ? TRUE : FALSE;
+
+ return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_BOOLEAN,
+ &scan_in_progress_6ghz, error);
+}
+
/**
* wpas_dbus_getter_session_length - Get most recent BSS session length
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index acd6af7ff..7faf70a77 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -173,6 +173,7 @@ DECLARE_ACCESSOR(wpas_dbus_getter_auth_status_code);
DECLARE_ACCESSOR(wpas_dbus_getter_assoc_status_code);
DECLARE_ACCESSOR(wpas_dbus_getter_roam_time);
DECLARE_ACCESSOR(wpas_dbus_getter_roam_complete);
+DECLARE_ACCESSOR(wpas_dbus_getter_scan_in_progress_6ghz);
DECLARE_ACCESSOR(wpas_dbus_getter_session_length);
DECLARE_ACCESSOR(wpas_dbus_getter_bss_tm_status);
DECLARE_ACCESSOR(wpas_dbus_getter_bss_expire_age);
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 447fc8fd8..e36aabe59 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2411,6 +2411,11 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
wpa_supplicant_notify_scanning(wpa_s, 0);
+ if (wpa_s->scan_in_progress_6ghz) {
+ wpa_s->scan_in_progress_6ghz = false;
+ wpas_notify_scan_in_progress_6ghz(wpa_s);
+ }
+
scan_res = wpa_supplicant_get_scan_results(wpa_s,
data ? &data->scan_info :
NULL, 1, NULL);
@@ -2593,6 +2598,8 @@ static int wpas_trigger_6ghz_scan(struct wpa_supplicant *wpa_s,
wpa_add_scan_freqs_list(wpa_s, HOSTAPD_MODE_IEEE80211A, ¶ms,
true, !wpa_s->last_scan_non_coloc_6ghz, false);
if (!wpa_supplicant_trigger_scan(wpa_s, ¶ms, true, true)) {
+ wpa_s->scan_in_progress_6ghz = true;
+ wpas_notify_scan_in_progress_6ghz(wpa_s);
os_free(params.freqs);
return 1;
}
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index e967dc8ff..30c5b8b3f 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -167,6 +167,14 @@ void wpas_notify_roam_complete(struct wpa_supplicant *wpa_s)
wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_ROAM_COMPLETE);
}
+void wpas_notify_scan_in_progress_6ghz(struct wpa_supplicant *wpa_s)
+{
+ if (wpa_s->p2p_mgmt)
+ return;
+
+ wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCAN_IN_PROGRESS_6GHZ);
+}
+
void wpas_notify_session_length(struct wpa_supplicant *wpa_s)
{
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index f6c7ac4e2..9749e9cfc 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -30,6 +30,7 @@ void wpas_notify_auth_status_code(struct wpa_supplicant *wpa_s);
void wpas_notify_assoc_status_code(struct wpa_supplicant *wpa_s);
void wpas_notify_roam_time(struct wpa_supplicant *wpa_s);
void wpas_notify_roam_complete(struct wpa_supplicant *wpa_s);
+void wpas_notify_scan_in_progress_6ghz(struct wpa_supplicant *wpa_s);
void wpas_notify_session_length(struct wpa_supplicant *wpa_s);
void wpas_notify_bss_tm_status(struct wpa_supplicant *wpa_s);
void wpas_notify_network_changed(struct wpa_supplicant *wpa_s);
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 426d077d2..58c833e3e 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -1579,6 +1579,7 @@ struct wpa_supplicant {
bool wps_scan_done; /* Set upon receiving scan results event */
bool supp_pbc_active; /* Set for interface when PBC is triggered */
bool wps_overlap;
+ bool scan_in_progress_6ghz; /* Set upon a 6GHz scan being triggered */
#ifdef CONFIG_PASN
struct pasn_data pasn;
--
2.45.1.467.gbab1589fc0-goog
More information about the Hostap
mailing list