[RFC v2 30/99] NAN: Add support for building a NAF

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Dec 23 03:51:34 PST 2025


From: Ilan Peer <ilan.peer at intel.com>

Add support for building and sending a NAN Action Frame (NAF)
based on configuration and the state of the NDP and NDL state
machines.

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 src/nan/nan.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/src/nan/nan.c b/src/nan/nan.c
index dca1bfb867..52129f5726 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -1001,6 +1001,57 @@ int nan_add_peer(struct nan_data *nan, const u8 *addr,
 }
 
 
+static void nan_action_build_header(struct nan_data *nan, struct wpabuf *buf,
+				    enum nan_subtype subtype)
+{
+	/* TODO: need to also support protected dual */
+	wpabuf_put_u8(buf, WLAN_ACTION_PUBLIC);
+	wpabuf_put_u8(buf, WLAN_PA_VENDOR_SPECIFIC);
+	wpabuf_put_be24(buf, OUI_WFA);
+	wpabuf_put_u8(buf, NAN_TYPE_NAF);
+	wpabuf_put_u8(buf, subtype);
+}
+
+
+static int nan_action_build(struct nan_data *nan, struct nan_peer *peer,
+			    enum nan_subtype subtype, struct wpabuf *buf)
+{
+	int ret;
+
+	wpa_printf(MSG_DEBUG, "NAN: Build NAF");
+
+	nan_action_build_header(nan, buf, subtype);
+
+	nan_add_dev_capa_attr(nan, buf);
+
+	ret = nan_ndp_add_ndp_attr(nan, peer, buf);
+	if (ret)
+		return ret;
+
+	ret = nan_ndl_add_avail_attrs(nan, peer, buf);
+	if (ret)
+		return ret;
+
+	ret = nan_ndl_add_ndc_attr(nan, peer, buf);
+	if (ret)
+		return ret;
+
+	ret = nan_ndl_add_ndl_attr(nan, peer, buf);
+	if (ret)
+		return ret;
+
+	ret = nan_ndl_add_qos_attr(nan, peer, buf);
+	if (ret)
+		return ret;
+
+	nan_ndl_add_elem_container_attr(nan, peer, buf);
+
+	wpa_printf(MSG_DEBUG, "NAN: build NAF: done");
+
+	return 0;
+}
+
+
 /*
  * nan_publish_instance_id_valid - Check is instance ID is a valid publish ID
  *
-- 
2.49.0




More information about the Hostap mailing list