#!/bin/sh
#
# qemu_vde 	Virtual network switch daemon for QEMU
#
# chkconfig: - 90 10
# description: Virtual network switch daemon for QEMU
# processname: vde_switch
# pidfile: /var/run/vde.pid

# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

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

RETVAL=0

SWITCHMOD=770
KVMGROUP=vmusers
CONFIGDIR=/etc/vde

#reexec with right group
[ `id -ng` != $KVMGROUP ]&&exec sg  $KVMGROUP -c "$0 $@"
start_one()
{
	local conf=$1
	local BRNAME
	local SWNAME
	if [ -z "$conf" ]
	then
		echo 'Usage: start_one() <path_co_config>'
		return 1
	fi
	. $conf
	PIDFILE=/var/run/vde_$SWNAME.pid
	LOCKFILE=/var/lock/subsys/vde_$SWNAME
	TAPNAME=tap.vde.$SWNAME
	SOCKPATH=/var/run/vde/$SWNAME
	DOPTS="-daemon -m $SWITCHMOD -g $KVMGROUP --tap $TAPNAME --pidfile $PIDFILE --sock $SOCKPATH"
	SOPTS="--lockfile "$LOCKFILE" --expect-user root --name vde_switch.$SWNAME --pidfile $PIDFILE"
	start_daemon  $SOPTS -- vde_switch $DOPTS
	ip l s up $TAPNAME
	if [ ! -z "$BRNAME" ]
	then
		ifup $BRNAME
		brctl addif $BRNAME $TAPNAME
	fi
	RETVAL=$?
	#--displayname \'$SWNAME virtial switch\' 
}
stop_one()
{
	local conf=$1
	local BRNAME
	local SWNAME
	if [ -z "$conf" ]
	then
		echo 'Usage: start_one() <path_co_config>'
		return 1
	fi
	. $conf
	PIDFILE=/var/run/vde_$SWNAME.pid
	LOCKFILE=/var/lock/subsys/vde_$SWNAME
	stop_daemon --displayname "$SWNAME virtual switch" --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user root -- vde_switch
	RETVAL=$?
}
status_one()
{
	local conf=$1
	local BRNAME
	local SWNAME
	if [ -z "$conf" ]
	then
		echo 'Usage: start_one() <path_co_config>'
		return 1
	fi
	. $conf
	PIDFILE=/var/run/vde_$SWNAME.pid
	LOCKFILE=/var/lock/subsys/vde_$SWNAME
	status --displayname "$SWNAME virtual switch" --pidfile "$PIDFILE" --lockfile "$LOCKFILE"  -- vde_switch
	RETVAL=$?
}
start()
{
	for conf in $CONFIGDIR/*
	do
		[ ${conf%\~} != "$conf" ]&&continue
		start_one $conf
	done
	return 0
}

stop()
{
	for conf in $CONFIGDIR/*
	do
		[ ${conf%\~} != "$conf" ]&&continue
		stop_one $conf
	done
	return 0
}
stat()
{
	for conf in $CONFIGDIR/*
	do
		[ ${conf%\~} != "$conf" ]&&continue
		status_one $conf
	done
	return 0
}
restart()
{
	stop
	start
}

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	reload)
		restart
		;;
	restart)
		restart
		;;
	condstop)
		if [ -e "$LOCKFILE" ]; then
			stop
		fi
		;;
	condrestart)
		if [ -e "$LOCKFILE" ]; then
			restart
		fi
		;;
	condreload)
		if [ -e "$LOCKFILE" ]; then
			reload
		fi
		;;
	status)
		stat
		;;
	*)
		msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}"
		RETVAL=1
esac

exit $RETVAL
