xref: /dflybsd-src/etc/rc.d/vkernel (revision 0118528260d190c273d4e793f523e81db6dd8587)
1#!/bin/sh
2#
3
4# PROVIDE: vkernel
5# REQUIRE: LOGIN NETWORKING
6
7. /etc/rc.subr
8
9name="vkernel"
10rcvar=`set_rcvar`
11start_cmd="vkernel_start"
12stop_cmd="vkernel_stop"
13
14vkernel_start()
15{
16	echo -n 'Starting virtual kernels:'
17	for _vkernel in ${vkernel_list}
18	do
19		# Check if already running
20		eval pidfile="/var/run/vkernel.${_vkernel}.pid"
21		if [ -f "${_pidfile}" ]; then
22			echo
23			warn "Vkernel ${_vkernel} already running? (check ${pidfile})"
24			continue
25		fi
26
27		# Configure vkernel binary
28		eval _bin=\"\${vkernel_${_vkernel}_bin}\"
29		if [ -z "${_bin}" -o ! -x "${_bin}" ]; then
30			echo
31			warn "Missing or undefined binary for vkernel '${_vkernel}'. Skipping."
32			continue
33		else
34			bin=${_bin}
35		fi
36
37		# Configure vkernel memory
38		eval _memsize=\"\$vkernel_${_vkernel}_memsize\"
39		if [ -z "${_memsize}" ]; then
40			echo
41			warn "No memsize has been defined for vkernel '${_vkernel}'. Skipping."
42			continue
43		else
44			memsize="-m ${_memsize}"
45		fi
46
47		# Configure vkernel root image(s)
48		eval _rootimgs=\"\${vkernel_${_vkernel}_rootimg_list}\"
49		if [ -z "${_rootimgs}" ]; then
50			echo
51			warn "No root image has been defined for vkernel '${_vkernel}'. Skipping."
52			continue
53		else
54			for _rootimg in ${_rootimgs}
55			do
56				eval rootimgs=\"${rootimgs} -r ${_rootimg}\"
57			done
58		fi
59
60		# Configure optional vkernel network interface(s)
61		eval _ifaces=\"\${vkernel_${_vkernel}_iface_list}\"
62		if [ -n "${_ifaces}" ]; then
63			for _iface in ${_ifaces}
64			do
65				eval ifaces=\"${ifaces} -I ${_iface}\"
66			done
67		fi
68
69		# Configure optional console logfile
70		eval logfile=\"\${vkernel_${_vkernel}_logfile}\"
71		[ -z "${logfile}" ] && logfile="/dev/null"
72
73		# Configure optional flags
74		eval flags=\"\${vkernel_${_vkernel}_flags}\"
75
76		eval "daemon ${bin} ${memsize} ${rootimgs} ${ifaces} ${flags} -p ${pidfile} >>${logfile} 2>&1"
77		echo -n " ${_vkernel}"
78	done
79	echo '.'
80}
81
82vkernel_stop()
83{
84	for _vkernel in ${vkernel_list}
85	do
86		eval pidfile="/var/run/vkernel.${_vkernel}.pid"
87		if [ -f "${pidfile}" ]; then
88			eval pid=`cat ${pidfile}`
89		else
90			eval _bin=\"\${vkernel_${_vkernel}_bin}\"
91			if [ -n "$_bin" ]; then
92				eval pid=`ps auxwww | grep ${_bin} | grep -v grep | awk '{print $2}'`
93			fi
94		fi
95		if [ -z "${pid}" ]; then
96			warn "vkernel '${_vkernel}' not running?"
97		else
98			eval kill -TERM ${pid}
99		fi
100	done
101}
102
103
104load_rc_config $name
105run_rc_command "$1"
106