aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-06-23 11:40:36 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-06-24 19:41:24 +0200
commit30fe6eab4844966a9ad99599aeac910fd9898798 (patch)
tree6e5d9bd9fae2448ae625e125f4042cdd57fb08b1
parente227d4af39d2c09ef1e8a8818d2558fba210f334 (diff)
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
-rw-r--r--plugins/option/mm-broadband-modem-hso.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/plugins/option/mm-broadband-modem-hso.c b/plugins/option/mm-broadband-modem-hso.c
index 967b0ce2..1c691095 100644
--- a/plugins/option/mm-broadband-modem-hso.c
+++ b/plugins/option/mm-broadband-modem-hso.c
@@ -65,12 +65,33 @@ 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,
GSimpleAsyncResult *simple)
@@ -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,