[RFC v2 92/99] NAN: Add an API to convert nan_sched_chan struct to channel entry

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Dec 23 03:52:36 PST 2025


Convert channel information into 6 byte channel entry format as
described in Wi-Fi Aware 4.0 specification table 100.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 src/nan/nan.h      |  2 ++
 src/nan/nan_i.h    |  2 +-
 src/nan/nan_util.c | 32 +++++++++++++++++++++++++++++++-
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/nan/nan.h b/src/nan/nan.h
index 14b8525ca7..a3dbc4f481 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -572,4 +572,6 @@ int nan_crypto_derive_nd_pmk(const char *pwd, const u8 *service_id,
 			     const u8 *peer_nmi, u8 *nd_pmk);
 void nan_add_dev_capa_attr(struct nan_data *nan, struct wpabuf *buf);
 int nan_peer_del_all_ndps(struct nan_data *nan, const u8 *addr);
+int nan_get_chan_entry(struct nan_data *nan, const struct nan_sched_chan *chan,
+		       struct nan_chan_entry *chan_entry);
 #endif /* NAN_H */
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index aa34b6658f..3f909e5ca1 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -541,7 +541,7 @@ int nan_ndl_naf_sent(struct nan_data *nan, struct nan_peer *peer,
 int nan_ndl_add_avail_attrs(struct nan_data *nan,
 			    const struct nan_peer *peer,
 			    struct wpabuf *buf);
-int nan_get_chan_bm(struct nan_data *nan, struct nan_sched_chan *chan,
+int nan_get_chan_bm(struct nan_data *nan, const struct nan_sched_chan *chan,
 		    u8 *op_class, u16 *chan_bm, u16 *pri_chan_bm);
 int nan_add_avail_attrs(struct nan_data *nan, u8 sequence_id,
 			u32 map_ids_bitmap,
diff --git a/src/nan/nan_util.c b/src/nan/nan_util.c
index 7dad52a81e..e1e32ff690 100644
--- a/src/nan/nan_util.c
+++ b/src/nan/nan_util.c
@@ -448,7 +448,7 @@ static u16 nan_add_avail_entry(struct nan_data *nan,
 }
 
 
-int nan_get_chan_bm(struct nan_data *nan, struct nan_sched_chan *chan,
+int nan_get_chan_bm(struct nan_data *nan, const struct nan_sched_chan *chan,
 		    u8 *op_class, u16 *chan_bm, u16 *pri_chan_bm)
 {
 	u8 bandwidth, channel;
@@ -1693,3 +1693,33 @@ int nan_get_peer_ndc_freq(struct nan_data *nan ,
 	bitfield_free(ndc_bf);
 	return -1;
 }
+
+/**
+ * nan_get_chan_entry - Get channel entry for a given NAN scheduled channel
+ *
+ * @nan: NAN module context from nan_init()
+ * @chan: NAN scheduled channel
+ * @chan_entry: On successful return holds the channel entry.
+ * Returns 0 on success; otherwise -1
+ */
+int nan_get_chan_entry(struct nan_data *nan, const struct nan_sched_chan *chan,
+		       struct nan_chan_entry *chan_entry)
+{
+	u8 op_class;
+	u16 chan_bm, pri_chan_bm;
+	int ret;
+
+	if (!chan || !chan_entry)
+		return -1;
+
+	ret = nan_get_chan_bm(nan, chan, &op_class, &chan_bm, &pri_chan_bm);
+	if (ret)
+		return ret;
+
+	os_memset(chan_entry, 0, sizeof(*chan_entry));
+	chan_entry->op_class = op_class;
+	chan_entry->chan_bitmap = host_to_le16(chan_bm);
+	chan_entry->pri_chan_bitmap = pri_chan_bm & 0xff;
+
+	return 0;
+}
-- 
2.49.0




More information about the Hostap mailing list