[PATCH] DPP2: Presence Announcement notification in Configurator

Andrew Beltrano anbeltra at microsoft.com
Fri Sep 4 19:25:57 EDT 2020


Generate a control event with frame source and chirp hash upon receipt
of DPP presence announcement frames. This allows external programs to
instrument wpa_supplicant with bootstrapping information on-demand.

Signed-off-by: Andrew Beltrano <anbeltra at microsoft.com>
---
 src/common/dpp.h                | 10 ++++++++++
 src/common/wpa_ctrl.h           |  1 +
 wpa_supplicant/dpp_supplicant.c |  1 +
 wpa_supplicant/notify.c         | 12 ++++++++++++
 wpa_supplicant/notify.h         |  2 ++
 5 files changed, 26 insertions(+)

diff --git a/src/common/dpp.h b/src/common/dpp.h
index 2213593a3..83ddd822f 100644
--- a/src/common/dpp.h
+++ b/src/common/dpp.h
@@ -124,6 +124,16 @@ enum dpp_connector_key {
 #define DPP_MAX_HASH_LEN 64
 #define DPP_MAX_SHARED_SECRET_LEN 66
 #define DPP_CP_LEN 64
+#define DPP_CHIRPHASHSTR \
+	"%02x%02x%02x%02x%02x%02x%02x%02x" \
+	"%02x%02x%02x%02x%02x%02x%02x%02x" \
+	"%02x%02x%02x%02x%02x%02x%02x%02x" \
+	"%02x%02x%02x%02x%02x%02x%02x%02x"
+#define DPP_CHIRPHASH2STR(a) \
+	a[ 0], a[ 1], a[ 2], a[ 3], a[ 4], a[ 5], a[ 6], a[ 7], \
+	a[ 8], a[ 9], a[10], a[11], a[12], a[13], a[14], a[15], \
+	a[16], a[17], a[18], a[19], a[20], a[21], a[22], a[23], \
+	a[24], a[25], a[26], a[27], a[28], a[29], a[30], a[31]
 
 struct dpp_curve_params {
 	const char *name;
diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h
index 4e42c890f..52888d730 100644
--- a/src/common/wpa_ctrl.h
+++ b/src/common/wpa_ctrl.h
@@ -202,6 +202,7 @@ extern "C" {
 #define DPP_EVENT_MUD_URL "DPP-MUD-URL "
 #define DPP_EVENT_BAND_SUPPORT "DPP-BAND-SUPPORT "
 #define DPP_EVENT_CSR "DPP-CSR "
+#define DPP_EVENT_CHIRP_RX "DPP-CHIRP-RX "
 
 /* MESH events */
 #define MESH_GROUP_STARTED "MESH-GROUP-STARTED "
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
index 28404b8d7..1628535ff 100644
--- a/wpa_supplicant/dpp_supplicant.c
+++ b/wpa_supplicant/dpp_supplicant.c
@@ -1975,6 +1975,7 @@ wpas_dpp_rx_presence_announcement(struct wpa_supplicant *wpa_s, const u8 *src,
 			"Missing or invalid required Responder Bootstrapping Key Hash attribute");
 		return;
 	}
+	wpas_notify_dpp_chirp_received(wpa_s, src, r_bootstrap);
 	wpa_hexdump(MSG_MSGDUMP, "DPP: Responder Bootstrapping Key Hash",
 		    r_bootstrap, r_bootstrap_len);
 	peer_bi = dpp_bootstrap_find_chirp(wpa_s->dpp, r_bootstrap);
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index 0ba1e144c..b2c14a10b 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -24,6 +24,7 @@
 #include "p2p_supplicant.h"
 #include "sme.h"
 #include "notify.h"
+#include "common/dpp.h"
 
 int wpas_notify_supplicant_initialized(struct wpa_global *global)
 {
@@ -932,3 +933,14 @@ void wpas_notify_mesh_peer_disconnected(struct wpa_supplicant *wpa_s,
 }
 
 #endif /* CONFIG_MESH */
+
+#ifdef CONFIG_DPP2
+
+void wpas_notify_dpp_chirp_received(struct wpa_supplicant *wpa_s,
+					const u8 *src, const u8 *hash)
+{
+	wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CHIRP_RX "src=" MACSTR " hash=" DPP_CHIRPHASHSTR,
+			MAC2STR(src), DPP_CHIRPHASH2STR(hash));
+}
+
+#endif /* CONFIG_DPP2 */
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index e843aa124..eb0586c8c 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -156,5 +156,7 @@ void wpas_notify_mesh_peer_connected(struct wpa_supplicant *wpa_s,
 				     const u8 *peer_addr);
 void wpas_notify_mesh_peer_disconnected(struct wpa_supplicant *wpa_s,
 					const u8 *peer_addr, u16 reason_code);
+void wpas_notify_dpp_chirp_received(struct wpa_supplicant *wpa_s,
+					const u8 *src, const u8 *hash);
 
 #endif /* NOTIFY_H */
-- 
2.25.1




More information about the Hostap mailing list