X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=xenserver%2Fetc_init.d_openvswitch;h=a08a95dbd5f3e319a2ffbe77b0e5fd3d7c41561b;hb=f7a122fc2457f805fd0906f4368ea42d2ea55584;hp=e404c60e2a905188f44cc66e2df8194841dd7d55;hpb=6f83469de7edcbeb66449b8488d24a6cfbfb0898;p=sliver-openvswitch.git diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch index e404c60e2..a08a95dbd 100755 --- a/xenserver/etc_init.d_openvswitch +++ b/xenserver/etc_init.d_openvswitch @@ -20,8 +20,8 @@ # 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 @@ -49,19 +49,21 @@ else "$@" 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) @@ -74,20 +76,25 @@ case $NETWORK_MODE in 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} @@ -159,21 +166,25 @@ function hup_monitor_external_ids { 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 @@ -343,7 +354,17 @@ function set_system_ids { 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 } @@ -397,10 +418,12 @@ function start { 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 } @@ -422,6 +445,51 @@ function restart { 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 @@ -437,7 +505,7 @@ case "$1" in # 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") "$@" @@ -457,6 +525,9 @@ case "$1" in /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" ;;