[PATCH 37/71] NAN: Add an API to convert nan_sched_chan struct to channel entry
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Apr 1 15:01:46 PDT 2026
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 1906d2eed2..d78c8fa264 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -564,5 +564,7 @@ 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 701d98f773..ef062c08b1 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -569,7 +569,7 @@ void nan_ndl_add_elem_container_attr(const struct nan_data *nan,
struct wpabuf *buf);
bool nan_ndl_peer_schedule_intersects(struct nan_data *nan,
struct nan_peer *peer);
-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, u8 type_for_conditional,
diff --git a/src/nan/nan_util.c b/src/nan/nan_util.c
index bf6acc4a80..05630464d6 100644
--- a/src/nan/nan_util.c
+++ b/src/nan/nan_util.c
@@ -480,7 +480,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 channel;
@@ -1732,3 +1732,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.53.0
More information about the Hostap
mailing list