From: Justin Pettit Date: Sun, 7 Feb 2010 04:46:40 +0000 (-0800) Subject: xenserver: Various cleanups to get OVS to work with XenServer 5.5 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13ffee26f10b94feb49bdd941b132d11df846dce;p=openvswitch xenserver: Various cleanups to get OVS to work with XenServer 5.5 --- diff --git a/xenserver/etc_xensource_scripts_vif b/xenserver/etc_xensource_scripts_vif index 4e24d83a..1fbf155b 100755 --- a/xenserver/etc_xensource_scripts_vif +++ b/xenserver/etc_xensource_scripts_vif @@ -117,7 +117,13 @@ remove_from_bridge() NETWORK_MODE=$(cat /etc/xensource/network.conf) ACTION=$1 -TYPE=$2 + +# Older versions of XenServer do not pass in the type as an argument +if [[ $# -lt 2 ]]; then + TYPE=vif +else + TYPE=$2 +fi case $NETWORK_MODE in bridge|vswitch) ;; diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigure.py b/xenserver/opt_xensource_libexec_InterfaceReconfigure.py index 229f3b97..33f541a1 100644 --- a/xenserver/opt_xensource_libexec_InterfaceReconfigure.py +++ b/xenserver/opt_xensource_libexec_InterfaceReconfigure.py @@ -332,6 +332,7 @@ class DatabaseCache(object): defs = [ (a, b.strip("'")) for (a,b) in defs ] return dict(defs) + def __pif_on_host(self,pif): return self.__pifs.has_key(pif) diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py index c0838591..69047531 100644 --- a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py +++ b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py @@ -161,10 +161,9 @@ def datapath_deconfigure_ipdev(interface): return ['--', '--if-exists', 'del-port', interface] def datapath_modify_config(commands): - if debug_mode(): - log("modifying configuration:") - for c in commands: - log(" %s" % c) + #log("modifying configuration:") + #for c in commands: + # log(" %s" % c) rc = run_command(['/usr/bin/ovs-vsctl'] + ['--timeout=20'] + [c for c in commands if not c.startswith('#')]) @@ -176,7 +175,7 @@ def datapath_modify_config(commands): # Toplevel Datapath Configuration. # -def configure_datapath(pif): +def configure_datapath(pif, parent=None, vlan=None): """Bring up the datapath configuration for PIF. Should be careful not to glitch existing users of the datapath, e.g. other VLANs etc. @@ -265,13 +264,18 @@ def configure_datapath(pif): vsctl_argv += ['# deconfigure physical port %s' % dev] vsctl_argv += datapath_deconfigure_physical(dev) + if parent and datapath: + vsctl_argv += ['--', 'add-br', bridge, parent, vlan] + else: + vsctl_argv += ['--', 'add-br', bridge] + if len(physical_devices) > 1: vsctl_argv += ['# deconfigure bond %s' % pif_netdev_name(pif)] vsctl_argv += datapath_deconfigure_bond(pif_netdev_name(pif)) vsctl_argv += ['# configure bond %s' % pif_netdev_name(pif)] vsctl_argv += datapath_configure_bond(pif, physical_devices) extra_up_ports += [pif_netdev_name(pif)] - else: + else: iface = pif_netdev_name(physical_devices[0]) vsctl_argv += ['# add physical device %s' % iface] vsctl_argv += ['--', 'add-port', bridge, iface] @@ -329,16 +333,14 @@ class DatapathVswitch(Datapath): ipdev = self._ipdev bridge = pif_bridge_name(self._dp) - c,e = configure_datapath(self._dp) + if pif_is_vlan(self._pif): + datapath = pif_datapath(self._pif) + c,e = configure_datapath(self._dp, datapath, pifrec['VLAN']) + else: + c,e = configure_datapath(self._dp) vsctl_argv += c extra_ports += e - if pif_is_vlan(pif): - datapath = pif_datapath(pif) - vsctl_argv += ['--', 'add-br', bridge, datapath, pifrec['VLAN']] - else: - vsctl_argv += ['--', 'add-br', bridge] - xs_network_uuids = [] for nwpif in db().get_pifs_by_device(db().get_pif_record(self._pif)['device']): rec = db().get_pif_record(nwpif) @@ -356,10 +358,11 @@ class DatapathVswitch(Datapath): vsctl_argv += ['--', 'br-set-external-id', bridge, 'xs-network-uuids', ';'.join(xs_network_uuids)] - vsctl_argv += ["# deconfigure ipdev %s" % ipdev] - vsctl_argv += datapath_deconfigure_ipdev(ipdev) - vsctl_argv += ["# reconfigure ipdev %s" % ipdev] - vsctl_argv += ['--', 'add-port', bridge, ipdev] + if ipdev != bridge: + vsctl_argv += ["# deconfigure ipdev %s" % ipdev] + vsctl_argv += datapath_deconfigure_ipdev(ipdev) + vsctl_argv += ["# reconfigure ipdev %s" % ipdev] + vsctl_argv += ['--', 'add-port', bridge, ipdev] # XXX Needs support in ovs-vsctl #if bridge == ipdev: