#!/bin/bash
#
# xend		Script to start and stop the Xen control daemon.
#
# Author:       Keir Fraser <keir.fraser@cl.cam.ac.uk>
#
# chkconfig: 2345 98 01
# description: Starts and stops the Xen control daemon.
### BEGIN INIT INFO
# Provides:          xend
# Required-Start:    $syslog $remote_fs
# Should-Start:
# Required-Stop:     $syslog $remote_fs
# Should-Stop:
# Default-Start:     3 4 5
# Default-Stop:      0 1 2 6
# Default-Enabled:   yes
# Short-Description: Start/stop xend
# Description:       Starts and stops the Xen control daemon.
### END INIT INFO

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

RETVAL=0
if [ ! -d /proc/xen ]; then
	exit 0
fi
if ! grep -q "control_d" /proc/xen/capabilities ; then
	exit 0
fi
prog=xend

# Wait for Xend to be up
function await_daemons_up
{
	i=1
	rets=10
	/usr/sbin/xend status
	while [ $? -ne 0 -a $i -lt $rets ]; do
	    sleep 1
	    echo -n .
	    i=$(($i + 1))
	    /usr/sbin/xend status
	done
	if [ $i -ge $rets ]; then
	    RETVAL=-1
	    return 1
	fi
	return 0
}

case "$1" in
  start)
	echo -n $"Starting $prog: "
	modprobe blkbk 2>/dev/null
	modprobe blktap 2>/dev/null
	modprobe xenblktap 2>/dev/null
	modprobe netbk 2>/dev/null
	/usr/sbin/xend start
	await_daemons_up
	;;
  stop)
	echo -n $"Stopping $prog: "
	/usr/sbin/xend stop
	RETVAL=$?
	;;
  status)
	/usr/sbin/xend status
	if [ $? = 0 ] ; then
	    echo -n $"$prog is running"
	else
	    echo -n $"$prog is stopped"
	    RETVAL=3
	fi
	;;
  reload)
        /usr/sbin/xend reload
        ;;
  restart|force-reload)
	/usr/sbin/xend restart
	await_daemons_up
	;;
  *)
	# do not advertise unreasonable commands that there is no reason
	# to use with this device
	echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
	exit 1
esac

if [ $RETVAL = 0 ] ; then
    echo_success
    echo
else
    echo_failure
    echo
fi
exit $RETVAL

