[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