X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-ctl.in;h=ed558346cdee00e37cd5610b9265c040352a6afa;hb=8a07709cb80462edb32fc11d056bfc08ce90f62d;hp=a5ef56ad973fb3b062d66fa0df95264902e29250;hpb=65420cc6d4ec08b89994cfc92e8d82868b32f405;p=sliver-openvswitch.git diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in index a5ef56ad9..ed558346c 100755 --- a/utilities/ovs-ctl.in +++ b/utilities/ovs-ctl.in @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc. +# Copyright (C) 2009, 2010, 2011, 2012 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. @@ -17,7 +17,7 @@ case $0 in */*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;; *) dir0=./ ;; esac -. "$dir0/ovs-lib.sh" || exit 1 +. "$dir0/ovs-lib" || exit 1 for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin /usr/bin; do case :$PATH: in @@ -30,15 +30,16 @@ done ## start ## ## ----- ## -insert_modules_if_required () { - # If openvswitch_mod is already loaded then we're done. - test -e /sys/module/openvswitch_mod && return 0 +insert_openvswitch_mod_if_required () { + # If openvswitch is already loaded then we're done. + test -e /sys/module/openvswitch -o -e /sys/module/openvswitch_mod && \ + return 0 - # Load openvswitch_mod. If that's successful then we're done. - action "Inserting openvswitch module" modprobe openvswitch_mod && return 0 + # Load openvswitch. If that's successful then we're done. + action "Inserting openvswitch module" modprobe openvswitch && return 0 # If the bridge module is loaded, then that might be blocking - # openvswitch_mod. Try to unload it, if there are no bridges. + # openvswitch. Try to unload it, if there are no bridges. test -e /sys/module/bridge || return 1 bridges=`echo /sys/class/net/*/bridge | sed 's,/sys/class/net/,,g;s,/bridge,,g'` if test "$bridges" != "*"; then @@ -47,8 +48,24 @@ insert_modules_if_required () { fi action "removing bridge module" rmmod bridge || return 1 - # Try loading openvswitch_mod again. - action "Inserting openvswitch module" modprobe openvswitch_mod + # Try loading openvswitch again. + 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 + insert_brcompat_mod_if_required || return 1 + fi } ovs_vsctl () { @@ -56,7 +73,11 @@ ovs_vsctl () { } ovsdb_tool () { - ovsdb-tool -vANY:console:emer "$@" + ovsdb-tool -vANY:console:off "$@" +} + +create_db () { + action "Creating empty database $DB_FILE" ovsdb_tool create "$DB_FILE" "$DB_SCHEMA" } upgrade_db () { @@ -64,15 +85,13 @@ upgrade_db () { if test ! -e "$DB_FILE"; then log_warning_msg "$DB_FILE does not exist" install -d -m 755 -o root -g root `dirname $DB_FILE` - - action "Creating empty database $DB_FILE" true - ovsdb_tool create "$DB_FILE" "$DB_SCHEMA" + create_db elif test X"`ovsdb_tool needs-conversion "$DB_FILE" "$DB_SCHEMA"`" != Xno; then # Back up the old version. version=`ovsdb_tool db-version "$DB_FILE"` cksum=`ovsdb_tool db-cksum "$DB_FILE" | awk '{print $1}'` backup=$DB_FILE.backup$version-$cksum - action "Backing up database to $backup" cp "$DB_FILE" "$backup" + action "Backing up database to $backup" cp "$DB_FILE" "$backup" || return 1 # Compact database. This is important if the old schema did not enable # garbage collection (i.e. if it did not have any tables with "isRoot": @@ -83,10 +102,20 @@ upgrade_db () { # does) would cause the record to be dropped by the first transaction, # then the second transaction would cause a referential integrity # failure (for a strong reference). + # + # Errors might occur on an Open vSwitch downgrade if ovsdb-tool doesn't + # understand some feature of the schema used in the OVSDB version that + # we're downgrading from, so we don't give up on error. action "Compacting database" ovsdb_tool compact "$DB_FILE" # Upgrade or downgrade schema. - action "Converting database schema" ovsdb_tool convert "$DB_FILE" "$DB_SCHEMA" + if action "Converting database schema" ovsdb_tool convert "$DB_FILE" "$DB_SCHEMA"; then + : + else + log_warning_msg "Schema conversion failed, using empty database instead" + rm -f "$DB_FILE" + create_db + fi fi } @@ -143,7 +172,7 @@ start () { ulimit -Sc 67108864 fi - insert_modules_if_required || return 1 + insert_mod_if_required || return 1 if daemon_is_running ovsdb-server; then log_success_msg "ovsdb-server is already running" @@ -175,9 +204,10 @@ start () { if daemon_is_running ovs-vswitchd; then log_success_msg "ovs-vswitchd is already running" else - # Increase the limit on the number of open file descriptors since - # ovs-vswitchd needs a few per bridge - ulimit -n 4096 + # 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. + ulimit -n 5000 # Start ovs-vswitchd. set ovs-vswitchd unix:"$DB_SOCK" @@ -187,6 +217,14 @@ start () { fi start_daemon "$OVS_VSWITCHD_PRIORITY" "$@" 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 "$@" -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO + start_daemon "$OVS_BRCOMPATD_PRIORITY" "$@" + fi } ## ---- ## @@ -194,6 +232,7 @@ start () { ## ---- ## stop () { + stop_daemon ovs-brcompatd stop_daemon ovs-vswitchd stop_daemon ovsdb-server } @@ -248,8 +287,16 @@ force_reload_kmod () { action "Removing datapath: $dp" ovs-dpctl del-dp "$dp" 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 + action "Removing openvswitch module" rmmod openvswitch fi start @@ -320,12 +367,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 DB_FILE=$etcdir/conf.db DB_SOCK=$rundir/db.sock @@ -335,7 +384,13 @@ set_defaults () { DPORT= SPORT= - if (lsb_release --id) >/dev/null 2>&1; then + type_file=$etcdir/system-type.conf + version_file=$etcdir/system-version.conf + + if test -e "$type_file" ; then + SYSTEM_TYPE=`cat $type_file` + SYSTEM_VERSION=`cat $version_file` + elif (lsb_release --id) >/dev/null 2>&1; then SYSTEM_TYPE=`lsb_release --id -s` system_release=`lsb_release --release -s` system_codename=`lsb_release --codename -s` @@ -360,38 +415,40 @@ Commands: stop stop Open vSwitch daemons status check whether Open vSwitch daemons are running version print versions of Open vSwitch daemons + load-kmod insert modules if not already present force-reload-kmod save OVS network device state, stop OVS, unload kernel module, reload kernel module, start OVS, restore state enable-protocol enable protocol specified in options with iptables help display this help message -One of the following options should be specified when starting Open vSwitch: +One of the following options is required for "start" and "force-reload-kmod": --system-id=UUID set specific ID to uniquely identify this system --system-id=random use a random but persistent UUID to identify this system -Other important options for starting Open vSwitch: +Other important options for "start" and "force-reload-kmod": --system-type=TYPE set system type (e.g. "XenServer") --system-version=VERSION set system version (e.g. "5.6.100-39265p") --external-id="key=value" add given key-value pair to Open_vSwitch external-ids --delete-bridges delete all bridges just before starting ovs-vswitchd -Less important options for starting Open vSwitch: - --daemon-cwd=DIR current working directory for OVS daemons (default: $DAEMON_CWD) - --no-force-corefiles - do not forcibly enable core dumps for OVS daemons - --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) +Less important options for "start" and "force-reload-kmod": + --daemon-cwd=DIR set working dir for OVS daemons (default: $DAEMON_CWD) + --no-force-corefiles do not force on core dumps for OVS daemons + --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) + +Options for "start", "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) --db-schema=FILE database schema file name (default: $DB_SCHEMA) -Options for enable-protocol: +Options for "enable-protocol": --protocol=PROTOCOL protocol to enable with iptables (default: gre) --sport=PORT source port to match (for tcp or udp protocol) --dport=PORT ddestination port to match (for tcp or udp protocol) @@ -427,6 +484,13 @@ set_option () { eval $var=\$value } +daemons () { + echo ovsdb-server ovs-vswitchd + if test X"$BRCOMPAT" = Xyes; then + echo ovs-brcompatd + fi +} + set_defaults extra_ids= command= @@ -437,7 +501,7 @@ do usage ;; -V | --version) - echo "$0 (Open vSwitch) $VERSION$BUILDNR" + echo "$0 (Open vSwitch) $VERSION" exit 0 ;; --external-id=*) @@ -492,14 +556,23 @@ case $command in stop ;; status) - daemon_status ovsdb-server && daemon_status ovs-vswitchd + rc=0 + for daemon in `daemons`; do + daemon_status $daemon || rc=$? + done + exit $rc ;; version) - ovsdb-server --version && ovs-vswitchd --version + for daemon in `daemons`; do + $daemon --version + done ;; force-reload-kmod) force_reload_kmod ;; + load-kmod) + insert_mod_if_required + ;; enable-protocol) enable_protocol ;;