aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/mmcli-bearer.c10
-rw-r--r--cli/mmcli-output.c2
-rw-r--r--cli/mmcli-output.h2
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt4
-rw-r--r--introspection/org.freedesktop.ModemManager1.Bearer.xml14
-rw-r--r--libmm-glib/mm-bearer-stats.c89
-rw-r--r--libmm-glib/mm-bearer-stats.h10
7 files changed, 126 insertions, 5 deletions
diff --git a/cli/mmcli-bearer.c b/cli/mmcli-bearer.c
index e9718e40..db06dbfa 100644
--- a/cli/mmcli-bearer.c
+++ b/cli/mmcli-bearer.c
@@ -279,6 +279,8 @@ print_bearer_info (MMBearer *bearer)
gchar *total_duration = NULL;
gchar *total_bytes_rx = NULL;
gchar *total_bytes_tx = NULL;
+ gchar *uplink_speed = NULL;
+ gchar *downlink_speed = NULL;
if (stats) {
guint64 val;
@@ -309,6 +311,12 @@ print_bearer_info (MMBearer *bearer)
val = mm_bearer_stats_get_total_tx_bytes (stats);
if (val)
total_bytes_tx = g_strdup_printf ("%" G_GUINT64_FORMAT, val);
+ val = mm_bearer_stats_get_uplink_speed (stats);
+ if (val)
+ uplink_speed = g_strdup_printf ("%" G_GUINT64_FORMAT, val);
+ val = mm_bearer_stats_get_downlink_speed (stats);
+ if (val)
+ downlink_speed = g_strdup_printf ("%" G_GUINT64_FORMAT, val);
}
if (start_date)
@@ -321,6 +329,8 @@ print_bearer_info (MMBearer *bearer)
mmcli_output_string_take (MMC_F_BEARER_STATS_TOTAL_DURATION, total_duration);
mmcli_output_string_take (MMC_F_BEARER_STATS_TOTAL_BYTES_RX, total_bytes_rx);
mmcli_output_string_take (MMC_F_BEARER_STATS_TOTAL_BYTES_TX, total_bytes_tx);
+ mmcli_output_string_take (MMC_F_BEARER_STATS_UPLINK_SPEED, uplink_speed);
+ mmcli_output_string_take (MMC_F_BEARER_STATS_DOWNLINK_SPEED, downlink_speed);
}
mmcli_output_dump ();
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c
index bacf3949..712018b6 100644
--- a/cli/mmcli-output.c
+++ b/cli/mmcli-output.c
@@ -251,6 +251,8 @@ static FieldInfo field_infos[] = {
[MMC_F_BEARER_IPV6_CONFIG_MTU] = { "bearer.ipv6-config.mtu", "mtu", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_STATS_START_DATE] = { "bearer.stats.start-date", "start date", MMC_S_BEARER_STATS, },
[MMC_F_BEARER_STATS_DURATION] = { "bearer.stats.duration", "duration", MMC_S_BEARER_STATS, },
+ [MMC_F_BEARER_STATS_UPLINK_SPEED] = { "bearer.stats.uplink-speed", "uplink-speed", MMC_S_BEARER_STATS, },
+ [MMC_F_BEARER_STATS_DOWNLINK_SPEED] = { "bearer.stats.downlink-speed", "downlink-speed", MMC_S_BEARER_STATS, },
[MMC_F_BEARER_STATS_BYTES_RX] = { "bearer.stats.bytes-rx", "bytes rx", MMC_S_BEARER_STATS, },
[MMC_F_BEARER_STATS_BYTES_TX] = { "bearer.stats.bytes-tx", "bytes tx", MMC_S_BEARER_STATS, },
[MMC_F_BEARER_STATS_ATTEMPTS] = { "bearer.stats.attempts", "attempts", MMC_S_BEARER_STATS, },
diff --git a/cli/mmcli-output.h b/cli/mmcli-output.h
index 678b2b61..cc34d536 100644
--- a/cli/mmcli-output.h
+++ b/cli/mmcli-output.h
@@ -269,6 +269,8 @@ typedef enum {
MMC_F_BEARER_IPV6_CONFIG_MTU,
MMC_F_BEARER_STATS_START_DATE,
MMC_F_BEARER_STATS_DURATION,
+ MMC_F_BEARER_STATS_UPLINK_SPEED,
+ MMC_F_BEARER_STATS_DOWNLINK_SPEED,
MMC_F_BEARER_STATS_BYTES_RX,
MMC_F_BEARER_STATS_BYTES_TX,
MMC_F_BEARER_STATS_ATTEMPTS,
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index f3450893..b0cd0bb3 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -1231,6 +1231,8 @@ mm_bearer_stats_get_failed_attempts
mm_bearer_stats_get_total_duration
mm_bearer_stats_get_total_rx_bytes
mm_bearer_stats_get_total_tx_bytes
+mm_bearer_stats_get_uplink_speed
+mm_bearer_stats_get_downlink_speed
<SUBSECTION Private>
mm_bearer_stats_get_dictionary
mm_bearer_stats_new
@@ -1243,6 +1245,8 @@ mm_bearer_stats_set_failed_attempts
mm_bearer_stats_set_total_duration
mm_bearer_stats_set_total_rx_bytes
mm_bearer_stats_set_total_tx_bytes
+mm_bearer_stats_set_uplink_speed
+mm_bearer_stats_set_downlink_speed
<SUBSECTION Standard>
MMBearerStatsClass
MMBearerStatsPrivate
diff --git a/introspection/org.freedesktop.ModemManager1.Bearer.xml b/introspection/org.freedesktop.ModemManager1.Bearer.xml
index a21f38c8..fa8dcdb0 100644
--- a/introspection/org.freedesktop.ModemManager1.Bearer.xml
+++ b/introspection/org.freedesktop.ModemManager1.Bearer.xml
@@ -358,6 +358,20 @@
<literal>"u"</literal>). Since 1.14.
</listitem>
</varlistentry>
+ <varlistentry><term><literal>"uplink-speed"</literal></term>
+ <listitem>
+ Uplink bit rate negotiated with network, in bits per second, given
+ as an unsigned 64-bit integer value (signature <literal>"t"</literal>).
+ Since 1.20.
+ </listitem>
+ </varlistentry>
+ <varlistentry><term><literal>"downlink-speed"</literal></term>
+ <listitem>
+ Downlink bit rate negotiated with network, in bits per second, given
+ as an unsigned 64-bit integer value (signature <literal>"t"</literal>).
+ Since 1.20.
+ </listitem>
+ </varlistentry>
</variablelist>
Since: 1.6
diff --git a/libmm-glib/mm-bearer-stats.c b/libmm-glib/mm-bearer-stats.c
index f7e339c6..61b24de3 100644
--- a/libmm-glib/mm-bearer-stats.c
+++ b/libmm-glib/mm-bearer-stats.c
@@ -10,8 +10,9 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
- * Copyright (C) 2015 Azimut Electronics
- * Copyright (C) 2015-2020 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (C) 2015-2021 Azimut Electronics
+ * Copyright (C) 2015-2021 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (C) 2021 Intel Corporation
*/
#include <string.h>
@@ -42,6 +43,8 @@ G_DEFINE_TYPE (MMBearerStats, mm_bearer_stats, G_TYPE_OBJECT)
#define PROPERTY_TOTAL_DURATION "total-duration"
#define PROPERTY_TOTAL_RX_BYTES "total-rx-bytes"
#define PROPERTY_TOTAL_TX_BYTES "total-tx-bytes"
+#define PROPERTY_UPLINK_SPEED "uplink-speed"
+#define PROPERTY_DOWNLINK_SPEED "downlink-speed"
struct _MMBearerStatsPrivate {
guint duration;
@@ -53,6 +56,8 @@ struct _MMBearerStatsPrivate {
guint total_duration;
guint64 total_rx_bytes;
guint64 total_tx_bytes;
+ guint64 uplink_speed;
+ guint64 downlink_speed;
};
/*****************************************************************************/
@@ -349,6 +354,70 @@ mm_bearer_stats_set_total_tx_bytes (MMBearerStats *self,
/*****************************************************************************/
/**
+ * mm_bearer_stats_get_uplink_speed:
+ * @self: a #MMBearerStats.
+ *
+ * Gets the speed of the uplink, in bits per second.
+ *
+ * Returns: a #guint64.
+ *
+ * Since: 1.20
+ */
+guint64
+mm_bearer_stats_get_uplink_speed (MMBearerStats *self)
+{
+ g_return_val_if_fail (MM_IS_BEARER_STATS (self), 0);
+
+ return self->priv->uplink_speed;
+}
+
+/**
+ * mm_bearer_stats_set_uplink_speed: (skip)
+ */
+void
+mm_bearer_stats_set_uplink_speed (MMBearerStats *self,
+ guint64 speed)
+{
+ g_return_if_fail (MM_IS_BEARER_STATS (self));
+
+ self->priv->uplink_speed = speed;
+}
+
+/*****************************************************************************/
+
+/**
+ * mm_bearer_stats_get_downlink_speed:
+ * @self: a #MMBearerStats.
+ *
+ * Gets the speed of the downlink, in bits per second.
+ *
+ * Returns: a #guint64.
+ *
+ * Since: 1.20
+ */
+guint64
+mm_bearer_stats_get_downlink_speed (MMBearerStats *self)
+{
+ g_return_val_if_fail (MM_IS_BEARER_STATS (self), 0);
+
+ return self->priv->downlink_speed;
+}
+
+/**
+ * mm_bearer_stats_set_downlink_speed: (skip)
+ */
+void
+mm_bearer_stats_set_downlink_speed (MMBearerStats *self,
+ guint64 speed)
+{
+ g_return_if_fail (MM_IS_BEARER_STATS (self));
+
+ self->priv->downlink_speed = speed;
+}
+
+/*****************************************************************************/
+
+/**
* mm_bearer_stats_get_dictionary: (skip)
*/
GVariant *
@@ -397,6 +466,14 @@ mm_bearer_stats_get_dictionary (MMBearerStats *self)
"{sv}",
PROPERTY_TOTAL_TX_BYTES,
g_variant_new_uint64 (self->priv->total_tx_bytes));
+ g_variant_builder_add (&builder,
+ "{sv}",
+ PROPERTY_UPLINK_SPEED,
+ g_variant_new_uint64 (self->priv->uplink_speed));
+ g_variant_builder_add (&builder,
+ "{sv}",
+ PROPERTY_DOWNLINK_SPEED,
+ g_variant_new_uint64 (self->priv->downlink_speed));
return g_variant_builder_end (&builder);
}
@@ -466,6 +543,14 @@ mm_bearer_stats_new_from_dictionary (GVariant *dictionary,
mm_bearer_stats_set_total_tx_bytes (
self,
g_variant_get_uint64 (value));
+ } else if (g_str_equal (key, PROPERTY_UPLINK_SPEED)) {
+ mm_bearer_stats_set_uplink_speed (
+ self,
+ g_variant_get_uint64 (value));
+ } else if (g_str_equal (key, PROPERTY_DOWNLINK_SPEED)) {
+ mm_bearer_stats_set_downlink_speed (
+ self,
+ g_variant_get_uint64 (value));
}
g_free (key);
diff --git a/libmm-glib/mm-bearer-stats.h b/libmm-glib/mm-bearer-stats.h
index b993945c..960dc359 100644
--- a/libmm-glib/mm-bearer-stats.h
+++ b/libmm-glib/mm-bearer-stats.h
@@ -10,9 +10,9 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
- * Copyright (C) 2015 Azimut Electronics
- *
- * Author: Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (C) 2015-2021 Azimut Electronics
+ * Copyright (C) 2015-2021 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (C) 2021 Intel Corporation
*/
#ifndef MM_BEARER_STATS_H
@@ -67,6 +67,8 @@ guint mm_bearer_stats_get_failed_attempts (MMBearerStats *self);
guint mm_bearer_stats_get_total_duration (MMBearerStats *self);
guint64 mm_bearer_stats_get_total_rx_bytes (MMBearerStats *self);
guint64 mm_bearer_stats_get_total_tx_bytes (MMBearerStats *self);
+guint64 mm_bearer_stats_get_uplink_speed (MMBearerStats *self);
+guint64 mm_bearer_stats_get_downlink_speed (MMBearerStats *self);
/*****************************************************************************/
/* ModemManager/libmm-glib/mmcli specific methods */
@@ -88,6 +90,8 @@ void mm_bearer_stats_set_failed_attempts (MMBearerStats *self, guint fail
void mm_bearer_stats_set_total_duration (MMBearerStats *self, guint duration);
void mm_bearer_stats_set_total_rx_bytes (MMBearerStats *self, guint64 rx_bytes);
void mm_bearer_stats_set_total_tx_bytes (MMBearerStats *self, guint64 tx_bytes);
+void mm_bearer_stats_set_uplink_speed (MMBearerStats *self, guint64 speed);
+void mm_bearer_stats_set_downlink_speed (MMBearerStats *self, guint64 speed);
GVariant *mm_bearer_stats_get_dictionary (MMBearerStats *self);