#!/bin/sh
#
# openvswitch	an Open Virtual Switch
#
# chkconfig: 2345 09 91
# description:	Manage Open vSwitch kernel modules and user-space services
## processname: ovs-vswitchd
# config: /etc/sysconfig/openvswitch
#
### BEGIN INIT INFO
# Provides: openvswitch
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Short-Description: Manage Open vSwitch kernel modules and user-space services
# Description: Manage Open vSwitch kernel modules and user-space services
### END INIT INFO

# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

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

SCRIPTS=/usr/share/openvswitch/scripts

. $SCRIPTS/ovs-lib || exit 1
SourceIfNotEmpty /etc/sysconfig/openvswitch
ovs_ctl=$SCRIPTS/ovs-ctl

LOCKFILE=/var/lock/subsys/openvswitch
RETVAL=0

start() {
	set $ovs_ctl ${1-start}
	set "$@" --system-id=random
	if [ -n "$FORCE_COREFILES" ]; then
		set "$@" --force-corefiles="$FORCE_COREFILES"
	fi
	if [ -n "$OVSDB_SERVER_PRIORITY" ]; then
		set "$@" --ovsdb-server-priority="$OVSDB_SERVER_PRIORITY"
	fi
	if [ -n "$VSWITCHD_PRIORITY" ]; then
		set "$@" --ovs-vswitchd-priority="$VSWITCHD_PRIORITY"
	fi
	if [ -n "$VSWITCHD_MLOCKALL" ]; then
		set "$@" --mlockall="$VSWITCHD_MLOCKALL"
	fi
	[ "$OVS_CTL_OPTS" ] && set "$@" $OVS_CTL_OPTS
	"$@"
	$ovs_ctl --protocol=gre enable-protocol
	RETVAL=$?
	touch "$LOCKFILE"
	#Workaround for etcnet. Down interfaces managed by etcnet if lo is down
	if ! ip -o link show dev lo 2>/dev/null | cut -d' ' -f3 | grep -qs '[<,]UP[,>]' ; then
		for iface in $(ovs-vsctl -d bare list interface | grep ^name | expand | tr -s ' ' | cut -d' ' -f3); do
			[ -d "/etc/net/ifaces/$iface" ] || continue
			ip -o link set dev $iface down 2>/dev/null
		done
	fi
	return $RETVAL
}

stop() {
	$ovs_ctl stop
	RETVAL=$?
	rm -f "$LOCKFILE"
	return $RETVAL
}

restart()
{
	stop
	start
}

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

exit $RETVAL
