[RFC v2 74/99] ctrl_iface: Add command to dump peer schedule

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Dec 23 03:52:18 PST 2025


Add NAN_PEER_INFO command which can be used to dump peer's schedule

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 wpa_supplicant/ctrl_iface.c     |  3 ++
 wpa_supplicant/nan_supplicant.c | 53 +++++++++++++++++++++++++++++++++
 wpa_supplicant/nan_supplicant.h |  2 ++
 3 files changed, 58 insertions(+)

diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index aed8f506dd..59ec1d772e 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -14359,6 +14359,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
 	} else if (os_strncmp(buf, "NAN_NDP_TERMINATE ", 17) == 0) {
 		if (wpas_nan_ndp_terminate(wpa_s, buf + 17) < 0)
 			reply_len = -1;
+	} else if (os_strncmp(buf, "NAN_PEER_INFO ", 14) == 0) {
+		reply_len = wpas_nan_peer_info(wpa_s, buf + 14, reply,
+					       reply_size);
 #endif /* CONFIG_NAN */
 	} else {
 		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index e781b904be..80eebbd009 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -1749,6 +1749,59 @@ int wpas_nan_ndp_terminate(struct wpa_supplicant *wpa_s, char *cmd)
 }
 
 
+/* Format: NAN_PEER_INFO <addr> <schedule|potential> */
+int wpas_nan_peer_info(struct wpa_supplicant *wpa_s, const char *cmd,
+		       char *reply, size_t reply_size)
+{
+	u8 addr[ETH_ALEN];
+	char *pos;
+	int ret = 0;
+
+	if (!wpas_nan_ready(wpa_s))
+		return -1;
+
+	if (hwaddr_aton(cmd, addr) < 0) {
+		wpa_printf(MSG_DEBUG, "NAN: Invalid peer address: %s", cmd);
+		return -1;
+	}
+
+	pos = os_strchr(cmd, ' ');
+	if (!pos) {
+		wpa_printf(MSG_DEBUG, "NAN: Missing info type parameter");
+		return -1;
+	}
+
+	if (os_strncmp(pos + 1, "schedule", 8) == 0) {
+		struct nan_peer_schedule sched;
+
+		if (nan_peer_get_schedule_info(wpa_s->nan, addr, &sched) < 0) {
+			wpa_printf(MSG_DEBUG,
+				   "NAN: Failed to get schedule info for peer "
+				   MACSTR, MAC2STR(addr));
+			return -1;
+		}
+
+		ret = nan_peer_dump_sched_to_buf(&sched, reply, reply_size);
+	} else if (os_strncmp(pos + 1, "potential", 9) == 0) {
+		struct nan_peer_potential_avail pot_avail;
+
+		if (nan_peer_get_pot_avail(wpa_s->nan, addr, &pot_avail) < 0) {
+			wpa_printf(MSG_DEBUG,
+				   "NAN: Failed to get potential availability for peer "
+				   MACSTR, MAC2STR(addr));
+			return -1;
+		}
+
+		ret = nan_peer_dump_pot_avail_to_buf(&pot_avail, reply, reply_size);
+	} else {
+		wpa_printf(MSG_DEBUG, "NAN: Unknown info type: %s", pos + 1);
+		return -1;
+	}
+
+	return ret;
+}
+
+
 void wpas_nan_cluster_join(struct wpa_supplicant *wpa_s,
 			   const u8 *cluster_id,
 			   bool new_cluster)
diff --git a/wpa_supplicant/nan_supplicant.h b/wpa_supplicant/nan_supplicant.h
index dbec989c19..6ff78e939c 100644
--- a/wpa_supplicant/nan_supplicant.h
+++ b/wpa_supplicant/nan_supplicant.h
@@ -30,6 +30,8 @@ void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
 		     const struct ieee80211_mgmt *mgmt, size_t len);
 int wpas_nan_ndp_response(struct wpa_supplicant *wpa_s, char *cmd);
 int wpas_nan_ndp_terminate(struct wpa_supplicant *wpa_s, char *cmd);
+int wpas_nan_peer_info(struct wpa_supplicant *wpa_s, const char *cmd,
+		       char *reply, size_t reply_size);
 #else /* CONFIG_NAN */
 
 static inline int wpas_nan_init(struct wpa_supplicant *wpa_s)
-- 
2.49.0




More information about the Hostap mailing list