#!/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 = "@sbindir@/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/;
        } else {
            $line =~ s/ $//;
        }
        $rules = $rules . "-A $chain $line\n";
    }

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

unless (-x $ebtables) { exit -1 };
print "# Generated by ebtables-save v$version (legacy) 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);
}
