X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=debian%2Fopenvswitch-switch.init;h=6f08c3fab9f9fdfe3603a5c2cb988b83ea895ba4;hb=d422c1189901d34125cd2d46552391c333d1f647;hp=3a7f2924406dfeba0b887e909f53fb8cd18fe19b;hpb=02dd3123a0e312f1d33403e744af52dd6096f12d;p=sliver-openvswitch.git diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init index 3a7f29244..6f08c3fab 100755 --- a/debian/openvswitch-switch.init +++ b/debian/openvswitch-switch.init @@ -1,316 +1,100 @@ #! /bin/sh # -# /etc/init.d/openvswitch-switch +# Copyright (C) 2011 Nicira Networks, Inc. # -# Written by Miquel van Smoorenburg . -# Modified for Debian by Ian Murdock . -# Further changes by Javier Fernandez-Sanguino -# Modified for openvswitch-switch. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: # -# Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ### BEGIN INIT INFO # Provides: openvswitch-switch # Required-Start: $network $named $remote_fs $syslog -# Required-Stop: +# Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Open vSwitch switch ### END INIT INFO -PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -ovs_vswitchd=/usr/sbin/ovs-vswitchd -ovsdb_server=/usr/bin/ovsdb-server - -(test -x $ovsdb_server && test -x $ovs_vswitchd) || exit 0 +(test -x /usr/sbin/ovs-vswitchd && test -x /usr/sbin/ovsdb-server) || exit 0 -DODTIME=1 # 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 +. /usr/share/openvswitch/scripts/ovs-lib +test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch -# Include ovs-openflowd defaults if available -unset OVSDB_SERVER_OPTS -unset OVS_VSWITCHD_OPTS -unset CORE_LIMIT -unset ENABLE_MONITOR -default=/etc/default/openvswitch-switch -if [ -f $default ] ; then - . $default +if test X"$BRCOMPAT" = Xyes && test ! -x /usr/sbin/ovs-brcompatd; then + BRCOMPAT=no + log_warning_msg "ovs-brcompatd missing, disabling bridge compatibility" fi -: ${ENABLE_MONITOR:=y} - -set -e - -# running_pid pid name -# -# Check if 'pid' is a process named 'name' -running_pid() -{ - local 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 child? - case $cmd in - $name|*/$name) - return 0 - ;; - *) - return 1 - ;; - esac -} - -# running name -# -# Checks for a running process named 'name' by looking for a pidfile -# named /var/run/${name}.pid -running() -{ - local name=$1 - local pidfile=/var/run/${name}.pid - - # No pidfile, probably no daemon present - [ ! -f "$pidfile" ] && return 1 - - # Obtain the pid and check it against the binary name - pid=`cat $pidfile` - running_pid $pid $name || return 1 - return 0 -} - -# force_stop name -# -# Checks for a running process named 'name', by looking for a pidfile -# named /var/run/${name}.pid, and then kills it and waits for it to -# die. -force_stop() { - local name=$1 - local pidfile=/var/run/${name}.pid - - [ ! -f "$pidfile" ] && return - if running $name; then - kill $pid - [ -n "$DODTIME" ] && sleep "$DODTIME"s - if running $name; then - kill -KILL $pid - [ -n "$DODTIME" ] && sleep "$DODTIME"s - if running $name; then - echo "Cannot kill $name (pid=$pid)!" - exit 1 - fi - fi +ovs_ctl () { + set /usr/share/openvswitch/scripts/ovs-ctl "$@" + if test X"$BRCOMPAT" = Xyes; then + set "$@" --brcompat fi - rm -f $pidfile - return 0 + "$@" } -must_succeed() { - echo -n "$1: " - shift - if "$@"; then - echo "success." - else - echo " ERROR." - exit 1 - fi +load_kmod () { + ovs_ctl load-kmod || exit $? } -check_op() { - echo -n "$1: " - shift - if "$@"; then - echo "success." +start () { + if ovs_ctl load-kmod; then + : else - echo " ERROR." - fi -} - -# is_module_loaded module -# -# Returns 0 if 'module' is loaded, 1 otherwise. - -is_module_loaded() { - local module=$1 - grep -q "^$module " /proc/modules -} - -# load_module module -# -# Loads 'module' into the running kernel, if it is not already loaded. -load_module() { - local module=$1 - echo -n "Loading $module: " - if is_module_loaded $module; then - echo "already loaded, nothing to do." - elif modprobe $module; then - echo "success." - else - echo "ERROR." - echo "$module has probably not been built for this kernel." - if ! test -d /usr/share/doc/openvswitch-datapath-source; then - echo "Install the openvswitch-datapath-source package, then read" - echo "/usr/share/doc/openvswitch-datapath-source/README.Debian" - else + echo "Module has probably not been built for this kernel." + if ! test -d /usr/share/doc/openvswitch-datapath-source; then + echo "Install the openvswitch-datapath-source package, then read" + else echo "For instructions, read" - echo "/usr/share/doc/openvswitch-datapath-source/README.Debian" - fi - exit 1 + fi + echo "/usr/share/doc/openvswitch-datapath-source/README.Debian" fi -} - -# unload_module module -# -# Unloads 'module' from the running kernel, if it is loaded. -unload_module() { - local module=$1 - echo -n "Unloading $module: " - if is_module_loaded $module; then - if rmmod $module; then - echo "success." - else - echo "ERROR." - exit 1 - fi - else - echo "not loaded, nothing to do." + set ovs_ctl ${1-start} --system-id=random + if test X"$FORCE_COREFILES" != X; then + set "$@" --force-corefiles="$FORCE_COREFILES" fi + "$@" || exit $? + + ovs_ctl --protocol=gre enable-protocol } -unload_modules() { - if is_module_loaded openvswitch_mod; then - for dp in $(ovs-dpctl dump-dps); do - echo -n "Deleting datapath $dp: " - if ovs-dpctl del-dp $dp; then - echo "success." - else - echo "ERROR." - fi - done - fi - unload_module openvswitch_mod - unload_module ip_gre_mod +stop () { + ovs_ctl stop } -case "$1" in +case $1 in start) - load_module openvswitch_mod - unload_module ip_gre - load_module ip_gre_mod - - if test -n "$CORE_LIMIT"; then - check_op "Setting core limit to $CORE_LIMIT" ulimit -c "$CORE_LIMIT" - fi - - # Create an empty configuration database if it doesn't exist. - if test ! -e /etc/openvswitch-switch/conf; then - # Create configuration database. - ovsdb-tool -vANY:console:emer \ - create /etc/openvswitch-switch/conf \ - /usr/share/openvswitch/vswitch.ovsschema - fi - - if test "$ENABLE_MONITOR" = y; then - monitor_opt=--monitor - else - monitor_opt= - fi - - # Start ovsdb-server. - set -- - set -- "$@" --verbose=ANY:console:emer --verbose=ANY:syslog:err - set -- "$@" --log-file - set -- "$@" --detach --pidfile $monitor_opt - set -- "$@" --remote punix:/var/run/ovsdb-server - set -- "$@" /etc/openvswitch-switch/conf - set -- "$@" $OVSDB_SERVER_OPTS - echo -n "Starting ovsdb-server: " - start-stop-daemon --start --quiet --pidfile /var/run/ovsdb-server.pid \ - --exec $ovsdb_server -- "$@" - if running ovsdb-server; then - echo "ovsdb-server." - else - echo " ERROR." - fi - - ovs-vsctl --no-wait init - - # Start ovs-vswitchd. - set -- - set -- "$@" --verbose=ANY:console:emer --verbose=ANY:syslog:err - set -- "$@" --log-file - set -- "$@" --detach --pidfile $monitor_opt - set -- "$@" unix:/var/run/ovsdb-server - set -- "$@" $OVS_VSWITCHD_OPTS - echo -n "Starting ovs-vswitchd: " - start-stop-daemon --start --quiet --pidfile /var/run/ovs-vswitchd.pid \ - --exec $ovs_vswitchd -- "$@" - if running ovs-vswitchd; then - echo "ovs-vswitchd." - else - echo " ERROR." - fi + start + ;; + stop | force-stop) + stop ;; - stop) - echo -n "Stopping ovs-vswitchd: " - start-stop-daemon --stop --quiet --oknodo \ - --pidfile /var/run/ovs-vswitchd.pid \ - --exec $ovs_vswitchd - echo "ovs-vswitchd." - - echo -n "Stopping ovsdb-server: " - start-stop-daemon --stop --quiet --oknodo \ - --pidfile /var/run/ovsdb-server.pid \ - --exec $ovsdb_server - echo "ovsdb-server." - ;; - force-stop) - echo -n "Forcefully stopping ovs-vswitchd: " - force_stop ovs-vswitchd - if ! running ovs-vswitchd; then - echo "ovs-vswitchd." - else - echo " ERROR." - fi - - echo -n "Forcefully stopping ovsdb-server: " - force_stop ovsdb-server - if ! running ovsdb-server; then - echo "ovsdb-server." - else - echo " ERROR." - fi - ;; - unload) - unload_modules - ;; - reload) - ;; - force-reload) - # Nothing to do, since ovs-vswitchd automatically reloads - # whenever its configuration changes, and ovsdb-server doesn't - # have anything to reload. + reload | force-reload) + # The OVS daemons keep up-to-date. ;; restart) - $0 stop || true - $0 start + stop + start ;; status) - for daemon in ovs-vswitchd ovsdb-server; do - echo -n "$daemon is " - if running $daemon; then - echo "running" - else - echo " not running." - exit 1 - fi - done + ovs_ctl status + ;; + force-reload-kmod) + start force-reload-kmod + ;; + load-kmod) + load_kmod ;; *) - N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|restart|force-reload|status|force-stop|unload}" >&2 + echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2 exit 1 ;; esac