From 4b8b99ee96f16e3f2d623cb896a4d1bf7f12820f Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 19 Dec 2011 16:25:31 +0100 Subject: bearer-3gpp: set ip method when connecting the bearer Currently, assume PPP when we have an AT data port, and DHCP otherwise. --- src/mm-bearer-3gpp.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/mm-bearer-3gpp.c b/src/mm-bearer-3gpp.c index 11e3e3ee..b82c9407 100644 --- a/src/mm-bearer-3gpp.c +++ b/src/mm-bearer-3gpp.c @@ -92,12 +92,28 @@ connect_context_complete_and_free (ConnectContext *ctx) g_simple_async_result_take_error (ctx->result, ctx->error); } else { + GVariant *ip_config; + GVariantBuilder builder; + MMBearerIpMethod ip_method; + /* Port is connected; update the state */ mm_port_set_connected (ctx->data, TRUE); mm_gdbus_bearer_set_connected (MM_GDBUS_BEARER (ctx->bearer), TRUE); mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (ctx->bearer), mm_port_get_device (ctx->data)); + + /* If serial port, set PPP method */ + ip_method = (MM_IS_AT_SERIAL_PORT (ctx->data) ? + MM_BEARER_IP_METHOD_PPP : + MM_BEARER_IP_METHOD_DHCP); + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); + g_variant_builder_add (&builder, "{sv}", "method", g_variant_new_uint32 (ip_method)); + ip_config = g_variant_builder_end (&builder); + mm_gdbus_bearer_set_ip4_config (MM_GDBUS_BEARER (ctx->bearer), ip_config); + mm_gdbus_bearer_set_ip6_config (MM_GDBUS_BEARER (ctx->bearer), ip_config); + /* Keep data port and CID around while connected */ MM_BEARER_3GPP (ctx->bearer)->priv->cid = ctx->cid; MM_BEARER_3GPP (ctx->bearer)->priv->port = g_object_ref (ctx->data); @@ -521,6 +537,8 @@ disconnect_context_complete_and_free (DisconnectContext *ctx) mm_port_set_connected (ctx->data, FALSE); mm_gdbus_bearer_set_connected (MM_GDBUS_BEARER (ctx->bearer), FALSE); mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (ctx->bearer), NULL); + mm_gdbus_bearer_set_ip4_config (MM_GDBUS_BEARER (ctx->bearer), NULL); + mm_gdbus_bearer_set_ip6_config (MM_GDBUS_BEARER (ctx->bearer), NULL); /* Clear data port and CID */ MM_BEARER_3GPP (ctx->bearer)->priv->cid = 0; g_clear_object (&(MM_BEARER_3GPP (ctx->bearer)->priv->port)); -- cgit v1.2.3-70-g09d2