diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c index 824d12600eeba11a718159baeb6cb12291799d1d..6f78b7bfeb6fc73541b7d013768f9b505295a861 100644 --- a/src/core/cntlr_map.c +++ b/src/core/cntlr_map.c @@ -194,7 +194,7 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rx_cmdu) struct cmdu_buff *cmdu; uint8_t aladdr_origin[6] = {0}; struct tlv *tv[6][16] = {0}; - int ret = 0; + int ret = 0, i; ret = cmdu_parse_tlvs(rx_cmdu, tv, a_policy, 6); @@ -233,43 +233,40 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rx_cmdu) return -1; /* if supports agent, add to config */ - if (tv[3][0]->data[0] > 0) { - int i; + for (i = 1; i <= tv[3][0]->data[0]; i++) { char mac_str[18] = {0}; - int len = 0; if (!hwaddr_ntoa(aladdr_origin, mac_str)) return -1; - for (i = 1; i <= tv[3][0]->data[0]; i++) { - if (tv[3][0]->data[i] == - SUPPORTED_SERVICE_MULTIAP_AGENT) { - ret = cntlr_config_add_agent(&c->cfg, mac_str); - if (!ret) - cntlr_config_reload(&c->cfg); - } else if (tv[3][0]->data[i] == - SUPPORTED_SERVICE_MULTIAP_CONTROLLER) { - if (!memcmp(aladdr_origin, c->almac, 6)) { - trace("%s: Discard ap-autoconfig "\ - "search from self\n", - __func__); - return -1; - } + if (tv[3][0]->data[i] == + SUPPORTED_SERVICE_MULTIAP_AGENT) { + ret = cntlr_config_add_agent(&c->cfg, mac_str); + if (!ret) + cntlr_config_reload(&c->cfg); + } else if (tv[3][0]->data[i] == + SUPPORTED_SERVICE_MULTIAP_CONTROLLER) { + if (!memcmp(aladdr_origin, c->almac, 6)) { + trace("%s: Discard ap-autoconfig search"\ + " from self\n", __func__); + return -1; } - break; - } - } - - if (c->state == CNTLR_INIT) { - trace("Disable and exit\n"); - set_value_by_string("mapcontroller", "controller", "enabled", "0", - UCI_TYPE_STRING); - exit(0); - } else { - char data[128] = {0}; - snprintf(data, sizeof(data), "{\"type\":\"error\", \"reason\":\"multiple controllers\", \"almac\":\""MACFMT"\"}", MAC2STR(rx_cmdu->origin)); - cntlr_notify_event(c, "map.controller", data); + if (c->state == CNTLR_INIT) { + trace("Disable and exit\n"); + set_value_by_string("mapcontroller", + "controller", + "enabled", "0", + UCI_TYPE_STRING); + exit(0); + } else { + char data[128] = {0}; + + snprintf(data, sizeof(data), "{\"type\":\"error\", \"reason\":\"multiple controllers\", \"almac\":\""MACFMT"\"}", MAC2STR(rx_cmdu->origin)); + cntlr_notify_event(c, "map.controller", data); + } + } + break; } /* TODO: don't answer if searched service does not include controller */