#!/bin/sh
# $Id: mobileip6,v 1.4 2003/10/01 03:00:07 keiichi Exp $

# REQUIRE: network
# PROVIDE: mobileip6
# BEFORE: LOGIN

. /etc/rc.subr

name="mobileip6"
start_cmd="mobileip6_start"
stop_cmd="mobileip6_stop"


mobileip6_start() 
{
	echo -n 'Doing Mobile IPv6 network setup:'

	case ${ipv6_mobile_debug_enable} in
	[Yy][Ee][Ss])
		sysctl net.inet6.mip6.debug=1
		;;
	[Nn][Oo])
		sysctl net.inet6.mip6.debug=0
		;;
	esac

	case ${ipv6_mobile_security_enable} in
	[Yy][Ee][Ss])
		sysctl net.inet6.mip6.use_ipsec=1
		;;
	[Nn][Oo])
		sysctl net.inet6.mip6.use_ipsec=0
		;;
	esac

	case ${ipv6_mobile_nodetype} in
	[Mm][Oo][Bb][Ii][Ll][Ee]_[Nn][Oo][Dd][Ee])
		echo -n ' Mobile Node:'

		if [ -z "${ipv6_mobile_home_prefixes}" ]; then
			break;
		fi

		# setup SPD/SA
		echo -n ' security'
		for node_dir in ${ipv6_mobile_config_dir}/*
		do
			if [ ! -e ${node_dir}/add ]; then
				continue;
			fi
			setkey -f ${node_dir}/add
			setkey -f ${node_dir}/spdadd_mobile_node
		done

		# home prefixes
		ipv6_mobile_home_prefixes_0=${ipv6_mobile_home_prefixes}
		ipv6_mobile_site_prefixes_0=${ipv6_mobile_site_prefixes}
		network=0
		while : ; do
			eval ipv6_mobile_home_prefixes_arg=\$ipv6_mobile_home_prefixes_${network}
			if [ -z "${ipv6_mobile_home_prefixes_arg}" ]; then
				break;
			fi
			for home_prefix in ${ipv6_mobile_home_prefixes_arg}
			do
				prefix=`expr "${home_prefix}" : "\(.*\)/.*"`
				prefixlen=`expr "${home_prefix}" : ".*/\(.*\)"`
				mip6control -ihif${network} -H ${prefix} -P ${prefixlen}
			done

			eval ipv6_mobile_site_prefixes_arg=\$ipv6_mobile_site_prefixes_${network}
			if [ ! -z "${ipv6_mobile_site_prefixes_arg}" ]; then
				for site_prefix in ${ipv6_mobile_site_prefixes_arg}
				do
					prefix=`expr "${site_prefix}" : "\(.*\)/.*"`
					prefixlen=`expr "${site_prefix}" : ".*/\(.*\)"`
					mip6control -ihif${network} -O ${prefix} -P ${prefixlen}
					
				done
			fi

			network=$((${network} + 1))
		done

		echo -n ' enable'
		mip6control -m
		echo -n ' rtsold'
		rtsold -a -m
		;;
	[Hh][Oo][Mm][Ee]_[Aa][Gg][Ee][Nn][Tt])
		case ${ipv6_mobile_home_link} in
		'')
			;;
		*)
			echo -n ' Home Agent:'
			# setup SPD/SA
			echo -n ' security'
			for node_dir in ${ipv6_mobile_config_dir}/*
			do
				if [ ! -e ${node_dir}/add ]; then
					continue;
				fi
				setkey -f ${node_dir}/add
				setkey -f ${node_dir}/spdadd_home_agent
			done
			echo -n ' enable'

			for home_prefix in ${ipv6_mobile_home_prefixes}
			do
				prefix=`expr "${home_prefix}" : "\(.*\)::/.*"`
				# XXX desribe the case plen != 64
				ifconfig ${ipv6_mobile_home_link} inet6 ${prefix}:fdff:ffff:ffff:fffe prefixlen 64 anycast alias
			done
			mip6control -g
			echo -n ' rtadvd'
			rtadvd -m ${ipv6_mobile_home_link}
			echo -n ' had'
			had ${ipv6_mobile_home_link}
			# take in Router Advertisement
			rtsol ${ipv6_mobile_home_link} > /dev/null 2>&1
			;;
		esac
		;;
	*)
		echo -n ' Correspondent Node'
		;;
	esac

	echo ''
}

mobileip6_stop() {

}

load_rc_config $name
run_rc_command "$1"
