]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fixup null interface on close, don't use ip addr flush
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Sat, 26 Jan 2008 04:43:13 +0000 (04:43 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Sat, 26 Jan 2008 04:43:13 +0000 (04:43 +0000)
(Alon Bar-Lev).

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

tun.c

diff --git a/tun.c b/tun.c
index 7bbcea622bb23409ee07b9d2d3a6c0597295d862..39c672241f940cc47c57676391391fd92231ee93 100644 (file)
--- a/tun.c
+++ b/tun.c
@@ -1221,17 +1221,24 @@ close_tun (struct tuntap *tt)
   if (tt)
     {
 #ifdef CONFIG_FEATURE_IPROUTE
-       char command_line[256];
-       /*
-        * Flush IP configuration for the device
-        */
-       openvpn_snprintf (command_line, sizeof (command_line),
-                         "%s addr flush dev %s",
+       if (tt->type != DEV_TYPE_NULL && tt->did_ifconfig)
+         {
+           char command_line[256];
+           struct gc_arena gc = gc_new ();
+
+           openvpn_snprintf (command_line, sizeof (command_line),
+                         "%s addr del dev %s local %s peer %s",
                          iproute_path,
-                         tt->actual_name
+                         tt->actual_name,
+                         print_in_addr_t (tt->local, 0, &gc),
+                         print_in_addr_t (tt->remote_netmask, 0, &gc)
                          );
-       msg (M_INFO, "%s", command_line);
-       system_check (command_line, NULL, S_FATAL, "Linux ip flush failed");
+
+           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);