[RFC PATCH 1/6] NAN: Split SDF NAN attribute generation into a separate function

Benjamin Berg benjamin at sipsolutions.net
Thu Feb 19 07:55:48 PST 2026


From: Benjamin Berg <benjamin.berg at intel.com>

Move attribute generation into a separate function so that this can be
used for other purposes in the future.

Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
---
 src/common/nan_de.c | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/common/nan_de.c b/src/common/nan_de.c
index 0233c4caae..605968a2a3 100644
--- a/src/common/nan_de.c
+++ b/src/common/nan_de.c
@@ -263,13 +263,12 @@ static int nan_de_tx(struct nan_de *de, unsigned int freq,
 }
 
 
-static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv,
-			  unsigned int wait_time,
-			  enum nan_service_control_type type,
-			  const u8 *dst, const u8 *a3, u8 req_instance_id,
-			  const struct wpabuf *ssi)
+static size_t nan_de_sdf_attrs_put(struct wpabuf *buf, struct nan_de *de,
+				   struct nan_de_service *srv,
+				   enum nan_service_control_type type,
+				   u8 req_instance_id,
+				   const struct wpabuf *ssi)
 {
-	struct wpabuf *buf;
 	size_t len = 0, sda_len, sdea_len;
 	u8 ctrl = type;
 	u16 sdea_ctrl = 0;
@@ -303,9 +302,9 @@ static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv,
 	if (srv->elems)
 		len += NAN_ATTR_HDR_LEN + 1 + wpabuf_len(srv->elems);
 
-	buf = nan_de_alloc_sdf(len);
+	/* Nothing to put it into, just return the expected length */
 	if (!buf)
-		return;
+		return len;
 
 	/* Service Descriptor attribute */
 	wpabuf_put_u8(buf, NAN_ATTR_SDA);
@@ -364,6 +363,27 @@ static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv,
 		wpabuf_put_buf(buf, srv->elems);
 	}
 
+	return len;
+}
+
+
+static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv,
+			  unsigned int wait_time,
+			  enum nan_service_control_type type,
+			  const u8 *dst, const u8 *a3, u8 req_instance_id,
+			  const struct wpabuf *ssi)
+{
+	struct wpabuf *buf;
+	size_t len;
+
+	len = nan_de_sdf_attrs_put(NULL, de, srv, type, req_instance_id, ssi);
+
+	buf = nan_de_alloc_sdf(len);
+	if (!buf)
+		return;
+
+	nan_de_sdf_attrs_put(buf, de, srv, type, req_instance_id, ssi);
+
 	nan_de_tx(de, srv->sync ? 0 : srv->freq, srv->sync ? 0 : wait_time,
 		  dst, de->nmi, a3, buf);
 	wpabuf_free(buf);
-- 
2.53.0




More information about the Hostap mailing list