[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