[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