From 7a2c4378a736a8badadb783fc928a41e355de96f Mon Sep 17 00:00:00 2001 From: Jussi Laakkonen Date: Mon, 15 Feb 2021 17:09:14 +0200 Subject: [PATCH] service: Toggle VPN transport IPv6 when split routing changes [service] Toggle VPN transport IPv6 when split routing changes. JB#48769 Enable/disable IPv6 on VPNs transport when the split routing value is changed. This is important in both cases when a connected IPv4 VPN has the value changed as with split routing -> non-split routing IPv6 should be disabled as well as non-split-routing -> split routed IPv6 should be re-enabled. --- connman/src/service.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/connman/src/service.c b/connman/src/service.c index 82cf39ef5..6fe9ef3a2 100644 --- a/connman/src/service.c +++ b/connman/src/service.c @@ -745,9 +745,16 @@ void __connman_service_split_routing_changed(struct connman_service *service) void __connman_service_set_split_routing(struct connman_service *service, bool value) { + bool change; + if (service->type != CONNMAN_SERVICE_TYPE_VPN) return; + DBG("%p/%s value %s", service, service->identifier, + value ? "true" : "false"); + + change = service->do_split_routing != value; + service->do_split_routing = value; if (service->do_split_routing) @@ -755,6 +762,19 @@ void __connman_service_set_split_routing(struct connman_service *service, else service->order = 10; + /* + * Change IPv6 on the VPN transport when split routing value changes + * on a connected IPv4 VPN. + */ + if (connman_provider_get_family(service->provider) == AF_INET && + change && is_connected(service)) { + if (__connman_provider_toggle_transport_ipv6(service->provider, + !value)) + DBG("cannot toggle IPv6 on transport of service %p" + "provider %p", service, + service->provider); + } + /* * In order to make sure the value is propagated also when loading the * VPN service signal the value regardless of the value change.