[PATCH] dbus: export BSS Transition Management status to dbus
Dan Williams
dcbw at redhat.com
Fri May 4 07:47:10 PDT 2018
On Thu, 2018-05-03 at 18:00 -0700, Matthew Wang wrote:
> Added new Interface properties "BSSTMStatus", which carries the
> status of
> the most recent BSS Transition Management request. This property will
> be
> logged in UMA to measure 802.11v success.
>
> Signed-off-by: Matthew Wang <matthewmwang at chromium.org>
> ---
> doc/dbus.doxygen | 5 +++++
> wpa_supplicant/dbus/dbus_new.c | 9 +++++++++
> wpa_supplicant/dbus/dbus_new.h | 1 +
> wpa_supplicant/dbus/dbus_new_handlers.c | 22 ++++++++++++++++++++++
> wpa_supplicant/dbus/dbus_new_handlers.h | 1 +
> wpa_supplicant/notify.c | 9 +++++++++
> wpa_supplicant/notify.h | 1 +
> wpa_supplicant/wnm_sta.c | 4 ++++
> wpa_supplicant/wpa_supplicant_i.h | 1 +
> 9 files changed, 53 insertions(+)
>
> diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
> index d3003b31d..cf5129474 100644
> --- a/doc/dbus.doxygen
> +++ b/doc/dbus.doxygen
> @@ -784,6 +784,11 @@ fi.w1.wpa_supplicant1.CreateInterface.
> <p>The most recent BSS session length in milliseconds.</p>
> </li>
>
> + <li>
> + <h3>BSSTMStatus - i - (read)</h3>
> + <p>The most recent BSS Transition Management status
> code.</p>
> + </li>
Is this ever going to be less than zero? The enum won't be.
> <li>
> <h3>EapolVersion - s - (read/write)</h3>
> <p>IEEE 802.1X/EAPOL version number</p>
> diff --git a/wpa_supplicant/dbus/dbus_new.c
> b/wpa_supplicant/dbus/dbus_new.c
> index 168e9baf6..2f4b2bf46 100644
> --- a/wpa_supplicant/dbus/dbus_new.c
> +++ b/wpa_supplicant/dbus/dbus_new.c
> @@ -2171,6 +2171,9 @@ void wpas_dbus_signal_prop_changed(struct
> wpa_supplicant *wpa_s,
> case WPAS_DBUS_PROP_SESSION_LENGTH:
> prop = "SessionLength";
> break;
> + case WPAS_DBUS_PROP_BSS_TM_STATUS:
> + prop = "BSSTMStatus";
> + break;
> default:
> wpa_printf(MSG_ERROR, "dbus: %s: Unknown Property
> value %d",
> __func__, property);
> @@ -2758,6 +2761,12 @@ static const struct wpa_dbus_property_desc
> wpas_dbus_bss_properties[] = {
> NULL,
> NULL
> },
> + {
> + "BSSTMStatus", WPAS_DBUS_NEW_IFACE_INTERFACE, "i",
> + wpas_dbus_getter_bss_tm_status,
> + NULL,
> + NULL
> + },
> { NULL, NULL, NULL, NULL, NULL, NULL }
> };
>
> diff --git a/wpa_supplicant/dbus/dbus_new.h
> b/wpa_supplicant/dbus/dbus_new.h
> index 08f4858b1..bec9a4153 100644
> --- a/wpa_supplicant/dbus/dbus_new.h
> +++ b/wpa_supplicant/dbus/dbus_new.h
> @@ -34,6 +34,7 @@ enum wpas_dbus_prop {
> WPAS_DBUS_PROP_ROAM_TIME,
> WPAS_DBUS_PROP_ROAM_COMPLETE,
> WPAS_DBUS_PROP_SESSION_LENGTH,
> + WPAS_DBUS_PROP_BSS_TM_STATUS,
> };
>
> enum wpas_dbus_bss_prop {
> diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c
> b/wpa_supplicant/dbus/dbus_new_handlers.c
> index 4e3412cdc..367d26d14 100644
> --- a/wpa_supplicant/dbus/dbus_new_handlers.c
> +++ b/wpa_supplicant/dbus/dbus_new_handlers.c
> @@ -3223,6 +3223,28 @@ dbus_bool_t wpas_dbus_getter_session_length(
> }
>
>
> +/**
> + * wpas_dbus_getter_bss_tm_status - Get most BSS Transition
> Management request
> + * status code
> + * @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 for "BSSTMStatus" property.
> + */
> +dbus_bool_t wpas_dbus_getter_bss_tm_status(
> + const struct wpa_dbus_property_desc *property_desc,
> + DBusMessageIter *iter, DBusError *error, void *user_data)
> +{
> + struct wpa_supplicant *wpa_s = user_data;
> + dbus_int32_t bss_tm_status = wpa_s->bss_tm_status;
> +
> + return wpas_dbus_simple_property_getter(iter,
> DBUS_TYPE_INT32,
> + &bss_tm_status,
> error);
> +}
> +
> +
> /**
> * wpas_dbus_getter_bss_expire_age - Get BSS entry expiration age
> * @iter: Pointer to incoming dbus message iter
> diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h
> b/wpa_supplicant/dbus/dbus_new_handlers.h
> index 7a03b7f9f..25ab9991c 100644
> --- a/wpa_supplicant/dbus/dbus_new_handlers.h
> +++ b/wpa_supplicant/dbus/dbus_new_handlers.h
> @@ -151,6 +151,7 @@
> 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_session_length);
> +DECLARE_ACCESSOR(wpas_dbus_getter_bss_tm_status);
> DECLARE_ACCESSOR(wpas_dbus_getter_bss_expire_age);
> DECLARE_ACCESSOR(wpas_dbus_setter_bss_expire_age);
> DECLARE_ACCESSOR(wpas_dbus_getter_bss_expire_count);
> diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
> index a2b04716d..b171e8e87 100644
> --- a/wpa_supplicant/notify.c
> +++ b/wpa_supplicant/notify.c
> @@ -176,6 +176,15 @@ void wpas_notify_session_length(struct
> wpa_supplicant *wpa_s)
> }
>
>
> +void wpas_notify_bss_tm_status(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> +
> + wpas_dbus_signal_prop_changed(wpa_s,
> WPAS_DBUS_PROP_BSS_TM_STATUS);
> +}
> +
> +
> void wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
> {
> if (wpa_s->p2p_mgmt)
> diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
> index bde20e83d..9605785cf 100644
> --- a/wpa_supplicant/notify.h
> +++ b/wpa_supplicant/notify.h
> @@ -27,6 +27,7 @@ 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_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);
> void wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s);
> void wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s);
> diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
> index 7c410e730..1dbc90352 100644
> --- a/wpa_supplicant/wnm_sta.c
> +++ b/wpa_supplicant/wnm_sta.c
> @@ -20,6 +20,7 @@
> #include "ctrl_iface.h"
> #include "bss.h"
> #include "wnm_sta.h"
> +#include "notify.h"
> #include "hs20_supplicant.h"
>
> #define MAX_TFS_IE_LEN 1024
> @@ -938,6 +939,9 @@ static void wnm_send_bss_transition_mgmt_resp(
> return;
> }
>
> + wpa_s->bss_tm_status = status;
> + wpas_notify_bss_tm_status(wpa_s);
Whitespace issues.
> wpabuf_put_u8(buf, WLAN_ACTION_WNM);
> wpabuf_put_u8(buf, WNM_BSS_TRANS_MGMT_RESP);
> wpabuf_put_u8(buf, dialog_token);
> diff --git a/wpa_supplicant/wpa_supplicant_i.h
> b/wpa_supplicant/wpa_supplicant_i.h
> index a4d56b810..70da2a4b1 100644
> --- a/wpa_supplicant/wpa_supplicant_i.h
> +++ b/wpa_supplicant/wpa_supplicant_i.h
> @@ -1059,6 +1059,7 @@ struct wpa_supplicant {
> struct neighbor_report *wnm_neighbor_report_elements;
> struct os_reltime wnm_cand_valid_until;
> u8 wnm_cand_from_bss[ETH_ALEN];
> + enum bss_trans_mgmt_status_code bss_tm_status;
Whitespace issues here too.
Dan
> #ifdef CONFIG_MBO
> unsigned int wnm_mbo_trans_reason_present:1;
> u8 wnm_mbo_transition_reason;
More information about the Hostap
mailing list