#
# 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
#
# 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
def datapath_configure_bond(pif,slaves):
bridge = pif_bridge_name(pif)
def datapath_configure_bond(pif,slaves):
bridge = pif_bridge_name(pif)
interface = pif_netdev_name(pif)
argv = ['--', '--fake-iface', 'add-bond', bridge, interface]
interface = pif_netdev_name(pif)
argv = ['--', '--fake-iface', 'add-bond', bridge, interface]
return ['--', '--if-exists', 'del-port', interface]
def datapath_modify_config(commands):
return ['--', '--if-exists', 'del-port', interface]
def datapath_modify_config(commands):
rc = run_command(['/usr/bin/ovs-vsctl'] + ['--timeout=20']
+ [c for c in commands if not c.startswith('#')])
rc = run_command(['/usr/bin/ovs-vsctl'] + ['--timeout=20']
+ [c for c in commands if not c.startswith('#')])
"""Bring up the datapath configuration for PIF.
Should be careful not to glitch existing users of the datapath, e.g. other VLANs etc.
"""Bring up the datapath configuration for PIF.
Should be careful not to glitch existing users of the datapath, e.g. other VLANs etc.
vsctl_argv += ['# deconfigure physical port %s' % dev]
vsctl_argv += datapath_deconfigure_physical(dev)
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)]
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)]
- vsctl_argv += ['--', 'add-port', bridge, iface]
+ vsctl_argv += ['--', '--may-exist', 'add-port', bridge, iface]
- 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)
- 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)
xs_network_uuids = []
for nwpif in db().get_pifs_by_device(db().get_pif_record(self._pif)['device']):
rec = db().get_pif_record(nwpif)
vsctl_argv += ['--', 'br-set-external-id', bridge,
'xs-network-uuids', ';'.join(xs_network_uuids)]
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]