diff --git a/src/cntlr.c b/src/cntlr.c index 2dfc1a0dab95c04a90a8f457cd4719af32079c91..c889c09b592e6866640e98b9baa4b7063492fa76 100644 --- a/src/cntlr.c +++ b/src/cntlr.c @@ -1912,24 +1912,23 @@ static void cntlr_ageout_nodes(struct controller *c) static void combined_link_metric_periodic_collection(struct controller *c) { trace("%s: --->\n", __func__); - struct node *p = NULL; uint8_t *radiolist = NULL, *bsslist = NULL; + struct cmdu_buff *cmdu; + struct node *n = NULL; /* AP metrics query for each agent */ /* For each agent */ - list_for_each_entry(p, &c->nodelist, list) { + list_for_each_entry(n, &c->nodelist, list) { uint8_t *new_radiolist; - struct node *n; - struct cmdu_buff *cmdu; struct netif_radio *r = NULL; int num_bss = 0, num_radio = 0; uint8_t hwaddr[6]; num_radio = 0; num_bss = 0; - memcpy(hwaddr, p->alid, 6); + memcpy(hwaddr, n->alid, 6); /* For each radio */ - list_for_each_entry(r, &p->radiolist, list) { + list_for_each_entry(r, &n->radiolist, list) { struct netif_iface *bss = NULL; int radio_index; @@ -1975,7 +1974,7 @@ static void combined_link_metric_periodic_collection(struct controller *c) if (num_bss > 0) { cmdu = cntlr_gen_ap_metrics_query(c, hwaddr, num_bss, bsslist, num_radio, radiolist); if (!cmdu) { - trace("cmdu_gen failed!\n"); + trace("cmdu cntlr_gen_ap_metrics_query failed!\n"); goto error; } send_cmdu(c, cmdu); @@ -1984,21 +1983,30 @@ static void combined_link_metric_periodic_collection(struct controller *c) dbg("Skip sending AP metrics query, no BSS to query\n"); } - /* query i1905d base CMDU */ - cmdu = ieee1905_ubus_buildcmdu(c->ubus_ctx, CMDU_TYPE_LINK_METRIC_RESPONSE); - if (!cmdu) - dbg("No response from stack when generating 0x%04x\n", - CMDU_TYPE_LINK_METRIC_RESPONSE); - - n = cntlr_find_node(c, c->almac); - if (!n) { - cmdu_free(cmdu); + cmdu = cntlr_gen_1905_link_metric_query(c, n->alid); + if (!cmdu) { + trace("cmdu cntlr_gen_1905_link_metric_query failed!\n"); goto error; } - handle_link_metrics_response(c, cmdu, n); + send_cmdu(c, cmdu); + cmdu_free(cmdu); + } + + /* query i1905d base CMDU */ + cmdu = ieee1905_ubus_buildcmdu(c->ubus_ctx, CMDU_TYPE_LINK_METRIC_RESPONSE); + if (!cmdu) + dbg("No response from stack when generating 0x%04x\n", + CMDU_TYPE_LINK_METRIC_RESPONSE); + + n = cntlr_find_node(c, c->almac); + if (!n) { cmdu_free(cmdu); + goto error; } + + handle_link_metrics_response(c, cmdu, n); + cmdu_free(cmdu); error: if (radiolist) free(radiolist);