summaryrefslogtreecommitdiff
path: root/src/network.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2011-06-22 13:37:49 +0300
committerSamuel Ortiz <sameo@linux.intel.com>2011-06-27 16:15:09 +0200
commit4abda5f82f916f45f4ab9b695c9f76969da9db55 (patch)
tree43532b40995b0da0fc82f66e7a8369c175bfcbd3 /src/network.c
parent26eb47a70c46d4b6ade63e7ec1de0d5767cf7ce3 (diff)
downloadconnman-4abda5f82f916f45f4ab9b695c9f76969da9db55.tar.gz
connman-4abda5f82f916f45f4ab9b695c9f76969da9db55.tar.bz2
connman-4abda5f82f916f45f4ab9b695c9f76969da9db55.zip
network: Clear IPv6 autoconfigured routes when disconnected.
Diffstat (limited to 'src/network.c')
-rw-r--r--src/network.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/network.c b/src/network.c
index 0ae77ca9..ac7bd075 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1104,6 +1104,17 @@ static gboolean set_connected(gpointer user_data)
__connman_ipconfig_address_unset(ipconfig_ipv4);
__connman_ipconfig_address_unset(ipconfig_ipv6);
+ /*
+ * Special handling for IPv6 autoconfigured address.
+ * The simplest way to remove autoconfigured routes is to
+ * disable IPv6 temporarily so that kernel will do the cleanup
+ * automagically.
+ */
+ if (ipv6_method == CONNMAN_IPCONFIG_METHOD_AUTO) {
+ __connman_ipconfig_disable_ipv6(ipconfig_ipv6);
+ __connman_ipconfig_enable_ipv6(ipconfig_ipv6);
+ }
+
__connman_service_indicate_state(service,
CONNMAN_SERVICE_STATE_IDLE,
CONNMAN_IPCONFIG_TYPE_IPV4);