X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=xenserver%2Fetc_init.d_openvswitch;h=8ba8aeeb5679066ee67d6d22e7558c751508ca17;hb=d652410464e0a8e1a35389e7f0c0cd2c2430827a;hp=f531d45cef4f807431ca75fb7f46831e442052c9;hpb=bc39196036f8e33d15274855087f0c47be2095ee;p=sliver-openvswitch.git diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch index f531d45ce..8ba8aeeb5 100755 --- a/xenserver/etc_init.d_openvswitch +++ b/xenserver/etc_init.d_openvswitch @@ -1,11 +1,11 @@ -#!/bin/bash +#!/bin/sh # # openvswitch # # chkconfig: 2345 09 91 # description: Manage Open vSwitch kernel modules and user-space daemons -# Copyright (C) 2009, 2010 Nicira Networks, Inc. +# Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,391 +18,89 @@ # 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. - -. /etc/init.d/functions - +### BEGIN INIT INFO +# Provides: openvswitch-switch +# Required-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch switch +### END INIT INFO + +. /usr/share/openvswitch/scripts/ovs-lib.sh || exit 1 +. /etc/xensource-inventory test -e /etc/sysconfig/openvswitch && . /etc/sysconfig/openvswitch -# General config variables in /etc/sysconfig/openvswitch -: ${ENABLE_BRCOMPAT:=y} -: ${ENABLE_FAKE_PROC_NET:=y} -: ${ENABLE_MONITOR:=y} -: ${FORCE_COREFILES:=y} - -# Config variables specific to ovsdb-server -: ${OVSDB_SERVER_REMOTES:=punix:/var/run/openvswitch/db.sock db:Open_vSwitch,managers} -: ${OVSDB_SERVER_DB:=/etc/openvswitch/conf.db} -: ${OVSDB_SERVER_PIDFILE:=/var/run/openvswitch/ovsdb-server.pid} -: ${OVSDB_SERVER_RUN_DIR:=/var/xen/openvswitch} -: ${OVSDB_SERVER_PRIORITY:=-10} -: ${OVSDB_SERVER_LOGFILE:=/var/log/openvswitch/ovsdb-server.log} -: ${OVSDB_SERVER_FILE_LOGLEVEL:=INFO} -: ${OVSDB_SERVER_SYSLOG_LOGLEVEL:=ERR} -: ${OVSDB_SERVER_MEMLEAK_LOGFILE:=} -: ${OVSDB_SERVER_STRACE_LOG:=} -: ${OVSDB_SERVER_STRACE_OPT:=} -: ${OVSDB_SERVER_VALGRIND_LOG:=} -: ${OVSDB_SERVER_VALGRIND_OPT:=} - -# Config variables specific to ovs-vswitchd -: ${VSWITCHD_OVSDB_SERVER:=unix:/var/run/openvswitch/db.sock} -: ${VSWITCHD_OVSDB_SCHEMA:=/usr/share/openvswitch/vswitch.ovsschema} -: ${VSWITCHD_PIDFILE:=/var/run/openvswitch/ovs-vswitchd.pid} -: ${VSWITCHD_RUN_DIR:=/var/xen/openvswitch} -: ${VSWITCHD_PRIORITY:=-10} -: ${VSWITCHD_MLOCKALL:=yes} -: ${VSWITCHD_LOGFILE:=/var/log/openvswitch/ovs-vswitchd.log} -: ${VSWITCHD_FILE_LOGLEVEL:=INFO} -: ${VSWITCHD_SYSLOG_LOGLEVEL:=ERR} -: ${VSWITCHD_MEMLEAK_LOGFILE:=} -: ${VSWITCHD_STRACE_LOG:=} -: ${VSWITCHD_STRACE_OPT:=} -: ${VSWITCHD_VALGRIND_LOG:=} -: ${VSWITCHD_VALGRIND_OPT:=} - -# Config variables specific to ovs-brcompatd -: ${BRCOMPATD_PIDFILE:=/var/run/openvswitch/ovs-brcompatd.pid} -: ${BRCOMPATD_RUN_DIR:=/var/xen/openvswitch} -: ${BRCOMPATD_PRIORITY:=-10} -: ${BRCOMPATD_LOGFILE:=/var/log/openvswitch/ovs-brcompatd.log} -: ${BRCOMPATD_FILE_LOGLEVEL:=INFO} -: ${BRCOMPATD_SYSLOG_LOGLEVEL:=ERR} -: ${BRCOMPATD_MEMLEAK_LOGFILE:=} -: ${BRCOMPATD_STRACE_LOG:=} -: ${BRCOMPATD_STRACE_OPT:=} -: ${BRCOMPATD_VALGRIND_LOG:=} -: ${BRCOMPATD_VALGRIND_OPT:=} - -# Full paths to executables & modules -ovsdb_server="/usr/sbin/ovsdb-server" -ovsdb_tool="/usr/bin/ovsdb-tool" -vswitchd="/usr/sbin/ovs-vswitchd" -brcompatd="/usr/sbin/ovs-brcompatd" -dpctl="/usr/bin/ovs-dpctl" -appctl="/usr/bin/ovs-appctl" -ofctl="/usr/bin/ovs-ofctl" -vsctl="/usr/bin/ovs-vsctl" - -if [ "$ENABLE_FAKE_PROC_NET" = "y" ]; then - if [ "$ENABLE_BRCOMPAT" != "y" ]; then - warning "FAKE_PROC_NET required BRCOMPAT which was disabled. Force enabling." - ENABLE_BRCOMPAT="y" - fi -fi - -if test "$ENABLE_MONITOR" = "y"; then - monitor_opt="--monitor" -else - monitor_opt= -fi - -function dp_list { - "$dpctl" show | grep '^dp[0-9]\+:' | cut -d':' -f 1 -} - -function turn_on_corefiles { - ulimit -Sc 67108864 -} - -function remove_all_dp { - for dp in $(dp_list); do - action "Removing datapath: $dp" "$dpctl" del-dp "$dp" - done -} - -function insert_modules_if_required { - if ! lsmod | grep -q "openvswitch_mod"; then - action "Inserting llc module" modprobe llc - action "Inserting openvswitch module" modprobe openvswitch_mod - fi - if [ -n "$BRCOMPATD_PIDFILE" ] && ! lsmod | grep -q "brcompat_mod"; then - action "Inserting brcompat module" modprobe brcompat_mod - fi - if [ -f "/lib/modules/`uname -r`/kernel/net/openvswitch/ip_gre_mod.ko" ] && ! lsmod | grep -q "ip_gre_mod"; then - action "Inserting ip_gre module" modprobe ip_gre_mod - fi -} - -function remove_modules { - if lsmod | grep -q "brcompat_mod"; then - action "Removing brcompat module" rmmod brcompat_mod.ko - fi - if lsmod | grep -q "openvswitch_mod"; then - action "Removing openvswitch module" rmmod openvswitch_mod.ko - fi - if lsmod | grep -q "ip_gre_mod"; then - action "Removing ip_gre module" rmmod ip_gre_mod.ko - fi -} - -function start_ovsdb_server { - local syslog_opt="-vANY:SYSLOG:${OVSDB_SERVER_SYSLOG_LOGLEVEL}" - local logfile_file_opt="" - local logfile_level_opt="" - if [ ! -d "$OVSDB_SERVER_RUN_DIR" ]; then - install -d -m 755 -o root -g root "$OVSDB_SERVER_RUN_DIR" - fi - cd "$OVSDB_SERVER_RUN_DIR" - local remotes= - for remote in $OVSDB_SERVER_REMOTES; do - remotes="$remotes --remote=$remote" - done - - install -d -m 755 -o root -g root `dirname $OVSDB_SERVER_LOGFILE` - if [ -n "$OVSDB_SERVER_FILE_LOGLEVEL" ]; then - logfile_level_opt="-vANY:FILE:${OVSDB_SERVER_FILE_LOGLEVEL}" - logfile_file_opt="--log-file=$OVSDB_SERVER_LOGFILE" - fi - - local leak_opt="" - if [ -n "$OVSDB_SERVER_MEMLEAK_LOGFILE" ]; then - leak_opt="--check-leaks=$OVSDB_SERVER_MEMLEAK_LOGFILE" - if [ -e "$OVSDB_SERVER_MEMLEAK_LOGFILE" ]; then - mv "$OVSDB_SERVER_MEMLEAK_LOGFILE" "$OVSDB_SERVER_MEMLEAK_LOGFILE.prev" - fi - fi - local strace_opt="" - local daemonize="y" - if [ -n "$OVSDB_SERVER_STRACE_LOG" ] && [ -n "$OVSDB_SERVER_VALGRIND_LOG" ]; then - printf "Can not start with both VALGRIND and STRACE\n" - exit 1 - fi - if [ -n "$OVSDB_SERVER_STRACE_LOG" ]; then - strace_opt="strace -o $OVSDB_SERVER_STRACE_LOG $OVSDB_SERVER_STRACE_OPT" - daemonize="n" - fi - if [ -n "$OVSDB_SERVER_VALGRIND_LOG" ]; then - valgrind_opt="valgrind --log-file=$OVSDB_SERVER_VALGRIND_LOG $OVSDB_SERVER_VALGRIND_OPT" - daemonize="n" - fi - ssl_opts="--private-key=db:SSL,private_key --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,ca_cert" - install -d -m 755 -o root -g root `dirname $OVSDB_SERVER_PIDFILE` - if [ "$daemonize" != "y" ]; then - # Start in background and force a "success" message - action "Starting ovsdb_server ($strace_opt$valgrind_opt)" true - (nice -n "$OVSDB_SERVER_PRIORITY" $strace_opt $valgrind_opt "$ovsdb_server" "$OVSDB_SERVER_DB" --pidfile="$OVSDB_SERVER_PIDFILE" --detach $monitor_opt --no-chdir -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $remotes $ssl_opts) & - else - action "Starting ovsdb-server" nice -n "$OVSDB_SERVER_PRIORITY" "$ovsdb_server" "$OVSDB_SERVER_DB" --pidfile="$OVSDB_SERVER_PIDFILE" --detach $monitor_opt --no-chdir -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $remotes $ssl_opts - fi -} - -function start_vswitchd { - local syslog_opt="-vANY:SYSLOG:${VSWITCHD_SYSLOG_LOGLEVEL}" - local logfile_file_opt="" - local logfile_level_opt="" - if [ ! -d "$VSWITCHD_RUN_DIR" ]; then - install -d -m 755 -o root -g root "$VSWITCHD_RUN_DIR" - fi - cd "$VSWITCHD_RUN_DIR" - - install -d -m 755 -o root -g root `dirname $VSWITCHD_LOGFILE` - if [ -n "$VSWITCHD_FILE_LOGLEVEL" ]; then - logfile_level_opt="-vANY:FILE:${VSWITCHD_FILE_LOGLEVEL}" - logfile_file_opt="--log-file=$VSWITCHD_LOGFILE" - fi - - local leak_opt="" - if [ -n "$VSWITCHD_MEMLEAK_LOGFILE" ]; then - leak_opt="--check-leaks=$VSWITCHD_MEMLEAK_LOGFILE" - if [ -e "$VSWITCHD_MEMLEAK_LOGFILE" ]; then - mv "$VSWITCHD_MEMLEAK_LOGFILE" "$VSWITCHD_MEMLEAK_LOGFILE.prev" - fi - fi - local strace_opt="" - local daemonize="y" - if [ -n "$VSWITCHD_STRACE_LOG" ] && [ -n "$VSWITCHD_VALGRIND_LOG" ]; then - printf "Can not start with both VALGRIND and STRACE\n" - exit 1 - fi - if [ -n "$VSWITCHD_STRACE_LOG" ]; then - strace_opt="strace -o $VSWITCHD_STRACE_LOG $VSWITCHD_STRACE_OPT" - daemonize="n" - fi - if [ -n "$VSWITCHD_VALGRIND_LOG" ]; then - valgrind_opt="valgrind --log-file=$VSWITCHD_VALGRIND_LOG $VSWITCHD_VALGRIND_OPT" - daemonize="n" - fi - local fake_proc_net_opt="" - if [ "$ENABLE_FAKE_PROC_NET" = "y" ]; then - fake_proc_net_opt="--fake-proc-net" - fi - if [ "$VSWITCHD_MLOCKALL" != "no" ]; then - mlockall_opt="--mlockall" - fi - - install -d -m 755 -o root -g root `dirname $VSWITCHD_PIDFILE` - if [ "$daemonize" != "y" ]; then - # Start in background and force a "success" message - action "Starting ovs-vswitchd ($strace_opt$valgrind_opt)" true - (nice -n "$VSWITCHD_PRIORITY" $strace_opt $valgrind_opt "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $mlockall_opt "$VSWITCHD_OVSDB_SERVER") & - else - action "Starting ovs-vswitchd" nice -n "$VSWITCHD_PRIORITY" "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $mlockall_opt "$VSWITCHD_OVSDB_SERVER" - fi -} - -function start_brcompatd { - local syslog_opt="-vANY:SYSLOG:${BRCOMPATD_SYSLOG_LOGLEVEL}" - local logfile_file_opt="" - local logfile_level_opt="" - if [ -d "$BRCOMPATD_RUN_DIR" ]; then - install -d -m 755 -o root -g root "$BRCOMPATD_RUN_DIR" - fi - cd "$BRCOMPATD_RUN_DIR" +case `cat /etc/xensource/network.conf` in + vswitch|openvswitch) + ;; + bridge) + exit 0 + ;; + *) + echo "Open vSwitch disabled (/etc/xensource/network.conf is invalid)" >&2 + exit 0 + ;; +esac - install -d -m 755 -o root -g root `dirname $BRCOMPATD_LOGFILE` - if [ -n "$BRCOMPATD_FILE_LOGLEVEL" ]; then - logfile_level_opt="-vANY:FILE:${BRCOMPATD_FILE_LOGLEVEL}" - logfile_file_opt="--log-file=$BRCOMPATD_LOGFILE" +start () { + set $ovs_ctl ${1-start} + set "$@" --system-id="$INSTALLATION_UUID" + set "$@" --system-type="$PRODUCT_BRAND" + set "$@" --system-version="$PRODUCT_VERSION-$BUILD_NUMBER" + set "$@" --external-id=xs-system-uuid="$INSTALLATION_UUID" + set "$@" --daemon-cwd=/var/xen/openvswitch + if test X"$FORCE_COREFILES" != X; then + set "$@" --force-corefiles="$FORCE_COREFILES" fi - - local leak_opt="" - if [ -n "$BRCOMPATD_MEMLEAK_LOGFILE" ]; then - leak_opt="--check-leaks=$BRCOMPATD_MEMLEAK_LOGFILE" - if [ -e "$BRCOMPATD_MEMLEAK_LOGFILE" ]; then - mv "$BRCOMPATD_MEMLEAK_LOGFILE" "$BRCOMPATD_MEMLEAK_LOGFILE.prev" - fi + if test X"$OVSDB_SERVER_PRIORITY" != X; then + set "$@" --ovsdb-server-priority="$OVSDB_SERVER_PRIORITY" fi - local strace_opt="" - local daemonize="y" - if [ -n "$BRCOMPATD_STRACE_LOG" ] && [ -n "$BRCOMPATD_VALGRIND_LOG" ]; then - printf "Can not start with both VALGRIND and STRACE\n" - exit 1 + if test X"$VSWITCHD_PRIORITY" != X; then + set "$@" --ovs-vswitchd-priority="$VSWITCHD_PRIORITY" fi - if [ -n "$BRCOMPATD_STRACE_LOG" ]; then - strace_opt="strace -o $BRCOMPATD_STRACE_LOG $BRCOMPATD_STRACE_OPT" - daemonize="n" + if test X"$VSWITCHD_MLOCKALL" != X; then + set "$@" --mlockall="$VSWITCHD_MLOCKALL" fi - if [ -n "$VALGRIND_LOG" ]; then - valgrind_opt="valgrind --log-file=$BRCOMPATD_VALGRIND_LOG $BRCOMPATD_VALGRIND_OPT" - daemonize="n" + if test ! -e /var/run/openvswitch.booted; then + touch /var/run/openvswitch.booted + set "$@" --delete-bridges fi - appctl_cmd="$appctl --target=/var/run/openvswitch/ovs-vswitchd.\`cat $VSWITCHD_PIDFILE\`.ctl %s" + "$@" - install -d -m 755 -o root -g root `dirname $BRCOMPATD_PIDFILE` - if [ "$daemonize" != "y" ]; then - # Start in background and force a "success" message - action "Starting ovs-brcompatd ($strace_opt$valgrind_opt)" true - (nice -n "$VSWITCHD_PRIORITY" $strace_opt $valgrind_opt "$brcompatd"--no-chdir --appctl-command="$appctl_cmd" --pidfile=$BRCOMPATD_PIDFILE -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt "$VSWITCHD_OVSDB_SERVER") & + if daemon_is_running ovs-xapi-sync; then + log_success_msg "ovs-xapi-sync is already running" else - action "Starting ovs-brcompatd" nice -n "$BRCOMPATD_PRIORITY" $strace_opt $valgrind_opt "$brcompatd" --no-chdir --appctl-command="$appctl_cmd" --pidfile=$BRCOMPATD_PIDFILE --detach $monitor_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt "$VSWITCHD_OVSDB_SERVER" + PYTHONPATH=/usr/share/openvswitch/python \ + /usr/share/openvswitch/scripts/ovs-xapi-sync \ + --log-file --pidfile --detach --monitor unix:/var/run/openvswitch/db.sock fi -} -function stop_ovsdb_server { - if [ -f "$OVSDB_SERVER_PIDFILE" ]; then - local pid=$(cat "$OVSDB_SERVER_PIDFILE") - action "Killing ovsdb-server ($pid)" kill -TERM $pid - rm -f "$OVSDB_SERVER_PIDFILE" - fi -} + $ovs_ctl --protocol=gre enable-protocol -function stop_vswitchd { - if [ -f "$VSWITCHD_PIDFILE" ]; then - local pid=$(cat "$VSWITCHD_PIDFILE") - action "Killing ovs-vswitchd ($pid)" kill -TERM $pid - rm -f "$VSWITCHD_PIDFILE" - fi -} - -function stop_brcompatd { - if [ -f "$BRCOMPATD_PIDFILE" ]; then - local pid=$(cat "$BRCOMPATD_PIDFILE") - action "Killing ovs-brcompatd ($pid)" kill -TERM $pid - rm -f "$BRCOMPATD_PIDFILE" - fi -} - -function restart_approval { - if test ! -t 0; then - # Don't prompt if invoked non-interactively. - return 0 - fi - cat </dev/null && test -e /etc/xensource/xhad.conf; then + PATH=$PATH:/opt/xensource/xha + action "Stopping HA daemon" ha_stop_daemon + action "Starting HA daemon" ha_start_daemon fi - - set_system_uuid - - start_vswitchd - start_brcompatd - touch /var/lock/subsys/openvswitch } -function stop { - stop_brcompatd - stop_vswitchd - stop_ovsdb_server +stop () { + $ovs_ctl stop + stop_daemon ovs-xapi-sync rm -f /var/lock/subsys/openvswitch } -function restart { - if restart_approval; then - stop - start - fi -} - -case "$1" in +ovs_ctl=/usr/share/openvswitch/scripts/ovs-ctl +case $1 in start) start ;; @@ -410,28 +108,28 @@ case "$1" in stop ;; restart) - restart - ;; - strace-vswitchd) - shift - strace -p $(cat "$VSWITCHD_PIDFILE") "$@" + stop + start ;; - strace-brcompatd) - shift - strace -p $(cat "$BRCOMPATD_PIDFILE") "$@" + reload|force-reload) + # The main OVS daemons keep up-to-date, but ovs-xapi-sync needs help. + pidfile=/var/run/openvswitch/ovs-xapi-sync.pid + if test -e "$pidfile"; then + pid=`cat "$pidfile"` + action "Configuring Open vSwitch external IDs" kill -HUP $pid + fi ;; status) - status -p "$OVSDB_SERVER_PIDFILE" ovsdb-server - status -p "$VSWITCHD_PIDFILE" ovs-vswitchd - status -p "$BRCOMPATD_PIDFILE" ovs-brcompatd + $ovs_ctl status && daemon_status ovs-xapi-sync ;; version) - /usr/sbin/ovsdb-server -V - /usr/sbin/ovs-vswitchd -V - /usr/sbin/ovs-brcompatd -V + $ovs_ctl version + ;; + force-reload-kmod) + force_reload_kmod ;; help) - printf "openvswitch [start|stop|restart|unload|status|version]\n" + printf "openvswitch [start|stop|restart|reload|force-reload|status|version]\n" ;; *) printf "Unknown command: $1\n"