diff options
author | Jukka Rissanen <jukka.rissanen@nokia.com> | 2011-02-10 17:52:15 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-02-11 12:26:19 +0100 |
commit | 56deaf39f76d52dc3659c3eb8655547312948be5 (patch) | |
tree | 1c85983db43c388af9594ac5f3011dde0801c5e6 /src/network.c | |
parent | e50d8ca9de65d8be4e4a14ab3f4484e4070c45ee (diff) | |
download | connman-56deaf39f76d52dc3659c3eb8655547312948be5.tar.gz connman-56deaf39f76d52dc3659c3eb8655547312948be5.tar.bz2 connman-56deaf39f76d52dc3659c3eb8655547312948be5.zip |
network: Enable IPv6 autoconf to change the service state to ready
Diffstat (limited to 'src/network.c')
-rw-r--r-- | src/network.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/src/network.c b/src/network.c index c3febd3d..7a4d931a 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: |