blob: 5d1b612fb06949daa225b783009d5de8e2f6d5aa [file] [log] [blame]
Bart De Schuymere8b0a252005-06-14 19:20:43 +00001#!/bin/bash
2#
3# init script for the Ethernet Bridge filter tables
4#
Bart De Schuymer50441e92005-08-30 21:20:55 +00005# Written by Dag Wieers <dag@wieers.com>
6# Modified by Rok Papez <rok.papez@arnes.si>
7# Bart De Schuymer <bdschuym@pandora.be>
Bart De Schuymere8b0a252005-06-14 19:20:43 +00008#
9# chkconfig: - 15 85
10# description: Ethernet Bridge filtering tables
11#
Bart De Schuymer50441e92005-08-30 21:20:55 +000012# config: __SYSCONFIG__/ebtables (text)
13# __SYSCONFIG__/ebtables.<table> (binary)
Bart De Schuymere8b0a252005-06-14 19:20:43 +000014
15source /etc/init.d/functions
16source /etc/sysconfig/network
17
18# Check that networking is up.
19[ ${NETWORKING} = "no" ] && exit 0
20
Bart De Schuymer50441e92005-08-30 21:20:55 +000021[ -x __EXEC_PATH__/ebtables ] || exit 1
22[ -x __EXEC_PATH__/ebtables-save ] || exit 1
23[ -x __EXEC_PATH__/ebtables-restore ] || exit 1
Bart De Schuymere8b0a252005-06-14 19:20:43 +000024
25RETVAL=0
26prog="ebtables"
27desc="Ethernet bridge filtering"
Bart De Schuymer9d1e3ff2005-11-12 22:22:39 +000028umask 0077
Bart De Schuymere8b0a252005-06-14 19:20:43 +000029
Bart De Schuymer50441e92005-08-30 21:20:55 +000030#default configuration
31EBTABLES_TEXT_FORMAT="yes"
32EBTABLES_BINARY_FORMAT="yes"
33EBTABLES_MODULES_UNLOAD="yes"
34EBTABLES_SAVE_ON_STOP="no"
35EBTABLES_SAVE_ON_RESTART="no"
36EBTABLES_SAVE_COUNTER="no"
37
38config=__SYSCONFIG__/$prog-config
39[ -f "$config" ] && . "$config"
40
Bart De Schuymere8b0a252005-06-14 19:20:43 +000041start() {
42 echo -n $"Starting $desc ($prog): "
Bart De Schuymer50441e92005-08-30 21:20:55 +000043 if [ "$EBTABLES_BINARY_FORMAT" = "yes" ]; then
Bart De Schuymerf8a95ce2005-10-25 18:36:11 +000044 for table in $(ls __SYSCONFIG__/ebtables.* | sed s/.*ebtables.//); do
Bart De Schuymer17b3f092005-10-25 18:08:09 +000045 __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table --atomic-commit || RETVAL=1
Bart De Schuymer50441e92005-08-30 21:20:55 +000046 done
47 else
48 __EXEC_PATH__/ebtables-restore < /etc/sysconfig/ebtables || RETVAL=1
49 fi
Bart De Schuymere8b0a252005-06-14 19:20:43 +000050
51 if [ $RETVAL -eq 0 ]; then
52 success "$prog startup"
53 rm -f /var/lock/subsys/$prog
54 else
55 failure "$prog startup"
56 fi
Bart De Schuymere8b0a252005-06-14 19:20:43 +000057 echo
Bart De Schuymere8b0a252005-06-14 19:20:43 +000058}
59
60stop() {
61 echo -n $"Stopping $desc ($prog): "
Bart De Schuymer50441e92005-08-30 21:20:55 +000062 for table in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do
63 __EXEC_PATH__/ebtables -t $table --init-table || RETVAL=1
Bart De Schuymere8b0a252005-06-14 19:20:43 +000064 done
65
Bart De Schuymer17b3f092005-10-25 18:08:09 +000066 if [ "$EBTABLES_MODULES_UNLOAD" = "yes" ]; then
Bart De Schuymer50441e92005-08-30 21:20:55 +000067 for mod in $(grep -E '^(ebt|ebtable)_' /proc/modules | cut -f1 -d' ') ebtables; do
Bart De Schuymerf8a95ce2005-10-25 18:36:11 +000068 rmmod $mod 2> /dev/null
Bart De Schuymer50441e92005-08-30 21:20:55 +000069 done
70 fi
71
Bart De Schuymere8b0a252005-06-14 19:20:43 +000072 if [ $RETVAL -eq 0 ]; then
73 success "$prog shutdown"
Bart De Schuymer28fa0902005-10-25 17:53:18 +000074 rm -f /var/lock/subsys/$prog
Bart De Schuymere8b0a252005-06-14 19:20:43 +000075 else
76 failure "$prog shutdown"
77 fi
Bart De Schuymere8b0a252005-06-14 19:20:43 +000078 echo
Bart De Schuymere8b0a252005-06-14 19:20:43 +000079}
80
81restart() {
82 stop
83 start
84}
85
86save() {
87 echo -n $"Saving $desc ($prog): "
Bart De Schuymer50441e92005-08-30 21:20:55 +000088 if [ "$EBTABLES_TEXT_FORMAT" = "yes" ]; then
Bart De Schuymer9d1e3ff2005-11-12 22:22:39 +000089 if [ -e __SYSCONFIG__/ebtables ]; then
90 chmod 0600 __SYSCONFIG__/ebtables
91 mv -f __SYSCONFIG__/ebtables __SYSCONFIG__/ebtables.save
92 fi
93 __EXEC_PATH__/ebtables-save > __SYSCONFIG__/ebtables || RETVAL=1
Bart De Schuymer50441e92005-08-30 21:20:55 +000094 fi
95 if [ "$EBTABLES_BINARY_FORMAT" = "yes" ]; then
Bart De Schuymer9d1e3ff2005-11-12 22:22:39 +000096 rm -f __SYSCONFIG__/ebtables.*.save
97 for oldtable in $(ls __SYSCONFIG__/ebtables.*); do
98 if [ "$oldtable" != __SYSCONFIG__/ebtables.save ]; then
99 chmod 0600 $oldtable
100 mv -f $oldtable $oldtable.save
101 fi
102 done
Bart De Schuymer17b3f092005-10-25 18:08:09 +0000103 for table in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do
104 __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table --atomic-save || RETVAL=1
Bart De Schuymer50441e92005-08-30 21:20:55 +0000105 if [ "$EBTABLES_SAVE_COUNTER" = "no" ]; then
Bart De Schuymer17b3f092005-10-25 18:08:09 +0000106 __EXEC_PATH__/ebtables -t $table --atomic-file __SYSCONFIG__/ebtables.$table -Z || RETVAL=1
Bart De Schuymer50441e92005-08-30 21:20:55 +0000107 fi
108 done
109 fi
Bart De Schuymere8b0a252005-06-14 19:20:43 +0000110
111 if [ $RETVAL -eq 0 ]; then
112 success "$prog saved"
113 else
114 failure "$prog saved"
115 fi
116 echo
117}
118
119case "$1" in
120 start)
121 start
122 ;;
123 stop)
Bart De Schuymer50441e92005-08-30 21:20:55 +0000124 [ "$IPTABLES_SAVE_ON_STOP" = "yes" ] && save
Bart De Schuymere8b0a252005-06-14 19:20:43 +0000125 stop
126 ;;
127 restart|reload)
Bart De Schuymer50441e92005-08-30 21:20:55 +0000128 [ "$IPTABLES_SAVE_ON_RESTART" = "yes" ] && save
Bart De Schuymere8b0a252005-06-14 19:20:43 +0000129 restart
130 ;;
131 condrestart)
132 [ -e /var/lock/subsys/$prog ] && restart
133 RETVAL=$?
134 ;;
135 save)
136 save
137 ;;
138 status)
Bart De Schuymer50441e92005-08-30 21:20:55 +0000139 __EXEC_PATH__/ebtables-save
Bart De Schuymere8b0a252005-06-14 19:20:43 +0000140 RETVAL=$?
141 ;;
142 *)
143 echo $"Usage $0 {start|stop|restart|condrestart|save|status}"
144 RETVAL=1
145esac
146
147exit $RETVAL