|  | #!/bin/sh | 
|  | id=`/usr/sbin/modinfo | grep ipf | awk ' { print $1 } ' -` | 
|  | pid=`ps -e | grep ipmon | awk ' { print $1 } ' -` | 
|  | PATH=${PATH}:/sbin:/opt/ipf/bin | 
|  | IPFILCONF=/etc/opt/ipf/ipf.conf | 
|  | IPNATCONF=/etc/opt/ipf/ipnat.conf | 
|  |  | 
|  | block_default_workaround() { | 
|  | ipf -F a | 
|  | echo "constructing minimal name resolution rules..." | 
|  | NAMESERVERS=`cat /etc/resolv.conf | nawk '/nameserver/ {printf "%s ", $2}'` | 
|  | for NS in $NAMESERVERS | 
|  | do | 
|  | IF_TO_NS=`/usr/sbin/route -n get $NS | nawk '/interface/ {print $NF}'` | 
|  | IP_TO_NS=`ifconfig hme0 | head -2 | tail -1 | nawk '{print $2}'` | 
|  | echo "pass out quick proto udp from $IP_TO_NS to $NS port = 53 keep state" | \ | 
|  | ipf -f - | 
|  | done | 
|  | } | 
|  |  | 
|  | case "$1" in | 
|  | start) | 
|  | if [ x$pid != x ] ; then | 
|  | kill -TERM $pid | 
|  | fi | 
|  | if [ x$id != x ] ; then | 
|  | modunload -i $id | 
|  | fi | 
|  | modload /usr/kernel/drv/ipf | 
|  | if [ -r ${IPFILCONF} ]; then | 
|  | BLOCK_DEFAULT=`/sbin/ipf -V | grep Default | nawk '{print $2}'` | 
|  | if [ x$BLOCK_DEFAULT = "xblock" ] ; then | 
|  | block_default_workaround | 
|  | fi | 
|  | ipf -IFa -f ${IPFILCONF} | 
|  | if [ $? != 0 ]; then | 
|  | echo "$0: load of ${IPFILCONF} into alternate set failed" | 
|  | else | 
|  | ipf -s | 
|  | fi | 
|  | fi | 
|  | if [ -r ${IPNATCONF} ]; then | 
|  | ipnat -CF -f ${IPNATCONF} | 
|  | if [ $? != 0 ]; then | 
|  | echo "$0: load of ${IPNATCONF} failed" | 
|  | fi | 
|  | fi | 
|  | #		ipmon -sn & | 
|  | ;; | 
|  |  | 
|  | stop) | 
|  | if [ x$pid != x ] ; then | 
|  | kill -TERM $pid | 
|  | fi | 
|  | if [ x$id != x ] ; then | 
|  | modunload -i $id | 
|  | fi | 
|  | ;; | 
|  |  | 
|  | reload) | 
|  | if [ -r ${IPFILCONF} ]; then | 
|  | ipf -I -Fa -f ${IPFILCONF} | 
|  | if [ $? != 0 ]; then | 
|  | echo "$0: reload of ${IPFILCONF} into alternate set failed" | 
|  | else | 
|  | ipf -s | 
|  | fi | 
|  | fi | 
|  | if [ -r ${IPNATCONF} ]; then | 
|  | ipnat -CF -f ${IPNATCONF} | 
|  | if [ $? != 0 ]; then | 
|  | echo "$0: reload of ${IPNATCONF} failed" | 
|  | fi | 
|  | fi | 
|  | ;; | 
|  |  | 
|  | *) | 
|  | echo "Usage: $0 (start|stop|reload)" >&2 | 
|  | exit 1 | 
|  | ;; | 
|  |  | 
|  | esac | 
|  | exit 0 |