#!/usr/bin/perl -w
#
#
# A script that generates text output of the ebtables rules.
# Similar to iptables-save.
#
# It can be used to store active configuration to /etc/sysconfig/ebtables

use strict;
my $table;
my $ebtables = "__EXEC_PATH__/ebtables";
my $cnt = "";
my $version = "1.0";
my $table_name;

# ========================================================
# Process filter table
# ========================================================
sub process_table {
    my $chain = "";
    my $rules = "";
    my $chains = "";
    my $line = "";

    foreach $line (split("\n",$_[0])) {
        if ($line =~ m/Bridge table: (.*)/) {
            print "*$1\n";
            next;
        }
        if ($line =~ m/Bridge chain: (.*?), entries:.* policy: (.*)/) {
            $chains = $chains . ":$1 $2\n";
            $chain = $1;
            next;
        }
        if ($line =~ m/^$/) {
            next;
        }
        if ($cnt eq "--Lc") {
            $line =~ s/, pcnt = (.*) -- bcnt = (.*)/-c $1 $2/;
        }
        $rules = $rules . "-A $chain $line\n";
    }

    print $chains;
    print $rules;
    print "\n";
}
# ========================================================

unless (-x $ebtables) { exit -1 };
print "# Generated by ebtables-save v$version on " . `date`;
if (defined($ENV{'EBTABLES_SAVE_COUNTER'}) && $ENV{'EBTABLES_SAVE_COUNTER'} eq "yes") {
    $cnt = "--Lc";
}
foreach $table_name (split("\n", `grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//`)) {
    $table =`$ebtables -t $table_name -L $cnt`;
    unless ($? == 0) { print $table; exit -1 };
    &process_table($table);
}
