---
src/service.c | 30 --
1 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/src/service.c b/src/service.c
index b775d44..38f8f2f 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2203,6 +2203,9 @@ static DBusMessage *set_property(DBusConnection *conn,
g_str_equal(name, IPv6.Configuration)) {
struct connman_ipconfig *ipv4 = NULL, *ipv6 = NULL;
+ enum connman_ipconfig_method old_method;
+ enum connman_ipconfig_method method =
+ CONNMAN_IPCONFIG_METHOD_UNKNOWN;
enum connman_service_state state =
CONNMAN_SERVICE_STATE_UNKNOWN;
int err = 0;
@@ -2214,26 +2217,49 @@ static DBusMessage *set_property(DBusConnection *conn,
return __connman_error_invalid_property(msg);
if (g_str_equal(name, IPv4.Configuration) == TRUE) {
+ ipv4 = service-ipconfig_ipv4;
+ old_method = __connman_ipconfig_get_method(ipv4);
state = service-state_ipv4;
+
if (is_connecting(service, state) ||
is_connected(service, state))
__connman_network_clear_ipconfig(
service-network,
service-ipconfig_ipv4);
- ipv4 = service-ipconfig_ipv4;
err = __connman_ipconfig_set_config(ipv4, value);
+ method = __connman_ipconfig_get_method(ipv4);
+ if (err == 0
+ old_method == CONNMAN_IPCONFIG_METHOD_OFF
+ method == CONNMAN_IPCONFIG_METHOD_DHCP) {
+ state = service-state_ipv4 =
+ CONNMAN_SERVICE_STATE_CONFIGURATION;
+ __connman_ipconfig_enable(ipv4);
+ }
+
+ DBG(err %d ipv4 %p method %d state %s, err, ipv4,
+ method, state2string(state));
} else if (g_str_equal(name, IPv6.Configuration) == TRUE) {
+ ipv6 = service-ipconfig_ipv6;
+ old_method = __connman_ipconfig_get_method(ipv6);
state = service-state_ipv6;
+
if (is_connecting(service, state) ||
is_connected(service, state))
__connman_network_clear_ipconfig(
service-network,
service-ipconfig_ipv6);
- ipv6 = service-ipconfig_ipv6;
err = __connman_ipconfig_set_config(ipv6, value);
+ method = __connman_ipconfig_get_method(ipv6);
+ if (err == 0 old_method ==
+ CONNMAN_IPCONFIG_METHOD_OFF
+ method == CONNMAN_IPCONFIG_METHOD_AUTO)
+ __connman_ipconfig_enable(ipv6);
+
+ DBG(err %d ipv6 %p method %d state %s, err, ipv6,
+ method, state2string(state));
}
if (err 0) {
--
1.7.0.4
___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman