From c3237d42af8e5567d2b0c74048416cedfb2876e4 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakob.olsson@iopsys.eu>
Date: Tue, 18 May 2021 16:04:41 +0200
Subject: [PATCH] map-controller: misc fixes to bsta steering

---
 src/core/cntlr_cmdu_generator.c | 10 +++++-----
 src/core/cntlr_map.c            |  2 +-
 src/core/cntlr_tlv_generator.c  |  4 ++--
 src/core/cntlr_tlv_generator.h  |  2 +-
 src/core/cntlr_ubus.c           | 11 ++++++-----
 5 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c
index a3c60842..0fbcaee7 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 42943f66..96065cc6 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 494e60bd..403aa8cb 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 1ea1919e..49acc3cc 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 b85477cb..c4cdf8d4 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;
-- 
GitLab