From 2aae5c00bc261150e7d3583ecd2447e7934daccc Mon Sep 17 00:00:00 2001 From: Bart De Schuymer Date: Tue, 14 Jun 2005 19:17:48 +0000 Subject: Rok Papez --- userspace/ebtables2/ebtables-restore | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 userspace/ebtables2/ebtables-restore (limited to 'userspace/ebtables2/ebtables-restore') diff --git a/userspace/ebtables2/ebtables-restore b/userspace/ebtables2/ebtables-restore new file mode 100644 index 0000000..171a80c --- /dev/null +++ b/userspace/ebtables2/ebtables-restore @@ -0,0 +1,62 @@ +#!/usr/bin/perl -w +# +# +# A script that imports text ebtables rules. Similar to iptables-restore. +# It can be used to restore configuration from /etc/sysconfig/ebtables. +# + +use strict; +my $ebtables = "/sbin/ebtables"; +my $table; +my $rc; +my $line; + +# ============================== +# Check table +# Creates user chains. +# ============================== +sub check_chain { + if ($table eq "filter") { + if ($_[1] eq "INPUT") { return; } + if ($_[1] eq "FORWARD") { return; } + if ($_[1] eq "OUTPUT") { return; } + } + if ($table eq "nat") { + if ($_[1] eq "PREROUTING") { return; } + if ($_[1] eq "POSTROUTING") { return; } + if ($_[1] eq "OUTPUT") { return; } + } + if ($table eq "broute") { + if ($_[1] eq "BROUTING") { return; } + } + $rc = `$ebtables -t $_[0] -N $_[1]`; + unless($? == 0) {print "ERROR: $rc\n"; exit -1}; +} +# ============================== + +unless (-x $ebtables) { print "ERROR: $ebtables isn't executable\n"; exit -1; }; +$rc = `$ebtables -t filter --init-table`; +unless($? == 0) { print "ERROR: $rc\n"; exit -1 }; +$rc = `$ebtables -t nat --init-table`; +unless($? == 0) { print "ERROR: $rc\n"; exit -1 }; +$rc = `$ebtables -t broute --init-table`; +unless($? == 0) { print "ERROR: $rc\n"; exit -1 }; + +$line = 0; +while(<>) { + $line++; + if(m/^#/) { next; }; + if(m/^$/) { next; }; + if(m/^\*(.*)/) { + $table = $1; + next; + } + if(m/^\:(.*?)\s(.*)/) { + &check_chain($table,$1); + $rc = `$ebtables -t $table -P $1 $2`; + unless($? == 0) {print "ERROR(line $line): $rc\n"; exit -1}; + next; + } + $rc = `$ebtables -t $table $_`; + unless($? == 0) {print "ERROR(line $line): $rc\n"; exit -1}; +} -- cgit v1.2.3