X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-ctl.in;h=5ad5f26009b9917fb455f05bf9df350c218357f2;hb=0cc70daec76f59571d56a96bd86a960e18d13e9f;hp=be481dec6ea5f88a579368d33ee6be75a7b1b989;hpb=0311d4f48ddfeb5f7d25b45d53168c02603bcf62;p=sliver-openvswitch.git diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in index be481dec6..5ad5f2600 100755 --- a/utilities/ovs-ctl.in +++ b/utilities/ovs-ctl.in @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2009, 2010, 2011, 2012 Nicira, Inc. +# Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -52,29 +52,12 @@ insert_openvswitch_mod_if_required () { action "Inserting openvswitch module" modprobe openvswitch } -insert_brcompat_mod_if_required () { - if test -e /sys/module/bridge; then - log_warning_msg "bridge module is loaded, not loading brcompat" - return 1 - fi - test -e /sys/module/brcompat -o -e /sys/module/brcompat_mod && return 0 - action "Inserting brcompat module" modprobe brcompat -} - insert_mod_if_required () { insert_openvswitch_mod_if_required || return 1 - if test X"$BRCOMPAT" = Xyes; then - if insert_brcompat_mod_if_required; then - : - else - log_warning_msg "could not load brcompat module, disabling bridge compatibility" - BRCOMPAT=no - fi - fi } ovs_vsctl () { - ovs-vsctl --no-wait --timeout=5 "$@" + ovs-vsctl --no-wait "$@" } ovsdb_tool () { @@ -174,7 +157,7 @@ set_system_ids () { check_force_cores () { if test X"$FORCE_COREFILES" = Xyes; then - ulimit -Sc 67108864 + ulimit -c 67108864 fi } @@ -233,8 +216,9 @@ start_forwarding () { log_success_msg "ovs-vswitchd is already running" else # Increase the limit on the number of open file descriptors. - # ovs-vswitchd needs 16 per datapath, plus a few extra, so this - # should allow for 256 (or more) bridges. + # On Linux, ovs-vswitchd needs about one file descriptor per + # switch port, so this allows a very large number of switch + # ports. ulimit -n 5000 # Start ovs-vswitchd. @@ -245,14 +229,6 @@ start_forwarding () { fi start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@" fi - - if daemon_is_running ovs-brcompatd; then - log_success_msg "ovs-brcompatd is already running" - elif test X"$BRCOMPAT" = Xyes; then - set ovs-brcompatd - set "$@" -vconsole:emer -vsyslog:err -vfile:info - start_daemon "$OVS_BRCOMPATD_PRIORITY" "$OVS_BRCOMPATD_WRAPPER" "$@" - fi } ## ---- ## @@ -264,7 +240,6 @@ stop_ovsdb () { } stop_forwarding () { - stop_daemon ovs-brcompatd stop_daemon ovs-vswitchd } @@ -293,16 +268,24 @@ internal_interfaces () { done } -save_flows () { - if set X `ovs_vsctl list-br`; then - shift - if "$datadir/scripts/ovs-save" save-flows "$@" > "$script_flows"; then - chmod +x "$script_flows" - return 0 - fi +ovs_save () { + bridges=`ovs_vsctl -- --real list-br` + if [ -n "${bridges}" ] && \ + "$datadir/scripts/ovs-save" "$1" ${bridges} > "$2"; then + chmod +x "$2" + return 0 fi - script_flows= - return 1 + [ -z "${bridges}" ] && return 0 +} + +save_ofports_if_required () { + # Save ofports if we are upgrading from a pre-1.10 branch. + case `ovs-appctl version | sed 1q` in + "ovs-vswitchd (Open vSwitch) 1."[0-9].*) + action "Saving ofport values" ovs_save save-ofports \ + "${script_ofports}" + ;; + esac } save_interfaces () { @@ -310,26 +293,55 @@ save_interfaces () { > "${script_interfaces}" } +restore_ofports () { + [ -x "${script_ofports}" ] && \ + action "Restoring ofport values" "${script_ofports}" +} + restore_flows () { - [ -n "${script_flows}" ] && \ + [ -x "${script_flows}" ] && \ action "Restoring saved flows" "${script_flows}" } +restore_interfaces () { + [ ! -x "${script_interfaces}" ] && return 0 + action "Restoring interface configuration" "${script_interfaces}" + rc=$? + if test $rc = 0; then + level=debug + else + level=err + fi + log="logger -p daemon.$level -t ovs-save" + $log "interface restore script exited with status $rc:" + $log -f "$script_interfaces" +} + +init_restore_scripts () { + script_interfaces=`mktemp` + script_flows=`mktemp` + script_ofports=`mktemp` + trap 'rm -f "${script_interfaces}" "${script_flows}" "${script_ofports}"' 0 +} + force_reload_kmod () { ifaces=`internal_interfaces` action "Detected internal interfaces: $ifaces" true - script_interfaces=`mktemp` - script_flows=`mktemp` - trap 'rm -f "${script_interfaces}" "${script_flows}" ' 0 1 2 13 15 + init_restore_scripts + + action "Saving flows" ovs_save save-flows "${script_flows}" - action "Saving flows" save_flows + save_ofports_if_required # Restart the database first, since a large database may take a # while to load, and we want to minimize forwarding disruption. stop_ovsdb start_ovsdb + # Restore of ofports should happen before vswitchd is restarted. + restore_ofports + stop_forwarding if action "Saving interface configuration" save_interfaces; then @@ -346,11 +358,6 @@ force_reload_kmod () { done # try both old and new names in case this is post upgrade - if test -e /sys/module/brcompat_mod; then - action "Removing brcompat module" rmmod brcompat_mod - elif test -e /sys/module/brcompat; then - action "Removing brcompat module" rmmod brcompat - fi if test -e /sys/module/openvswitch_mod; then action "Removing openvswitch module" rmmod openvswitch_mod elif test -e /sys/module/openvswitch; then @@ -361,16 +368,7 @@ force_reload_kmod () { restore_flows - action "Restoring interface configuration" "$script_interfaces" - rc=$? - if test $rc = 0; then - level=debug - else - level=err - fi - log="logger -p daemon.$level -t ovs-save" - $log "force-reload-kmod interface restore script exited with status $rc:" - $log -f "$script_interfaces" + restore_interfaces "$datadir/scripts/ovs-check-dead-ifs" } @@ -379,12 +377,25 @@ force_reload_kmod () { ## restart ## ## ------- ## +save_interfaces_if_required () { + # Save interfaces if we are upgrading from a pre-1.10 branch. + case `ovs-appctl version | sed 1q` in + "ovs-vswitchd (Open vSwitch) 1."[0-9].*) + ifaces=`internal_interfaces` + action "Detected internal interfaces: $ifaces" true + if action "Saving interface configuration" save_interfaces; then + chmod +x "$script_interfaces" + fi + ;; + esac +} + restart () { if daemon_is_running ovsdb-server && daemon_is_running ovs-vswitchd; then - script_flows=`mktemp` - trap 'rm -f "${script_flows}"' 0 1 2 13 15 - - action "Saving flows" save_flows + init_restore_scripts + save_interfaces_if_required + action "Saving flows" ovs_save save-flows "${script_flows}" + save_ofports_if_required fi # Restart the database first, since a large database may take a @@ -392,11 +403,18 @@ restart () { stop_ovsdb start_ovsdb + # Restore of ofports, if required, should happen before vswitchd is + # restarted. + restore_ofports + stop_forwarding start_forwarding - # Restore the saved flows. Do not return error if restore fails. - restore_flows || true + # Restore the saved flows. + restore_flows + + # Restore the interfaces if required. Return true even if restore fails. + restore_interfaces || true } ## --------------- ## @@ -453,17 +471,14 @@ set_defaults () { SYSTEM_ID= DELETE_BRIDGES=no - BRCOMPAT=no DAEMON_CWD=/ FORCE_COREFILES=yes MLOCKALL=yes OVSDB_SERVER_PRIORITY=-10 OVS_VSWITCHD_PRIORITY=-10 - OVS_BRCOMPATD_PRIORITY=-10 OVSDB_SERVER_WRAPPER= OVS_VSWITCHD_WRAPPER= - OVS_BRCOMPATD_WRAPPER= DB_FILE=$dbdir/conf.db DB_SOCK=$rundir/db.sock @@ -529,7 +544,6 @@ Less important options for "start", "restart" and "force-reload-kmod": --no-mlockall do not lock all of ovs-vswitchd into memory --ovsdb-server-priority=NICE set ovsdb-server's niceness (default: $OVSDB_SERVER_PRIORITY) --ovs-vswitchd-priority=NICE set ovs-vswitchd's niceness (default: $OVS_VSWITCHD_PRIORITY) - --ovs-brcompatd-priority=NICE set ovs-brcompatd's niceness (default: $OVS_BRCOMPATD_PRIORITY) Debugging options for "start", "restart" and "force-reload-kmod": --ovsdb-server-wrapper=WRAPPER @@ -537,9 +551,6 @@ Debugging options for "start", "restart" and "force-reload-kmod": --ovs-vswitchd-wrapper=WRAPPER run specified daemon under WRAPPER (either 'valgrind' or 'strace') -Options for "start", "restart", "force-reload-kmod", "load-kmod", "status", and "version": - --brcompat enable Linux bridge compatibility module and daemon - File location options: --db-file=FILE database file name (default: $DB_FILE) --db-sock=SOCKET JSON-RPC socket name (default: $DB_SOCK) @@ -584,9 +595,6 @@ set_option () { daemons () { echo ovsdb-server ovs-vswitchd - if test X"$BRCOMPAT" = Xyes; then - echo ovs-brcompatd - fi } set_defaults