[RFC v2 63/99] wpa_supplicant: Register NAN data path callbacks

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Dec 23 03:52:07 PST 2025


Register NAN data path callbacks.
Currently only implement NAF transmission and publish ID verification
callbacks.
Rest of the callbacks will be implemented in separate patches.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 wpa_supplicant/nan_supplicant.c | 86 +++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)

diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 9ec9553b88..794480b3fb 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -164,6 +164,84 @@ static void wpas_nan_stop_cb(void *ctx)
 }
 
 
+static void wpas_nan_ndp_action_notif_cb(void *ctx,
+					 struct nan_ndp_action_notif_params *params)
+{
+	wpa_printf(MSG_DEBUG, "NAN: NDP action notification - peer=" MACSTR
+		   " ndp_id=%u ndp_status=%u ndl_status=%u publish_inst_id=%u",
+		   MAC2STR(params->ndp_id.peer_nmi), params->ndp_id.id,
+		   params->ndp_status, params->ndl_status, params->publish_inst_id);
+}
+
+
+static void wpas_nan_ndp_connected_cb(void *ctx,
+				      struct nan_ndp_connection_params *params)
+{
+	wpa_printf(MSG_DEBUG, "NAN: NDP connected - peer=" MACSTR
+		   " ndp_id=%u local_ndi=" MACSTR " peer_ndi=" MACSTR,
+		   MAC2STR(params->ndp_id.peer_nmi), params->ndp_id.id,
+		   MAC2STR(params->local_ndi), MAC2STR(params->peer_ndi));
+}
+
+
+static void wpas_nan_ndp_disconnected_cb(void *ctx, struct nan_ndp_id *ndp_id,
+					 const u8 *local_ndi, const u8 *peer_ndi,
+					 enum nan_reason reason)
+{
+	wpa_printf(MSG_DEBUG, "NAN: NDP disconnected - peer=" MACSTR
+		   " ndp_id=%u local_ndi=" MACSTR " peer_ndi=" MACSTR " reason=%u",
+		   MAC2STR(ndp_id->peer_nmi), ndp_id->id,
+		   MAC2STR(local_ndi), MAC2STR(peer_ndi), reason);
+}
+
+
+static int wpas_nan_send_naf_cb(void *ctx, const u8 *dst, const u8 *src,
+				const u8 *cluster_id, struct wpabuf *buf)
+{
+	struct wpa_supplicant *wpa_s = ctx;
+	u8 *a2;
+	int ret;
+
+	a2 = src ? (u8 *)src : wpa_s->own_addr;
+
+	wpa_printf(MSG_DEBUG, "NAN: Send NAF - dst=" MACSTR " src=" MACSTR
+		   " cluster_id=" MACSTR, MAC2STR(dst), MAC2STR(a2),
+		   MAC2STR(cluster_id));
+
+	ret = wpa_drv_send_action(wpa_s, 0, 0, dst, a2, cluster_id,
+				  wpabuf_head(buf), wpabuf_len(buf), 1);
+	if (ret)
+		wpa_printf(MSG_DEBUG,
+			  "NAN: Failed to send sync action frame (%d)",
+			   ret);
+	return ret;
+}
+
+
+static int wpas_nan_get_chans_cb(void *ctx, u8 map_id, struct nan_channels *chans)
+{
+	wpa_printf(MSG_DEBUG, "NAN: Get channels - map_id=%u", map_id);
+
+	/* TODO: Implement actual channel selection */
+	chans->n_chans = 0;
+	chans->chans = NULL;
+	return 0;
+}
+
+
+static bool wpas_nan_is_valid_publish_id_cb(void *ctx, u8 instance_id,
+					    u8 *service_id)
+{
+	struct wpa_supplicant *wpa_s = ctx;
+
+	wpa_printf(MSG_DEBUG, "NAN: Check valid publish ID - instance_id=%u",
+		   instance_id);
+
+	return nan_de_is_valid_instance_id(wpa_s->nan_de, instance_id,
+					   true, service_id);
+}
+
+
 int wpas_nan_init(struct wpa_supplicant *wpa_s)
 {
 	struct nan_config nan;
@@ -181,6 +259,14 @@ int wpas_nan_init(struct wpa_supplicant *wpa_s)
 	nan.stop = wpas_nan_stop_cb;
 	nan.update_config = wpas_nan_update_config_cb;
 
+	/* NDP */
+	nan.ndp_action_notif = wpas_nan_ndp_action_notif_cb;
+	nan.ndp_connected = wpas_nan_ndp_connected_cb;
+	nan.ndp_disconnected = wpas_nan_ndp_disconnected_cb;
+	nan.send_naf = wpas_nan_send_naf_cb;
+	nan.get_chans = wpas_nan_get_chans_cb;
+	nan.is_valid_publish_id = wpas_nan_is_valid_publish_id_cb;
+
 	/*
 	 * TODO: Set the device capabilities based on configuration and driver
 	 * data. For now do not set 'n_antennas', 'channel_switch_time' and
-- 
2.49.0




More information about the Hostap mailing list