diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index b26ba55cc82d9b3365a6f1ba0667ddce3a639b5f..67d647ccf27ffc677b5e9a02d8198ce79fd359af 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,11 @@ 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__);
+ return -1;
+ }
+
idx = 0;
while (tv[ASSOC_STA_LINK_METRICS_RESP_ASSOCIATED_STA_EXT_LINK_METRICS_IDX][idx]) {
uint8_t *tv_data = (uint8_t *)