diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-10-22 21:36:34 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-11-03 12:41:51 +0100 |
commit | 16acff930bd406becc3825bd22630034c9c23cf3 (patch) | |
tree | 87bc85304a51c7bf1f19f12fad11630a6c623c1b | |
parent | 511859ef0afe049870581e3a55365bc3d3866566 (diff) |
base-bearer: implement support for 'uplink-speed' and 'downlink-speed'
We let protocol implementations provide the uplink and downlink speeds
agreed with the network as part of the connect result, and we then move
them to the bearer stats in DBus.
-rw-r--r-- | src/mm-base-bearer.c | 47 | ||||
-rw-r--r-- | src/mm-base-bearer.h | 8 |
2 files changed, 51 insertions, 4 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index f459993f..7c0e2f1e 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -315,6 +315,8 @@ bearer_reset_ongoing_interface_stats (MMBaseBearer *self) mm_bearer_stats_set_tx_bytes (self->priv->stats, 0); mm_bearer_stats_set_rx_bytes (self->priv->stats, 0); mm_bearer_stats_set_start_date (self->priv->stats, 0); + mm_bearer_stats_set_uplink_speed (self->priv->stats, 0); + mm_bearer_stats_set_downlink_speed (self->priv->stats, 0); bearer_update_interface_stats (self); } @@ -446,7 +448,9 @@ stats_update_cb (MMBaseBearer *self) } static void -bearer_stats_start (MMBaseBearer *self) +bearer_stats_start (MMBaseBearer *self, + guint64 uplink_speed, + guint64 downlink_speed) { /* Start duration timer */ g_assert (!self->priv->duration_timer); @@ -459,6 +463,9 @@ bearer_stats_start (MMBaseBearer *self) self); mm_bearer_stats_set_start_date (self->priv->stats, (guint64)(g_get_real_time() / G_USEC_PER_SEC)); + mm_bearer_stats_set_uplink_speed (self->priv->stats, uplink_speed); + mm_bearer_stats_set_downlink_speed (self->priv->stats, downlink_speed); + bearer_update_interface_stats (self); /* Load initial values */ stats_update_cb (self); @@ -531,7 +538,9 @@ bearer_update_status_connected (MMBaseBearer *self, gboolean multiplexed, gint profile_id, MMBearerIpConfig *ipv4_config, - MMBearerIpConfig *ipv6_config) + MMBearerIpConfig *ipv6_config, + guint64 uplink_speed, + guint64 downlink_speed) { mm_gdbus_bearer_set_profile_id (MM_GDBUS_BEARER (self), profile_id); mm_gdbus_bearer_set_multiplexed (MM_GDBUS_BEARER (self), multiplexed); @@ -560,7 +569,7 @@ bearer_update_status_connected (MMBaseBearer *self, g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]); /* Start statistics */ - bearer_stats_start (self); + bearer_stats_start (self, uplink_speed, downlink_speed); /* Start connection monitor, if supported */ connection_monitor_start (self); @@ -901,7 +910,9 @@ connect_ready (MMBaseBearer *self, mm_bearer_connect_result_get_multiplexed (result), mm_bearer_connect_result_get_profile_id (result), mm_bearer_connect_result_peek_ipv4_config (result), - mm_bearer_connect_result_peek_ipv6_config (result)); + mm_bearer_connect_result_peek_ipv6_config (result), + mm_bearer_connect_result_get_uplink_speed (result), + mm_bearer_connect_result_get_downlink_speed (result)); mm_bearer_connect_result_unref (result); } @@ -1871,6 +1882,8 @@ struct _MMBearerConnectResult { MMBearerIpConfig *ipv6_config; gboolean multiplexed; gint profile_id; + guint64 uplink_speed; + guint64 downlink_speed; }; MMBearerConnectResult * @@ -1938,6 +1951,32 @@ mm_bearer_connect_result_get_profile_id (MMBearerConnectResult *result) return result->profile_id; } +void +mm_bearer_connect_result_set_uplink_speed (MMBearerConnectResult *result, + guint64 speed) +{ + result->uplink_speed = speed; +} + +guint64 +mm_bearer_connect_result_get_uplink_speed (MMBearerConnectResult *result) +{ + return result->uplink_speed; +} + +void +mm_bearer_connect_result_set_downlink_speed (MMBearerConnectResult *result, + guint64 speed) +{ + result->downlink_speed = speed; +} + +guint64 +mm_bearer_connect_result_get_downlink_speed (MMBearerConnectResult *result) +{ + return result->downlink_speed; +} + MMBearerConnectResult * mm_bearer_connect_result_new (MMPort *data, MMBearerIpConfig *ipv4_config, diff --git a/src/mm-base-bearer.h b/src/mm-base-bearer.h index 993abaa4..60e8d1ed 100644 --- a/src/mm-base-bearer.h +++ b/src/mm-base-bearer.h @@ -54,6 +54,14 @@ void mm_bearer_connect_result_set_profile_id (MMBearerConnec gint profile_id); gint mm_bearer_connect_result_get_profile_id (MMBearerConnectResult *result); +/* speed, for stats */ +void mm_bearer_connect_result_set_uplink_speed (MMBearerConnectResult *result, + guint64 speed); +guint64 mm_bearer_connect_result_get_uplink_speed (MMBearerConnectResult *result); +void mm_bearer_connect_result_set_downlink_speed (MMBearerConnectResult *result, + guint64 speed); +guint64 mm_bearer_connect_result_get_downlink_speed (MMBearerConnectResult *result); + /*****************************************************************************/ /* Default timeout values to be used in the steps of a connection or |