From: Daniel Wagner <[email protected]>

---
 src/service.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/src/service.c b/src/service.c
index 5d41cbb..904fac3 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3671,6 +3671,7 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
                                        enum connman_ipconfig_type type)
 {
        enum connman_service_state current_state;
+       enum connman_ipconfig_method ipv4_method, ipv6_method;
        int err = 0;
 
        DBG("service %p (%s) state %d (%s) type %d (%s)",
@@ -3683,6 +3684,53 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
 
        current_state = combine_state(service->state_ipv4, service->state_ipv6);
 
+       ipv4_method = __connman_ipconfig_get_method(service->ipconfig_ipv4);
+       ipv6_method = __connman_ipconfig_get_method(service->ipconfig_ipv6);
+
+       if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+               switch (ipv4_method) {
+               case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+               case CONNMAN_IPCONFIG_METHOD_OFF:
+               case CONNMAN_IPCONFIG_METHOD_AUTO:
+               case CONNMAN_IPCONFIG_METHOD_FIXED:
+               case CONNMAN_IPCONFIG_METHOD_MANUAL:
+               case CONNMAN_IPCONFIG_METHOD_DHCP:
+                       break;
+               }
+       } else if (type == CONNMAN_IPCONFIG_TYPE_IPV6) {
+               switch (ipv6_method) {
+               case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+               case CONNMAN_IPCONFIG_METHOD_OFF:
+                       break;
+               case CONNMAN_IPCONFIG_METHOD_AUTO:
+                       switch (ipv4_method) {
+                       case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+                       case CONNMAN_IPCONFIG_METHOD_OFF:
+                       case CONNMAN_IPCONFIG_METHOD_AUTO:
+                       case CONNMAN_IPCONFIG_METHOD_FIXED:
+                       case CONNMAN_IPCONFIG_METHOD_MANUAL:
+                               break;
+                       case CONNMAN_IPCONFIG_METHOD_DHCP:
+                               if (current_state == 
CONNMAN_SERVICE_STATE_IDLE) {
+                                       /*
+                                        * XXX Let's defer the IPv6
+                                        * setting the service to
+                                        * READY with a simple
+                                        * hack.
+                                        */
+                                       return 0;
+                               }
+
+                               break;
+                       }
+               case CONNMAN_IPCONFIG_METHOD_FIXED:
+               case CONNMAN_IPCONFIG_METHOD_MANUAL:
+               case CONNMAN_IPCONFIG_METHOD_DHCP:
+                       break;
+
+               }
+       }
+
        switch (current_state) {
        case CONNMAN_SERVICE_STATE_UNKNOWN:
        case CONNMAN_SERVICE_STATE_IDLE:
-- 
1.7.5.4

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

Reply via email to