diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index a60118254..0c355f799 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -1987,6 +1987,11 @@ void wpas_dbus_signal_prop_changed(struct wpa_supplicant *wpa_s, case WPAS_DBUS_PROP_AP_SCAN: prop = "ApScan"; break; +#ifdef CONFIG_IEEE80211W + case WPAS_DBUS_PROP_PMF: + prop = "Pmf"; + break; +#endif /* CONFIG_IEEE80211W */ case WPAS_DBUS_PROP_SCANNING: prop = "Scanning"; break; @@ -3138,6 +3143,13 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = { wpas_dbus_setter_ap_scan, NULL }, +#ifdef CONFIG_IEEE80211W + { "Pmf", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", + wpas_dbus_getter_pmf, + wpas_dbus_setter_pmf, + NULL + }, +#endif /* CONFIG_IEEE80211W */ { "BSSExpireAge", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", wpas_dbus_getter_bss_expire_age, wpas_dbus_setter_bss_expire_age, diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h index 2b0b775d3..bd0e07433 100644 --- a/wpa_supplicant/dbus/dbus_new.h +++ b/wpa_supplicant/dbus/dbus_new.h @@ -22,6 +22,7 @@ struct wps_credential; enum wpas_dbus_prop { WPAS_DBUS_PROP_AP_SCAN, + WPAS_DBUS_PROP_PMF, WPAS_DBUS_PROP_SCANNING, WPAS_DBUS_PROP_STATE, WPAS_DBUS_PROP_CURRENT_BSS, diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index e36226d86..094301045 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -2787,6 +2787,61 @@ dbus_bool_t wpas_dbus_setter_ap_scan( } +#ifdef CONFIG_IEEE80211W + +/** + * wpas_dbus_getter_pmf - Control PMF default + * @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 "Pmf" property. + */ +dbus_bool_t wpas_dbus_getter_pmf( + const struct wpa_dbus_property_desc *property_desc, + DBusMessageIter *iter, DBusError *error, void *user_data) +{ + struct wpa_supplicant *wpa_s = user_data; + dbus_uint32_t pmf = wpa_s->conf->pmf; + + return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32, + &pmf, error); +} + + +/** + * wpas_dbus_setter_pmf - Control PMF default + * @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 + * + * Setter function for "Pmf" property. + */ +dbus_bool_t wpas_dbus_setter_pmf( + const struct wpa_dbus_property_desc *property_desc, + DBusMessageIter *iter, DBusError *error, void *user_data) +{ + struct wpa_supplicant *wpa_s = user_data; + dbus_uint32_t pmf; + + if (!wpas_dbus_simple_property_setter(iter, error, DBUS_TYPE_UINT32, + &pmf)) + return FALSE; + + if (pmf > 2) { + dbus_set_error_const(error, DBUS_ERROR_FAILED, + "Pmf must be 0, 1, or 2"); + return FALSE; + } + wpa_s->conf->pmf = pmf; + return TRUE; +} + +#endif /* CONFIG_IEEE80211W */ + + /** * wpas_dbus_getter_fast_reauth - Control fast * reauthentication (TLS session resumption) diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index fe8767a11..3b8f0966f 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -138,6 +138,8 @@ DECLARE_ACCESSOR(wpas_dbus_getter_state); DECLARE_ACCESSOR(wpas_dbus_getter_scanning); DECLARE_ACCESSOR(wpas_dbus_getter_ap_scan); DECLARE_ACCESSOR(wpas_dbus_setter_ap_scan); +DECLARE_ACCESSOR(wpas_dbus_getter_pmf); +DECLARE_ACCESSOR(wpas_dbus_setter_pmf); DECLARE_ACCESSOR(wpas_dbus_getter_fast_reauth); DECLARE_ACCESSOR(wpas_dbus_setter_fast_reauth); DECLARE_ACCESSOR(wpas_dbus_getter_disconnect_reason);