summaryrefslogtreecommitdiff
path: root/src/openvpn/route.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvpn/route.c')
-rw-r--r--src/openvpn/route.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 2acfbe8..f35bc85 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -42,6 +42,7 @@
#include "manage.h"
#include "win32.h"
#include "options.h"
+#include "win32.h"
#include "memdbg.h"
@@ -390,7 +391,7 @@ init_route_ipv6 (struct route_ipv6 *r6,
{
r6->defined = false;
- if ( !get_ipv6_addr( r6o->prefix, &r6->network, &r6->netbits, NULL, M_WARN ))
+ if ( !get_ipv6_addr( r6o->prefix, &r6->network, &r6->netbits, M_WARN ))
goto fail;
/* gateway */
@@ -648,7 +649,7 @@ init_route_list (struct route_list *rl,
bool warned = false;
for (i = 0; i < opt->n; ++i)
{
- struct addrinfo* netlist;
+ struct addrinfo* netlist = NULL;
struct route_ipv4 r;
if (!init_route (&r,
@@ -675,8 +676,9 @@ init_route_list (struct route_list *rl,
}
}
}
- freeaddrinfo(netlist);
}
+ if (netlist)
+ freeaddrinfo(netlist);
}
rl->n = j;
}
@@ -1622,6 +1624,13 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int fla
#elif defined (WIN32)
+ if (win32_version_info() != WIN_XP)
+ {
+ struct buffer out = alloc_buf_gc (64, &gc);
+ 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",
get_win_sys_path(),
@@ -1953,6 +1962,13 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigne
#elif defined (WIN32)
+ if (win32_version_info() != WIN_XP)
+ {
+ struct buffer out = alloc_buf_gc (64, &gc);
+ 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",
get_win_sys_path(),
@@ -3195,7 +3211,7 @@ test_local_addr (const in_addr_t addr, const struct route_gateway_info *rgi)
{
struct gc_arena gc = gc_new ();
const in_addr_t nonlocal_netmask = 0x80000000L; /* routes with netmask <= to this are considered non-local */
- bool ret = TLA_NONLOCAL;
+ int ret = TLA_NONLOCAL;
/* get full routing table */
const MIB_IPFORWARDTABLE *rt = get_windows_routing_table (&gc);