summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@nokia.com>2011-02-10 17:52:15 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-02-11 12:26:19 +0100
commit56deaf39f76d52dc3659c3eb8655547312948be5 (patch)
tree1c85983db43c388af9594ac5f3011dde0801c5e6
parente50d8ca9de65d8be4e4a14ab3f4484e4070c45ee (diff)
downloadconnman-56deaf39f76d52dc3659c3eb8655547312948be5.tar.gz
connman-56deaf39f76d52dc3659c3eb8655547312948be5.tar.bz2
connman-56deaf39f76d52dc3659c3eb8655547312948be5.zip
network: Enable IPv6 autoconf to change the service state to ready
-rw-r--r--src/network.c43
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: