]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Cleanup IP address for persistence interfaces for tap and also using
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Sun, 17 Feb 2008 07:05:49 +0000 (07:05 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Sun, 17 Feb 2008 07:05:49 +0000 (07:05 +0000)
ifconfig, gentoo#209055 (Alon Bar-Lev).

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@2748 e7ae566f-a301-0410-adde-c780ea21d3b5

tun.c

diff --git a/tun.c b/tun.c
index 39c672241f940cc47c57676391391fd92231ee93..349a4dec239e967d8392e85fc83fe8d0421cccd3 100644 (file)
--- a/tun.c
+++ b/tun.c
@@ -1220,26 +1220,44 @@ close_tun (struct tuntap *tt)
 {
   if (tt)
     {
-#ifdef CONFIG_FEATURE_IPROUTE
        if (tt->type != DEV_TYPE_NULL && tt->did_ifconfig)
          {
            char command_line[256];
            struct gc_arena gc = gc_new ();
 
+#ifdef CONFIG_FEATURE_IPROUTE
+           if (is_tun_p2p (tt))
+             {
+               openvpn_snprintf (command_line, sizeof (command_line),
+                       "%s addr del dev %s local %s peer %s",
+                       iproute_path,
+                       tt->actual_name,
+                       print_in_addr_t (tt->local, 0, &gc),
+                       print_in_addr_t (tt->remote_netmask, 0, &gc)
+                       );
+             }
+           else
+             {
+               openvpn_snprintf (command_line, sizeof (command_line),
+                       "%s addr del dev %s %s/%d",
+                       iproute_path,
+                       tt->actual_name,
+                       print_in_addr_t (tt->local, 0, &gc),
+                       count_netmask_bits(print_in_addr_t (tt->remote_netmask, 0, &gc))
+                       );
+             }
+#else
            openvpn_snprintf (command_line, sizeof (command_line),
-                         "%s addr del dev %s local %s peer %s",
-                         iproute_path,
-                         tt->actual_name,
-                         print_in_addr_t (tt->local, 0, &gc),
-                         print_in_addr_t (tt->remote_netmask, 0, &gc)
-                         );
+                       IFCONFIG_PATH "%s addr 0.0.0.0",
+                       tt->actual_name
+                       );
+#endif
 
            msg (M_INFO, "%s", command_line);
            system_check (command_line, NULL, S_FATAL, "Linux ip addr del failed");
 
            gc_free (&gc);
          }
-#endif
       close_tun_generic (tt);
       free (tt);
     }