From b3a2c11576ad7f044c5fe59362c67dca24da55b0 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakob.olsson@iopsys.eu>
Date: Wed, 7 May 2025 12:47:11 +0200
Subject: [PATCH] scan: add debug output over UBUS and prefix prints

---
 src/agent_cmdu.c |  9 +++++----
 src/agent_map.c  | 16 ++++++++--------
 src/agent_tlv.c  |  2 +-
 src/agent_ubus.c | 16 ++++++++++++++++
 4 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/agent_cmdu.c b/src/agent_cmdu.c
index 49ea9be17..607bbc1fa 100644
--- a/src/agent_cmdu.c
+++ b/src/agent_cmdu.c
@@ -929,17 +929,18 @@ static int agent_gen_ch_scan_response_opc(struct agent *a,
 
 			for (j = 0; j < op->num_channels; j++) {
 				int k;
+
 				ch = op->channel_scanlist + j;
-				trace("scan opclass %d channel %d num_neighbors %d\n",
-				    op->opclass, ch->channel, ch->num_neighbors);
+				trace("%s: scan opclass %d channel %d num_neighbors %d\n",
+				      __func__, op->opclass, ch->channel, ch->num_neighbors);
 				for (k = 0; k < ch->num_neighbors; k++) {
 					struct wifi_scanres_neighbor_element *nbr = ch->nbrlist + k;
-					trace("trace \tneigh " MACFMT " ssid %s\n", MAC2STR(nbr->bssid), nbr->ssid);
+					trace("\t %s: neigh " MACFMT " ssid %s\n", __func__, MAC2STR(nbr->bssid), nbr->ssid);
 				}
 			}
 
 			if (req_opc->classid != op->opclass) {
-				trace("skip opclass %d\n", op->opclass);
+				trace("%s: skip opclass %d\n", __func__, op->opclass);
 				continue;
 			}
 
diff --git a/src/agent_map.c b/src/agent_map.c
index cedc3f5d5..b3c5a2c16 100644
--- a/src/agent_map.c
+++ b/src/agent_map.c
@@ -5648,7 +5648,7 @@ int handle_channel_scan_request(void *agent, struct cmdu_buff *rx_cmdu,
 		/* 'Pefrorm Fresh Scan' while 'On boot only' set in Caps */
 		if (a->cfg.scan_on_boot_only
 				&& ch_scan_req.mode & SCAN_REQUEST_FRESH_SCAN) {
-			dbg("[Scan Status] radio %s: BOOT SCAN ONLY\n\n",
+			dbg("%s: [Scan Status] radio %s: BOOT SCAN ONLY\n\n", __func__,
 			    re->name);
 
 			/* Special status in 'boot only' mode for 'fresh scan' */
@@ -5661,7 +5661,7 @@ int handle_channel_scan_request(void *agent, struct cmdu_buff *rx_cmdu,
 		/* Check all requested opc/chan pairs supported by radio */
 		else if (!scan_supported(a, scan_req, re)) {
 			/* Scan not supported for some opc/channel pairs */
-			dbg("[Status code] SCAN NOT SUPPORTED\n\n");
+			dbg("%s: [Status code] SCAN NOT SUPPORTED\n\n", __func__);
 
 			//TODO: separate status for individual opc/ch pairs
 
@@ -5670,13 +5670,13 @@ int handle_channel_scan_request(void *agent, struct cmdu_buff *rx_cmdu,
 		/* Scan too soon */
 		else if (!timestamp_expired(&re->last_scan_tsp,
 						MIN_SCAN_ITV_SEC * 1000)) {
-			dbg("[Status code] SCAN TOO SOON\n\n");
+			dbg("%s: [Status code] SCAN TOO SOON\n\n", __func__);
 
 			scan_req->status = CH_SCAN_STATUS_TOO_SOON;
 		}
 		/* Ongoing scan in progress */
 		else if (re->scan_state == SCAN_SCANNING) {
-			dbg("[Status code] ONGOING SCAN NOT COMPLETED\n\n");
+			dbg("%s: [Status code] ONGOING SCAN NOT COMPLETED\n\n", __func__);
 
 			scan_req->status = CH_SCAN_STATUS_SCAN_NOT_COMPLETED;
 		} else
@@ -5699,13 +5699,13 @@ int handle_channel_scan_request(void *agent, struct cmdu_buff *rx_cmdu,
 		/* Mark radio unscanned prior to a new scan (only) */
 		re->scan_state = SCAN_NONE;
 
-		trace("Trying to issue channel scan on the request of mid: %d\n",
+		trace("%s: Trying to issue channel scan on the request of mid: %d\n", __func__,
 			  scan_req->mid);
 
 		/* Issue channel scan & check return code */
 		ret = issue_channel_scan(a, re, scan_req);
 		if (ret) {
-			dbg("[Status code] RADIO BUSY\n\n");
+			dbg("%s: [Status code] RADIO BUSY\n\n", __func__);
 
 			/* Send the 'busy' response */
 			scan_req->status = CH_SCAN_STATUS_TOO_BUSY;
@@ -5716,11 +5716,11 @@ int handle_channel_scan_request(void *agent, struct cmdu_buff *rx_cmdu,
 			continue;
 		}
 
-		trace("Scan started successfully.\n");
+		trace("%s: Scan started successfully.\n", __func__);
 		re->scan_state = SCAN_REQUESTED;
 
 		/* Wait (up to 5min) for the results */
-		timer_set(&re->available_scan_timer, 300000);
+		timer_set(&re->available_scan_timer, 300 * 1000);
 
 		/* Store the request data */
 		re->scan_req = *scan_req;
diff --git a/src/agent_tlv.c b/src/agent_tlv.c
index c5300c7e2..d816f4647 100644
--- a/src/agent_tlv.c
+++ b/src/agent_tlv.c
@@ -3290,7 +3290,7 @@ int agent_gen_ch_scan_response_tlv(struct agent *a, struct cmdu_buff *cmdu,
 		/* ssid */
 		memcpy(&t->data[offset], nbr->ssid, strlen(nbr->ssid));
 		offset += strlen(nbr->ssid);
-		t->data[offset++] = nbr->rssi;	/* rcpi */
+		t->data[offset++] = nbr->rssi;	/* rssi */
 
 		t->data[offset++] = strlen(bw_str); //+ 1;		/* BW length */
 		memcpy(&t->data[offset], bw_str, strlen(bw_str));
diff --git a/src/agent_ubus.c b/src/agent_ubus.c
index 99fdade97..14bcfca93 100644
--- a/src/agent_ubus.c
+++ b/src/agent_ubus.c
@@ -954,8 +954,10 @@ static int agent_timers(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct blob_buf bb;
 	struct agent *a = container_of(obj, struct agent, obj);
+	struct wifi_radio_element *re = NULL;
 	void *t;
 	struct timespec now = {0};
+	void *b;
 
 	timestamp_update(&now);
 
@@ -977,6 +979,20 @@ static int agent_timers(struct ubus_context *ctx, struct ubus_object *obj,
 #endif /* AGENT_ISLAND_PREVENTION */
 	blobmsg_add_u32(&bb, "disable_unconnected_bstas_scheduler", timer_remaining_ms(&a->disable_unconnected_bstas_scheduler));
 	blobmsg_add_u32(&bb, "onboarding_scheduler", timer_remaining_ms(&a->onboarding_scheduler));
+	b = blobmsg_open_array(&bb, "scan");
+
+	list_for_each_entry(re, &a->radiolist, list) {
+		void *tt;
+
+		tt = blobmsg_open_table(&bb, "");
+		blobmsg_add_string(&bb, "name", re->name);
+		blobmsg_add_u32(&bb, "timeout", timer_remaining_ms(&re->available_scan_timer));
+		blobmsg_add_u32(&bb, "state", re->scan_state);
+		blobmsg_close_table(&bb, tt);
+	}
+
+	blobmsg_close_array(&bb, b);
+	blobmsg_close_table(&bb, t);
 	ubus_send_reply(ctx, req, bb.head);
 	blob_buf_free(&bb);
 
-- 
GitLab