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