# 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.
# 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:
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Open vSwitch switch
+### END INIT INFO
+
+# source function library
+if [ -f /etc/init.d/functions ]; then
+ . /etc/init.d/functions
+elif [ -f /etc/rc.d/init.d/functions ]; then
+ . /etc/rc.d/init.d/functions
+elif [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+else
+ echo "$0: missing LSB shell function library" >&2
+ exit 1
+fi
-. /etc/init.d/functions
+if type action >/dev/null 2>&1; then
+ :
+else
+ # SUSE lacks action
+ action() {
+ STRING=$1
+ shift
+ "$@"
+ rc=$?
+ if [ $rc -eq 0 ] ; then
+ log_success_msg $"$STRING "
+ else
+ log_failure_msg $"$STRING "
+ fi
+ return $rc
+ }
+fi
-. /etc/xensource-inventory
+test -e /etc/xensource-inventory && . /etc/xensource-inventory
test -e /etc/sysconfig/openvswitch && . /etc/sysconfig/openvswitch
+if test -e /etc/xensource/network.conf; then
+ NETWORK_MODE=$(cat /etc/xensource/network.conf)
+fi
-NETWORK_MODE=$(cat /etc/xensource/network.conf)
-case $NETWORK_MODE in
+case ${NETWORK_MODE:=openvswitch} in
vswitch|openvswitch)
;;
bridge)
esac
# General config variables in /etc/sysconfig/openvswitch
-if test "$PRODUCT_VERSION" = "5.5.0"; then
- # XenServer 5.5.0 needs ovs-brcompatd and /proc/net simulation.
+if [ -f /etc/xensource-inventory ]; then
+ if test "$PRODUCT_VERSION" = "5.5.0"; then
+ # XenServer 5.5.0 needs ovs-brcompatd and /proc/net simulation.
+ : ${ENABLE_BRCOMPAT:=y}
+ : ${ENABLE_FAKE_PROC_NET:=y}
+ else
+ # Later versions don't need them.
+ : ${ENABLE_BRCOMPAT:=n}
+ : ${ENABLE_FAKE_PROC_NET:=n}
+ fi
+else
: ${ENABLE_BRCOMPAT:=y}
: ${ENABLE_FAKE_PROC_NET:=y}
-else
- # Later versions don't need them.
- : ${ENABLE_BRCOMPAT:=n}
- : ${ENABLE_FAKE_PROC_NET:=n}
fi
: ${ENABLE_MONITOR:=y}
: ${FORCE_COREFILES:=y}
}
function insert_modules_if_required {
+ if test -e /sys/module/bridge; then
+ bridges=`echo /sys/class/net/*/bridge | sed 's,/sys/class/net/,,g;s,/bridge,,g'`
+ if test "$bridges" != "*"; then
+ log_warning_msg "not removing bridge module because bridges exist ($bridges)"
+ else
+ action "removing bridge module" rmmod bridge
+ fi
+ fi
if ! lsmod | grep -q "openvswitch_mod"; then
action "Inserting llc module" modprobe llc
action "Inserting openvswitch module" modprobe openvswitch_mod
function set_system_ids {
if [ -f /etc/xensource-inventory ]; then
+ OVS_VERSION=`ovs-vswitchd --version | sed 's/.*) //;1q'`
action "Configuring Open vSwitch system IDs" true
$vsctl --no-wait --timeout=5 set Open_vSwitch . \
- external-ids:system-type="$PRODUCT_BRAND" \
- external-ids:system-version="$PRODUCT_VERSION-$BUILD_NUMBER" \
+ ovs-version="$OVS_VERSION" \
+ system-type="$PRODUCT_BRAND" \
+ system-version="$PRODUCT_VERSION-$BUILD_NUMBER" \
external-ids:system-id="$INSTALLATION_UUID" \
external-ids:xs-system-uuid="$INSTALLATION_UUID"
else
- action "Configuring Open vSwitch system IDs" false
+ if test -f /etc/openvswitch/install_uuid.conf; then
+ . /etc/openvswitch/install_uuid.conf
+ elif INSTALLATION_UUID=`uuidgen`; then
+ echo "INSTALLATION_UUID=$INSTALLATION_UUID" > /etc/openvswitch/install_uuid.conf
+ else
+ log_failure_msg "missing uuidgen, could not generate system UUID"
+ return
+ fi
+ $vsctl --no-wait --timeout=5 set Open_vSwitch . \
+ external-ids:system-id="$INSTALLATION_UUID"
+ action "Configuring Open vSwitch system IDs" true
fi
}
# Allow GRE traffic.
iptables -I INPUT -p gre -j ACCEPT
+ schemaver=`$ovsdb_tool schema-version "$VSWITCHD_OVSDB_SCHEMA"`
if [ ! -e "$OVSDB_SERVER_DB" ]; then
warning "$OVSDB_SERVER_DB does not exist"
install -d -m 755 -o root -g root `dirname $OVSDB_SERVER_DB`
action "Creating empty database $OVSDB_SERVER_DB" true
$ovsdb_tool -vANY:console:emer create "$OVSDB_SERVER_DB" "$VSWITCHD_OVSDB_SCHEMA"
else
+ # If schema version changed, then back up the old version.
+ oldver=`$ovsdb_tool db-version "$OVSDB_SERVER_DB"`
+ if test "X$oldver" != "X$schemaver"; then
+ backup=$OVSDB_SERVER_DB.backup$oldver
+ action "Backing up $OVSDB_SERVER_DB in $backup before converting from schema version \"$oldver\" to \"$schemaver\"" true
+ cp "$OVSDB_SERVER_DB" "$backup"
+ fi
+
# Upgrade or downgrade schema and compact database.
$ovsdb_tool -vANY:console:emer convert "$OVSDB_SERVER_DB" "$VSWITCHD_OVSDB_SCHEMA"
fi
start_ovsdb_server
- $vsctl --no-wait --timeout=5 init
+ $vsctl --no-wait --timeout=5 init -- set Open_vSwitch . db-version="$schemaver"
if [ ! -e /var/run/openvswitch.booted ]; then
touch /var/run/openvswitch.booted
for bridge in $($vsctl list-br); do
start_brcompatd
fi
- # Start daemon to monitor external ids
- PYTHONPATH=/usr/share/openvswitch/python \
- /usr/share/openvswitch/scripts/ovs-external-ids \
- --pidfile --detach $monitor_opt "$VSWITCHD_OVSDB_SERVER"
+ if [ -f /etc/xensource-inventory ]; then
+ # Start daemon to monitor external ids
+ PYTHONPATH=/usr/share/openvswitch/python \
+ /usr/share/openvswitch/scripts/ovs-external-ids \
+ --pidfile --detach $monitor_opt "$VSWITCHD_OVSDB_SERVER"
+ fi
touch /var/lock/subsys/openvswitch
}