From 84c293c8b79ab2814c2bf769a83fa36ae388cd88 Mon Sep 17 00:00:00 2001 From: Jakob Olsson <jakob.olsson@iopsys.eu> Date: Wed, 17 May 2023 14:52:47 +0200 Subject: [PATCH] allow creation of supported service list --- src/cntlr_cmdu.c | 7 ++----- src/cntlr_map.c | 7 +++++++ src/cntlr_tlv.c | 20 +++++++++++++++----- src/cntlr_tlv.h | 3 +-- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/cntlr_cmdu.c b/src/cntlr_cmdu.c index 087cc5b6..bfb4bf03 100644 --- a/src/cntlr_cmdu.c +++ b/src/cntlr_cmdu.c @@ -468,7 +468,6 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_search(struct controller *c, int ret = 0; uint16_t mid = 0; uint8_t origin[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x13}; - uint8_t role; frm = cmdu_alloc_simple(CMDU_TYPE_AP_AUTOCONFIGURATION_SEARCH, &mid); if (!frm) { @@ -490,9 +489,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_search(struct controller *c, if (ret) goto out; - role = (c->state == CNTLR_INIT ? SUPPORTED_SERVICE_MULTIAP_AGENT : - SUPPORTED_SERVICE_MULTIAP_CONTROLLER); - ret = cntlr_gen_supp_service(c, frm, role); + ret = cntlr_gen_supp_service(c, frm); if (ret) goto out; @@ -543,7 +540,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_response(struct controller *c, if (ret) goto out; - ret = cntlr_gen_supp_service(c, resp, SUPPORTED_SERVICE_MULTIAP_CONTROLLER); + ret = cntlr_gen_supp_service(c, resp); if (ret) goto out; diff --git a/src/cntlr_map.c b/src/cntlr_map.c index 88d0d4cc..832376a5 100644 --- a/src/cntlr_map.c +++ b/src/cntlr_map.c @@ -957,6 +957,13 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rx_cmdu, int ret = 0; char freq_band[8] = {0}; + if (cmdu_get_mid(rx_cmdu) == c->mid_5g || + cmdu_get_mid(rx_cmdu) == c->mid_2g) { + dbg("|%s:%d| Drop search from self!\n", __func__, + __LINE__); + return -1; + } + t = map_cmdu_get_tlv(rx_cmdu, TLV_TYPE_AL_MAC_ADDRESS_TYPE); if (!t) { dbg("|%s:%d| Malformed topology notification!\n", __func__, diff --git a/src/cntlr_tlv.c b/src/cntlr_tlv.c index edc77319..6f2122ac 100644 --- a/src/cntlr_tlv.c +++ b/src/cntlr_tlv.c @@ -358,20 +358,30 @@ int cntlr_gen_supp_role(struct controller *c, struct cmdu_buff *frm, return 0; } -int cntlr_gen_supp_service(struct controller *c, struct cmdu_buff *frm, - uint8_t service) +int cntlr_gen_supp_service(struct controller *c, struct cmdu_buff *frm) { struct tlv *t; int ret; + int num = 0; + struct tlv_supported_service *t_supp_serv; t = cmdu_reserve_tlv(frm, 256); if (!t) return -1; t->type = MAP_TLV_SUPPORTED_SERVICE; - t->len = 2; - t->data[0] = 0x1; - t->data[1] = service; + t_supp_serv = (struct tlv_supported_service *) t->data; + + if (c->state != CNTLR_INIT) { + t_supp_serv->services[num++] = SUPPORTED_SERVICE_MULTIAP_CONTROLLER; + + if (cntlr_find_node(c, c->almac)) + t_supp_serv->services[num++] = SUPPORTED_SERVICE_MULTIAP_AGENT; + } else + t_supp_serv->services[num++] = SUPPORTED_SERVICE_MULTIAP_AGENT; + + t_supp_serv->num_services = num; + t->len = num + 1; ret = cmdu_put_tlv(frm, t); if (ret) { diff --git a/src/cntlr_tlv.h b/src/cntlr_tlv.h index 672ce35c..a04286ef 100644 --- a/src/cntlr_tlv.h +++ b/src/cntlr_tlv.h @@ -34,8 +34,7 @@ int cntlr_gen_ap_radio_identifier(struct controller *c, struct cmdu_buff *frm, uint8_t *hwaddr); int cntlr_gen_supp_role(struct controller *c, struct cmdu_buff *frm, uint8_t role); -int cntlr_gen_supp_service(struct controller *c, struct cmdu_buff *cmdu, - uint8_t service); +int cntlr_gen_supp_service(struct controller *c, struct cmdu_buff *cmdu); int cntlr_gen_map_profile(struct controller *c, struct cmdu_buff *frm, uint8_t profile); int cntlr_gen_steering_policy(struct controller *c, -- GitLab