ebcdb6
#!/bin/sh
ebcdb6
# config: /etc/sysconfig/arptables
ebcdb6
ebcdb6
# Source 'em up
ebcdb6
. /etc/init.d/functions
ebcdb6
ebcdb6
ARPTABLES_CONFIG=/etc/sysconfig/arptables
ebcdb6
ebcdb6
arp_table() {
ebcdb6
	if fgrep -qsx $1 /proc/net/arp_tables_names; then
ebcdb6
		arptables -t "$@"
ebcdb6
	fi
ebcdb6
}
ebcdb6
ebcdb6
flush_delete_chains() {
ebcdb6
	chains=$(cat /proc/net/arp_tables_names 2>/dev/null)
ebcdb6
	echo -n $"Flushing all chains:"
ebcdb6
	let ret=0
ebcdb6
	for i in $chains; do arptables -t $i -F; let ret+=$?; done
ebcdb6
	arptables -F; let ret+=$?
ebcdb6
	if [ $ret -eq 0 ]; then
ebcdb6
		success
ebcdb6
	else
ebcdb6
		failure
ebcdb6
	fi
ebcdb6
	echo
ebcdb6
ebcdb6
	echo -n $"Removing user defined chains:"
ebcdb6
	let ret=0
ebcdb6
	for i in $chains; do arptables -t $i -X; let ret+=$?; done
ebcdb6
	arptables -X; let ret+=$?
ebcdb6
	if [ $ret -eq 0 ]; then
ebcdb6
		success
ebcdb6
	else
ebcdb6
		failure
ebcdb6
	fi
ebcdb6
	echo
ebcdb6
}
ebcdb6
ebcdb6
start() {
ebcdb6
	if [ ! -x /usr/sbin/arptables ]; then
ebcdb6
		exit 4
ebcdb6
	fi
ebcdb6
ebcdb6
	# don't do squat if we don't have the config file
ebcdb6
	if [ -f $ARPTABLES_CONFIG ]; then
ebcdb6
		# If we don't clear these first, we might be adding to
ebcdb6
		# pre-existing rules.
ebcdb6
                flush_delete_chains
ebcdb6
ebcdb6
		for i in $(cat /proc/net/arp_tables_names 2>/dev/null); do
ebcdb6
			arptables -t $i -Z;
ebcdb6
		done
ebcdb6
ebcdb6
		echo -n $"Applying arptables firewall rules: "
ebcdb6
		/usr/sbin/arptables-restore < $ARPTABLES_CONFIG && \
ebcdb6
			success || \
ebcdb6
			failure
ebcdb6
		echo
ebcdb6
		touch /var/lock/subsys/arptables
ebcdb6
	else
ebcdb6
		failure
ebcdb6
		echo
ebcdb6
		echo $"Configuration file /etc/sysconfig/arptables missing"
ebcdb6
		exit 6
ebcdb6
	fi
ebcdb6
}
ebcdb6
ebcdb6
stop() {
ebcdb6
        flush_delete_chains
ebcdb6
	echo -n $"Resetting built-in chains to the default ACCEPT policy:"
ebcdb6
	arp_table filter -P INPUT ACCEPT && \
ebcdb6
		arp_table filter -P OUTPUT ACCEPT && \
ebcdb6
		success || \
ebcdb6
		failure
ebcdb6
	echo
ebcdb6
	rm -f /var/lock/subsys/arptables
ebcdb6
}
ebcdb6
ebcdb6
case "$1" in
ebcdb6
start)
ebcdb6
	start
ebcdb6
	;;
ebcdb6
ebcdb6
stop)
ebcdb6
	stop
ebcdb6
	;;
ebcdb6
ebcdb6
restart|reload)
ebcdb6
	# "restart" is really just "start" as this isn't a daemon,
ebcdb6
	# and "start" clears any pre-defined rules anyway.
ebcdb6
	# This is really only here to make those who expect it happy
ebcdb6
	start
ebcdb6
	;;
ebcdb6
ebcdb6
condrestart|try-restart|force-reload)
ebcdb6
	[ -e /var/lock/subsys/arptables ] && start
ebcdb6
	;;
ebcdb6
ebcdb6
*)
ebcdb6
	exit 2
ebcdb6
esac
ebcdb6
ebcdb6
exit 0