meta-virtualization/recipes-networking/openvswitch/files/openvswitch-controller
David Nyström 5ac786971c Added openvswitch recipe
Signed-off-by: David Nyström <david.nystrom@enea.com>
Reviewed-by: Bruce Ashfield <bruce.ashfield@windriver.com>
2012-12-07 15:32:31 +01:00

8.4 KiB
Executable File

#!/bin/sh

Copyright (c) 2011 Nicira Networks Inc.

Copyright (c) 2007, 2009 Javier Fernandez-Sanguino jfs@debian.org

This is free software; you may redistribute it and/or modify

it under the terms of the GNU General Public License as

published by the Free Software Foundation; either version 2,

or (at your option) any later version.

This is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License with

the Debian operating system, in /usr/share/common-licenses/GPL; if

not, write to the Free Software Foundation, Inc., 59 Temple Place,

Suite 330, Boston, MA 02111-1307 USA

BEGIN INIT INFO

Provides: openvswitch-controller

Required-Start: $network $local_fs $remote_fs

Required-Stop: $remote_fs

Should-Start: $named

Should-Stop:

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-Description: Open vSwitch controller

END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/bin/ovs-controller # Introduce the server's location here NAME=ovs-controller # Introduce the short server's name here DESC=ovs-controller # Introduce a short description here LOGDIR=/var/log/openvswitch # Log directory to use

PIDFILE=/var/run/openvswitch/$NAME.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

Default options, these can be overriden by the information

at /etc/default/openvswitch-controller

DAEMON_OPTS="" # Additional options given to the server

DODTIME=10 # Time to wait for the server to die, in seconds # If this value is set too low you might not # let some servers to die gracefully and # 'restart' will not work

LOGFILE=$LOGDIR/$NAME.log # Server logfile #DAEMONUSER= # User to run the daemons as. If this value # is set start-stop-daemon will chuid the server

Include defaults if available

default=/etc/default/openvswitch-controller if [ -f $default ] ; then . $default fi

Check that the user exists (if we set a user)

Does the user exist?

if [ -n "$DAEMONUSER" ] ; then if getent passwd | grep -q "^$DAEMONUSER:"; then # Obtain the uid and gid DAEMONUID=getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}' DAEMONGID=getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}' else log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist." exit 1 fi fi

set -e

running_pid() {

Check if a given process pid's cmdline matches a given name

pid=$1
name=$2
[ -z "$pid" ] && return 1 
[ ! -d /proc/$pid ] &&  return 1
cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
# Is this the expected server
[ "$cmd" != "$name" ] &&  return 1
return 0

}

running() {

Check if the process is running looking at /proc

(works for all users)

# No pidfile, probably no daemon present
[ ! -f "$PIDFILE" ] && return 1
pid=`cat $PIDFILE`
running_pid $pid $DAEMON || return 1
return 0

}

start_server() { if [ -z "$LISTEN" ]; then echo "$default: No connection methods configured, controller disabled" >&2 exit 0 fi

if [ ! -d /var/run/openvswitch ]; then
    install -d -m 755 -o root -g root /var/run/openvswitch
fi

SSL_OPTS=
case $LISTEN in
    *ssl*)
        : ${PRIVKEY:=/etc/openvswitch-controller/privkey.pem}
        : ${CERT:=/etc/openvswitch-controller/cert.pem}
        : ${CACERT:=/etc/openvswitch-controller/cacert.pem}
        if test ! -e "$PRIVKEY" || test ! -e "$CERT" ||
            test ! -e "$CACERT"; then
            if test ! -e "$PRIVKEY"; then
                echo "$PRIVKEY: private key missing" >&2
            fi
            if test ! -e "$CERT"; then
                echo "$CERT: certificate for private key missing" >&2
            fi
            if test ! -e "$CACERT"; then
                echo "$CACERT: CA certificate missing" >&2
            fi
            exit 1
        fi
        SSL_OPTS="--private-key=$PRIVKEY --certificate=$CERT --ca-cert=$CACERT"
        ;;
esac

Start the process using the wrapper

    if [ -z "$DAEMONUSER" ] ; then
        start-stop-daemon --start --pidfile $PIDFILE \
                    --exec $DAEMON -- --detach --pidfile=$PIDFILE \
                    $LISTEN $DAEMON_OPTS $SSL_OPTS
        errcode=$?
    else

if we are using a daemonuser then change the user id

        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                    --chuid $DAEMONUSER --exec $DAEMON -- \
                    --detach --pidfile=$PIDFILE $LISTEN $DAEMON_OPTS \
                    $SSL_OPTS
        errcode=$?
    fi
    return $errcode

}

stop_server() {

Stop the process using the wrapper

    if [ -z "$DAEMONUSER" ] ; then
        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                    --exec $DAEMON
        errcode=$?
    else

if we are using a daemonuser then look for process that match

        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                    --user $DAEMONUSER --exec $DAEMON
        errcode=$?
    fi

    return $errcode

}

reload_server() { [ ! -f "$PIDFILE" ] && return 1 pid=cat $PIDFILE # This is the daemon's pid # Send a SIGHUP kill -1 $pid return $? }

force_stop() {

Force the process to die killing it manually

[ ! -e "$PIDFILE" ] && return
if running ; then
    kill -15 $pid
    # Is it really dead?
    sleep "$DODTIME"
    if running ; then
        kill -9 $pid
        sleep "$DODTIME"
        if running ; then
            echo "Cannot kill $NAME (pid=$pid)!"
            exit 1
        fi
    fi
fi
rm -f $PIDFILE

}

case "$1" in start) log_begin_msg "Starting $DESC " "$NAME" # Check if it's running first if running ; then log_warning_msg "apparently already running" log_end_msg 0 exit 0 fi if start_server && running ; then # It's ok, the server started and is running log_end_msg 0 else # Either we could not start it or it is not running # after we did # NOTE: Some servers might die some time after they start, # this code does not try to detect this and might give # a false positive (use 'status' for that) log_end_msg 1 fi ;; stop) log_begin_msg "Stopping $DESC" "$NAME" if running ; then # Only stop the server if we see it running stop_server log_end_msg $? else # If it's not running don't do anything log_warning_msg "apparently not running" log_end_msg 0 exit 0 fi ;; force-stop) # First try to stop gracefully the program $0 stop if running; then # If it's still running try to kill it more forcefully log_begin_msg "Stopping (force) $DESC" "$NAME" force_stop log_end_msg $? fi ;; restart|force-reload) log_begin_msg "Restarting $DESC" "$NAME" stop_server # Wait some sensible amount, some server need this [ -n "$DODTIME" ] && sleep $DODTIME start_server running log_end_msg $? ;; status)

    log_begin_msg "Checking status of $DESC" "$NAME"
    if running ;  then
        log_begin_msg "running"
        log_end_msg 0
    else
        log_warning_msg "apparently not running"
        log_end_msg 1
        exit 1
    fi
    ;;

Use this if the daemon cannot reload

reload) log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" log_warning_msg "cannot re-read the config file (use restart)." ;; *) N=/etc/init.d/openvswitch-controller echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac

exit 0