[RFC 29/56] NAN: Add a function to add element container attribute

Andrei Otcheretianski andrei.otcheretianski at intel.com
Sun Dec 7 03:18:38 PST 2025


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

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 src/nan/nan_i.h   |  4 +++-
 src/nan/nan_ndl.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index 13090d8625..baccfa6467 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -388,7 +388,9 @@ int nan_parse_naf(struct nan_data *nan, const struct ieee80211_mgmt *mgmt,
 		  size_t len, struct nan_msg *msg);
 void nan_attrs_clear(struct nan_data *nan, struct nan_attrs *attrs);
 void nan_add_dev_capa_attr(struct nan_data *nan, struct wpabuf *buf);
-
+void nan_ndl_add_elem_container_attr(struct nan_data *nan,
+				     struct nan_peer *peer,
+				     struct wpabuf *buf);
 int nan_ndp_setup_req(struct nan_data *nan, struct nan_peer *peer,
 		      struct nan_ndp_params *params);
 int nan_ndp_setup_resp(struct nan_data *nan, struct nan_peer *peer,
diff --git a/src/nan/nan_ndl.c b/src/nan/nan_ndl.c
index b6a9200ff3..f33fb15a74 100644
--- a/src/nan/nan_ndl.c
+++ b/src/nan/nan_ndl.c
@@ -1710,3 +1710,51 @@ int nan_ndl_naf_sent(struct nan_data *nan, struct nan_peer *peer,
 	 */
 	return 0;
 }
+
+
+/*
+ * nan_ndl_add_elem_container_attr - Add NAN element container attribute
+ *
+ * @nan: NAN module context from nan_init()
+ * @peer: the peer with whom the NDL is being setup
+ * @buf: wpabuf to which the attribute would be added
+ */
+void nan_ndl_add_elem_container_attr(struct nan_data *nan,
+				     struct nan_peer *peer,
+				     struct wpabuf *buf)
+{
+	struct nan_ndl *ndl;
+
+	if (!peer || !peer->ndl || !peer->ndl->sched.elems)
+		return;
+
+	ndl = peer->ndl;
+
+	wpa_printf(MSG_DEBUG,
+		   "NAN: Add element container. state=%s, status=%u",
+		   nan_ndl_state_str(ndl->state), ndl->status);
+
+	if (peer->ndl->status == NAN_NDL_STATUS_REJECTED)
+		return;
+
+	/* Element container is expected only in NDP request/response */
+	switch (ndl->state) {
+	case NAN_NDL_STATE_START:
+	case NAN_NDL_STATE_REQ_RECV:
+		break;
+	case NAN_NDL_STATE_NONE:
+	case NAN_NDL_STATE_RES_RECV:
+	case NAN_NDL_STATE_REQ_SENT:
+	case NAN_NDL_STATE_RES_SENT:
+	case NAN_NDL_STATE_CON_SENT:
+	case NAN_NDL_STATE_CON_RECV:
+	case NAN_NDL_STATE_DONE:
+	default:
+		return;
+	}
+
+	wpabuf_put_u8(buf, NAN_ATTR_ELEM_CONTAINER);
+	wpabuf_put_le16(buf, 1 + wpabuf_len(peer->ndl->sched.elems));
+	wpabuf_put_u8(buf, 0);
+	wpabuf_put_buf(buf, peer->ndl->sched.elems);
+}
-- 
2.49.0




More information about the Hostap mailing list