# limitations under the License.
### BEGIN INIT INFO
# Provides: openvswitch-switch
-# Required-Start: $network $named $remote_fs $syslog
-# Required-Stop: $remote_fs
+# Required-Start:
+# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Open vSwitch switch
"$@"
rc=$?
if [ $rc -eq 0 ] ; then
- log_success_msg $"$STRING "
+ log_success_msg $"$STRING "
else
- log_failure_msg $"$STRING "
+ 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}
# Config variables specific to ovsdb-server
-: ${OVSDB_SERVER_REMOTES:=punix:/var/run/openvswitch/db.sock db:Open_vSwitch,managers}
+: ${OVSDB_SERVER_REMOTES:=punix:/var/run/openvswitch/db.sock db:Open_vSwitch,managers db:Open_vSwitch,manager_options}
: ${OVSDB_SERVER_DB:=/etc/openvswitch/conf.db}
: ${OVSDB_SERVER_PIDFILE:=/var/run/openvswitch/ovsdb-server.pid}
: ${OVSDB_SERVER_RUN_DIR:=/var/xen/openvswitch}
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
+ for dp in $($dpctl dump-dps); do
action "Removing datapath: $dp" "$dpctl" del-dp "$dp"
done
}
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
external-ids:system-id="$INSTALLATION_UUID" \
external-ids:xs-system-uuid="$INSTALLATION_UUID"
else
- if test -f /etc/openvswitch/install_uuid.conf; then
+ 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
+ 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"
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
}
fi
}
+function internal_interfaces {
+ # Outputs a list of internal interfaces:
+ #
+ # - There is an internal interface for every bridge, whether it has
+ # an Interface record or not and whether the Interface record's
+ # 'type' is properly set.
+ #
+ # - There is an internal interface for each Interface record whose
+ # 'type' is 'internal'.
+ #
+ # But ignore interfaces that don't really exist.
+ for d in `(ovs-vsctl --bare \
+ -- --columns=name find Interface type=internal \
+ -- list-br) | sort -u`
+ do
+ if test -e "/sys/class/net/$d"; then
+ printf "%s " "$d"
+ fi
+ done
+}
+
+function force_reload_kmod {
+ ifaces=$(internal_interfaces)
+ action "Configured internal interfaces: $ifaces" true
+
+ stop
+
+ script=$(mktemp)
+ action "Save interface configuration to $script" true
+ if ! /usr/share/openvswitch/scripts/ovs-save $ifaces > $script; then
+ warning "Failed to save configuration, not replacing kernel module"
+ start
+ exit 1
+ fi
+ chmod +x $script
+
+ action "Destroy datapaths" remove_all_dp
+
+ remove_modules
+
+ start
+
+ action "Restore interface configuration from $script" $script
+}
+
case "$1" in
start)
start
# configuration up-to-date all the time. HUP ovs-external-ids so it
# re-runs.
hup_monitor_external_ids
- ;;
+ ;;
strace-vswitchd)
shift
strace -p $(cat "$VSWITCHD_PIDFILE") "$@"
/usr/sbin/ovs-vswitchd -V
/usr/sbin/ovs-brcompatd -V
;;
+ force-reload-kmod)
+ force_reload_kmod
+ ;;
help)
printf "openvswitch [start|stop|restart|reload|force-reload|status|version]\n"
;;