E1750 Reloaded
poma
pomidorabelisima at gmail.com
Sat Aug 2 00:05:00 PDT 2014
Restored functionality for the
Huawei Technologies Co., Ltd. E173 3G Modem (modem-mode) 12d1:1436 cdc_ether,
Huawei Technologies Co., Ltd. E180v 12d1:140c qmi_wwan,
actually Huawei E1750 FW Rev. 11.126.13.00.00 Qualcomm based mobile broadband modem
by reverting commit ca0a567
"broadband-bearer-qmi: support IPv6 configuration and use static for IPv4"
and updating 'mm-bearer-qmi.c' with commit 3ca267b
"bearer: rename 'MMBearer' to 'MMBaseBearer'"
---
src/mm-bearer-qmi.c | 306 +++++++++++++++++++---------------------------------
1 file changed, 111 insertions(+), 195 deletions(-)
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index c25b9f7..bf0f6fc 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -31,7 +31,6 @@
#include "mm-modem-helpers-qmi.h"
#include "mm-port-enums-types.h"
#include "mm-log.h"
-#include "mm-modem-helpers.h"
G_DEFINE_TYPE (MMBearerQmi, mm_bearer_qmi, MM_TYPE_BASE_BEARER);
@@ -83,14 +82,12 @@ typedef struct {
gboolean running_ipv4;
QmiClientWds *client_ipv4;
guint32 packet_data_handle_ipv4;
- MMBearerIpConfig *ipv4_config;
GError *error_ipv4;
gboolean ipv6;
gboolean running_ipv6;
QmiClientWds *client_ipv6;
guint32 packet_data_handle_ipv6;
- MMBearerIpConfig *ipv6_config;
GError *error_ipv6;
} ConnectContext;
@@ -102,12 +99,14 @@ connect_context_complete_and_free (ConnectContext *ctx)
g_free (ctx->apn);
g_free (ctx->user);
g_free (ctx->password);
- g_clear_error (&ctx->error_ipv4);
- g_clear_error (&ctx->error_ipv6);
- g_clear_object (&ctx->client_ipv4);
- g_clear_object (&ctx->client_ipv6);
- g_clear_object (&ctx->ipv4_config);
- g_clear_object (&ctx->ipv6_config);
+ if (ctx->error_ipv4)
+ g_error_free (ctx->error_ipv4);
+ if (ctx->error_ipv6)
+ g_error_free (ctx->error_ipv6);
+ if (ctx->client_ipv4)
+ g_object_unref (ctx->client_ipv4);
+ if (ctx->client_ipv6)
+ g_object_unref (ctx->client_ipv6);
g_object_unref (ctx->data);
g_object_unref (ctx->qmi);
g_object_unref (ctx->cancellable);
@@ -248,191 +247,51 @@ build_start_network_input (ConnectContext *ctx)
}
static void
-qmi_inet4_ntop (guint32 address, char *buf, const gsize buflen)
+print_address4 (gboolean success, const char *tag, guint32 address, GError *error)
{
struct in_addr a = { .s_addr = GUINT32_TO_BE (address) };
+ char buf[INET_ADDRSTRLEN + 1];
- g_assert (buflen >= INET_ADDRSTRLEN);
-
- /* We can ignore inet_ntop() return value if 'buf' is
- * at least INET_ADDRSTRLEN in size. */
- memset (buf, 0, buflen);
- g_assert (inet_ntop (AF_INET, &a, buf, buflen));
-}
-
-static MMBearerIpConfig *
-get_ipv4_config (QmiMessageWdsGetCurrentSettingsOutput *output, guint32 mtu)
-{
- MMBearerIpConfig *config;
- char buf[INET_ADDRSTRLEN];
- char buf2[INET_ADDRSTRLEN];
- const gchar *dns[3] = { 0 };
- guint dns_idx = 0;
- guint32 addr = 0;
- GError *error = NULL;
- guint32 prefix = 0;
-
- /* IPv4 subnet mask */
- if (!qmi_message_wds_get_current_settings_output_get_ipv4_gateway_subnet_mask (output, &addr, &error)) {
- mm_dbg ("Failed to read IPv4 netmask (%s)", error->message);
- g_clear_error (&error);
- return NULL;
- }
- qmi_inet4_ntop (addr, buf, sizeof (buf));
- prefix = mm_netmask_to_cidr (buf);
-
- /* IPv4 address */
- if (!qmi_message_wds_get_current_settings_output_get_ipv4_address (output, &addr, &error)) {
- mm_dbg ("IPv4 family but no IPv4 address (%s)", error->message);
- g_clear_error (&error);
- return NULL;
- }
-
- mm_dbg ("QMI IPv4 Settings:");
-
- config = mm_bearer_ip_config_new ();
- mm_bearer_ip_config_set_method (config, MM_BEARER_IP_METHOD_STATIC);
-
- /* IPv4 address */
- qmi_inet4_ntop (addr, buf, sizeof (buf));
- mm_bearer_ip_config_set_address (config, buf);
- mm_bearer_ip_config_set_prefix (config, prefix);
- mm_dbg (" Address: %s/%d", buf, prefix);
-
- /* IPv4 gateway address */
- if (qmi_message_wds_get_current_settings_output_get_ipv4_gateway_address (output, &addr, &error)) {
- qmi_inet4_ntop (addr, buf, sizeof (buf));
- mm_bearer_ip_config_set_gateway (config, buf);
- mm_dbg (" Gateway: %s", buf);
- } else {
- mm_dbg (" Gateway: failed (%s)", error->message);
- g_clear_error (&error);
- }
-
- /* IPv4 DNS #1 */
- if (qmi_message_wds_get_current_settings_output_get_primary_ipv4_dns_address (output, &addr, &error)) {
- qmi_inet4_ntop (addr, buf, sizeof (buf));
- dns[dns_idx++] = buf;
- mm_dbg (" DNS #1: %s", buf);
- } else {
- mm_dbg (" DNS #1: failed (%s)", error->message);
- g_clear_error (&error);
- }
-
- /* IPv6 DNS #2 */
- if (qmi_message_wds_get_current_settings_output_get_secondary_ipv4_dns_address (output, &addr, &error)) {
- qmi_inet4_ntop (addr, buf2, sizeof (buf2));
- dns[dns_idx++] = buf2;
- mm_dbg (" DNS #2: %s", buf2);
- } else {
- mm_dbg (" DNS #2: failed (%s)", error->message);
- g_clear_error (&error);
- }
-
- if (dns_idx > 0)
- mm_bearer_ip_config_set_dns (config, (const gchar **) &dns);
-
- if (mtu) {
- mm_bearer_ip_config_set_mtu (config, mtu);
- mm_dbg (" MTU: %d", mtu);
+ if (success) {
+ memset (buf, 0, sizeof (buf));
+ if (inet_ntop (AF_INET, &a, buf, sizeof (buf) - 1))
+ mm_dbg (" %s: %s", tag, buf);
+ else
+ mm_dbg (" %s: failed (address conversion error)", tag);
+ return;
}
-
- return config;
+ mm_dbg (" %s: failed (%s)", tag, error ? error->message : "unknown");
}
static void
-qmi_inet6_ntop (GArray *array, char *buf, const gsize buflen)
+print_address6 (gboolean success,
+ const char *tag,
+ GArray *array,
+ guint32 prefix,
+ GError *error)
{
struct in6_addr a;
+ char buf[INET6_ADDRSTRLEN + 1];
guint32 i;
- g_assert (array);
- g_assert (array->len == 8);
- g_assert (buflen >= INET6_ADDRSTRLEN);
-
- for (i = 0; i < array->len; i++)
- a.s6_addr16[i] = GUINT16_TO_BE (g_array_index (array, guint16, i));
-
- /* We can ignore inet_ntop() return value if 'buf' is
- * at least INET6_ADDRSTRLEN in size. */
- memset (buf, 0, buflen);
- g_assert (inet_ntop (AF_INET6, &a, buf, buflen));
-}
-
-static MMBearerIpConfig *
-get_ipv6_config (QmiMessageWdsGetCurrentSettingsOutput *output, guint32 mtu)
-{
- MMBearerIpConfig *config;
- char buf[INET6_ADDRSTRLEN];
- char buf2[INET6_ADDRSTRLEN];
- const gchar *dns[3] = { 0 };
- guint dns_idx = 0;
- GArray *array;
- GError *error = NULL;
- guint8 prefix = 0;
-
- /* If the message has an IPv6 address, create an IPv6 bearer config */
- if (!qmi_message_wds_get_current_settings_output_get_ipv6_address (output, &array, &prefix, &error)) {
- mm_dbg ("IPv6 family but no IPv6 address (%s)", error->message);
- g_clear_error (&error);
- return NULL;
- }
-
- mm_dbg ("QMI IPv6 Settings:");
-
- config = mm_bearer_ip_config_new ();
- mm_bearer_ip_config_set_method (config, MM_BEARER_IP_METHOD_STATIC);
-
- /* IPv6 address */
- qmi_inet6_ntop (array, buf, sizeof (buf));
- g_array_unref (array);
-
- mm_bearer_ip_config_set_address (config, buf);
- mm_bearer_ip_config_set_prefix (config, prefix);
- mm_dbg (" Address: %s/%d", buf, prefix);
-
- /* IPv6 gateway address */
- if (qmi_message_wds_get_current_settings_output_get_ipv6_gateway_address (output, &array, &prefix, &error)) {
- qmi_inet6_ntop (array, buf, sizeof (buf));
- mm_bearer_ip_config_set_gateway (config, buf);
- mm_dbg (" Gateway: %s", buf);
- g_array_unref (array);
- } else {
- mm_dbg (" Gateway: failed (%s)", error->message);
- g_clear_error (&error);
- }
-
- /* IPv6 DNS #1 */
- if (qmi_message_wds_get_current_settings_output_get_ipv6_primary_dns_address (output, &array, &error)) {
- qmi_inet6_ntop (array, buf, sizeof (buf));
- dns[dns_idx++] = buf;
- mm_dbg (" DNS #1: %s", buf);
- g_array_unref (array);
- } else {
- mm_dbg (" DNS #1: failed (%s)", error->message);
- g_clear_error (&error);
- }
+ if (success) {
+ g_assert (array);
+ g_assert (array->len == 8);
- /* IPv6 DNS #2 */
- if (qmi_message_wds_get_current_settings_output_get_ipv6_secondary_dns_address (output, &array, &error)) {
- qmi_inet6_ntop (array, buf2, sizeof (buf2));
- dns[dns_idx++] = buf2;
- mm_dbg (" DNS #2: %s", buf2);
- g_array_unref (array);
- } else {
- mm_dbg (" DNS #2: failed (%s)", error->message);
- g_clear_error (&error);
- }
+ memset (buf, 0, sizeof (buf));
+ for (i = 0; i < array->len; i++)
+ a.s6_addr16[i] = GUINT16_TO_BE (g_array_index (array, guint16, i));
- if (dns_idx > 0)
- mm_bearer_ip_config_set_dns (config, (const gchar **) &dns);
+ if (inet_ntop (AF_INET6, &a, buf, sizeof (buf) - 1))
+ mm_dbg (" %s: %s/%d", tag, buf, prefix);
+ else
+ mm_dbg (" %s: failed (address conversion error)", tag);
- if (mtu) {
- mm_bearer_ip_config_set_mtu (config, mtu);
- mm_dbg (" MTU: %d", mtu);
+ g_array_free (array, TRUE);
+ return;
}
- return config;
+ mm_dbg (" %s: failed (%s)", tag, error ? error->message : "unknown");
}
static void
@@ -453,33 +312,73 @@ get_current_settings_ready (QmiClientWds *client,
mm_info ("error: couldn't get current settings: %s", error->message);
g_error_free (error);
} else {
- QmiWdsIpFamily ip_family = QMI_WDS_IP_FAMILY_UNSPECIFIED;
- guint32 mtu = 0;
+ gboolean success;
+ guint32 addr, mtu, i;
GArray *array;
+ guint8 prefix;
+
+ /* If the message has an IPv4 address, print IPv4 settings */
+ if (qmi_message_wds_get_current_settings_output_get_ipv4_address (output, &addr, &error)) {
+ mm_dbg ("QMI IPv4 Settings:");
- if (!qmi_message_wds_get_current_settings_output_get_ip_family (output, &ip_family, &error)) {
- mm_dbg (" IP Family: failed (%s); assuming IPv4", error->message);
+ /* IPv4 address */
+ print_address4 (TRUE, "Address", addr, error);
+ g_clear_error (&error);
+
+ /* IPv4 gateway address */
+ success = qmi_message_wds_get_current_settings_output_get_ipv4_gateway_address (output, &addr, &error);
+ print_address4 (success, "Gateway", addr, error);
+ g_clear_error (&error);
+
+ /* IPv4 subnet mask */
+ success = qmi_message_wds_get_current_settings_output_get_ipv4_gateway_subnet_mask (output, &addr, &error);
+ print_address4 (success, "Netmask", addr, error);
g_clear_error (&error);
- ip_family = QMI_WDS_IP_FAMILY_IPV4;
- }
- mm_dbg (" IP Family: %s",
- (ip_family == QMI_WDS_IP_FAMILY_IPV4) ? "IPv4" :
- (ip_family == QMI_WDS_IP_FAMILY_IPV6) ? "IPv6" : "unknown");
- if (!qmi_message_wds_get_current_settings_output_get_mtu (output, &mtu, &error)) {
- mm_dbg (" MTU: failed (%s)", error->message);
+ /* IPv4 DNS #1 */
+ success = qmi_message_wds_get_current_settings_output_get_primary_ipv4_dns_address (output, &addr, &error);
+ print_address4 (success, " DNS #1", addr, error);
+ g_clear_error (&error);
+
+ /* IPv4 DNS #2 */
+ success = qmi_message_wds_get_current_settings_output_get_secondary_ipv4_dns_address (output, &addr, &error);
+ print_address4 (success, " DNS #2", addr, error);
+ g_clear_error (&error);
+ } else {
+ /* no IPv4 configuration */
g_clear_error (&error);
}
- if (ip_family == QMI_WDS_IP_FAMILY_IPV4)
- ctx->ipv4_config = get_ipv4_config (output, mtu);
- else if (ip_family == QMI_WDS_IP_FAMILY_IPV6)
- ctx->ipv6_config = get_ipv6_config (output, mtu);
+ /* If the message has an IPv6 address, print IPv6 settings */
+ if (qmi_message_wds_get_current_settings_output_get_ipv6_address (output, &array, &prefix, &error)) {
+ mm_dbg ("QMI IPv6 Settings:");
+
+ /* IPv6 address */
+ print_address6 (TRUE, "Address", array, prefix, error);
+ g_clear_error (&error);
+
+ /* IPv6 gateway address */
+ success = qmi_message_wds_get_current_settings_output_get_ipv6_gateway_address (output, &array, &prefix, &error);
+ print_address6 (success, "Gateway", array, prefix, error);
+ g_clear_error (&error);
+
+ /* IPv6 DNS #1 */
+ success = qmi_message_wds_get_current_settings_output_get_ipv6_primary_dns_address (output, &array, &error);
+ print_address6 (success, " DNS #1", array, 0, error);
+ g_clear_error (&error);
+
+ /* IPv6 DNS #2 */
+ success = qmi_message_wds_get_current_settings_output_get_ipv6_secondary_dns_address (output, &array, &error);
+ print_address6 (success, " DNS #2", array, 0, error);
+ g_clear_error (&error);
+ } else {
+ /* no IPv6 configuration */
+ g_clear_error (&error);
+ }
/* Domain names */
if (qmi_message_wds_get_current_settings_output_get_domain_name_list (output, &array, &error)) {
GString *s = g_string_sized_new (array ? (array->len * 20) : 1);
- guint i;
for (i = 0; array && (i < array->len); i++) {
if (s->len)
@@ -492,6 +391,13 @@ get_current_settings_ready (QmiClientWds *client,
mm_dbg (" Domains: failed (%s)", error ? error->message : "unknown");
g_clear_error (&error);
}
+
+ if (qmi_message_wds_get_current_settings_output_get_mtu (output, &mtu, &error))
+ mm_dbg (" MTU: %d", mtu);
+ else {
+ mm_dbg (" MTU: failed (%s)", error ? error->message : "unknown");
+ g_clear_error (&error);
+ }
}
if (output)
@@ -822,6 +728,8 @@ connect_context_step (ConnectContext *ctx)
case CONNECT_STEP_LAST:
/* If one of IPv4 or IPv6 succeeds, we're connected */
if (ctx->packet_data_handle_ipv4 || ctx->packet_data_handle_ipv6) {
+ MMBearerIpConfig *config;
+
/* Port is connected; update the state */
mm_port_set_connected (MM_PORT (ctx->data), TRUE);
@@ -843,11 +751,19 @@ connect_context_step (ConnectContext *ctx)
ctx->self->priv->client_ipv6 = g_object_ref (ctx->client_ipv6);
}
+ /* Build IP config; always DHCP based */
+ config = mm_bearer_ip_config_new ();
+ mm_bearer_ip_config_set_method (config, MM_BEARER_IP_METHOD_DHCP);
+
/* Set operation result */
g_simple_async_result_set_op_res_gpointer (
ctx->result,
- mm_bearer_connect_result_new (ctx->data, ctx->ipv4_config, ctx->ipv6_config),
+ mm_bearer_connect_result_new (
+ ctx->data,
+ ctx->packet_data_handle_ipv4 ? config : NULL,
+ ctx->packet_data_handle_ipv6 ? config : NULL),
(GDestroyNotify)mm_bearer_connect_result_unref);
+ g_object_unref (config);
} else {
GError *error;
--
2.0.4
- ModemManager
"Update to 1.3.0 git 1fc3e17 2014-08-02"
https://bugzilla.redhat.com/show_bug.cgi?id=1125426
- libqmi
"Update to 1.11.0 git 852b5bf 2014-06-02"
https://bugzilla.redhat.com/show_bug.cgi?id=1125424
- libmbim
"Update to 1.9.0 git 597af10 2014-07-31"
https://bugzilla.redhat.com/show_bug.cgi?id=1125422
- journal ModemManager-1.3.0-1.git20140802:
[19.304510] MM[595]: <info> MM (version 1.3.0-1.git20140802.fc21) starting in system bus...
[22.081165] MM[595]: <warn> (ttyUSB0): port attributes not fully set
[22.081655] MM[595]: <warn> (ttyUSB1): port attributes not fully set
[22.083024] MM[595]: <warn> (ttyUSB2): port attributes not fully set
[22.368265] MM[595]: [/dev/cdc-wdm0] Opening device with flags 'version-info, proxy'...
[22.369188] MM[595]: cannot connect to proxy: Could not connect: Connection refused
[22.369660] MM[595]: spawning new qmi-proxy (try 1)...
[22.726065] MM[595]: [/dev/cdc-wdm0] Checking version info (10 retries)...
[22.729417] MM[595]: [/dev/cdc-wdm0] QMI Device supports 5 services:
[22.729873] MM[595]: [/dev/cdc-wdm0] ctl (1.2)
[22.730327] MM[595]: [/dev/cdc-wdm0] wds (1.3)
[22.730765] MM[595]: [/dev/cdc-wdm0] dms (1.2)
[22.731227] MM[595]: [/dev/cdc-wdm0] nas (1.0)
[22.731669] MM[595]: [/dev/cdc-wdm0] cat (0.0)
[28.743636] MM[595]: <warn> (ttyUSB1): port attributes not fully set
[28.744161] MM[595]: <warn> (ttyUSB2): port attributes not fully set
[36.614653] MM[595]: <info> Creating modem with plugin 'Huawei' and '5' ports
[36.614786] MM[595]: <info> Modem for device at '/sys/devices/pci0000:00/0000:00:04.1/usb2/2-3' successfully created
[36.614911] MM[595]: [/dev/cdc-wdm0] Opening device with flags 'version-info, net-802-3, net-no-qos-header, proxy'...
[36.615041] MM[595]: [/dev/cdc-wdm0] Checking version info (10 retries)...
[36.615168] MM[595]: [/dev/cdc-wdm0] QMI Device supports 5 services:
[36.615292] MM[595]: [/dev/cdc-wdm0] ctl (1.2)
[36.615425] MM[595]: [/dev/cdc-wdm0] wds (1.3)
[36.615549] MM[595]: [/dev/cdc-wdm0] dms (1.2)
[36.615674] MM[595]: [/dev/cdc-wdm0] nas (1.0)
[36.615809] MM[595]: [/dev/cdc-wdm0] cat (0.0)
[36.615933] MM[595]: [/dev/cdc-wdm0] Setting network port data format...
[36.616716] MM[595]: [/dev/cdc-wdm0] Opening device with flags 'version-info, proxy'...
[36.619166] MM[595]: [/dev/cdc-wdm0] Checking version info (10 retries)...
[36.622110] MM[595]: [/dev/cdc-wdm0] QMI Device supports 5 services:
[36.622271] MM[595]: [/dev/cdc-wdm0] ctl (1.2)
[36.622397] MM[595]: [/dev/cdc-wdm0] wds (1.3)
[36.622521] MM[595]: [/dev/cdc-wdm0] dms (1.2)
[36.622643] MM[595]: [/dev/cdc-wdm0] nas (1.0)
[36.622765] MM[595]: [/dev/cdc-wdm0] cat (0.0)
[36.636241] MM[595]: [/dev/cdc-wdm0] Allocating new client ID...
[36.638701] MM[595]: [/dev/cdc-wdm0] Registered 'dms' (version 1.2) client with ID '44'
[36.651357] MM[595]: [/dev/cdc-wdm0] Allocating new client ID...
[36.654844] MM[595]: [/dev/cdc-wdm0] Registered 'nas' (version 1.0) client with ID '38'
[36.655486] MM[595]: <warn> (ttyUSB2): port attributes not fully set
[36.678646] MM[595]: <warn> couldn't load Supported Bands: 'QMI operation failed: Cannot send message: QMI service 'dms' version '1.3' required, got version '1.2''
[36.700371] MM[595]: <warn> couldn't load SIM identifier: 'QMI operation failed: Cannot send message: QMI service 'dms' version '1.3' required, got version '1.2''
[36.700545] MM[595]: <warn> couldn't load IMSI: 'QMI operation failed: Cannot send message: QMI service 'dms' version '1.3' required, got version '1.2''
[36.704371] MM[595]: <warn> couldn't load list of Own Numbers: 'Couldn't get MSISDN: QMI protocol error (16): 'NotProvisioned''
[36.708171] MM[595]: <warn> couldn't load current allowed/preferred modes: 'Loading current modes is not supported by this device'
[37.356176] MM[595]: <warn> couldn't load current Bands: 'QMI operation failed: Cannot send message: QMI service 'nas' version '1.1' required, got version '1.0''
[37.356711] MM[595]: <info> Modem: state changed (unknown -> disabled)
[37.361244] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (disabled -> enabling)
[37.361727] MM[595]: <warn> (ttyUSB2): port attributes not fully set
[37.466267] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: 3GPP Registration state changed (unknown -> registering)
[37.467356] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: 3GPP Registration state changed (registering -> home)
[38.459311] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (enabling -> registered)
[38.462556] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: access technology changed (unknown -> umts)
[67.896723] MM[595]: <info> Simple connect started...
[67.896912] MM[595]: <info> Simple connect state (4/8): Wait to get fully enabled
[67.897054] MM[595]: <info> Simple connect state (5/8): Register
[67.897188] MM[595]: <info> Simple connect state (6/8): Bearer
[67.897315] MM[595]: <info> Simple connect state (7/8): Connect
[67.897441] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (registered -> connecting)
[67.988740] MM[595]: [/dev/cdc-wdm0] Allocating new client ID...
[67.992775] MM[595]: [/dev/cdc-wdm0] Registered 'wds' (version 1.3) client with ID '37'
[71.872712] MM[595]: [/dev/cdc-wdm0] Allocating new client ID...
[71.876473] MM[595]: [/dev/cdc-wdm0] Registered 'wds' (version 1.3) client with ID '38'
[71.880362] MM[595]: <info> error: couldn't start network: QMI protocol error (64): '(null)'
[71.880913] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (connecting -> connected)
[71.881442] MM[595]: <info> Simple connect state (8/8): All done
[78.899466] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (connected -> disconnecting)
[78.902833] MM[595]: <info> Modem /org/freedesktop/MM1/Modem/0: state changed (disconnecting -> registered)
poma
More information about the ModemManager-devel
mailing list