[PATCH 66/97] NAN: Move NDL QoS checks into a function
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Tue Apr 28 13:06:07 PDT 2026
From: Avraham Stern <avraham.stern at intel.com>
Move the checks if the NDL meets QoS requirements into a function.
Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
src/nan/nan_i.h | 2 +
src/nan/nan_ndl.c | 96 +++++++++++++++++++++++++----------------------
2 files changed, 53 insertions(+), 45 deletions(-)
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index cf1c5819c1..6a75467659 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -734,6 +734,8 @@ void nan_ndl_add_elem_container_attr(const struct nan_data *nan,
struct bitfield *nan_peer_schedule_intersection(
struct nan_data *nan, const struct nan_peer *peer,
const struct nan_schedule *sched);
+bool nan_ndl_meets_qos(struct nan_data *nan, struct nan_peer *peer,
+ struct bitfield *common_bf);
int nan_convert_chan_sched_to_bf(struct nan_data *nan,
const struct nan_chan_schedule *chan,
struct bitfield **avail_bf, u8 *map_id,
diff --git a/src/nan/nan_ndl.c b/src/nan/nan_ndl.c
index d6cf1fa431..e54bb0303f 100644
--- a/src/nan/nan_ndl.c
+++ b/src/nan/nan_ndl.c
@@ -337,6 +337,52 @@ nan_ndl_match_sched_vs_common(struct nan_data *nan,
}
+bool nan_ndl_meets_qos(struct nan_data *nan, struct nan_peer *peer,
+ struct bitfield *common_bf)
+{
+ size_t size, max_latency, i;
+ u16 crbs;
+
+ /* No QoS requirements */
+ if (peer->ndl->peer_qos.min_slots == NAN_QOS_MIN_SLOTS_NO_PREF &&
+ peer->ndl->peer_qos.max_latency == NAN_QOS_MAX_LATENCY_NO_PREF) {
+ wpa_printf(MSG_DEBUG, "NAN: No QoS requirements from Peer");
+ return true;
+ }
+
+ size = bitfield_size(common_bf);
+
+ /*
+ * The common map covers an entire 8192 period with 16 TU slots. For
+ * minimal time slots need to only consider the first 32 slots
+ */
+ for (i = 0, crbs = 0, max_latency = 0; i < size; i++) {
+ if (bitfield_is_set(common_bf, i)) {
+ if (i < 32)
+ crbs++;
+
+ max_latency = 0;
+ } else if (peer->ndl->peer_qos.max_latency !=
+ NAN_QOS_MAX_LATENCY_NO_PREF) {
+ max_latency++;
+ if (max_latency > peer->ndl->peer_qos.max_latency) {
+ wpa_printf(MSG_DEBUG,
+ "NAN: Failed to meet max latency");
+ return false;
+ }
+ }
+ }
+
+ if (peer->ndl->peer_qos.min_slots != NAN_QOS_MIN_SLOTS_NO_PREF &&
+ peer->ndl->peer_qos.min_slots >= crbs) {
+ wpa_printf(MSG_DEBUG, "NAN: Failed to meet min slots");
+ return false;
+ }
+
+ return true;
+}
+
+
static enum nan_ndl_status nan_ndl_determine_status(struct nan_data *nan,
struct nan_peer *peer,
bool can_counter,
@@ -345,8 +391,7 @@ static enum nan_ndl_status nan_ndl_determine_status(struct nan_data *nan,
struct nan_schedule *sched = &nan->sched;
struct bitfield *common_bf = NULL, *ndc_bf = NULL, *track_ndc_bf = NULL;
enum nan_ndl_ver verdict;
- size_t size, max_latency, i;
- u16 crbs;
+ size_t i;
int ret;
*reason = NAN_REASON_RESERVED;
@@ -538,54 +583,15 @@ static enum nan_ndl_status nan_ndl_determine_status(struct nan_data *nan,
goto out;
}
- /* No QoS requirements. Accept */
- if (peer->ndl->peer_qos.min_slots == NAN_QOS_MIN_SLOTS_NO_PREF &&
- peer->ndl->peer_qos.max_latency == NAN_QOS_MAX_LATENCY_NO_PREF) {
- wpa_printf(MSG_DEBUG,
- "NAN: No QoS requirements from Peer. Accept");
-
+ if (nan_ndl_meets_qos(nan, peer, common_bf)) {
+ wpa_printf(MSG_DEBUG, "NAN: NDL QoS requirements met. Accept");
ret = NAN_NDL_STATUS_ACCEPTED;
- goto out;
- }
-
- size = bitfield_size(common_bf);
- wpa_printf(MSG_DEBUG, "NAN: size of avail intersection map=%zu", size);
-
- /*
- * The common map covers an entire 8192 TU period with 16 TU slots. For
- * minimal time slots need to only consider the first 32 slots.
- */
- for (i = 0, crbs = 0, max_latency = 0; i < size; i++) {
- if (bitfield_is_set(common_bf, i)) {
- if (i < 32)
- crbs++;
-
- max_latency = 0;
- } else if (peer->ndl->peer_qos.max_latency !=
- NAN_QOS_MAX_LATENCY_NO_PREF) {
- max_latency++;
- if (max_latency > peer->ndl->peer_qos.max_latency) {
- wpa_printf(MSG_DEBUG,
- "NAN: Failed to meet max latency");
-
- *reason = NAN_REASON_QOS_UNACCEPTABLE;
- ret = NAN_NDL_STATUS_CONTINUED;
- goto out;
- }
- }
- }
-
- if (peer->ndl->peer_qos.min_slots != NAN_QOS_MIN_SLOTS_NO_PREF &&
- peer->ndl->peer_qos.min_slots >= crbs) {
- wpa_printf(MSG_DEBUG,
- "NAN: Failed to meet min slots");
-
+ } else {
+ wpa_printf(MSG_DEBUG, "NAN: NDL QoS requirements not met");
*reason = NAN_REASON_QOS_UNACCEPTABLE;
ret = NAN_NDL_STATUS_CONTINUED;
- goto out;
}
- ret = NAN_NDL_STATUS_ACCEPTED;
out:
bitfield_free(common_bf);
bitfield_free(ndc_bf);
--
2.53.0
More information about the Hostap
mailing list