Trac #637
Signed-off-by: Lev Stipakov <[email protected]>
---
src/openvpn/route.c | 16 ++++++++++++----
src/openvpn/tun.c | 2 ++
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 4a60345..2012b5c 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1770,13 +1770,17 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct
tuntap *tt, unsigned int fla
#elif defined (WIN32)
+ struct buffer out = alloc_buf_gc (64, &gc);
if ( r6->adapter_index ) /* vpn server special route */
{
- struct buffer out = alloc_buf_gc (64, &gc);
buf_printf (&out, "interface=%d", r6->adapter_index );
- device = buf_bptr(&out);
gateway_needed = true;
}
+ else
+ {
+ buf_printf (&out, "interface=%d", tt->adapter_index );
+ }
+ device = buf_bptr(&out);
/* netsh interface ipv6 add route 2001:db8::/32 MyTunDevice */
argv_printf (&argv, "%s%sc interface ipv6 add route %s/%d %s",
@@ -2168,13 +2172,17 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const
struct tuntap *tt, unsigne
#elif defined (WIN32)
+ struct buffer out = alloc_buf_gc (64, &gc);
if ( r6->adapter_index ) /* vpn server special route */
{
- struct buffer out = alloc_buf_gc (64, &gc);
buf_printf (&out, "interface=%d", r6->adapter_index );
- device = buf_bptr(&out);
gateway_needed = true;
}
+ else
+ {
+ buf_printf (&out, "interface=%d", tt->adapter_index );
+ }
+ device = buf_bptr(&out);
/* netsh interface ipv6 delete route 2001:db8::/32 MyTunDevice */
argv_printf (&argv, "%s%sc interface ipv6 delete route %s/%d %s",
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 014d988..aed5e75 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -1328,6 +1328,8 @@ do_ifconfig (struct tuntap *tt,
*/
saved_actual = tt->actual_name;
tt->actual_name = (char*) actual;
+ /* we use adapter_index in add_route_ipv6 */
+ tt->adapter_index = idx;
add_route_connected_v6_net(tt, es);
tt->actual_name = saved_actual;
}
--
1.9.1