From fb1bf8a2eefbdb467a948688ab388628455ef480 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 19 Nov 2010 12:40:55 -0800 Subject: Cleanup tunnel slave device on last delete Need to leave gre0 around for case of multiple tunnels --- scripts/vyatta-tunnel-cleanup | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 scripts/vyatta-tunnel-cleanup (limited to 'scripts') diff --git a/scripts/vyatta-tunnel-cleanup b/scripts/vyatta-tunnel-cleanup new file mode 100644 index 00000000..fdca80a3 --- /dev/null +++ b/scripts/vyatta-tunnel-cleanup @@ -0,0 +1,29 @@ +#! /usr/bin/perl + +# This script gets run after tunnels have been deleted, it removes +# the underlying tunnel link, if all tunnels of that type are gone. + +# Create map of encapsulations still in use +my $confg = new Vyatta::Config; +$config->setLevel("interfaces tunnel"); +my %tunnel; +foreach my $tun ($config->listNodes()) { + my $mode = $config->returnValue("$tun encapsulation"); + $tunnel{$mode} = 1; +} + +my %encapsulation = ( + 'gre' => 'gre0', + 'ipip' => 'tunl0', + 'sit' => 'sit0', +); + +foreach my $type (keys %encapsulation) { + next if $tunnel{$type}; + + my $dev = $tunnels{$type}; + next unless ( -d "/sys/class/net/$dev" ); + + system("ip link del $dev") == 0 + or die "Can't delete $dev\n"; +} -- cgit v1.2.3