From: james Date: Sat, 26 Jan 2008 04:43:13 +0000 (+0000) Subject: Fixup null interface on close, don't use ip addr flush X-Git-Tag: v2.1_rc7~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4fa5b758340447c0bc24a54793bce3a0bb149648;p=thirdparty%2Fopenvpn.git Fixup null interface on close, don't use ip addr flush (Alon Bar-Lev). git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@2683 e7ae566f-a301-0410-adde-c780ea21d3b5 --- diff --git a/tun.c b/tun.c index 7bbcea622..39c672241 100644 --- 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);