* [PATCH 1/3] station: Add Utilization/SNR/LastSeen to station diagnostics
@ 2026-07-09 21:45 James Prestwood
2026-07-09 21:45 ` [PATCH 2/3] client: support ChannelUtilization/SignalNoiseRatio/BssLastSeen James Prestwood
2026-07-09 21:45 ` [PATCH 3/3] doc: Document new station diagnostic values James Prestwood
0 siblings, 2 replies; 3+ messages in thread
From: James Prestwood @ 2026-07-09 21:45 UTC (permalink / raw)
To: iwd; +Cc: James Prestwood
For metric gathering and general debugging its convenient to query
the last known utilization and/or SNR from the currently connected
BSS. In addition another property was added, "BssLastSeen" which is
the seconds since the last scan returned the BSS. Since the
BSS's beacon info (like utilization/SNR) are only updated upon
getting scan results we need to also advertise the "age" of the
data so any consumers can decide whether or not to ignore these
values if they are too old.
---
src/station.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/src/station.c b/src/station.c
index 8fcf8c70..05ed043e 100644
--- a/src/station.c
+++ b/src/station.c
@@ -5337,6 +5337,14 @@ static void station_destroy_interface(void *user_data)
station_free(station);
}
+/* Gets the time in seconds since the BSS was last seen */
+static uint32_t bss_last_seen_time(const struct scan_bss *bss)
+{
+ uint64_t diff = l_time_diff(bss->time_stamp, l_time_now());
+
+ return (uint32_t)l_time_to_secs(diff);
+}
+
static void station_get_diagnostic_cb(
const struct diagnostic_station_info *info,
void *user_data)
@@ -5346,6 +5354,7 @@ static void station_get_diagnostic_cb(
struct l_dbus_message_builder *builder;
struct handshake_state *hs = netdev_get_handshake(station->netdev);
uint16_t channel_num;
+ uint32_t last_seen;
if (!info) {
reply = dbus_error_aborted(station->get_station_pending);
@@ -5388,6 +5397,23 @@ static void station_get_diagnostic_cb(
's', str);
}
+ if (station->connected_bss->have_utilization) {
+ uint8_t percent =
+ (station->connected_bss->utilization * 100) / 255;
+ dbus_append_dict_basic(builder, "ChannelUtilization", 'y',
+ &percent);
+ }
+
+ if (station->connected_bss->have_snr) {
+ uint8_t snr = (uint8_t)station->connected_bss->snr;
+ dbus_append_dict_basic(builder, "SignalNoiseRatio", 'y', &snr);
+ }
+
+ last_seen = bss_last_seen_time(station->connected_bss);
+
+ dbus_append_dict_basic(builder, "BssLastSeen", 'u',
+ &last_seen);
+
diagnostic_info_to_dict(info, builder);
l_dbus_message_builder_leave_array(builder);
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/3] client: support ChannelUtilization/SignalNoiseRatio/BssLastSeen
2026-07-09 21:45 [PATCH 1/3] station: Add Utilization/SNR/LastSeen to station diagnostics James Prestwood
@ 2026-07-09 21:45 ` James Prestwood
2026-07-09 21:45 ` [PATCH 3/3] doc: Document new station diagnostic values James Prestwood
1 sibling, 0 replies; 3+ messages in thread
From: James Prestwood @ 2026-07-09 21:45 UTC (permalink / raw)
To: iwd; +Cc: James Prestwood
Add support for these new diagnostic values in iwctl
---
client/diagnostic.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/client/diagnostic.c b/client/diagnostic.c
index 2be8b724..6bce1671 100644
--- a/client/diagnostic.c
+++ b/client/diagnostic.c
@@ -97,6 +97,9 @@ static const struct diagnostic_dict_mapping diagnostic_mapping[] = {
{ "Security", 's' },
{ "InactiveTime", 'u', "ms" },
{ "ConnectedTime", 'u', "s" },
+ { "ChannelUtilization", 'y', "%" },
+ { "SignalNoiseRatio", 'y', "dBm" },
+ { "BssLastSeen", 'u', "s" },
{ NULL }
};
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 3/3] doc: Document new station diagnostic values.
2026-07-09 21:45 [PATCH 1/3] station: Add Utilization/SNR/LastSeen to station diagnostics James Prestwood
2026-07-09 21:45 ` [PATCH 2/3] client: support ChannelUtilization/SignalNoiseRatio/BssLastSeen James Prestwood
@ 2026-07-09 21:45 ` James Prestwood
1 sibling, 0 replies; 3+ messages in thread
From: James Prestwood @ 2026-07-09 21:45 UTC (permalink / raw)
To: iwd; +Cc: James Prestwood
(BssLastSeen, ChannelUtilization, and SignalNoiseRatio)
---
doc/station-diagnostic-api.txt | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/doc/station-diagnostic-api.txt b/doc/station-diagnostic-api.txt
index 9b51d4b7..a946682e 100644
--- a/doc/station-diagnostic-api.txt
+++ b/doc/station-diagnostic-api.txt
@@ -27,6 +27,9 @@ Methods dict GetDiagnostics()
Security - The chosen security for the connection.
+ BssLastSeen - The time in seconds since the BSS was seen
+ in a scan.
+
RSSI [optional] - The RSSI of the currently connected BSS.
AverageRSSI [optional] - Average RSSI of currently connected BSS.
@@ -59,6 +62,19 @@ Methods dict GetDiagnostics()
ConnectedTime [optional] - Time Duration (in s) for which this STA
remains connected to the BSS.
+ ChannelUtilization [optional] - The channel utilization
+ advertised by the BSS load element in scans.
+ Note the confidence of this value heavily
+ depends on the BssLastSeen time as this only
+ updates when IWD scans.
+
+ SignalNoiseRatio [optional] - The signal to noise ratio
+ (SNR) received on the last scan.
+ Note the confidence of this value heavily
+ depends on the BssLastSeen time as this only
+ updates when IWD scans.
+
+
Possible errors: net.connman.iwd.Busy
net.connman.iwd.Failed
net.connman.iwd.NotConnected
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-09 21:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-09 21:45 [PATCH 1/3] station: Add Utilization/SNR/LastSeen to station diagnostics James Prestwood
2026-07-09 21:45 ` [PATCH 2/3] client: support ChannelUtilization/SignalNoiseRatio/BssLastSeen James Prestwood
2026-07-09 21:45 ` [PATCH 3/3] doc: Document new station diagnostic values James Prestwood
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.