#!/bin/sh
#
# xendomains
#

XENBR=xenbr0
DELAY=2

log_message()
{
	echo -n -e "${@}"
}

status_ok()
{
	echo -n -e "  OK\n"
}

status_fail()
{
	echo -n -e "  FAIL\n"
}

check_status()
{
	local ERR=$?
	if [ $ERR = 0 ]; then
		status_ok
	else
		status_fail
	fi
}

wait_for_iface() {
	local IFACE=$1
	local WAIT_DELAY=$2
	[ -z "$IFACE" ] && return 0
	[ -z "$WAIT_DELAY" ] && WAIT_DELAY=10
	if [ "$WAIT_DELAY" -gt 0 -a ! -e "/sys/class/net/$IFACE" ]; then
		log_message "Waiting for interface $IFACE to appear "
		while [ $WAIT_DELAY -gt 0 ]; do
			if [ -e "/sys/class/net/$IFACE" ]; then
				status_ok
				return 0
			fi
			sleep 1
			log_message "."
			: $((WAIT_DELAY -= 1))
		done
		status_fail
		exit 1
	fi
}

[ -r "/etc/default/xendomains" ] && . /etc/default/xendomains

if test "$EUID" -ne 0; then
	echo "You must be root for this" >&2
	exit 1
fi

# not running in Xen dom0 or domU
if ! test -d /proc/xen ; then
	exit 0
fi

# run this script only in dom0:
# no capabilities file in xenlinux domU kernel
# empty capabilities file in pv_ops domU kernel
if test -f /proc/xen/capabilities && ! grep -q "control_d" /proc/xen/capabilities ; then
	exit 0
fi

start() {
	wait_for_iface $XENBR
	for f in $(ls /etc/xen/auto/*.cfg 2>/dev/null); do
		sleep $DELAY
		log_message "Starting xen domain $(basename $f) ... "
		xl create $f >/dev/null 2>&1
		check_status
	done
}

stop() {
	log_message "Stopping xen domains ... "
	xl shutdown --all --wait >/dev/null 2>&1
	check_status
	sleep 5
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  *)
	echo "Usage: $0 {start|stop}" >&2
	exit 1
esac
