From 16acff930bd406becc3825bd22630034c9c23cf3 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 22 Oct 2021 21:36:34 +0200 Subject: 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. --- src/mm-base-bearer.c | 47 +++++++++++++++++++++++++++++++++++++++++++---- 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 -- cgit v1.2.3