X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=xenserver%2Fopt_xensource_libexec_InterfaceReconfigureVswitch.py;h=59bce6f57b111969764cf973adc5daecdc8f0711;hb=23817ac722022c48b40140c1da617388293185e4;hp=c08385918a03ce742f3924ccd6be2766c686d770;hpb=a4af00400a835eb87569ba40e21874c05e872c0f;p=openvswitch diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py index c0838591..59bce6f5 100644 --- a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py +++ b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py @@ -1,5 +1,5 @@ # Copyright (c) 2008,2009 Citrix Systems, Inc. -# Copyright (c) 2009 Nicira Networks. +# Copyright (c) 2009,2010 Nicira Networks. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published @@ -122,7 +122,7 @@ def datapath_deconfigure_physical(netdev): def datapath_configure_bond(pif,slaves): bridge = pif_bridge_name(pif) - pifrec = db.get_pif_record(pif) + pifrec = db().get_pif_record(pif) interface = pif_netdev_name(pif) argv = ['--', '--fake-iface', 'add-bond', bridge, interface] @@ -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,16 +264,21 @@ def configure_datapath(pif): vsctl_argv += ['# deconfigure physical port %s' % dev] vsctl_argv += datapath_deconfigure_physical(dev) + if parent and datapath: + vsctl_argv += ['--', '--may-exist', 'add-br', bridge, parent, vlan] + else: + vsctl_argv += ['--', '--may-exist', '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] + vsctl_argv += ['--', '--may-exist', 'add-port', bridge, iface] return vsctl_argv,extra_up_ports @@ -326,19 +330,18 @@ class DatapathVswitch(Datapath): extra_ports = [] pifrec = db().get_pif_record(self._pif) + dprec = db().get_pif_record(self._dp) 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,16 +359,17 @@ 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: - # vsctl_argv += ['--add=bridge.%s.mac=%s' % (bridge, pifrec['MAC'])] + # vsctl_argv += ['--add=bridge.%s.mac=%s' % (bridge, dprec['MAC'])] #else: - # vsctl_argv += ['--add=iface.%s.mac=%s' % (ipdev, pifrec['MAC'])] + # vsctl_argv += ['--add=iface.%s.mac=%s' % (ipdev, dprec['MAC'])] self._vsctl_argv = vsctl_argv self._extra_ports = extra_ports