#!/bin/bash # # init script for the Ethernet Bridge filter tables # # Written by Dag Wieers # Modified by Rok Papez # Bart De Schuymer # # chkconfig: - 15 85 # description: Ethernet Bridge filtering tables # # config: __SYSCONFIG__/ebtables (text) # __SYSCONFIG__/ebtables. (binary) source /etc/init.d/functions source /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x __EXEC_PATH__/ebtables ] || exit 1 [ -x __EXEC_PATH__/ebtables-save ] || exit 1 [ -x __EXEC_PATH__/ebtables-restore ] || exit 1 RETVAL=0 prog="ebtables" desc="Ethernet bridge filtering" umask 0077 #default configuration EBTABLES_TEXT_FORMAT="yes" EBTABLES_BINARY_FORMAT="yes" EBTABLES_MODULES_UNLOAD="yes" EBTABLES_SAVE_ON_STOP="no" EBTABLES_SAVE_ON_RESTART="no" EBTABLES_SAVE_COUNTER="no" config=__SYSCONFIG__/$prog-config [ -f "$config" ] && . "$config" start() { echo -n $"Starting $desc ($prog): " if [ "$EBTABLES_BINARY_FORMAT" = "yes" ]; then for table in $(ls __SYSCONFIG__/ebtables.* | sed s/.*ebtables.//); do __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table --atomic-commit || RETVAL=1 done else __EXEC_PATH__/ebtables-restore < /etc/sysconfig/ebtables || RETVAL=1 fi if [ $RETVAL -eq 0 ]; then success "$prog startup" rm -f /var/lock/subsys/$prog else failure "$prog startup" fi echo } stop() { echo -n $"Stopping $desc ($prog): " for table in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do __EXEC_PATH__/ebtables -t $table --init-table || RETVAL=1 done if [ "$EBTABLES_MODULES_UNLOAD" = "yes" ]; then for mod in $(grep -E '^(ebt|ebtable)_' /proc/modules | cut -f1 -d' ') ebtables; do rmmod $mod 2> /dev/null done fi if [ $RETVAL -eq 0 ]; then success "$prog shutdown" rm -f /var/lock/subsys/$prog else failure "$prog shutdown" fi echo } restart() { stop start } save() { echo -n $"Saving $desc ($prog): " if [ "$EBTABLES_TEXT_FORMAT" = "yes" ]; then if [ -e __SYSCONFIG__/ebtables ]; then chmod 0600 __SYSCONFIG__/ebtables mv -f __SYSCONFIG__/ebtables __SYSCONFIG__/ebtables.save fi __EXEC_PATH__/ebtables-save > __SYSCONFIG__/ebtables || RETVAL=1 fi if [ "$EBTABLES_BINARY_FORMAT" = "yes" ]; then rm -f __SYSCONFIG__/ebtables.*.save for oldtable in $(ls __SYSCONFIG__/ebtables.*); do if [ "$oldtable" != __SYSCONFIG__/ebtables.save ]; then chmod 0600 $oldtable mv -f $oldtable $oldtable.save fi done for table in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table --atomic-save || RETVAL=1 if [ "$EBTABLES_SAVE_COUNTER" = "no" ]; then __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table -Z || RETVAL=1 fi done fi if [ $RETVAL -eq 0 ]; then success "$prog saved" else failure "$prog saved" fi echo } case "$1" in start) start ;; stop) [ "$IPTABLES_SAVE_ON_STOP" = "yes" ] && save stop ;; restart|reload) [ "$IPTABLES_SAVE_ON_RESTART" = "yes" ] && save restart ;; condrestart) [ -e /var/lock/subsys/$prog ] && restart RETVAL=$? ;; save) save ;; status) __EXEC_PATH__/ebtables-save RETVAL=$? ;; *) echo $"Usage $0 {start|stop|restart|condrestart|save|status}" RETVAL=1 esac exit $RETVAL