ipnat revision 104980
178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $NetBSD: ipnat,v 1.6 2000/09/19 13:04:38 lukem Exp $
498184Sgordon# $FreeBSD: head/etc/rc.d/ipnat 104980 2002-10-12 10:31:31Z schweikh $
578344Sobrien#
678344Sobrien
778344Sobrien# PROVIDE: ipnat
878344Sobrien# REQUIRE: ipfilter mountcritremote
998184Sgordon# BEFORE:  DAEMON
1098184Sgordon# KEYWORD: FreeBSD NetBSD
1178344Sobrien
1278344Sobrien. /etc/rc.subr
1378344Sobrien
1478344Sobrienname="ipnat"
1598184Sgordonrcvar=`set_rcvar`
1698184Sgordon
17103019Sgordoncase ${OSTYPE} in
1898184SgordonFreeBSD)
1998184Sgordon	IPNATDIR="/sbin"
2098184Sgordon	start_precmd="ipnat_precmd"
2198184Sgordon	reload_cmd="ipnat_start"
2298184Sgordon	;;
2398184SgordonNetBSD)
2498184Sgordon	IPNATDIR="/usr/sbin"
2598184Sgordon	config="/etc/ipnat.conf"
2698184Sgordon	reload_cmd="/usr/sbin/ipnat -F -C -f ${config}"
2798184Sgordon	start_precmd=
2898184Sgordon	;;
2998184Sgordonesac
3098184Sgordon
3178344Sobrienstart_cmd="ipnat_start"
3298184Sgordonstop_cmd="${ipnat_program:-${IPNATDIR}/${name}} -F -C"
3378344Sobrienextra_commands="reload"
3478344Sobrien
3598184Sgordonipnat_precmd()
3678344Sobrien{
3798184Sgordon	# Make sure ipfilter is loaded before continuing
38104980Sschweikh	if ! ${SYSCTL} net.inet.ipf.fr_pass >/dev/null 2>&1; then
3998184Sgordon		err 'ipnat requires ipfilter be loaded'
4098184Sgordon		return 1
4178344Sobrien	fi
4298184Sgordon	return 0
4378344Sobrien}
4478344Sobrien
4598184Sgordonipnat_start()
4698184Sgordon{
47103019Sgordon	case ${OSTYPE} in
4898184Sgordon	FreeBSD)
4998184Sgordon		echo -n 'Installing NAT rules ... '
5098184Sgordon		if [ -r "${ipnat_rules}" ]; then
5198184Sgordon			${ipnat_program:-/sbin/ipnat} -CF -f \
5298184Sgordon			    "${ipnat_rules}" ${ipnat_flags}
5398184Sgordon		else
5498184Sgordon			echo -n ' NO IPNAT RULES'
5598184Sgordon		fi
5698184Sgordon		echo '.'
5798184Sgordon
5898184Sgordon		# restore filter/NAT state tables after loading the rules
59104980Sschweikh		if checkyesno ipfs_enable; then
6098184Sgordon			if [ -r "/var/db/ipf/ipstate.ipf" ]; then
6198184Sgordon				echo -n ' ipfs'
6298184Sgordon				${ipfs_program:-/sbin/ipfs} -R ${ipfs_flags}
6398184Sgordon				# remove files to avoid reloading old state
6498184Sgordon				# after an ungraceful shutdown
6598184Sgordon				rm -f /var/db/ipf/ipstate.ipf
6698184Sgordon				rm -f /var/db/ipf/ipnat.ipf
6798184Sgordon			fi
6898184Sgordon		fi
6998184Sgordon		;;
7098184Sgordon	NetBSD)
7198184Sgordon		if [ ! -f ${config} ]; then
7298184Sgordon			return 0
7398184Sgordon		fi
7498184Sgordon		if ! checkyesno ipfilter || [ ! -f /etc/ipf.conf ]; then
7598184Sgordon			echo "Enabling ipfilter for NAT."
7698184Sgordon			/sbin/ipf -E -Fa
7798184Sgordon		fi
7898184Sgordon		echo -n "Installing NAT rules ... "
7998184Sgordon		/usr/sbin/ipnat -F -f ${config}
8098184Sgordon		;;
8198184Sgordon	esac
8298184Sgordon}
8398184Sgordon
8478344Sobrienload_rc_config $name
8578344Sobrienrun_rc_command "$1"
86