]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
dbus: Emit ScanInProgress6GHz property
authorRuth Mekonnen <rmekonnen@chromium.org>
Wed, 12 Jun 2024 20:09:43 +0000 (20:09 +0000)
committerJouni Malinen <j@w1.fi>
Sat, 3 Aug 2024 08:43:57 +0000 (11:43 +0300)
Expose whether a 6 GHz 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 6 GHz scan is in
progress. Once the 6 GHz scan has completed and scan results have been
received, the ScanInProgress6GHz property is reset to false.

Signed-off-by: Ruth Mekonnen <rmekonnen@chromium.org>
doc/dbus.doxygen
wpa_supplicant/dbus/dbus_new.c
wpa_supplicant/dbus/dbus_new.h
wpa_supplicant/dbus/dbus_new_handlers.c
wpa_supplicant/dbus/dbus_new_handlers.h
wpa_supplicant/events.c
wpa_supplicant/notify.c
wpa_supplicant/notify.h
wpa_supplicant/wpa_supplicant_i.h

index 070210945dcbcfd002d7df6e6e8aa571dd355ee6..ae1e6f8cc1088886bc8d477f290d9b96c062f0ab 100644 (file)
@@ -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>
index 76e42ffbcc77b7e6d217c15f40c920055050cd41..5ad5bcd74e7dca167138086f14395a3d402e84e8 100644 (file)
@@ -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,
index 952bb422a6d618eadc1d5ac3673672e6cd12afc2..1db5fe8ae7839001938157e76f1cd32fd7340904 100644 (file)
@@ -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,
index 960b3069b49dca8565fb5800876eae951aefb556..52e35a770b3dec0e6125eea97d101224467ebb1d 100644 (file)
@@ -3835,6 +3835,29 @@ dbus_bool_t wpas_dbus_getter_roam_complete(
 }
 
 
+/**
+ * wpas_dbus_getter_scan_in_progress_6ghz - Get whether a 6 GHz 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
  * @iter: Pointer to incoming dbus message iter
index acd6af7ffa38b65b01d475d80f393d17510ac62c..7faf70a77e4ea642b12ea4d84f0fe9771a7b7d70 100644 (file)
@@ -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);
index 71971c9f2c99d7b6689e64363dd0861f6c23ab6e..7b39813f384b03cb87eae4313026cf0870876715 100644 (file)
@@ -2433,6 +2433,12 @@ static int _wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s,
        scan_res = wpa_supplicant_get_scan_results(wpa_s,
                                                   data ? &data->scan_info :
                                                   NULL, 1, NULL);
+
+       if (wpa_s->scan_in_progress_6ghz) {
+               wpa_s->scan_in_progress_6ghz = false;
+               wpas_notify_scan_in_progress_6ghz(wpa_s);
+       }
+
        if (scan_res == NULL) {
                if (wpa_s->conf->ap_scan == 2 || ap ||
                    wpa_s->scan_res_handler == scan_only_handler)
@@ -2614,6 +2620,8 @@ static int wpas_trigger_6ghz_scan(struct wpa_supplicant *wpa_s,
        wpa_add_scan_freqs_list(wpa_s, HOSTAPD_MODE_IEEE80211A, &params,
                                true, false, false);
        if (!wpa_supplicant_trigger_scan(wpa_s, &params, true, true)) {
+               wpa_s->scan_in_progress_6ghz = true;
+               wpas_notify_scan_in_progress_6ghz(wpa_s);
                os_free(params.freqs);
                return 1;
        }
index e967dc8ff13a9f22e49e8281cec2cd5873ccb9a6..308b93d905c47f1bcdbb48d40638581eee93edad 100644 (file)
@@ -168,6 +168,16 @@ void wpas_notify_roam_complete(struct wpa_supplicant *wpa_s)
 }
 
 
+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)
 {
        if (wpa_s->p2p_mgmt)
index f6c7ac4e2d3b73ef4289159662cba44b5008433a..9749e9cfc969c4a4af3421bd0c54105ec7c88909 100644 (file)
@@ -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);
index cbb0688d4c1b2d995e527b3f9ebce9c73b58c7e8..7f9d722b5c17ed02e12c27fd23fe3268ad6d20f1 100644 (file)
@@ -1583,6 +1583,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 6 GHz scan being triggered */
 
 #ifdef CONFIG_PASN
        struct pasn_data pasn;