aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2018-11-11 14:46:53 +0100
committerDan Williams <dcbw@redhat.com>2018-12-07 16:20:53 +0000
commitdc154cf005bbcb2f0bd1123093f6ac3c402c4de8 (patch)
tree940cbeb5d4a6dcf7e80e99fe26f82d1ccddff097
parent46d627ff831b7d4d609060d77cd852f42cfcfa83 (diff)
api,bearer: new 'BearerType' property
Until now we have only allowed to use and setup 'default bearers' (in 4G) or 'primary contexts' (in 2G/3G). We can define a couple of additional bearer types, though: * The 'dedicated bearers' (in 4G) or 'secondary contexts' (in 2G/3G), which are associated to a specific default/primary one, but which provide specific QoS settings configured via traffic flow templates. * The 'initial default EPS bearer', which is a special case of default bearer in LTE, which is automatically created and connected when the modem is registered in the LTE network. This commit introduces a new 'MMBearerType' enumeration that will be associated to each bearer through a 'BearerType' property in the org.freedesktop.ModemManager1.Bearer interface, showing what kind of bearer/context this is. By default, right now, all bearer objects created are 'default' bearers.
-rw-r--r--cli/mmcli-bearer.c1
-rw-r--r--cli/mmcli-output.c1
-rw-r--r--cli/mmcli-output.h1
-rw-r--r--docs/reference/api/ModemManager-sections.txt1
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt7
-rw-r--r--include/ModemManager-enums.h22
-rw-r--r--introspection/org.freedesktop.ModemManager1.Bearer.xml7
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.xml4
-rw-r--r--libmm-glib/mm-bearer.c18
-rw-r--r--libmm-glib/mm-bearer.h16
-rw-r--r--src/mm-base-bearer.c19
11 files changed, 80 insertions, 17 deletions
diff --git a/cli/mmcli-bearer.c b/cli/mmcli-bearer.c
index bc32cdd8..1752c868 100644
--- a/cli/mmcli-bearer.c
+++ b/cli/mmcli-bearer.c
@@ -144,6 +144,7 @@ print_bearer_info (MMBearer *bearer)
stats = mm_bearer_get_stats (bearer);
mmcli_output_string (MMC_F_BEARER_GENERAL_DBUS_PATH, mm_bearer_get_path (bearer));
+ mmcli_output_string (MMC_F_BEARER_GENERAL_TYPE, mm_bearer_type_get_string (mm_bearer_get_bearer_type (bearer)));
mmcli_output_string (MMC_F_BEARER_STATUS_CONNECTED, mm_bearer_get_connected (bearer) ? "yes" : "no");
mmcli_output_string (MMC_F_BEARER_STATUS_SUSPENDED, mm_bearer_get_suspended (bearer) ? "yes" : "no");
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c
index ac7dc333..79646abc 100644
--- a/cli/mmcli-output.c
+++ b/cli/mmcli-output.c
@@ -184,6 +184,7 @@ static FieldInfo field_infos[] = {
[MMC_F_LOCATION_CDMABS_LAT] = { "modem.location.cdma-bs.latitude", "latitude", MMC_S_MODEM_LOCATION_CDMABS, },
[MMC_F_FIRMWARE_LIST] = { "modem.firmware-list", "list", MMC_S_MODEM_FIRMWARE, },
[MMC_F_BEARER_GENERAL_DBUS_PATH] = { "bearer.dbus-path", "dbus path", MMC_S_BEARER_GENERAL, },
+ [MMC_F_BEARER_GENERAL_TYPE] = { "bearer.type", "type", MMC_S_BEARER_GENERAL, },
[MMC_F_BEARER_STATUS_CONNECTED] = { "bearer.status.connected", "connected", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_STATUS_SUSPENDED] = { "bearer.status.suspended", "suspended", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_STATUS_INTERFACE] = { "bearer.status.interface", "interface", MMC_S_BEARER_STATUS, },
diff --git a/cli/mmcli-output.h b/cli/mmcli-output.h
index 374af66f..9264537c 100644
--- a/cli/mmcli-output.h
+++ b/cli/mmcli-output.h
@@ -197,6 +197,7 @@ typedef enum {
MMC_F_FIRMWARE_LIST,
/* Bearer general section */
MMC_F_BEARER_GENERAL_DBUS_PATH,
+ MMC_F_BEARER_GENERAL_TYPE,
/* Bearer status section */
MMC_F_BEARER_STATUS_CONNECTED,
MMC_F_BEARER_STATUS_SUSPENDED,
diff --git a/docs/reference/api/ModemManager-sections.txt b/docs/reference/api/ModemManager-sections.txt
index 6848c6cf..a3fafe6b 100644
--- a/docs/reference/api/ModemManager-sections.txt
+++ b/docs/reference/api/ModemManager-sections.txt
@@ -10,6 +10,7 @@ MM_CHECK_VERSION
<SECTION>
<FILE>mm-enums</FILE>
<TITLE>Flags and Enumerations</TITLE>
+MMBearerType
MMBearerIpFamily
MMBearerIpMethod
MMBearerAllowedAuth
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 69e0731d..bd169db6 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -984,6 +984,7 @@ mm_bearer_dup_interface
mm_bearer_get_connected
mm_bearer_get_suspended
mm_bearer_get_ip_timeout
+mm_bearer_get_bearer_type
mm_bearer_peek_ipv4_config
mm_bearer_get_ipv4_config
mm_bearer_peek_ipv6_config
@@ -1385,6 +1386,7 @@ mm_call_audio_format_get_type
<SECTION>
<FILE>mm-enums-types</FILE>
<TITLE>Flags and Enumerations</TITLE>
+mm_bearer_type_get_string
mm_bearer_ip_method_get_string
mm_bearer_ip_family_get_string
mm_bearer_allowed_auth_build_string_from_mask
@@ -1445,6 +1447,7 @@ mm_sms_cdma_service_category_build_string_from_mask
mm_modem_location_source_get_string
mm_modem_location_assistance_data_type_get_string
mm_modem_contacts_storage_build_string_from_mask
+mm_bearer_type_build_string_from_mask
mm_bearer_ip_family_build_string_from_mask
mm_bearer_ip_method_build_string_from_mask
mm_bearer_allowed_auth_get_string
@@ -1467,6 +1470,7 @@ mm_call_direction_build_string_from_mask
mm_call_state_build_string_from_mask
mm_call_state_reason_build_string_from_mask
<SUBSECTION Standard>
+MM_TYPE_BEARER_TYPE
MM_TYPE_BEARER_IP_FAMILY
MM_TYPE_BEARER_IP_METHOD
MM_TYPE_BEARER_ALLOWED_AUTH
@@ -1507,6 +1511,7 @@ MM_TYPE_OMA_SESSION_TYPE
MM_TYPE_CALL_DIRECTION
MM_TYPE_CALL_STATE
MM_TYPE_CALL_STATE_REASON
+mm_bearer_type_get_type
mm_bearer_ip_family_get_type
mm_bearer_ip_method_get_type
mm_bearer_allowed_auth_get_type
@@ -1596,6 +1601,7 @@ mm_gdbus_bearer_get_properties
mm_gdbus_bearer_dup_properties
mm_gdbus_bearer_get_connected
mm_gdbus_bearer_get_suspended
+mm_gdbus_bearer_get_bearer_type
mm_gdbus_bearer_get_stats
mm_gdbus_bearer_dup_stats
<SUBSECTION Methods>
@@ -1614,6 +1620,7 @@ mm_gdbus_bearer_set_ip6_config
mm_gdbus_bearer_set_ip_timeout
mm_gdbus_bearer_set_properties
mm_gdbus_bearer_set_suspended
+mm_gdbus_bearer_set_bearer_type
mm_gdbus_bearer_set_stats
mm_gdbus_bearer_override_properties
mm_gdbus_bearer_complete_connect
diff --git a/include/ModemManager-enums.h b/include/ModemManager-enums.h
index cc78cdc9..8f06bb91 100644
--- a/include/ModemManager-enums.h
+++ b/include/ModemManager-enums.h
@@ -971,6 +971,28 @@ typedef enum { /*< underscore_name=mm_modem_contacts_storage >*/
} MMModemContactsStorage;
/**
+ * MMBearerType:
+ * @MM_BEARER_TYPE_UNKNOWN: Unknown bearer.
+ * @MM_BEARER_TYPE_DEFAULT: Primary context (2G/3G) or default bearer (4G),
+ * defined by the user of the API.
+ * @MM_BEARER_TYPE_DEFAULT_ATTACH: The initial default bearer established
+ * during LTE attach procedure, automatically connected as long as the device is
+ * regitered in the LTE network.
+ * @MM_BEARER_TYPE_DEDICATED: Secondary context (2G/3G) or dedicated bearer
+ * (4G), defined by the user of the API. These bearers use the same IP address
+ * used by a primary context or default bearer and provide a dedicated flow for
+ * specific traffic with different QoS settings.
+ *
+ * Type of context (2G/3G) or bearer (4G).
+ */
+typedef enum { /*< underscore_name=mm_bearer_type >*/
+ MM_BEARER_TYPE_UNKNOWN = 0,
+ MM_BEARER_TYPE_DEFAULT = 1,
+ MM_BEARER_TYPE_DEFAULT_ATTACH = 2,
+ MM_BEARER_TYPE_DEDICATED = 3,
+} MMBearerType;
+
+/**
* MMBearerIpMethod:
* @MM_BEARER_IP_METHOD_UNKNOWN: Unknown method.
* @MM_BEARER_IP_METHOD_PPP: Use PPP to get IP addresses and DNS information.
diff --git a/introspection/org.freedesktop.ModemManager1.Bearer.xml b/introspection/org.freedesktop.ModemManager1.Bearer.xml
index 2c844abd..e86ef00d 100644
--- a/introspection/org.freedesktop.ModemManager1.Bearer.xml
+++ b/introspection/org.freedesktop.ModemManager1.Bearer.xml
@@ -280,6 +280,13 @@
<property name="IpTimeout" type="u" access="read" />
<!--
+ BearerType:
+
+ A <link linkend="MMBearerType">MMBearerType</link>
+ -->
+ <property name="BearerType" type="u" access="read" />
+
+ <!--
Properties:
List of properties used when creating the bearer.
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.xml b/introspection/org.freedesktop.ModemManager1.Modem.xml
index 54307ae3..37cdb941 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.xml
@@ -259,7 +259,9 @@
<!--
MaxActiveBearers:
- The maximum number of active packet data bearers the modem supports.
+ The maximum number of active
+ <link linkend="MM-BEARER-TYPE-DEFAULT:CAPS"><constant>MM_BEARER_TYPE_DEFAULT</constant></link>
+ bearers that may be explicitly enabled by the user.
POTS and CDMA2000-only devices support one active bearer, while GSM/UMTS
and LTE-capable devices (including LTE/CDMA devices) typically support
diff --git a/libmm-glib/mm-bearer.c b/libmm-glib/mm-bearer.c
index fc1425bd..1195ae0d 100644
--- a/libmm-glib/mm-bearer.c
+++ b/libmm-glib/mm-bearer.c
@@ -204,6 +204,24 @@ mm_bearer_get_ip_timeout (MMBearer *self)
/*****************************************************************************/
+/**
+ * mm_bearer_get_bearer_type:
+ * @self: A #MMBearer.
+ *
+ * Gets the type of bearer.
+ *
+ * Returns: a #MMBearerType.
+ */
+MMBearerType
+mm_bearer_get_bearer_type (MMBearer *self)
+{
+ g_return_val_if_fail (MM_IS_BEARER (self), MM_BEARER_TYPE_UNKNOWN);
+
+ return mm_gdbus_bearer_get_bearer_type (MM_GDBUS_BEARER (self));
+}
+
+/*****************************************************************************/
+
static void
ipv4_config_updated (MMBearer *self,
GParamSpec *pspec)
diff --git a/libmm-glib/mm-bearer.h b/libmm-glib/mm-bearer.h
index cd081426..900429c5 100644
--- a/libmm-glib/mm-bearer.h
+++ b/libmm-glib/mm-bearer.h
@@ -67,17 +67,19 @@ struct _MMBearerClass {
GType mm_bearer_get_type (void);
-const gchar *mm_bearer_get_path (MMBearer *self);
-gchar *mm_bearer_dup_path (MMBearer *self);
+const gchar *mm_bearer_get_path (MMBearer *self);
+gchar *mm_bearer_dup_path (MMBearer *self);
-const gchar *mm_bearer_get_interface (MMBearer *self);
-gchar *mm_bearer_dup_interface (MMBearer *self);
+const gchar *mm_bearer_get_interface (MMBearer *self);
+gchar *mm_bearer_dup_interface (MMBearer *self);
-gboolean mm_bearer_get_connected (MMBearer *self);
+gboolean mm_bearer_get_connected (MMBearer *self);
-gboolean mm_bearer_get_suspended (MMBearer *self);
+gboolean mm_bearer_get_suspended (MMBearer *self);
-guint mm_bearer_get_ip_timeout (MMBearer *self);
+guint mm_bearer_get_ip_timeout (MMBearer *self);
+
+MMBearerType mm_bearer_get_bearer_type (MMBearer *self);
void mm_bearer_connect (MMBearer *self,
GCancellable *cancellable,
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c
index f9a12c83..b2e07e19 100644
--- a/src/mm-base-bearer.c
+++ b/src/mm-base-bearer.c
@@ -1365,15 +1365,16 @@ mm_base_bearer_init (MMBaseBearer *self)
self->priv->default_ip_family = MM_BEARER_IP_FAMILY_IPV4;
/* Set defaults */
- mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
- mm_gdbus_bearer_set_connected (MM_GDBUS_BEARER (self), FALSE);
- mm_gdbus_bearer_set_suspended (MM_GDBUS_BEARER (self), FALSE);
- mm_gdbus_bearer_set_properties (MM_GDBUS_BEARER (self), NULL);
- mm_gdbus_bearer_set_ip_timeout (MM_GDBUS_BEARER (self), BEARER_IP_TIMEOUT_DEFAULT);
- mm_gdbus_bearer_set_ip4_config (MM_GDBUS_BEARER (self),
- mm_bearer_ip_config_get_dictionary (NULL));
- mm_gdbus_bearer_set_ip6_config (MM_GDBUS_BEARER (self),
- mm_bearer_ip_config_get_dictionary (NULL));
+ mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
+ mm_gdbus_bearer_set_connected (MM_GDBUS_BEARER (self), FALSE);
+ mm_gdbus_bearer_set_suspended (MM_GDBUS_BEARER (self), FALSE);
+ mm_gdbus_bearer_set_properties (MM_GDBUS_BEARER (self), NULL);
+ mm_gdbus_bearer_set_ip_timeout (MM_GDBUS_BEARER (self), BEARER_IP_TIMEOUT_DEFAULT);
+ mm_gdbus_bearer_set_bearer_type (MM_GDBUS_BEARER (self), MM_BEARER_TYPE_DEFAULT);
+ mm_gdbus_bearer_set_ip4_config (MM_GDBUS_BEARER (self),
+ mm_bearer_ip_config_get_dictionary (NULL));
+ mm_gdbus_bearer_set_ip6_config (MM_GDBUS_BEARER (self),
+ mm_bearer_ip_config_get_dictionary (NULL));
}
static void