+#!/bin/sh
+#
+# ipfw init the emulation service
+#
+# chkconfig: 2345 09 91
+# description: ipfw init and shutdown
+#
+
+# Source function library.
+. /etc/init.d/functions
+
+IPFW=ipfw
+IPFW_BACKEND=/vsys/ipfw-be
+IPFW_MOD=ipfw_mod
+
+if [ ! -x /sbin/$IPFW ] || [ ! -x ${IPFW_BACKEND} ]; then
+ echo -n "/sbin/$IPFW does not exist."; warning; echo
+ exit 0
+fi
+
+# Load the ipfw module, and initialize netconfig
+start() {
+ # load the module
+ modprobe $IPFW_MOD > /dev/null 2> /dev/null
+ let ret=$?;
+ [ $ret -eq 0 ] && success || failure
+
+ # init netconfig
+ echo "super dbcleanup" | ${IPFW_BACKEND} root > /dev/null 2> /dev/null
+ echo "super init" | ${IPFW_BACKEND} root > /dev/null 2> /dev/null
+
+ return $ret
+}
+
+stop() {
+ # clean netconfig stuff
+ echo "super dbcleanup" | ${IPFW_BACKEND} root > /dev/null 2> /dev/null
+ echo "Unloading $IPFW_MOD module: "
+
+ # unload the ipfw module
+ rmmod ${IPFW_MOD}
+ let ret=$?;
+ [ $ret -eq 0 ] && success || failure
+
+ return $ret
+}
+
+# echo the ipfw status
+status() {
+ # check for module presence
+ LOADED=`cat /proc/modules | grep ^ipfw_mod`
+ [ ! -n "$LOADED" ] && echo "ipfw not loaded" && return 0
+
+ # Show active users
+ USERS=`cat /tmp/ff | grep BLOCK | wc -l`
+ echo "ipfw is loaded and there are currently ${USERS} with active emulation."
+ return 0
+}
+
+# main
+case "$1" in
+ start)
+ start
+ RETVAL=$?
+ ;;
+ stop)
+ stop
+ RETVAL=$?
+ ;;
+ restart)
+ stop
+ start
+ RETVAL=$?
+ ;;
+ status)
+ status
+ RETVAL=$?
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+exit $RETVAL