You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
1.9 KiB
104 lines
1.9 KiB
#!/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
|
|
|