diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c index a3c608425b7ba4ce0848e25cbaa02b81b8b40a70..0fbcaee7d3066ea5725a64d56e9aba2742cba098 100644 --- a/src/core/cntlr_cmdu_generator.c +++ b/src/core/cntlr_cmdu_generator.c @@ -175,7 +175,7 @@ struct cmdu_buff *cntlr_gen_client_capability_query(struct controller *c, } struct cmdu_buff *cntlr_gen_backhaul_steer_request(struct controller *c, - uint8_t *origin, uint8_t *macaddr, uint8_t *target_bssid, + uint8_t *origin, uint8_t *bkhaul, uint8_t *target_bssid, uint8_t op_class, uint8_t channel) { int ret; @@ -184,19 +184,19 @@ struct cmdu_buff *cntlr_gen_backhaul_steer_request(struct controller *c, resp = cmdu_alloc_frame(1500); if (!resp) { trace("%s: -ENOMEM\n", __func__); - return -1; + return NULL; } cmdu_set_type(resp, CMDU_BACKHAUL_STEER_REQUEST); - ret = cntlr_gen_backhaul_steer_req(c, resp, macaddr, target_bssid, op_class, + ret = cntlr_gen_backhaul_steer_req(c, resp, bkhaul, target_bssid, op_class, channel); if (ret) - return -1; + return NULL; memcpy(resp->origin, origin, 6); cmdu_put_eom(resp); - return 0; + return resp; } struct cmdu_buff *cntlr_gen_ap_metrics_query(struct controller *c, diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c index 42943f66395f71e72298f2fc249594dcf4e214ae..96065cc66301a10de8726be3c3df4fd0c0ad67d4 100644 --- a/src/core/cntlr_map.c +++ b/src/core/cntlr_map.c @@ -202,7 +202,7 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu) || !tv[5][0]) return -1; - memcpy(aladdr_origin, tv[0][0]->data, tlv_length(tv[0][0])); + memcpy(aladdr_origin, tv[0][0]->data, 6); if (hwaddr_is_zero(aladdr_origin)) { trace("%s: Discard ap-autoconfig search from aladdr = 0!\n", __func__); diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c index 494e60bde34a212ce137c5bf025244905283fb22..403aa8cb63dbd04ab15871d5aab52a3b4ee004a7 100644 --- a/src/core/cntlr_tlv_generator.c +++ b/src/core/cntlr_tlv_generator.c @@ -613,7 +613,7 @@ struct tlv_client_info *cntlr_gen_client_info(struct controller *c, } int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm, - uint8_t *target_bssid, uint8_t *macaddr, uint8_t op_class, + uint8_t *bkhaul, uint8_t *target_bssid, uint8_t op_class, uint8_t channel) { struct tlv *t; @@ -628,7 +628,7 @@ int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm, t->len = 14; data = (struct tlv_backhaul_steer_request *) t->data; memcpy(data->target_bssid, target_bssid, 6); - memcpy(data->macaddr, macaddr, 6); + memcpy(data->macaddr, bkhaul, 6); data->target_opclass = op_class; data->target_channel = channel; diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h index 1ea1919e5cadafd6b72e42a9ffc21fe8899f669b..49acc3cce1924e3e1b9707a45224e90160f82e81 100644 --- a/src/core/cntlr_tlv_generator.h +++ b/src/core/cntlr_tlv_generator.h @@ -48,7 +48,7 @@ struct tlv_supported_role *cntlr_gen_supported_role(struct controller *c, struct tlv_client_info *cntlr_gen_client_info(struct controller *c, uint8_t *sta, uint8_t *bssid); int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm, - uint8_t *target_bssid, uint8_t *macaddr, uint8_t op_class, + uint8_t *macaddr, uint8_t *target_bssid, uint8_t op_class, uint8_t channel); struct tlv_steer_request *cntlr_gen_client_steering_req( char *bss_id, uint32_t steer_timeout, diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c index b85477cb4406f374afa877e3381fc0f2cddb6da4..c4cdf8d43d70700216c117a37f4c3b639cdbca68 100644 --- a/src/core/cntlr_ubus.c +++ b/src/core/cntlr_ubus.c @@ -1222,7 +1222,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *tb[__BK_STEER_POLICY_MAX]; struct controller *c = container_of(obj, struct controller, obj); char agent_str[18] = {0}, bssid_str[18] = {0}, bkhaul_str[18] = {0}; - uint8_t agent[6] = {0}, bssid[6] = {0}, bkhaul[6] = {0}; + uint8_t agent[6] = {0}, target_bssid[6] = {0}, bkhaul[6] = {0}; struct cmdu_cstruct *cmdu; uint8_t op_class = 0, channel = 0; @@ -1230,7 +1230,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj, blob_data(msg), blob_len(msg)); if (!tb[BK_STEER_POLICY_BSSID] || !tb[BK_STEER_POLICY_STA_MAC]) { - fprintf(stderr, "BSSID and MAC required\n"); + trace("BSSID and MAC required\n"); return UBUS_STATUS_INVALID_ARGUMENT; } @@ -1239,8 +1239,8 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj, strncpy(bkhaul_str, blobmsg_data(tb[BK_STEER_POLICY_STA_MAC]), sizeof(bkhaul_str) - 1); - if (!hwaddr_aton(bssid_str, bssid) || !hwaddr_aton(bkhaul_str, bkhaul)) { - fprintf(stderr, "MAC must be in format 11:22:33...\n"); + if (!hwaddr_aton(bssid_str, target_bssid) || !hwaddr_aton(bkhaul_str, bkhaul)) { + trace("MAC must be in format 11:22:33...\n"); return UBUS_STATUS_INVALID_ARGUMENT; } @@ -1248,6 +1248,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj, if (tb[BK_STEER_POLICY_AGENT]) { strncpy(agent_str, blobmsg_data(tb[BK_STEER_POLICY_AGENT]), sizeof(agent_str) - 1); + trace("Received agent %s\n", agent_str); if (!hwaddr_aton(agent_str, agent)) return UBUS_STATUS_INVALID_ARGUMENT; } @@ -1257,7 +1258,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj, if (tb[BK_STEER_POLICY_OP_CLASS]) op_class = blobmsg_get_u8(tb[BK_STEER_POLICY_OP_CLASS]); - cmdu = cntlr_gen_backhaul_steer_request(c, agent, bssid, bkhaul, + cmdu = cntlr_gen_backhaul_steer_request(c, agent, bkhaul, target_bssid, op_class, channel); if (!cmdu) return UBUS_STATUS_UNKNOWN_ERROR;