From 67b6419f485b90f2ed3295198a03f0e5a549195f Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Sat, 8 Jan 2011 01:32:44 +0100 Subject: [PATCH] service: Do not disconnect IPv4 if IPv6 method changes --- src/service.c | 50 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/src/service.c b/src/service.c index 01e52f2..4572e59 100644 --- a/src/service.c +++ b/src/service.c @@ -2041,7 +2041,7 @@ static DBusMessage *set_property(DBusConnection *conn, } else if (g_str_equal(name, "IPv4.Configuration") == TRUE || g_str_equal(name, "IPv6.Configuration")) { - enum connman_ipconfig_type type = CONNMAN_IPCONFIG_TYPE_UNKNOWN; + struct connman_ipconfig *ipv4 = NULL, *ipv6 = NULL; int err = 0; DBG("%s", name); @@ -2050,44 +2050,40 @@ static DBusMessage *set_property(DBusConnection *conn, service->ipconfig_ipv6 == NULL) return __connman_error_invalid_property(msg); - if (is_connecting(service) || - is_connected(service)) { - __connman_network_clear_ipconfig(service->network, - service->ipconfig_ipv4); - __connman_network_clear_ipconfig(service->network, - service->ipconfig_ipv6); - } - if (g_str_equal(name, "IPv4.Configuration") == TRUE) { - type = CONNMAN_IPCONFIG_TYPE_IPV4; - err = __connman_ipconfig_set_config( - service->ipconfig_ipv4, &value); + if (is_connecting(service) || is_connected(service)) + __connman_network_clear_ipconfig( + service->network, + service->ipconfig_ipv4); + + ipv4 = service->ipconfig_ipv4; + err = __connman_ipconfig_set_config(ipv4, &value); + } else if (g_str_equal(name, "IPv6.Configuration") == TRUE) { - type = CONNMAN_IPCONFIG_TYPE_IPV6; - err = __connman_ipconfig_set_config( - service->ipconfig_ipv6, &value); + if (is_connecting(service) || is_connected(service)) + __connman_network_clear_ipconfig( + service->network, + service->ipconfig_ipv6); + + ipv6 = service->ipconfig_ipv6; + err = __connman_ipconfig_set_config(ipv6, &value); } if (err < 0) { - if (is_connected(service) || - is_connecting(service)) - __connman_network_set_ipconfig( - service->network, - service->ipconfig_ipv4, - service->ipconfig_ipv6); + if (is_connected(service) || is_connecting(service)) + __connman_network_set_ipconfig(service->network, + ipv4, ipv6); return __connman_error_failed(msg, -err); } - if (type == CONNMAN_IPCONFIG_TYPE_IPV4) + if (ipv4) ipv4_configuration_changed(service); - else if (type == CONNMAN_IPCONFIG_TYPE_IPV6) + else if (ipv6) ipv6_configuration_changed(service); - if (is_connecting(service) || - is_connected(service)) + if (is_connecting(service) || is_connected(service)) __connman_network_set_ipconfig(service->network, - service->ipconfig_ipv4, - service->ipconfig_ipv6); + ipv4, ipv6); __connman_storage_save_service(service); } else -- 2.7.4