From c1c27fe32ae25edbca3bd2217ff00097e7de5f38 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 5 Apr 2006 06:28:19 +0000 Subject: "topology subnet" fix for FreeBSD (Benoit Bourdin). git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@986 e7ae566f-a301-0410-adde-c780ea21d3b5 --- tun.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tun.c b/tun.c index 07f6ea4..26d7cef 100644 --- a/tun.c +++ b/tun.c @@ -795,19 +795,42 @@ do_ifconfig (struct tuntap *tt, ifconfig_remote_netmask, tun_mtu ); - else - openvpn_snprintf (command_line, sizeof (command_line), + else { + if (tt->topology == TOP_SUBNET) + openvpn_snprintf (command_line, sizeof (command_line), + IFCONFIG_PATH " %s %s %s netmask %s mtu %d up", + actual, + ifconfig_local, + ifconfig_local, + ifconfig_remote_netmask, + tun_mtu + ); + else + openvpn_snprintf (command_line, sizeof (command_line), IFCONFIG_PATH " %s %s netmask %s mtu %d up", actual, ifconfig_local, ifconfig_remote_netmask, tun_mtu ); + } msg (M_INFO, "%s", command_line); system_check (command_line, es, S_FATAL, "FreeBSD ifconfig failed"); tt->did_ifconfig = true; + /* Add a network route for the local tun interface */ + if (!tun && tt->topology == TOP_SUBNET) + { + struct route r; + CLEAR (r); + r.defined = true; + r.network = tt->local & tt->remote_netmask; + r.netmask = tt->remote_netmask; + r.gateway = tt->local; + add_route (&r, tt, 0, es); + } + #elif defined (WIN32) { /* -- cgit v1.2.3