#!/bin/sh
#
# xenstored	Script to start and stop xenstored
#
# chkconfig:	2345 69 31
# description:	Starts and stops xenstored
#

# Source function library
. /etc/rc.d/init.d/functions

# Read in configuration options.
[ -f /etc/sysconfig/xenstored ] && . /etc/sysconfig/xenstored

if [ "$1" = "start" -a -d /proc/xen -a ! -f /proc/xen/capabilities ] && \
		! grep -qs '^xenfs ' /proc/mounts >/dev/null; then
	mount -t xenfs xenfs /proc/xen
fi

grep -qs "control_d" /proc/xen/capabilities || exit 0

start () {
	if [ -f /var/lock/subsys/xenstored ]; then
		msg_already_running xenstored
		return
	fi
	xenstore-read -s / >/dev/null 2>/dev/null && return

	[ -z "$XENSTORED_ROOTDIR" ] || XENSTORED_ROOTDIR="/var/lib/xenstored"
	rm -f "$XENSTORED_ROOTDIR"/tdb* >/dev/null 2>/dev/null

	show "Starting xenstored"
	busy
	/usr/sbin/xenstored --pid-file=/var/run/xenstored.pid $XENSTORED_ARGS

	# Wait for xenstored to actually come up, timing out after 30 seconds
        time=0
	timeout=30
        while [ $time -lt $timeout ] && ! xenstore-read -s / >/dev/null 2>/dev/null ; do
	    time=$(($time+1))
            sleep 1
        done

	if [ $time -ge $timeout ]; then
		fail
		RETVAL=1
	    	return
	fi
	ok

	show "Setting domain 0 name"
	busy
	xenstore-write "/local/domain/0/name" "Domain-0"
	xenstore-write "/local/domain/0/domid" "0"
	ok
	touch /var/lock/subsys/xenstored
}

stop() {
	if [ -f /var/lock/subsys/xenstored ]; then
		echo WARNING: Not stopping xenstored, as it cannot be restarted.
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  status)
	status xenstored
        xenstore-read -s /
	;;
  stop)
	stop
	;;
  force-reload|restart)
        stop
	start
	;;
  *)
	msg_usage "$0 {start|stop|status|restart|force-reload}"
	exit 3
esac

exit $RETVAL
