From: Gert Doering Date: Tue, 20 Feb 2018 16:00:16 +0000 (+0100) Subject: Fix removal of on-link prefix on windows with netsh X-Git-Tag: v2.4.5~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8f56fadbe459423b673886c785b7ed6f3a37c36;p=thirdparty%2Fopenvpn.git Fix removal of on-link prefix on windows with netsh When adding / removing IPv6 routes, the host bits need to be zeroed or netsh.exe will refuse to handle the route. Commit a24dd2e31 changed the way this is done, breaking removal of the on-link IPv6 prefix for windows + netsh.exe. Fix by adding explicitly calling route_ipv6_clear_host_bits() from delete_route_connected_v6_net(). Trac: #1003 Signed-off-by: Gert Doering Acked-by: Selva Nair Message-Id: <20180220160016.69786-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg16508.html Signed-off-by: Gert Doering (cherry picked from commit 2cea72005cb5a825c25494959d550ae16562676a) --- diff --git a/src/openvpn/route.c b/src/openvpn/route.c index 6f1131c9c..2d6428b23 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -1820,7 +1820,7 @@ done: } -static void +void route_ipv6_clear_host_bits( struct route_ipv6 *r6 ) { /* clear host bit parts of route diff --git a/src/openvpn/route.h b/src/openvpn/route.h index 2c6f9f16d..69420228d 100644 --- a/src/openvpn/route.h +++ b/src/openvpn/route.h @@ -254,6 +254,8 @@ void copy_route_ipv6_option_list(struct route_ipv6_option_list *dest, const struct route_ipv6_option_list *src, struct gc_arena *a); +void route_ipv6_clear_host_bits( struct route_ipv6 *r6 ); + void add_route_ipv6(struct route_ipv6 *r, const struct tuntap *tt, unsigned int flags, const struct env_set *es); void delete_route_ipv6(const struct route_ipv6 *r, const struct tuntap *tt, unsigned int flags, const struct env_set *es); diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index a022217c3..b071823a1 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -839,6 +839,7 @@ delete_route_connected_v6_net(struct tuntap *tt, r6.gateway = tt->local_ipv6; r6.metric = 0; /* connected route */ r6.flags = RT_DEFINED | RT_ADDED | RT_METRIC_DEFINED; + route_ipv6_clear_host_bits(&r6); delete_route_ipv6(&r6, tt, 0, es); } #endif /* if defined(_WIN32) || defined(TARGET_DARWIN) || defined(TARGET_NETBSD) || defined(TARGET_OPENBSD) */