summaryrefslogtreecommitdiff
path: root/scripts/vyatta-tunnel-cleanup
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/vyatta-tunnel-cleanup')
-rw-r--r--scripts/vyatta-tunnel-cleanup29
1 files changed, 29 insertions, 0 deletions
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";
+}