#!/bin/sh
#
# init script for the Ethernet Bridge filter tables
#
# chkconfig: - 15 85
# description: Ethernet Bridge filtering tables
#
# config: /etc/sysconfig/ebtables (text)
# /etc/sysconfig/ebtables.
(binary)
EBTABLES_CONFIG=/etc/sysconfig/ebtables
if [ ! -f $EBTABLES_CONFIG ]; then
case "$1" in
start|restart|force-reload)
exit 0
;;
esac
fi
# Source 'em up
. /etc/rc.d/init.d/functions
#default configuration
EBTABLES_TEXT_FORMAT="yes"
EBTABLES_BINARY_FORMAT="yes"
EBTABLES_SAVE_ON_STOP="no"
EBTABLES_SAVE_ON_RESTART="no"
EBTABLES_SAVE_COUNTER="no"
[ -f /etc/sysconfig/ebtables-config ] && . /etc/sysconfig/ebtables-config
start() {
# don't do squat if we don't have the config file
if [ -f $EBTABLES_CONFIG ]; then
show "Starting Ethernet bridge filtering (ebtables)"
if is_yes "$EBTABLES_BINARY_FORMAT"; then
for table in $(ls /etc/sysconfig/ebtables.* 2>/dev/null | sed -e 's/.*ebtables\.//' -e '/save/d' ); do
/usr/sbin/ebtables -t $table --atomic-file /etc/sysconfig/ebtables.$table --atomic-commit || RETVAL=1
done
else
/usr/sbin/ebtables-restore < /etc/sysconfig/ebtables || RETVAL=1
fi
if [ $RETVAL -eq 0 ]; then
ok
touch /var/lock/subsys/ebtables
else
fail
fi
fi
}
stop() {
show "Stopping Ethernet bridge filtering (ebtables)"
for table in $(grep '^ebtable_' /proc/modules | sed -e 's/ebtable_\([^ ]*\).*/\1/'); do
/usr/sbin/ebtables -t $table --init-table || RETVAL=1
done
if [ $RETVAL -eq 0 ]; then
ok
rm -f /var/lock/subsys/ebtables
else
fail
fi
}
restart() {
stop
start
}
save() {
show "Saving Ethernet bridge filtering (ebtables)"
if is_yes "$EBTABLES_TEXT_FORMAT"; then
if [ -e /etc/sysconfig/ebtables ]; then
chmod 0600 /etc/sysconfig/ebtables
mv -f /etc/sysconfig/ebtables /etc/sysconfig/ebtables.save
fi
/usr/sbin/ebtables-save > /etc/sysconfig/ebtables || RETVAL=1
fi
if is_yes "$EBTABLES_BINARY_FORMAT"; then
rm -f /etc/sysconfig/ebtables.*.save
for oldtable in $(ls /etc/sysconfif/ebtables.* 2>/dev/null | grep -vF 'ebtables.save'); do
chmod 0600 $oldtable
mv -f $oldtable $oldtable.save
done
for table in $(grep '^ebtable_' /proc/modules | sed -e 's/ebtable_\([^ ]*\).*/\1/'); do
/usr/sbin/ebtables -t $table --atomic-file /etc/sysconfig/ebtables.$table --atomic-save || RETVAL=1
if [ "$EBTABLES_SAVE_COUNTER" = "no" ]; then
/usr/sbin/ebtables -t $table --atomic-file /etc/sysconfig/ebtables.$table -Z || RETVAL=1
fi
done
fi
if [ $RETVAL -eq 0 ]; then
ok
else
fail
fi
}
case "$1" in
start)
start
;;
stop)
is_yes "$EBTABLES_SAVE_ON_STOP" && save
stop
;;
restart|reload)
is_yes "$EBTABLES_SAVE_ON_RESTART" && save
restart
;;
condrestart)
[ -e /var/lock/subsys/ebtables ] && restart
RETVAL=$?
;;
save)
save
;;
status)
for table in $(grep '^ebtable_' /proc/modules | sed -e 's/ebtable_\([^ ]*\).*/\1/'); do
/usr/sbin/ebtables -t $table --list
done
;;
*)
msg_usage "$0 {start|stop|restart|reload|condrestart|save|status}"
RETVAL=1
esac
exit $RETVAL