summaryrefslogtreecommitdiff
path: root/src/mm-base-bearer.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-10-22 21:36:34 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-11-03 12:41:51 +0100
commit16acff930bd406becc3825bd22630034c9c23cf3 (patch)
tree87bc85304a51c7bf1f19f12fad11630a6c623c1b /src/mm-base-bearer.c
parent511859ef0afe049870581e3a55365bc3d3866566 (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.
Diffstat (limited to 'src/mm-base-bearer.c')
-rw-r--r--src/mm-base-bearer.c47
1 files changed, 43 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,