Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions client/diagnostic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
};

Expand Down
16 changes: 16 additions & 0 deletions doc/station-diagnostic-api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
26 changes: 26 additions & 0 deletions src/station.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
Loading