---
 src/connman.h  |    1 +
 src/ipconfig.c |   30 ++++++++++++++++++++++++++++--
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/connman.h b/src/connman.h
index 7e22b78..9e28837 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -249,6 +249,7 @@ enum connman_ipconfig_method __connman_ipconfig_get_method(
 
 int __connman_ipconfig_address_add(struct connman_ipconfig *ipconfig);
 int __connman_ipconfig_address_remove(struct connman_ipconfig *ipconfig);
+int __connman_ipconfig_address_unset(struct connman_ipconfig *ipconfig);
 int __connman_ipconfig_gateway_add(struct connman_ipconfig *ipconfig);
 void __connman_ipconfig_gateway_remove(struct connman_ipconfig *ipconfig);
 unsigned char __connman_ipconfig_netmask_prefix_len(const char *netmask);
diff --git a/src/ipconfig.c b/src/ipconfig.c
index c8466d9..4d74ca8 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1401,6 +1401,34 @@ int __connman_ipconfig_address_remove(struct 
connman_ipconfig *ipconfig)
        case CONNMAN_IPCONFIG_METHOD_FIXED:
        case CONNMAN_IPCONFIG_METHOD_DHCP:
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
+               err = __connman_ipconfig_address_unset(ipconfig);
+               connman_ipaddress_clear(ipconfig->address);
+
+               return err;
+       }
+
+       return 0;
+}
+
+int __connman_ipconfig_address_unset(struct connman_ipconfig *ipconfig)
+{
+       int err;
+
+       DBG("");
+
+       if (ipconfig == NULL)
+               return 0;
+
+       DBG("method %d", ipconfig->method);
+
+       switch (ipconfig->method) {
+       case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+       case CONNMAN_IPCONFIG_METHOD_OFF:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
+               break;
+       case CONNMAN_IPCONFIG_METHOD_FIXED:
+       case CONNMAN_IPCONFIG_METHOD_DHCP:
+       case CONNMAN_IPCONFIG_METHOD_MANUAL:
                if (ipconfig->type == CONNMAN_IPCONFIG_TYPE_IPV4)
                        err = connman_inet_clear_address(ipconfig->index,
                                                        ipconfig->address);
@@ -1412,8 +1440,6 @@ int __connman_ipconfig_address_remove(struct 
connman_ipconfig *ipconfig)
                else
                        err = -EINVAL;
 
-               connman_ipaddress_clear(ipconfig->address);
-
                return err;
        }
 
-- 
1.7.1

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to