]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
"topology subnet" fix for FreeBSD (Benoit Bourdin).
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Wed, 5 Apr 2006 06:28:19 +0000 (06:28 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Wed, 5 Apr 2006 06:28:19 +0000 (06:28 +0000)
git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@986 e7ae566f-a301-0410-adde-c780ea21d3b5

tun.c

diff --git a/tun.c b/tun.c
index 07f6ea40bc90a410662720ecc7f94c99924db2ab..26d7ceffa879bb2aaf907c7ebf5075ae7e4b6d23 100644 (file)
--- 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)
       {
        /*