ipconfig: Default method is auto for IPv6
[platform/upstream/connman.git] / src / ipconfig.c
index 57e3218..7a14c42 100644 (file)
@@ -852,7 +852,7 @@ static struct connman_ipconfig *create_ipv6config(int index)
 
        ipv6config->index = index;
        ipv6config->type = CONNMAN_IPCONFIG_TYPE_IPV6;
-       ipv6config->method = CONNMAN_IPCONFIG_METHOD_OFF;
+       ipv6config->method = CONNMAN_IPCONFIG_METHOD_AUTO;
 
        ipv6config->address = connman_ipaddress_alloc(AF_INET6);
        if (ipv6config->address == NULL) {
@@ -915,6 +915,9 @@ struct connman_ipconfig *connman_ipconfig_create(int index,
  */
 struct connman_ipconfig *connman_ipconfig_ref(struct connman_ipconfig *ipconfig)
 {
+       DBG("ipconfig %p refcount %d", ipconfig,
+                               g_atomic_int_get(&ipconfig->refcount) + 1);
+
        g_atomic_int_inc(&ipconfig->refcount);
 
        return ipconfig;
@@ -928,8 +931,13 @@ struct connman_ipconfig *connman_ipconfig_ref(struct connman_ipconfig *ipconfig)
  */
 void connman_ipconfig_unref(struct connman_ipconfig *ipconfig)
 {
-       if (ipconfig &&
-               g_atomic_int_dec_and_test(&ipconfig->refcount) == TRUE) {
+       if (ipconfig == NULL)
+               return;
+
+       DBG("ipconfig %p refcount %d", ipconfig,
+                       g_atomic_int_get(&ipconfig->refcount) - 1);
+
+       if (g_atomic_int_dec_and_test(&ipconfig->refcount) == TRUE) {
                __connman_ipconfig_disable(ipconfig);
 
                connman_ipconfig_set_ops(ipconfig, NULL);
@@ -1111,6 +1119,7 @@ int __connman_ipconfig_set_address(struct connman_ipconfig *ipconfig)
        case CONNMAN_IPCONFIG_METHOD_OFF:
        case CONNMAN_IPCONFIG_METHOD_FIXED:
        case CONNMAN_IPCONFIG_METHOD_DHCP:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
                break;
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
                if (ipconfig->type == CONNMAN_IPCONFIG_TYPE_IPV4)
@@ -1138,6 +1147,7 @@ int __connman_ipconfig_clear_address(struct connman_ipconfig *ipconfig)
        case CONNMAN_IPCONFIG_METHOD_OFF:
        case CONNMAN_IPCONFIG_METHOD_FIXED:
        case CONNMAN_IPCONFIG_METHOD_DHCP:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
                break;
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
                if (ipconfig->type == CONNMAN_IPCONFIG_TYPE_IPV4)
@@ -1321,6 +1331,8 @@ const char *__connman_ipconfig_method2string(enum connman_ipconfig_method method
                return "manual";
        case CONNMAN_IPCONFIG_METHOD_DHCP:
                return "dhcp";
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
+               return "auto";
        }
 
        return NULL;
@@ -1336,6 +1348,8 @@ enum connman_ipconfig_method __connman_ipconfig_string2method(const char *method
                return CONNMAN_IPCONFIG_METHOD_MANUAL;
        else if (g_strcmp0(method, "dhcp") == 0)
                return CONNMAN_IPCONFIG_METHOD_DHCP;
+       else if (g_strcmp0(method, "auto") == 0)
+               return CONNMAN_IPCONFIG_METHOD_AUTO;
        else
                return CONNMAN_IPCONFIG_METHOD_UNKNOWN;
 }
@@ -1431,6 +1445,7 @@ void __connman_ipconfig_append_ipv6config(struct connman_ipconfig *ipconfig,
                return;
        case CONNMAN_IPCONFIG_METHOD_FIXED:
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
                break;
        }
 
@@ -1468,6 +1483,7 @@ void __connman_ipconfig_append_ipv4config(struct connman_ipconfig *ipconfig,
        case CONNMAN_IPCONFIG_METHOD_OFF:
        case CONNMAN_IPCONFIG_METHOD_FIXED:
        case CONNMAN_IPCONFIG_METHOD_DHCP:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
                return;
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
                break;
@@ -1576,6 +1592,7 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
        case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
        case CONNMAN_IPCONFIG_METHOD_OFF:
        case CONNMAN_IPCONFIG_METHOD_FIXED:
+       case CONNMAN_IPCONFIG_METHOD_AUTO:
                return -EINVAL;
 
        case CONNMAN_IPCONFIG_METHOD_MANUAL:
@@ -1634,7 +1651,7 @@ void __connman_ipconfig_append_ethernet(struct connman_ipconfig *ipconfig,
 int __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
                GKeyFile *keyfile, const char *identifier, const char *prefix)
 {
-       const char *method;
+       char *method;
        char *key;
 
        DBG("ipconfig %p identifier %s", ipconfig, identifier);
@@ -1652,6 +1669,7 @@ int __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
        if (ipconfig->method == CONNMAN_IPCONFIG_METHOD_UNKNOWN)
                ipconfig->method = CONNMAN_IPCONFIG_METHOD_OFF;
 
+       g_free(method);
        g_free(key);
 
        key = g_strdup_printf("%snetmask_prefixlen", prefix);