ipconfig: Add function to remove address from interface.
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Wed, 22 Jun 2011 10:37:46 +0000 (13:37 +0300)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 27 Jun 2011 14:15:09 +0000 (16:15 +0200)
The new function removes the address from interface but does not
touch internal data structures.

src/connman.h
src/ipconfig.c

index 0d6ca8b..0c6d6b1 100644 (file)
@@ -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);
index c8466d9..4d74ca8 100644 (file)
@@ -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;
        }