diff options
Diffstat (limited to 'community/ebtables/ebtables.rc')
-rw-r--r-- | community/ebtables/ebtables.rc | 135 |
1 files changed, 19 insertions, 116 deletions
diff --git a/community/ebtables/ebtables.rc b/community/ebtables/ebtables.rc index 3a889b914..a845449fe 100644 --- a/community/ebtables/ebtables.rc +++ b/community/ebtables/ebtables.rc @@ -1,128 +1,31 @@ #!/bin/bash -# Credits to: -# Sebastien Luttringer <seblu+arch@seblu.net> -# Bart De Schuymer <bdschuym@pandora.be> -# Rok Papez <rok.papez@arnes.si> -# Dag Wieers <dag@wieers.com> - . /etc/rc.conf . /etc/rc.d/functions - -#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" - -[[ -r "/etc/conf.d/ebtables" ]] && . "/etc/conf.d/ebtables" - -RETVAL=0 - -start() { - stat_busy "Starting ebtables" - ! ck_daemon ebtables && stat_done && RETVAL=0 && return - if [[ "$EBTABLES_BINARY_FORMAT" = yes ]]; then - for table in $(ls /etc/ebtables/ebtables.* 2>/dev/null | sed -e 's/.*ebtables\.//' -e '/save/d' ); do - /usr/sbin/ebtables -t ${table} --atomic-file /etc/ebtables/ebtables.${table} --atomic-commit || RETVAL=1 - done - elif [[ "$EBTABLES_TEXT_FORMAT" = "yes" ]]; then - [[ ! -r /etc/ebtables/ebtables ]] && :>/etc/ebtables/ebtables - /usr/sbin/ebtables-restore </etc/ebtables/ebtables || RETVAL=1 - else - RETVAL=1 - fi - - if (( RETVAL == 0 )); then - stat_done - add_daemon ebtables - else - stat_fail - fi -} - -stop() { - stat_busy "Stopping ebtables" - ck_daemon ebtables && stat_done && RETVAL=0 && return - for table in $(grep '^ebtable_' /proc/modules | sed -e 's/ebtable_\([^ ]*\).*/\1/'); do - /usr/sbin/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 - /sbin/rmmod $mod 2> /dev/null - done - fi - - if (( RETVAL == 0 )); then - rm_daemon ebtables - stat_done - else - stat_fail - fi -} - -restart() { - stop - sleep 1 - start -} - -save() { - stat_busy "Saving ebtables" - if [[ "$EBTABLES_TEXT_FORMAT" = yes ]]; then - if [[ -r /etc/ebtables/ebtables ]]; then - mv -f /etc/ebtables/ebtables /etc/ebtables/ebtables.save - fi - /usr/sbin/ebtables-save >/etc/ebtables/ebtables || RETVAL=1 - fi - if [[ "$EBTABLES_BINARY_FORMAT" = yes ]]; then - rm -f /etc/ebtables/ebtables.*.save - for oldtable in $(ls /etc/ebtables/ebtables.* 2>/dev/null | grep -vF 'ebtables.save'); do - mv -f $oldtable $oldtable.save - done - for table in $(grep '^ebtable_' /proc/modules | sed -e 's/ebtable_\([^ ]*\).*/\1/'); do - :> /etc/ebtables/ebtables.$table - /usr/sbin/ebtables -t $table --atomic-file /etc/ebtables/ebtables.$table --atomic-save || RETVAL=1 - if [[ "$EBTABLES_SAVE_COUNTER" = no ]]; then - /usr/sbin/ebtables -t $table --atomic-file /etc/ebtables/ebtables.$table -Z || RETVAL=1 - fi - done - fi - - (( RETVAL == 0 )) && stat_done || stat_fail -} +. /etc/conf.d/${0##*/} case "$1" in start) - start - ;; + stat_busy 'Loading ebtables rules' + ebtables-restore < "$CONFIG_FILE" && + add_daemon ${0##*/} && stat_done || stat_die + ;; stop) - [[ "$EBTABLES_SAVE_ON_STOP" = yes ]] && save - stop - ;; - restart|reload) - [[ "$EBTABLES_SAVE_ON_RESTART" = yes ]] && save - restart - ;; - condrestart) - ! ck_daemon ebtables && restart - RETVAL=$? - ;; + [[ $SAVE_ON_STOP =~ [yY][eE][sS] ]] && $0 save + status 'Clearing ebtables rules' ebtables -F && rm_daemon ${0##*/} || exit 1 + ;; + restart) + $0 stop + $0 start + ;; save) - save - ;; - status) - /usr/sbin/ebtables-save - RETVAL=$? - ;; + stat_busy 'Saving ebtables rules' + ebtables-save > "$CONFIG_FILE" && stat_done || stat_die + ;; *) - echo "Usage $0 {start|stop|restart|condrestart|save|status}" - RETVAL=1 + echo "usage: ${0##*/} {start|stop|restart|save}" >&2 + exit 1 + ;; esac -exit $RETVAL - -# vim:set ts=2 sw=2 ft=sh noet: +# vim:set ts=2 sw=2 ft=sh et: |