$OpenBSD: patch-tun_c,v 1.1 2012/01/23 18:07:21 sthen Exp $
--- tun.c.orig	Tue Dec 13 16:58:56 2011
+++ tun.c	Thu Jan 12 09:04:48 2012
@@ -776,7 +776,19 @@ do_ifconfig (struct tuntap *tt,
 			  tun_mtu
 			  );
       else
-	argv_printf (&argv,
+      {
+        if (tt->topology == TOP_SUBNET)
+          argv_printf (&argv,
+                              "%s %s %s %s netmask %s mtu %d up",
+                              IFCONFIG_PATH,
+                              actual,
+                              ifconfig_local,
+                              ifconfig_local,
+                              ifconfig_remote_netmask,
+                              tun_mtu
+                              );
+        else
+	  argv_printf (&argv,
 			  "%s %s %s netmask %s mtu %d broadcast %s link0",
 			  IFCONFIG_PATH,
 			  actual,
@@ -785,9 +797,22 @@ do_ifconfig (struct tuntap *tt,
 			  tun_mtu,
 			  ifconfig_broadcast
 			  );
+      }
       argv_msg (M_INFO, &argv);
       openvpn_execve_check (&argv, es, S_FATAL, "OpenBSD 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(TARGET_NETBSD)
 
