#!/bin/sh
#
# openvswitch	Open vSwitch switch
#
# chkconfig:	2345 09 91
# description:	Manage Open vSwitch kernel modules and user-space daemons

### BEGIN INIT INFO
# Provides:          openvswitch-switch
# Required-Start:    $syslog
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Open vSwitch switch
### END INIT INFO

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

# Get network config
. /etc/sysconfig/network

. /usr/share/openvswitch/scripts/ovs-lib || exit 1

FORCE_COREFILES="yes"
OVSDB_SERVER_PRIORITY="-10"
VSWITCHD_PRIORITY="-10"
VSWITCHD_MLOCKALL="yes"
[ -f /etc/sysconfig/openvswitch ] && . /etc/sysconfig/openvswitch

ovs_ctl=/usr/share/openvswitch/scripts/ovs-ctl

start () {
	# Check if the service is already running?
	if [ -f /var/lock/subsys/openvswitch ]; then
		msg_already_running "Open vSwitch switch"
		return
	fi

	show "Loading Open vSwitch kernel modules"
	busy
	if ! $ovs_ctl load-kmod; then
		fail
		RETVAL=1
		return
	fi
	ok
	msg_starting "Open vSwitch switch"
	busy
	$ovs_ctl ${1:-start} \
		--system-id=random \
		--force-corefiles=$FORCE_COREFILES \
		--ovsdb-server-priority=$OVSDB_SERVER_PRIORITY \
		--ovs-vswitchd-priority=$VSWITCHD_PRIORITY \
		--mlockall=$VSWITCHD_MLOCKALL \
		$OPENVSWITCH_OPTIONS
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		$ovs_ctl --protocol=gre enable-protocol
		[ $? -eq 0 ] || RETVAL=$?
	fi
	if [ $RETVAL -eq 0 ]; then
		ok
		touch /var/lock/subsys/openvswitch
	else
		fail
	fi
}

stop () {
	if [ ! -f /var/lock/subsys/openvswitch ]; then
		msg_not_running "Open vSwitch switch"
		return
	fi

	msg_stopping "Open vSwitch switch"
	busy
	$ovs_ctl stop
	ok
	rm -f /var/lock/subsys/openvswitch
}

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

exit $RETVAL
