From 94b35880877c9f02ad56cb456a24d42d7af67717 Mon Sep 17 00:00:00 2001 From: Filip Matusiak <filip.matusiak@iopsys.eu> Date: Fri, 11 Apr 2025 13:56:00 +0200 Subject: [PATCH] Allow more than one STA Link Metrics TLV in handle_sta_link_metrics_response() --- src/cntlr_map.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cntlr_map.c b/src/cntlr_map.c index b26ba55c..545ad403 100644 --- a/src/cntlr_map.c +++ b/src/cntlr_map.c @@ -2479,17 +2479,18 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu, return -1; } - /* TODO: use while[0][idx]*/ - if (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][0]) { + while (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][idx]) { uint8_t *tv_data = - (uint8_t *)tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][0]->data; + (uint8_t *)tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_LINK_METRICS_IDX][idx]->data; struct tlv_assoc_sta_link_metrics *p = (struct tlv_assoc_sta_link_metrics *)tv_data; struct sta *s; + idx++; + s = cntlr_find_sta(c->sta_table, p->macaddr); if (!s) - return -1; + continue; offset = sizeof(*p); for (i = 0; i < p->num_bss; i++) { @@ -2501,7 +2502,7 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu, if (!fh) { offset += sizeof(*b); continue; - } + } if (memcmp(s->bssid, b->bssid, 6)) { cntlr_dbg(LOG_STA, @@ -2524,6 +2525,9 @@ int handle_sta_link_metrics_response(void *cntlr, struct cmdu_buff *cmdu, memcpy(&inform_stalist[6 * iidx++], s->de_sta->macaddr, 6); } + if (iidx == 0) + cntlr_dbg(LOG_STA, "%s: No STA found in Assoc-Link-Metrics-Resp\n", __func__); + idx = 0; while (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_EXT_LINK_METRICS_IDX][idx]) { uint8_t *tv_data = (uint8_t *) -- GitLab