[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