Disable IPv4 and IPv6 configurations only when the respective ipconfig
states change to 'Disconnect' or 'Failure' and not all over the code.
Enable IPv4 and IPv6 configurations as before in 'Configuration' state
but nowhere else.

At the same time remove the now unused idle state checking function as
it is not used by any other code.
---
 src/service.c | 42 +++---------------------------------------
 1 file changed, 3 insertions(+), 39 deletions(-)

diff --git a/src/service.c b/src/service.c
index 7a2c0df..9d08e1b 100644
--- a/src/service.c
+++ b/src/service.c
@@ -903,25 +903,6 @@ static bool is_connected_state(const struct 
connman_service *service,
        return false;
 }
 
-static bool is_idle_state(const struct connman_service *service,
-                               enum connman_service_state state)
-{
-       switch (state) {
-       case CONNMAN_SERVICE_STATE_UNKNOWN:
-       case CONNMAN_SERVICE_STATE_ASSOCIATION:
-       case CONNMAN_SERVICE_STATE_CONFIGURATION:
-       case CONNMAN_SERVICE_STATE_READY:
-       case CONNMAN_SERVICE_STATE_ONLINE:
-       case CONNMAN_SERVICE_STATE_DISCONNECT:
-       case CONNMAN_SERVICE_STATE_FAILURE:
-               break;
-       case CONNMAN_SERVICE_STATE_IDLE:
-               return true;
-       }
-
-       return false;
-}
-
 static bool is_connecting(struct connman_service *service)
 {
        return is_connecting_state(service, service->state);
@@ -3948,9 +3929,6 @@ static gboolean connect_timeout(gpointer user_data)
        else if (service->provider)
                connman_provider_disconnect(service->provider);
 
-       __connman_ipconfig_disable(service->ipconfig_ipv4);
-       __connman_ipconfig_disable(service->ipconfig_ipv6);
-
        __connman_stats_service_unregister(service);
 
        if (service->pending) {
@@ -5775,8 +5753,10 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
                if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
                        service_rp_filter(service, false);
 
-               break;
+               /* fall through */
        case CONNMAN_SERVICE_STATE_FAILURE:
+               __connman_ipconfig_disable(ipconfig);
+
                break;
        }
 
@@ -5955,11 +5935,6 @@ static int service_connect(struct connman_service 
*service)
                                                &service->stats_roaming.data);
                }
 
-               if (service->ipconfig_ipv4)
-                       __connman_ipconfig_enable(service->ipconfig_ipv4);
-               if (service->ipconfig_ipv6)
-                       __connman_ipconfig_enable(service->ipconfig_ipv6);
-
                err = __connman_network_connect(service->network);
        } else if (service->type == CONNMAN_SERVICE_TYPE_VPN &&
                                        service->provider)
@@ -5970,8 +5945,6 @@ static int service_connect(struct connman_service 
*service)
 
        if (err < 0) {
                if (err != -EINPROGRESS) {
-                       __connman_ipconfig_disable(service->ipconfig_ipv4);
-                       __connman_ipconfig_disable(service->ipconfig_ipv6);
                        __connman_stats_service_unregister(service);
                }
        }
@@ -6107,9 +6080,6 @@ int __connman_service_disconnect(struct connman_service 
*service)
        __connman_ipconfig_address_remove(service->ipconfig_ipv6);
        settings_changed(service, service->ipconfig_ipv6);
 
-       __connman_ipconfig_disable(service->ipconfig_ipv4);
-       __connman_ipconfig_disable(service->ipconfig_ipv6);
-
        __connman_stats_service_unregister(service);
 
        return err;
@@ -6306,12 +6276,6 @@ static void service_lower_down(struct connman_ipconfig 
*ipconfig,
 
        DBG("%s lower down", ifname);
 
-       if (!is_idle_state(service, service->state_ipv4))
-               __connman_ipconfig_disable(service->ipconfig_ipv4);
-
-       if (!is_idle_state(service, service->state_ipv6))
-               __connman_ipconfig_disable(service->ipconfig_ipv6);
-
        stats_stop(service);
        service_save(service);
 }
-- 
2.1.4

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to