From patchwork Thu Jan 5 15:06:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Tintel X-Patchwork-Id: 711437 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tvWHp3LCcz9t1C for ; Fri, 6 Jan 2017 02:07:18 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="key not found in DNS" (0-bit key; unprotected) header.d=linux-ipv6.be header.i=@linux-ipv6.be header.b="vmuVfLx+"; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cP9dI-0001Wm-N7; Thu, 05 Jan 2017 15:07:12 +0000 Received: from mail.tintel.eu ([2a00:c78:1:1::25:1]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cP9d9-0000WU-3h for hostap@lists.infradead.org; Thu, 05 Jan 2017 15:07:10 +0000 Received: from localhost (localhost [IPv6:::1]) by mail.tintel.eu (Postfix) with ESMTP id 5AF082A3E28 for ; Thu, 5 Jan 2017 16:06:37 +0100 (CET) Received: from mail.tintel.eu ([IPv6:::1]) by localhost (mail.tintel.eu [IPv6:::1]) (amavisd-new, port 10032) with ESMTP id htdH8i_0ipkN; Thu, 5 Jan 2017 16:06:36 +0100 (CET) Received: from localhost (localhost [IPv6:::1]) by mail.tintel.eu (Postfix) with ESMTP id 8C9E72A3E27; Thu, 5 Jan 2017 16:06:36 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.9.2 mail.tintel.eu 8C9E72A3E27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-ipv6.be; s=502B7754-045F-11E5-BBC5-64595FD46BE8; t=1483628796; bh=wDbfzc0zvTYcWzPfBoRWu2AJnOqO3SaiT8RrI1K51AM=; h=From:To:Subject:Date:Message-Id; b=vmuVfLx+2iN8J/dvBRi9+eM8ARCZnqoVGApegcP3OLLgcsTL5Xmk4eitzBD6N5+WD fk0fSunN0VaMgwrx5YrdaxoN25zLg1YnFWY+gQp9YS6yKWfZfWcLIMK5ZwV+4ofl36 XRtWGMPt3wQ3hTfhbdOzKzVM5vuGVZe7CJWGPL9k= X-Virus-Scanned: amavisd-new at mail.tintel.eu Received: from mail.tintel.eu ([IPv6:::1]) by localhost (mail.tintel.eu [IPv6:::1]) (amavisd-new, port 10026) with ESMTP id zpKAVgbsmPtJ; Thu, 5 Jan 2017 16:06:36 +0100 (CET) Received: from sylvester.nomad.adlevio.net (d51A4C3CB.access.telenet.be [81.164.195.203]) (Authenticated sender: stijn@linux-ipv6.be) by mail.tintel.eu (Postfix) with ESMTPSA id 42E9F2A3E26; Thu, 5 Jan 2017 16:06:35 +0100 (CET) Received: by sylvester.nomad.adlevio.net (sSMTP sendmail emulation); Thu, 05 Jan 2017 16:06:35 +0100 From: Stijn Tintel To: hostap@lists.infradead.org Subject: [PATCH 1/2] D-Bus: implement Pmf property Date: Thu, 5 Jan 2017 16:06:32 +0100 Message-Id: <20170105150633.4368-1-stijn@linux-ipv6.be> X-Mailer: git-send-email 2.10.2 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170105_070703_491453_16C386C8 X-CRM114-Status: GOOD ( 13.54 ) X-Spam-Score: -1.8 (-) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-1.8 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stijn Tintel MIME-Version: 1.0 Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The Pmf property is documented in doc/dbus.doxygen, but does not exist, so implement it. Signed-off-by: Stijn Tintel --- wpa_supplicant/dbus/dbus_new.c | 12 ++++++++ wpa_supplicant/dbus/dbus_new.h | 1 + wpa_supplicant/dbus/dbus_new_handlers.c | 51 +++++++++++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 2 ++ wpa_supplicant/wpa_supplicant.c | 19 ++++++++++++ 5 files changed, 85 insertions(+) diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index a601182..0c355f7 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 2b0b775..bd0e074 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 7446f8d..b25afc8 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -2786,6 +2786,57 @@ dbus_bool_t wpas_dbus_setter_ap_scan( return TRUE; } +#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 (wpa_supplicant_set_pmf(wpa_s, pmf)) { + dbus_set_error_const(error, DBUS_ERROR_FAILED, + "pmf must be 0, 1, or 2"); + return FALSE; + } + return TRUE; +} +#endif /* CONFIG_IEEE80211W */ + /** * wpas_dbus_getter_fast_reauth - Control fast diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index fe8767a..3b8f096 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); diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index ae62bd6..309f87d 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -3148,6 +3148,25 @@ int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s, int ap_scan) return 0; } +#ifdef CONFIG_IEEE80211W +/** + * wpa_supplicant_set_pmf - Set PMF default for interface + * @wpa_s: wpa_supplicant structure for a network interface + * @pm: PMF default + * Returns: 0 if succeed or -1 if ap_scan has an invalid value + * + */ +int wpa_supplicant_set_pmf(struct wpa_supplicant *wpa_s, int pmf) +{ + if (pmf < 0 || pmf > 2) + return -1; + + wpa_s->conf->pmf = pmf; + + return 0; +} +#endif /* CONFIG_IEEE80211W */ + /** * wpa_supplicant_set_bss_expiration_age - Set BSS entry expiration age