#!/bin/bash # compat for removed initscripts dependency success() { echo "[ OK ]" return 0 } failure() { echo "[FAILED]" return 1 } # internal variables EBTABLES_CONFIG=/etc/sysconfig/ebtables-config EBTABLES_DATA=/etc/sysconfig/ebtables EBTABLES_TABLES="filter nat" if ebtables --version | grep -q '(legacy)'; then EBTABLES_TABLES+=" broute" fi VAR_SUBSYS_EBTABLES=/var/lock/subsys/ebtables # ebtables-config defaults EBTABLES_SAVE_ON_STOP="no" EBTABLES_SAVE_COUNTER="no" # load config if existing [ -f "$EBTABLES_CONFIG" ] && . "$EBTABLES_CONFIG" initialize() { local ret=0 for table in $EBTABLES_TABLES; do ebtables -t $table --init-table || ret=1 done return $ret } sanitize_dump() { local drop=false export EBTABLES_TABLES cat $1 | while read line; do case $line in \**) drop=false local table="${line#\*}" local found=false for t in $EBTABLES_TABLES; do if [[ $t == "$table" ]]; then found=true break fi done $found || drop=true ;; esac $drop || echo "$line" done } start() { if [ -f $EBTABLES_DATA ]; then echo -n $"ebtables: loading ruleset from $EBTABLES_DATA: " sanitize_dump $EBTABLES_DATA | ebtables-restore else echo -n $"ebtables: no stored ruleset, initializing empty tables: " initialize fi local ret=$? touch $VAR_SUBSYS_EBTABLES return $ret } save() { echo -n $"ebtables: saving active ruleset to $EBTABLES_DATA: " export EBTABLES_SAVE_COUNTER ebtables-save >$EBTABLES_DATA && success || failure } case $1 in start) [ -f "$VAR_SUBSYS_EBTABLES" ] && exit 0 start && success || failure RETVAL=$? ;; stop) [ "x$EBTABLES_SAVE_ON_STOP" = "xyes" ] && save echo -n $"ebtables: stopping firewall: " initialize && success || failure RETVAL=$? rm -f $VAR_SUBSYS_EBTABLES ;; save) save ;; *) echo "usage: ${0##*/} {start|stop|save}" >&2 RETVAL=2 ;; esac exit $RETVAL