diff options
-rwxr-xr-x | scripts/vyatta-tunnel-cleanup | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/scripts/vyatta-tunnel-cleanup b/scripts/vyatta-tunnel-cleanup index 41b34922..2113d3ba 100755 --- a/scripts/vyatta-tunnel-cleanup +++ b/scripts/vyatta-tunnel-cleanup @@ -3,27 +3,36 @@ # This script gets run after tunnels have been deleted, it removes # the underlying tunnel link, if all tunnels of that type are gone. +use strict; +use warnings; +use lib "/opt/vyatta/share/perl5"; +use Vyatta::Config; + +# encapsulations and special network device +my %encapsulation = ( + 'gre' => 'gre0', + 'ipip' => 'tunl0', + 'sit' => 'sit0', +); + # Create map of encapsulations still in use my $config = new Vyatta::Config; $config->setLevel("interfaces tunnel"); + my %tunnel; -foreach my $tun ($config->listNodes()) { - my $mode = $config->returnValue("$tun encapsulation"); - $tunnel{$mode} = 1; +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}; +foreach my $type ( keys %encapsulation ) { + # skip if tunnel is still in use + next if $tunnel{$type}; - my $dev = $tunnels{$type}; - next unless ( -d "/sys/class/net/$dev" ); + # skip if pseudo device is already gone + my $dev = $encapsulation{$type}; + next unless ( -d "/sys/class/net/$dev" ); - system("ip link del $dev") == 0 - or die "Can't delete $dev\n"; + system("ip link del $dev") == 0 + or warn "Can't delete $dev\n"; } |