From 9570e26ad7c7374f9b8b30bb6947474aba3db221 Mon Sep 17 00:00:00 2001
From: Filip Matusiak <filip.matusiak@iopsys.eu>
Date: Mon, 19 Jun 2023 11:10:03 +0200
Subject: [PATCH] steering: fix client_steer_result ubus evt notification

Signed-off-by: Filip Matusiak <filip.matusiak@iopsys.eu>
---
 src/cntlr.c     | 11 ++++++-----
 src/cntlr.h     |  2 +-
 src/cntlr_map.c |  9 ++++++---
 src/steer.h     |  7 +++++++
 4 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/cntlr.c b/src/cntlr.c
index 81bf00b1..1992b6d8 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -528,15 +528,15 @@ void cntlr_notify_client_steer_req_evt(struct controller *c,
 }
 
 void cntlr_notify_client_steer_result(struct controller *c,
-		uint8_t *sta_mac, bool steer_success)
+		uint8_t *sta_mac, int result)
 {
 	char ev_data[1024] = {0};
 
 	snprintf(ev_data, sizeof(ev_data),
 	         "{\"sta_mac\":\""MACFMT"\""
-	         ",\"status\":%s}",
-	         MAC2STR(sta_mac),
-	         steer_success ? "SUCCESS" : "FAIL");
+	         ",\"status\":%d}",
+	         MAC2STR(sta_mac), result);
+
 	cntlr_notify_event(c, "client_steer_result", ev_data);
 }
 
@@ -582,7 +582,8 @@ static void cntlr_btm_req_timer_cb(atimer_t *t)
 				s->de_sta->mapsta.pending_btm_resp_num;
 		s->de_sta->mapsta.pending_btm_resp_num = 0;
 
-		cntlr_notify_client_steer_result(c, s->de_sta->macaddr, false);
+		cntlr_notify_client_steer_result(c, s->de_sta->macaddr,
+				STEER_RESULT_FAIL_TIMEOUT);
 	}
 }
 
diff --git a/src/cntlr.h b/src/cntlr.h
index 809094cd..2e1a4324 100644
--- a/src/cntlr.h
+++ b/src/cntlr.h
@@ -391,7 +391,7 @@ void cntlr_notify_client_steer_req_evt(struct controller *c,
 			uint8_t *bssid, uint32_t sta_nr, uint8_t stas[][6],
 			uint32_t bssid_nr, uint8_t target_bssid[][6]);
 void cntlr_notify_client_steer_result(struct controller *c,
-		uint8_t *sta_mac, bool steer_success);
+		uint8_t *sta_mac, int result);
 struct steer_control_config *get_steer_control_config(struct controller *c);
 struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr);
 struct sta *cntlr_find_sta(struct controller *c, uint8_t *mac);
diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index 06a2c20d..20df08c9 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -1150,7 +1150,8 @@ int handle_1905_ack(void *cntlr, struct cmdu_buff *cmdu, struct node *n)
 			if (s->latest_assoc_cntrl_mid == mid) {
 				s->de_sta->mapsta.stats.failed_steer_attempts++;
 
-				cntlr_notify_client_steer_result(c, s->de_sta->macaddr, false);
+				cntlr_notify_client_steer_result(c, s->de_sta->macaddr,
+						STEER_RESULT_FAIL_ASOC_CTRL);
 			}
 		}
 	}
@@ -2754,7 +2755,8 @@ int handle_sta_steer_btm_report(void *cntlr, struct cmdu_buff *cmdu,
 			s->de_sta->mapsta.stats.btm_failure_cnt++;
 			c->dlem.network.steer_summary.btm_failure_cnt++;
 
-			cntlr_notify_client_steer_result(c, s->de_sta->macaddr, false);
+			cntlr_notify_client_steer_result(c, s->de_sta->macaddr,
+					STEER_RESULT_FAIL_RSP);
 		}
 		/* else: counters already updated in cntlr_btm_req_timer_cb */
 
@@ -2766,7 +2768,8 @@ int handle_sta_steer_btm_report(void *cntlr, struct cmdu_buff *cmdu,
 		s->de_sta->mapsta.stats.btm_success_cnt++;
 		c->dlem.network.steer_summary.btm_success_cnt++;
 
-		cntlr_notify_client_steer_result(c, s->de_sta->macaddr, true);
+		cntlr_notify_client_steer_result(c, s->de_sta->macaddr,
+				STEER_RESULT_SUCCESS);
 
 		if (s->de_sta->mapsta.pending_btm_resp_num == 0) {
 			/* Received succesful btm report, after the btm timeout,
diff --git a/src/steer.h b/src/steer.h
index 7c851b40..63d73dc8 100644
--- a/src/steer.h
+++ b/src/steer.h
@@ -45,6 +45,13 @@ enum steer_mode {
 	STEER_MODE_OPPORTUNITY,
 };
 
+enum steer_result {
+	STEER_RESULT_SUCCESS,
+	STEER_RESULT_FAIL_RSP,       /* got BTM response frame with result != 0 */
+	STEER_RESULT_FAIL_TIMEOUT,   /* no BTM response recvd within specified time */
+	STEER_RESULT_FAIL_ASOC_CTRL, /* tried to assoc control an associated STA */
+};
+
 typedef enum steer_verdict steer_verdict_t;
 typedef enum steer_reason steer_reason_t;
 typedef enum steer_mode steer_mode_t;
-- 
GitLab