[PATCH 07/18] NAN: Factor out writing of the NDC attribute

Andrei Otcheretianski andrei.otcheretianski at intel.com
Mon Oct 12 08:46:41 PDT 2026


Move the serialization of the NDC attribute into a helper, so that it
can be reused for advertised NDCs.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 src/nan/nan_ndl.c | 52 ++++++++++++++++++++++++-----------------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/src/nan/nan_ndl.c b/src/nan/nan_ndl.c
index c6ed6aa5c1..b652279047 100644
--- a/src/nan/nan_ndl.c
+++ b/src/nan/nan_ndl.c
@@ -1714,6 +1714,31 @@ int nan_ndl_add_ndl_attr(struct nan_data *nan, const struct nan_peer *peer,
 }
 
 
+static void nan_write_ndc_attr(struct wpabuf *buf, const u8 *ndc_id,
+			       u8 map_id, const struct nan_time_bitmap *ndc,
+			       bool selected)
+{
+	u16 sched_entry_ctrl = 0;
+
+	wpabuf_put_u8(buf, NAN_ATTR_NDC);
+	wpabuf_put_le16(buf, sizeof(struct ieee80211_ndc) +
+			sizeof(struct nan_sched_entry) + ndc->len);
+
+	wpabuf_put_data(buf, ndc_id, ETH_ALEN);
+	wpabuf_put_u8(buf, selected ? NAN_NDC_CTRL_SELECTED : 0);
+
+	wpabuf_put_u8(buf, map_id);
+
+	sched_entry_ctrl |= ndc->duration << NAN_TIME_BM_CTRL_BIT_DURATION_POS;
+	sched_entry_ctrl |= ndc->period << NAN_TIME_BM_CTRL_PERIOD_POS;
+	sched_entry_ctrl |= ndc->offset << NAN_TIME_BM_CTRL_START_OFFSET_POS;
+	wpabuf_put_le16(buf, sched_entry_ctrl);
+
+	wpabuf_put_u8(buf, ndc->len);
+	wpabuf_put_data(buf, ndc->bitmap, ndc->len);
+}
+
+
 /**
  * nan_ndl_add_ndc_attr - Add NDC attribute to frame
  * @nan: NAN module context from nan_init()
@@ -1726,8 +1751,6 @@ int nan_ndl_add_ndc_attr(struct nan_data *nan, const struct nan_peer *peer,
 {
 	struct nan_ndl *ndl;
 	struct nan_schedule *sched = &nan->sched;
-	u8 ndc_ctrl = NAN_NDC_CTRL_SELECTED;
-	u16 sched_entry_ctrl = 0;
 
 	if (!peer || !peer->ndl)
 		return -1;
@@ -1759,29 +1782,8 @@ int nan_ndl_add_ndc_attr(struct nan_data *nan, const struct nan_peer *peer,
 		return 0;
 	}
 
-	wpabuf_put_u8(buf, NAN_ATTR_NDC);
-	wpabuf_put_le16(buf, sizeof(struct ieee80211_ndc) +
-			sizeof(struct nan_sched_entry) +
-			sched->ndc.len);
-
-	wpabuf_put_data(buf, ndl->ndc_id, sizeof(ndl->ndc_id));
-	wpabuf_put_u8(buf, ndc_ctrl);
-
-	/* Add the schedule entry */
-	wpabuf_put_u8(buf, sched->ndc_map_id);
-
-	sched_entry_ctrl |= sched->ndc.duration <<
-		NAN_TIME_BM_CTRL_BIT_DURATION_POS;
-	sched_entry_ctrl |= sched->ndc.period <<
-		NAN_TIME_BM_CTRL_PERIOD_POS;
-	sched_entry_ctrl |= sched->ndc.offset <<
-		NAN_TIME_BM_CTRL_START_OFFSET_POS;
-
-	wpabuf_put_le16(buf, sched_entry_ctrl);
-
-	/* Add the time bitmap */
-	wpabuf_put_u8(buf, sched->ndc.len);
-	wpabuf_put_data(buf, sched->ndc.bitmap, sched->ndc.len);
+	nan_write_ndc_attr(buf, ndl->ndc_id, sched->ndc_map_id, &sched->ndc,
+			   true);
 
 	return 0;
 }
-- 
2.53.0




More information about the Hostap mailing list