---
 src/network.c |   43 +++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/src/network.c b/src/network.c
index c3febd3..7a4d931 100644
--- a/src/network.c
+++ b/src/network.c
@@ -768,6 +768,37 @@ static int manual_ipv6_set(struct connman_network *network,
        return 0;
 }
 
+static void autoconf_ipv6_set(struct connman_network *network,
+                               struct connman_ipconfig *ipconfig_ipv6)
+{
+       struct connman_service *service;
+       struct connman_ipconfig *ipconfig;
+       const char *nameserver = NULL;
+
+       DBG("network %p", network);
+
+       service = __connman_service_lookup_from_network(network);
+
+       ipconfig = __connman_service_get_ip6config(service);
+
+       __connman_device_increase_connections(network->device);
+
+       __connman_device_set_network(network->device, network);
+
+       connman_device_set_disconnected(network->device, FALSE);
+
+       connman_element_get_value(&network->element,
+                       CONNMAN_PROPERTY_ID_IPV6_NAMESERVER, &nameserver);
+       if (nameserver != NULL)
+               __connman_service_append_nameserver(service, nameserver);
+
+       network->connecting = FALSE;
+
+       __connman_service_indicate_state(service,
+                                       CONNMAN_SERVICE_STATE_READY,
+                                       CONNMAN_IPCONFIG_TYPE_IPV6);
+}
+
 static gboolean set_connected(gpointer user_data)
 {
        struct connman_network *network = user_data;
@@ -795,7 +826,9 @@ static gboolean set_connected(gpointer user_data)
                switch (ipv6_method) {
                case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
                case CONNMAN_IPCONFIG_METHOD_OFF:
+                       break;
                case CONNMAN_IPCONFIG_METHOD_AUTO:
+                       autoconf_ipv6_set(network, ipconfig_ipv6);
                        break;
                case CONNMAN_IPCONFIG_METHOD_FIXED:
                case CONNMAN_IPCONFIG_METHOD_MANUAL:
@@ -844,8 +877,12 @@ static gboolean set_connected(gpointer user_data)
                service = __connman_service_lookup_from_network(network);
 
                __connman_service_indicate_state(service,
-                                               CONNMAN_SERVICE_STATE_IDLE,
-                                               CONNMAN_IPCONFIG_TYPE_IPV4);
+                                       CONNMAN_SERVICE_STATE_DISCONNECT,
+                                       CONNMAN_IPCONFIG_TYPE_IPV4);
+
+               __connman_service_indicate_state(service,
+                                       CONNMAN_SERVICE_STATE_DISCONNECT,
+                                       CONNMAN_IPCONFIG_TYPE_IPV6);
        }
 
        network->connecting = FALSE;
@@ -1100,7 +1137,9 @@ int __connman_network_set_ipconfig(struct connman_network 
*network,
                switch (method) {
                case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
                case CONNMAN_IPCONFIG_METHOD_OFF:
+                       break;
                case CONNMAN_IPCONFIG_METHOD_AUTO:
+                       autoconf_ipv6_set(network, ipconfig_ipv6);
                        break;
                case CONNMAN_IPCONFIG_METHOD_FIXED:
                case CONNMAN_IPCONFIG_METHOD_MANUAL:
-- 
1.7.0.4

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to