aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-bearer.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-02-19 12:06:55 -0600
committerDan Williams <dcbw@redhat.com>2014-06-13 11:30:49 -0500
commite68d51f439190eb5434581c8db072687028f0b55 (patch)
tree92b64aee5312ead7c104a6a56437a0eeced7e1e3 /src/mm-broadband-bearer.c
parente9395d83e388aba8b46f2fbe371c247c42bd6452 (diff)
broadband-bearer: also return IPv6 config if IPv6 context is used
If the subclass doesn't override IP config retrieval, and IPv6 was used when connecting the bearer, return IPv6 config too.
Diffstat (limited to 'src/mm-broadband-bearer.c')
-rw-r--r--src/mm-broadband-bearer.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index dce13f44..bed9ec2d 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -674,7 +674,9 @@ dial_3gpp_ready (MMBroadbandModem *modem,
GAsyncResult *res,
DetailedConnectContext *ctx)
{
- MMBearerIpConfig *config;
+ MMBearerIpMethod ip_method = MM_BEARER_IP_METHOD_UNKNOWN;
+ MMBearerIpConfig *ipv4_config = NULL;
+ MMBearerIpConfig *ipv6_config = NULL;
GError *error = NULL;
ctx->data = MM_BROADBAND_BEARER_GET_CLASS (ctx->self)->dial_3gpp_finish (ctx->self, res, &error);
@@ -715,19 +717,30 @@ dial_3gpp_ready (MMBroadbandModem *modem,
/* If no specific IP retrieval requested, set the default implementation
* (PPP if data port is AT, DHCP otherwise) */
- config = mm_bearer_ip_config_new ();
- mm_bearer_ip_config_set_method (config,
- (MM_IS_PORT_SERIAL_AT (ctx->data) ?
- MM_BEARER_IP_METHOD_PPP :
- MM_BEARER_IP_METHOD_DHCP));
+ ip_method = MM_IS_PORT_SERIAL_AT (ctx->data) ?
+ MM_BEARER_IP_METHOD_PPP :
+ MM_BEARER_IP_METHOD_DHCP;
+
+ if (ctx->ip_family & MM_BEARER_IP_FAMILY_IPV4 ||
+ ctx->ip_family & MM_BEARER_IP_FAMILY_IPV4V6) {
+ ipv4_config = mm_bearer_ip_config_new ();
+ mm_bearer_ip_config_set_method (ipv4_config, ip_method);
+ }
+ if (ctx->ip_family & MM_BEARER_IP_FAMILY_IPV6 ||
+ ctx->ip_family & MM_BEARER_IP_FAMILY_IPV4V6) {
+ ipv6_config = mm_bearer_ip_config_new ();
+ mm_bearer_ip_config_set_method (ipv6_config, ip_method);
+ }
+ g_assert (ipv4_config || ipv6_config);
g_simple_async_result_set_op_res_gpointer (
ctx->result,
- mm_bearer_connect_result_new (ctx->data, config, NULL),
+ mm_bearer_connect_result_new (ctx->data, ipv4_config, ipv6_config),
(GDestroyNotify)mm_bearer_connect_result_unref);
detailed_connect_context_complete_and_free (ctx);
- g_object_unref (config);
+ g_clear_object (&ipv4_config);
+ g_clear_object (&ipv6_config);
}
static void