#!/bin/sh
#
# $DragonFly$
#

# PROVIDE: vkernel
# REQUIRE: LOGIN NETWORKING

. /etc/rc.subr

name="vkernel"
rcvar=`set_rcvar`
start_cmd="vkernel_start"
stop_cmd="vkernel_stop"

vkernel_start()
{
	echo -n 'Starting virtual kernels:'
	for _vkernel in ${vkernel_list} 
	do
		# Configure vkernel binary
		eval _bin=\"\${vkernel_${_vkernel}_bin}\"
		if [ -z "${_bin}" ]; then
			echo
			warn "No binary has been defined for vkernel '${_vkernel}'. Skipping."
			continue
		else
			bin=${_bin}
		fi

		# Configure vkernel memory
		eval _memsize=\"\$vkernel_${_vkernel}_memsize\"
		if [ -z "${_memsize}" ]; then
			echo
			warn "No memsize has been defined for vkernel '${_vkernel}'. Skipping."
			continue
		else
			memsize="-m ${_memsize}"
		fi

		# Configure vkernel root image(s)
		eval _rootimgs=\"\${vkernel_${_vkernel}_rootimg_list}\"
		if [ -z "${_rootimgs}" ]; then
			echo
			warn "No root image has been defined for vkernel '${_vkernel}'. Skipping."
			continue
		else
			for _rootimg in ${_rootimgs}
			do
				eval rootimgs=\"${rootimgs} -r ${_rootimg}\"
			done
		fi

		# Configure optional vkernel network interface(s)
		eval _ifaces=\"\${vkernel_${_vkernel}_iface_list}\"
		if [ -n "${_ifaces}" ]; then
			for _iface in ${_ifaces}
			do
				eval ifaces=\"${ifaces} -I ${_iface}\"
			done
		fi

		# Configure optional console logfile
		eval logfile=\"\${vkernel_${_vkernel}_logfile}\"
		[ -z "${logfile}" ] && logfile="/dev/null"

		# Configure optional flags
		eval flags=\"\${vkernel_${_vkernel}_flags}\"

		eval "daemon ${bin} ${memsize} ${rootimgs} ${ifaces} ${flags} >>${logfile} 2>&1"
		echo -n " ${_vkernel}"
	done
	echo '.'
}

vkernel_stop()
{
	for _vkernel in ${vkernel_list} 
	do
		eval _bin=\"\${vkernel_${_vkernel}_bin}\"
		if [ -n "$_bin" ]; then
			eval pid=`ps auxwww | grep ${_bin} | grep -v grep | awk '{print $2}'`
			if [ -z "${pid}" ]; then
				warn "vkernel '${_vkernel}' not running?"
			else
				eval kill -TERM ${pid}
			fi
		fi
	done
}


load_rc_config $name
run_rc_command "$1"
