Files
xen/tools/hotplug/NetBSD/rc.d/xencommons
T
Matthew Daley 02ebea7768 xencommons: write domain 0's domid to xenstore
libvchan's init_xs_srv (server-side xenstore-related initialization)
expects to find the current domain's domid at this xenstore key. libxl
(and xend) write this for domains they create. Do the same for domain 0,
allowing the use of libvchan in dom0.

Signed-off-by: Matthew Daley <mattjd@gmail.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
2013-10-31 20:59:34 +00:00

126 lines
2.9 KiB
Bash

#!/bin/sh
#
# PROVIDE: xencommons
# REQUIRE: DAEMON
. /etc/rc.subr
DIR=$(dirname "$0")
. "${DIR}/xen-hotplugpath.sh"
LD_LIBRARY_PATH="${LIBDIR}"
export LD_LIBRARY_PATH
name="xencommons"
rcvar=xend
start_precmd="xen_precmd"
start_cmd="xen_startcmd"
stop_cmd="xen_stop"
status_cmd="xen_status"
extra_commands="status"
required_files="/kern/xen/privcmd"
XENSTORED_PIDFILE="/var/run/xenstored.pid"
XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid"
XENBACKENDD_PIDFILE="/var/run/xenbackendd.pid"
#XENBACKENDD_DEBUG=1
#XENCONSOLED_TRACE="/var/log/xen/xenconsole-trace.log"
#XENSTORED_TRACE="/var/log/xen/xenstore-trace.log"
xen_precmd()
{
mkdir -p /var/run/xenstored || exit 1
}
xen_startcmd()
{
local time=0
local timeout=30
xenstored_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
if test -z "$xenstored_pid"; then
printf "Cleaning xenstore database.\n"
if [ -z "${XENSTORED_ROOTDIR}" ]; then
XENSTORED_ROOTDIR="/var/lib/xenstored"
fi
rm -f ${XENSTORED_ROOTDIR}/tdb* >/dev/null 2>&1
printf "Starting xenservices: xenstored, xenconsoled."
XENSTORED_ARGS=" --pid-file ${XENSTORED_PIDFILE}"
if [ -n "${XENSTORED_TRACE}" ]; then
XENSTORED_ARGS="${XENSTORED_ARGS} -T /var/log/xen/xenstored-trace.log"
fi
${SBINDIR}/xenstored ${XENSTORED_ARGS}
while [ $time -lt $timeout ] && ! `${BINDIR}/xenstore-read -s / >/dev/null 2>&1` ; do
printf "."
time=$(($time+1))
sleep 1
done
else
printf "Starting xenservices: xenconsoled."
fi
XENCONSOLED_ARGS=""
if [ -n "${XENCONSOLED_TRACE}" ]; then
XENCONSOLED_ARGS="${XENCONSOLED_ARGS} --log=${XENCONSOLED_TRACE}"
fi
${SBINDIR}/xenconsoled ${XENCONSOLED_ARGS}
printf "\n"
printf "Setting domain 0 name and domid.\n"
${BINDIR}/xenstore-write "/local/domain/0/name" "Domain-0"
${BINDIR}/xenstore-write "/local/domain/0/domid" 0
}
xen_stop()
{
pids=""
printf "Stopping xencommons.\n"
printf "WARNING: Not stopping xenstored, as it cannot be restarted.\n"
rc_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
pids="$pids $rc_pid"
kill -${sig_stop:-TERM} $pids
wait_for_pids $pids
}
xen_status()
{
xenstored_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
if test -n ${xenstored_pid}; then
pids="$pids $xenstored_pid"
fi
xenconsoled_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
if test -n ${xenconsoled_pid}; then
pids="$pids $xenconsoled_pid"
fi
if test -n "$xenconsoled_pid" -a -n "$xenstored_pid";
then
echo "xencommons are running as pids $pids."
return 0
fi
if test -z "$xenconsoled_pid" -a -z "$xenstored_pid";
then
echo "xencommons are not running."
return 0
fi
if test -n $xenstored_pid; then
echo "xenstored is running as pid $xenstored_pid."
else
echo "xenstored is not running."
fi
if test -n $xenconsoled_pid; then
echo "xenconsoled is running as pid $xenconsoled_pid."
else
echo "xenconsoled is not running."
fi
}
load_rc_config $name
run_rc_command "$1"