xenserver: Kill bond slaves' dhclients when bringing up bond master.
authorBen Pfaff <blp@nicira.com>
Fri, 16 Jul 2010 16:22:23 +0000 (09:22 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 16 Jul 2010 16:22:28 +0000 (09:22 -0700)
This fixes the converse of the problem addressed by commit fe19e820
"xenserver: Kill bond master's dhclient when bringing up bond slave".  In
that commit's log message, I claimed that the converse was not a problem,
but I was wrong.  I must have screwed up in testing, because it really is
a problem.  This commit fixes it.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ian Campbell <Ian.Campbell@citrix.com>
CC: Dominic Curran <dominic.curran@citrix.com>
Reported-by: Michael Mao <mmao@nicira.com>
Bug #2668.

AUTHORS
xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py

diff --git a/AUTHORS b/AUTHORS
index b0f31d9..97f7c67 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -37,6 +37,7 @@ Jan Medved              jmedved@juniper.net
 Jeongkeun Lee           jklee@hp.com
 Joan Cirer              joan@ev0.net
 John Galgay             john@galgay.net
+Michael Mao             mmao@nicira.com
 Paulo Cravero           pcravero@as2594.net
 Peter Balland           peter@nicira.com
 Ram Jothikumar          rjothikumar@nicira.com
index 1e45759..ef2f1fe 100644 (file)
@@ -431,17 +431,25 @@ class DatapathVswitch(Datapath):
     def bring_down_existing(self):
         # interface-reconfigure is never explicitly called to down a
         # bond master.  However, when we are called to up a slave it
-        # is implicit that we are destroying the master.
+        # is implicit that we are destroying the master.  Conversely,
+        # when we are called to up a bond is is implicit that we are
+        # taking down the slaves.
         #
-        # This is (only) important in the case where the bond master
-        # uses DHCP.  We need to kill the dhclient process, otherwise
-        # bringing the bond master back up later will fail because
-        # ifup will refuse to start a duplicate dhclient.
+        # This is (only) important in the case where the device being
+        # implicitly taken down uses DHCP.  We need to kill the
+        # dhclient process, otherwise performing the inverse operation
+        # later later will fail because ifup will refuse to start a
+        # duplicate dhclient.
         bond_masters = pif_get_bond_masters(self._pif)
         for master in bond_masters:
             log("action_up: bring down bond master %s" % (pif_netdev_name(master)))
             run_command(["/sbin/ifdown", pif_bridge_name(master)])
 
+        bond_slaves = pif_get_bond_slaves(self._pif)
+        for slave in bond_slaves:
+            log("action_up: bring down bond slave %s" % (pif_netdev_name(slave)))
+            run_command(["/sbin/ifdown", pif_bridge_name(slave)])
+
     def configure(self):
         # Bring up physical devices. ovs-vswitchd initially enables or
         # disables bond slaves based on whether carrier is detected