X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=xenserver%2Fopt_xensource_libexec_InterfaceReconfigureVswitch.py;h=ef2f1fe67f881d4700eb3f0f87a3a90b01dc1505;hb=3aa77165af7d5acb18e79016ad8d741e35e1d45f;hp=c31fa2dbf98eeffbb04bcbd6ef361298f14a3dba;hpb=92e906e484fac90d5c5618f2bca33f595ad2e390;p=openvswitch diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py index c31fa2db..ef2f1fe6 100644 --- a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py +++ b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py @@ -12,6 +12,7 @@ # GNU Lesser General Public License for more details. # from InterfaceReconfigure import * +import os import re # @@ -367,6 +368,13 @@ class DatapathVswitch(Datapath): @classmethod def rewrite(cls): + if not os.path.exists("/var/run/openvswitch/db.sock"): + # ovsdb-server is not running, so we can't update the database. + # Probably we are being called as part of system shutdown. Just + # skip the update, since the external-ids will be updated on the + # next boot anyhow. + return + vsctl_argv = [] for pif in db().get_all_pifs(): pifrec = db().get_pif_record(pif) @@ -421,7 +429,26 @@ class DatapathVswitch(Datapath): self._extra_ports = extra_ports def bring_down_existing(self): - pass + # 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. 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 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