From: Pasi Sjöholm <[email protected]>

It was possible with IPv6-only networks to have eternal
associating variable set as true, especially
when ipv4 configuration method was OFF.
---
 src/network.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/network.c b/src/network.c
index db19cb9..8bfe121 100644
--- a/src/network.c
+++ b/src/network.c
@@ -342,6 +342,8 @@ static int manual_ipv6_set(struct connman_network *network,
 
        connman_device_set_disconnected(network->device, false);
 
+       connman_network_set_associating(network, false);
+
        network->connecting = false;
 
        return 0;
@@ -386,8 +388,6 @@ static int dhcpv6_set_addresses(struct connman_network 
*network)
        if (!service)
                goto err;
 
-       connman_network_set_associating(network, false);
-
        network->connecting = false;
 
        ipconfig_ipv6 = __connman_service_get_ip6config(service);
@@ -511,6 +511,8 @@ static void check_dhcpv6(struct nd_router_advert *reply,
        if (service) {
                connman_service_create_ip6config(service, network->index);
 
+               connman_network_set_associating(network, false);
+
                __connman_service_ipconfig_indicate_state(service,
                                        CONNMAN_SERVICE_STATE_CONFIGURATION,
                                        CONNMAN_IPCONFIG_TYPE_IPV6);
@@ -519,10 +521,14 @@ static void check_dhcpv6(struct nd_router_advert *reply,
        /*
         * We do stateful/stateless DHCPv6 if router advertisement says so.
         */
-       if (reply->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)
+       if (reply->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED) {
                __connman_dhcpv6_start(network, prefixes, dhcpv6_callback);
-       else if (reply->nd_ra_flags_reserved & ND_RA_FLAG_OTHER)
+       } else if (reply->nd_ra_flags_reserved & ND_RA_FLAG_OTHER) {
                __connman_dhcpv6_start_info(network, dhcpv6_info_callback);
+               network->connecting = false;
+       } else {
+               network->connecting = false;
+       }
 
        connman_network_unref(network);
 }
@@ -602,8 +608,6 @@ static void autoconf_ipv6_set(struct connman_network 
*network)
 
        connman_device_set_disconnected(network->device, false);
 
-       network->connecting = false;
-
        service = connman_service_lookup_from_network(network);
        if (!service)
                return;
-- 
2.1.0

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

Reply via email to