ovs-ctl: Make "force-reload-kmod" warn when DHCP clients must be restarted.
[sliver-openvswitch.git] / utilities / ovs-ctl.in
index c102419..6885382 100755 (executable)
@@ -1,5 +1,5 @@
 #! /bin/sh
 #! /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.
 #
 # 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=`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
 
 for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin /usr/bin; do
     case :$PATH: in
@@ -31,14 +31,15 @@ done
 ## ----- ##
 
 insert_openvswitch_mod_if_required () {
 ## ----- ##
 
 insert_openvswitch_mod_if_required () {
-    # If openvswitch_mod is already loaded then we're done.
-    test -e /sys/module/openvswitch_mod && return 0
+    # 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
 
     # 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
     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,13 +48,24 @@ insert_openvswitch_mod_if_required () {
     fi
     action "removing bridge module" rmmod bridge || return 1
 
     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 () {
 }
 
 insert_brcompat_mod_if_required () {
-    test -e /sys/module/brcompat_mod && return 0
-    action "Inserting brcompat module" modprobe brcompat_mod
+    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 () {
 }
 
 ovs_vsctl () {
@@ -160,10 +172,7 @@ start () {
         ulimit -Sc 67108864
     fi
 
         ulimit -Sc 67108864
     fi
 
-    insert_openvswitch_mod_if_required || return 1
-    if test X"$BRCOMPAT" = Xyes; then
-        insert_brcompat_mod_if_required || return 1
-    fi
+    insert_mod_if_required || return 1
 
     if daemon_is_running ovsdb-server; then
        log_success_msg "ovsdb-server is already running"
 
     if daemon_is_running ovsdb-server; then
        log_success_msg "ovsdb-server is already running"
@@ -195,9 +204,10 @@ start () {
     if daemon_is_running ovs-vswitchd; then
        log_success_msg "ovs-vswitchd is already running"
     else
     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"
 
        # Start ovs-vswitchd.
        set ovs-vswitchd unix:"$DB_SOCK"
@@ -277,11 +287,16 @@ force_reload_kmod () {
         action "Removing datapath: $dp" ovs-dpctl del-dp "$dp"
     done
 
         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
     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
     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
     fi
 
     start
@@ -296,6 +311,8 @@ force_reload_kmod () {
     log="logger -p daemon.$level -t ovs-save"
     $log "force-reload-kmod interface restore script exited with status $rc:"
     $log -f "$script"
     log="logger -p daemon.$level -t ovs-save"
     $log "force-reload-kmod interface restore script exited with status $rc:"
     $log -f "$script"
+
+    "$datadir/scripts/ovs-check-dead-ifs"
 }
 
 ## --------------- ##
 }
 
 ## --------------- ##
@@ -369,7 +386,13 @@ set_defaults () {
     DPORT=
     SPORT=
 
     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`
         SYSTEM_TYPE=`lsb_release --id -s`
         system_release=`lsb_release --release -s`
         system_codename=`lsb_release --codename -s`
@@ -394,6 +417,7 @@ Commands:
   stop               stop Open vSwitch daemons
   status             check whether Open vSwitch daemons are running
   version            print versions of Open vSwitch daemons
   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
   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
@@ -418,7 +442,7 @@ Less important options for "start" and "force-reload-kmod":
   --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)
 
   --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", "status", and "version":
+Options for "start", "force-reload-kmod", "load-kmod", "status", and "version":
   --brcompat         enable Linux bridge compatibility module and daemon
 
 File location options:
   --brcompat         enable Linux bridge compatibility module and daemon
 
 File location options:
@@ -479,7 +503,7 @@ do
             usage
             ;;
         -V | --version)
             usage
             ;;
         -V | --version)
-            echo "$0 (Open vSwitch) $VERSION$BUILDNR"
+            echo "$0 (Open vSwitch) $VERSION"
             exit 0
             ;;
         --external-id=*)
             exit 0
             ;;
         --external-id=*)
@@ -548,6 +572,9 @@ case $command in
     force-reload-kmod)
        force_reload_kmod
         ;;
     force-reload-kmod)
        force_reload_kmod
         ;;
+    load-kmod)
+        insert_mod_if_required
+        ;;
     enable-protocol)
         enable_protocol
         ;;
     enable-protocol)
         enable_protocol
         ;;