hso: if IPv6 bearer type requested, create a generic bearer

Option/HSO modems don't seem to support IPv6 when using the net interface. So if
IPv6 is requested, create a generic bearer.

    $ sudo mmcli -m 0 --simple-connect="apn=internet,ip-type=ipv6"
    successfully connected the modem

    $ sudo mmcli -b 0
    Bearer '/org/freedesktop/ModemManager1/Bearer/0'
      -------------------------
      Status             |   connected: 'yes'
                         |   suspended: 'no'
                         |   interface: 'ttyHS3'
                         |  IP timeout: '20'
      -------------------------
      Properties         |         apn: 'internet'
                         |     roaming: 'allowed'
                         |     IP type: 'ipv6'
                         |        user: 'none'
                         |    password: 'none'
                         |      number: 'none'
                         | Rm protocol: 'unknown'
      -------------------------
      IPv4 configuration |   method: 'ppp'
      -------------------------
      IPv6 configuration |   method: 'unknown'

    $ sudo mmcli -m 0 --simple-disconnect
    successfully disconnected all bearers in the modem

https://bugzilla.gnome.org/show_bug.cgi?id=702472
This commit is contained in:
Aleksander Morgado
2013-06-24 19:41:24 +02:00
parent e227d4af39
commit 30fe6eab48
+33 -1
View File
@@ -65,11 +65,32 @@ modem_create_bearer_finish (MMIfaceModem *self,
MMBearer *bearer;
bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
mm_dbg ("New HSO bearer created at DBus path '%s'", mm_bearer_get_path (bearer));
mm_dbg ("New %s bearer created at DBus path '%s'",
MM_IS_BROADBAND_BEARER_HSO (bearer) ? "HSO" : "Generic",
mm_bearer_get_path (bearer));
return g_object_ref (bearer);
}
static void
broadband_bearer_new_ready (GObject *source,
GAsyncResult *res,
GSimpleAsyncResult *simple)
{
MMBearer *bearer = NULL;
GError *error = NULL;
bearer = mm_broadband_bearer_new_finish (res, &error);
if (!bearer)
g_simple_async_result_take_error (simple, error);
else
g_simple_async_result_set_op_res_gpointer (simple,
bearer,
(GDestroyNotify)g_object_unref);
g_simple_async_result_complete (simple);
g_object_unref (simple);
}
static void
broadband_bearer_hso_new_ready (GObject *source,
GAsyncResult *res,
@@ -102,6 +123,17 @@ modem_create_bearer (MMIfaceModem *self,
user_data,
modem_create_bearer);
if (mm_bearer_properties_get_ip_type (properties) &
(MM_BEARER_IP_FAMILY_IPV6 | MM_BEARER_IP_FAMILY_IPV4V6)) {
mm_dbg ("Creating generic bearer (IPv6 requested)...");
mm_broadband_bearer_new (MM_BROADBAND_MODEM (self),
properties,
NULL, /* cancellable */
(GAsyncReadyCallback)broadband_bearer_new_ready,
result);
return;
}
mm_dbg ("Creating HSO bearer...");
mm_broadband_bearer_hso_new (MM_BROADBAND_MODEM_HSO (self),
properties,