diff --git a/src/core/cntlr.c b/src/core/cntlr.c index ed683c94d90183f82bc62eac45717515cd74fac1..2cbc887f7073201e10f0814fa95621c6300671b5 100644 --- a/src/core/cntlr.c +++ b/src/core/cntlr.c @@ -1999,7 +1999,7 @@ static void cntlr_signal_periodic_run(struct uloop_timeout *t) } } else if (diff & (CONFIG_DIFF_AGENT_POLICY | CONFIG_DIFF_AGENT_POLICY_CNT)) { struct agent_policy *p; - struct cmdu_cstruct *cmdu; + struct cmdu_buff *cmdu; int num_radio = 1; int num_bk = 1; @@ -2027,7 +2027,7 @@ static void cntlr_signal_periodic_run(struct uloop_timeout *t) num_radio, radio_id, num_bk, bk_id); if (cmdu) { send_cmdu(c, cmdu); - map_free_cmdu(cmdu); + cmdu_free(cmdu); } /* reset is_policy_diff to false; */ diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c index d790b7386c396e48660bbe96945e4896cc197e19..db4441a878fdb85a4fdbc055a373d12f5fb50bbf 100644 --- a/src/core/cntlr_cmdu_generator.c +++ b/src/core/cntlr_cmdu_generator.c @@ -667,25 +667,26 @@ out: return NULL; } -struct cmdu_cstruct *cntlr_gen_topology_query(struct controller *c, +struct cmdu_buff *cntlr_gen_topology_query(struct controller *c, uint8_t *origin, char *intf_name) { - struct cmdu_cstruct *cmdu; - - cmdu = calloc(1, sizeof(struct cmdu_cstruct)); - if (!cmdu) { - fprintf(stderr, "failed to malloc cmdu\n"); - return NULL; - } - - cmdu_defaults(c, cmdu, origin, intf_name, CMDU_TYPE_TOPOLOGY_QUERY); - - cmdu->num_tlvs = 0; - - return cmdu; - -fail_cmdu: - map_free_cmdu(cmdu); return NULL; +// struct cmdu_cstruct *cmdu; +// +// cmdu = calloc(1, sizeof(struct cmdu_cstruct)); +// if (!cmdu) { +// fprintf(stderr, "failed to malloc cmdu\n"); +// return NULL; +// } +// +// cmdu_defaults(c, cmdu, origin, intf_name, CMDU_TYPE_TOPOLOGY_QUERY); +// +// cmdu->num_tlvs = 0; +// +// return cmdu; +// +//fail_cmdu: +// map_free_cmdu(cmdu); +// return NULL; } diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c index 710c01c95498307c48ec4cf5ba6432d4e6018e0e..9125f87ff1e67c236edfcdfda7e8d27d68df44ef 100644 --- a/src/core/cntlr_map.c +++ b/src/core/cntlr_map.c @@ -251,6 +251,20 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu) } } + + + 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(rec_cmdu->origin)); + cntlr_notify_event(c, "map.controller", data); + } + /* TODO: don't answer if searched service does not include controller */ trace("%s: sending autoconfig response for band = %d\n", @@ -262,13 +276,6 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu) return -1; - 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}; ret = send_cmdu(c, cmdu); cmdu_free(cmdu); diff --git a/src/core/cntlr_map_debug.c b/src/core/cntlr_map_debug.c index b4e589661533804db5af44750c148fbb98d8259c..50a8d217303356bb2357780a3fa3470a547a6471 100644 --- a/src/core/cntlr_map_debug.c +++ b/src/core/cntlr_map_debug.c @@ -43,174 +43,175 @@ int debug_topology_notification(void *cntlr, struct cmdu_buff *cmdu) int debug_topology_response(void *cntlr, struct cmdu_buff *cmdu) { - uint8_t *tlv; - int i, j, k; - - trace("%s: --->\n", __func__); - trace("parsing topology response |" MACFMT "|CMDU: %s\n", - MAC2STR(cmdu->origin), - map_stringify_cmdu_type(cmdu->message_type)); - - for (i = 0; i < cmdu->num_tlvs; i++) { - tlv = (uint8_t *)cmdu->tlvs[i]; - trace("TLV: %s\n", map_stringify_tlv_type(*tlv)); - switch (*tlv) { - case TLV_TYPE_DEVICE_INFORMATION_TYPE: - { - struct tlv_device_info *p = - (struct tlv_device_info *)tlv; - - trace("\tal_mac_address: " MACFMT "\n", - MAC2STR(p->al_mac_address)); - trace("\tlocal_interfaces_nr: %d\n", - p->local_interfaces_nr); - for (j = 0; j < p->local_interfaces_nr; j++) { - trace("\t\tmac_address: " MACFMT "\n", - MAC2STR(p->local_interfaces[j].mac_address)); - trace("\t\tmedia_type: 0x%04hx\n", - p->local_interfaces[j].media_type); - trace("\t\tmedia_specific_data_size: %d\n", - p->local_interfaces[j].media_specific_data_size); - if ((p->local_interfaces[j].media_type & 0xff00) == 0x0100) { - /* IEEE 802.11 devices */ - trace("\t\tnetwork_membership: " MACFMT "\n", - MAC2STR(p->local_interfaces[j].media_specific_data.ieee80211.network_membership)); - trace("\t\trole: "); - print_bits(p->local_interfaces[j].media_specific_data.ieee80211.role, - 4, 4); - trace("\t\tap_channel_band: 0x%02hx\n", - p->local_interfaces[j].media_specific_data.ieee80211.ap_channel_band); - trace("\t\tap_ch_freq_1: 0x%02hx\n", - p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_1); - trace("\t\tap_ch_freq_2: 0x%02hx\n", - p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_2); - } - } - break; - } - case TLV_TYPE_DEVICE_BRIDGING_CAPABILITIES: - { - struct tlv_device_bridge_cap *p = - (struct tlv_device_bridge_cap *)tlv; - - trace("\tbridging_tuples_nr: %d\n", - p->bridging_tuples_nr); - for (j = 0; j < p->bridging_tuples_nr; j++) { - trace("\t\tbridging_tuple_macs_nr: %d\n", - p->bridging_tuples[j].bridging_tuple_macs_nr); - for (k = 0; k < p->bridging_tuples[j].bridging_tuple_macs_nr; k++) { - trace("\t\t\tmac_address: " MACFMT "\n", - MAC2STR(p->bridging_tuples[j].bridging_tuple_macs[k].mac_address)); - } - } - break; - } - case TLV_TYPE_NON_1905_NEIGHBOR_DEVICE_LIST: - { - struct tlv_non1905_neighbor *p = - (struct tlv_non1905_neighbor *)tlv; - - trace("\tlocal_mac_address: " MACFMT "\n", - MAC2STR(p->local_mac_address)); - trace("\tnon_1905_neighbors_nr: %d\n", - p->non_1905_neighbors_nr); - for (j = 0; j < p->non_1905_neighbors_nr; j++) { - trace("\t\tmac_address: " MACFMT "\n", - MAC2STR(p->non_1905_neighbors[j].mac_address)); - } - break; - } - case TLV_TYPE_NEIGHBOR_DEVICE_LIST: - { - struct tlv_neighbor_device *p = - (struct tlv_neighbor_device *)tlv; - - trace("\tlocal_mac_address: " MACFMT "\n", - MAC2STR(p->local_mac_address)); - trace("\tneighbors_nr: %d\n", - p->neighbors_nr); - for (j = 0; j < p->neighbors_nr; j++) { - trace("\t\tmac_address: " MACFMT "\n", - MAC2STR(p->neighbors[j].mac_address)); - trace("\t\tbridge_flag: %s\n", - (p->neighbors[j].bridge_flag ? "true" : "false")); - } - break; - } - case MAP_TLV_SUPPORTED_SERVICE: - { - struct tlv_supp_service *p = - (struct tlv_supp_service *)tlv; - - trace("\tsupported_services_list: %d\n", - p->supported_services_list); - for (j = 0; j < p->supported_services_list; j++) { - trace("\t\tservice: %s\n", - (p->supported_services[j].service ? - "Multi-AP Agent" : "Multi-AP Controller")); - } - break; - } - case MAP_TLV_AP_OPERATIONAL_BSS: - { - struct tlv_ap_oper_bss *p = - (struct tlv_ap_oper_bss *)tlv; - - trace("\tradios_nr: %d\n", p->radios_nr); - for (j = 0; j < p->radios_nr; j++) { - trace("\t\tradio_id: " MACFMT "\n", - MAC2STR(p->radio[j].radio_id)); - trace("\t\tbss_nr: %d\n", - p->radio[j].bss_nr); - for (k = 0; k < p->radio[j].bss_nr; k++) { - trace("\t\t\tbssid: " MACFMT "\n", - MAC2STR(p->radio[j].bss[k].bssid)); - trace("\t\t\tssid_len: %d\n", - p->radio[j].bss[k].ssid_len); - trace("\t\t\tssid: %.*s\n", - p->radio[j].bss[k].ssid_len, - p->radio[j].bss[k].ssid); - } - } - break; - } - case MAP_TLV_ASSOCIATED_CLIENTS: - { - struct tlv_assoc_client *p = - (struct tlv_assoc_client *)tlv; - - trace("\tbss_nr: %d\n", p->bss_nr); - for (j = 0; j < p->bss_nr; j++) { - trace("\t\tbssid: " MACFMT "\n", - MAC2STR(p->bss[j].bssid)); - trace("\t\tassoc_clients_nr: %d\n", - p->bss[j].assoc_clients_nr); - for (k = 0; k < p->bss[j].assoc_clients_nr; k++) { - trace("\t\t\tclient_addr: " MACFMT "\n", - MAC2STR(p->bss[j].clients[k].client_addr)); - trace("\t\t\tuptime: 0x%04x\n", - p->bss[j].clients[k].uptime); - } - } - break; - } - case MAP_TLV_MULTIAP_PROFILE: - { - struct tlv_map_profile *p = - (struct tlv_map_profile *)tlv; - - trace("\tprofile: 0x%02hx\n", p->profile); - break; - } - default: - { - trace("unknown TLV\n"); - break; - } - } - trace("\n"); - } return 0; +// uint8_t *tlv; +// int i, j, k; +// +// trace("%s: --->\n", __func__); +// trace("parsing topology response |" MACFMT "|CMDU: %s\n", +// MAC2STR(cmdu->origin), +// map_stringify_cmdu_type(cmdu->message_type)); +// +// for (i = 0; i < cmdu->num_tlvs; i++) { +// tlv = (uint8_t *)cmdu->tlvs[i]; +// trace("TLV: %s\n", map_stringify_tlv_type(*tlv)); +// switch (*tlv) { +// case TLV_TYPE_DEVICE_INFORMATION_TYPE: +// { +// struct tlv_device_info *p = +// (struct tlv_device_info *)tlv; +// +// trace("\tal_mac_address: " MACFMT "\n", +// MAC2STR(p->al_mac_address)); +// trace("\tlocal_interfaces_nr: %d\n", +// p->local_interfaces_nr); +// for (j = 0; j < p->local_interfaces_nr; j++) { +// trace("\t\tmac_address: " MACFMT "\n", +// MAC2STR(p->local_interfaces[j].mac_address)); +// trace("\t\tmedia_type: 0x%04hx\n", +// p->local_interfaces[j].media_type); +// trace("\t\tmedia_specific_data_size: %d\n", +// p->local_interfaces[j].media_specific_data_size); +// if ((p->local_interfaces[j].media_type & 0xff00) == 0x0100) { +// /* IEEE 802.11 devices */ +// trace("\t\tnetwork_membership: " MACFMT "\n", +// MAC2STR(p->local_interfaces[j].media_specific_data.ieee80211.network_membership)); +// trace("\t\trole: "); +// print_bits(p->local_interfaces[j].media_specific_data.ieee80211.role, +// 4, 4); +// trace("\t\tap_channel_band: 0x%02hx\n", +// p->local_interfaces[j].media_specific_data.ieee80211.ap_channel_band); +// trace("\t\tap_ch_freq_1: 0x%02hx\n", +// p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_1); +// trace("\t\tap_ch_freq_2: 0x%02hx\n", +// p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_2); +// } +// } +// break; +// } +// case TLV_TYPE_DEVICE_BRIDGING_CAPABILITIES: +// { +// struct tlv_device_bridge_cap *p = +// (struct tlv_device_bridge_cap *)tlv; +// +// trace("\tbridging_tuples_nr: %d\n", +// p->bridging_tuples_nr); +// for (j = 0; j < p->bridging_tuples_nr; j++) { +// trace("\t\tbridging_tuple_macs_nr: %d\n", +// p->bridging_tuples[j].bridging_tuple_macs_nr); +// for (k = 0; k < p->bridging_tuples[j].bridging_tuple_macs_nr; k++) { +// trace("\t\t\tmac_address: " MACFMT "\n", +// MAC2STR(p->bridging_tuples[j].bridging_tuple_macs[k].mac_address)); +// } +// } +// break; +// } +// case TLV_TYPE_NON_1905_NEIGHBOR_DEVICE_LIST: +// { +// struct tlv_non1905_neighbor *p = +// (struct tlv_non1905_neighbor *)tlv; +// +// trace("\tlocal_mac_address: " MACFMT "\n", +// MAC2STR(p->local_mac_address)); +// trace("\tnon_1905_neighbors_nr: %d\n", +// p->non_1905_neighbors_nr); +// for (j = 0; j < p->non_1905_neighbors_nr; j++) { +// trace("\t\tmac_address: " MACFMT "\n", +// MAC2STR(p->non_1905_neighbors[j].mac_address)); +// } +// break; +// } +// case TLV_TYPE_NEIGHBOR_DEVICE_LIST: +// { +// struct tlv_neighbor_device *p = +// (struct tlv_neighbor_device *)tlv; +// +// trace("\tlocal_mac_address: " MACFMT "\n", +// MAC2STR(p->local_mac_address)); +// trace("\tneighbors_nr: %d\n", +// p->neighbors_nr); +// for (j = 0; j < p->neighbors_nr; j++) { +// trace("\t\tmac_address: " MACFMT "\n", +// MAC2STR(p->neighbors[j].mac_address)); +// trace("\t\tbridge_flag: %s\n", +// (p->neighbors[j].bridge_flag ? "true" : "false")); +// } +// break; +// } +// case MAP_TLV_SUPPORTED_SERVICE: +// { +// struct tlv_supp_service *p = +// (struct tlv_supp_service *)tlv; +// +// trace("\tsupported_services_list: %d\n", +// p->supported_services_list); +// for (j = 0; j < p->supported_services_list; j++) { +// trace("\t\tservice: %s\n", +// (p->supported_services[j].service ? +// "Multi-AP Agent" : "Multi-AP Controller")); +// } +// break; +// } +// case MAP_TLV_AP_OPERATIONAL_BSS: +// { +// struct tlv_ap_oper_bss *p = +// (struct tlv_ap_oper_bss *)tlv; +// +// trace("\tradios_nr: %d\n", p->radios_nr); +// for (j = 0; j < p->radios_nr; j++) { +// trace("\t\tradio_id: " MACFMT "\n", +// MAC2STR(p->radio[j].radio_id)); +// trace("\t\tbss_nr: %d\n", +// p->radio[j].bss_nr); +// for (k = 0; k < p->radio[j].bss_nr; k++) { +// trace("\t\t\tbssid: " MACFMT "\n", +// MAC2STR(p->radio[j].bss[k].bssid)); +// trace("\t\t\tssid_len: %d\n", +// p->radio[j].bss[k].ssid_len); +// trace("\t\t\tssid: %.*s\n", +// p->radio[j].bss[k].ssid_len, +// p->radio[j].bss[k].ssid); +// } +// } +// break; +// } +// case MAP_TLV_ASSOCIATED_CLIENTS: +// { +// struct tlv_assoc_client *p = +// (struct tlv_assoc_client *)tlv; +// +// trace("\tbss_nr: %d\n", p->bss_nr); +// for (j = 0; j < p->bss_nr; j++) { +// trace("\t\tbssid: " MACFMT "\n", +// MAC2STR(p->bss[j].bssid)); +// trace("\t\tassoc_clients_nr: %d\n", +// p->bss[j].assoc_clients_nr); +// for (k = 0; k < p->bss[j].assoc_clients_nr; k++) { +// trace("\t\t\tclient_addr: " MACFMT "\n", +// MAC2STR(p->bss[j].clients[k].client_addr)); +// trace("\t\t\tuptime: 0x%04x\n", +// p->bss[j].clients[k].uptime); +// } +// } +// break; +// } +// case MAP_TLV_MULTIAP_PROFILE: +// { +// struct tlv_map_profile *p = +// (struct tlv_map_profile *)tlv; +// +// trace("\tprofile: 0x%02hx\n", p->profile); +// break; +// } +// default: +// { +// trace("unknown TLV\n"); +// break; +// } +// } +// trace("\n"); +// } +// return 0; } int debug_ap_autoconfig_search(void *cntlr, struct cmdu_buff *cmdu) diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c index a4717f4001b39a6acd30c341f22c48ac92316c03..a0e0b559748684a799633e4a641f08ab68ba553e 100644 --- a/src/core/cntlr_ubus.c +++ b/src/core/cntlr_ubus.c @@ -1670,7 +1670,7 @@ static int cntlr_topology_query(struct ubus_context *ctx, struct ubus_object *ob return UBUS_STATUS_UNKNOWN_ERROR; send_cmdu(c, cmdu_data); - map_free_cmdu(cmdu_data); + cmdu_free(cmdu_data); return UBUS_STATUS_OK; }