def test_parse_data_port_mappings(self): ret = neutron.parse_data_port_mappings(None) self.assertEqual(ret, {}) ret = neutron.parse_data_port_mappings('br0:eth0') self.assertEqual(ret, {'br0': 'eth0'}) # Back-compat test ret = neutron.parse_data_port_mappings('eth0', default_bridge='br0') self.assertEqual(ret, {'br0': 'eth0'}) # Multiple mappings ret = neutron.parse_data_port_mappings('br0:eth0 br1:eth1') self.assertEqual(ret, {'br0': 'eth0', 'br1': 'eth1'})
def resolve_dpdk_ports(): ''' Resolve local PCI devices from configured mac addresses using the data-port configuration option @return: OrderDict indexed by PCI device address. ''' ports = config('data-port') devices = PCINetDevices() resolved_devices = {} db = kv() if ports: # NOTE: ordered dict of format {[mac]: bridge} portmap = parse_data_port_mappings(ports) for mac, bridge in portmap.iteritems(): pcidev = devices.get_device_from_mac(mac) if pcidev: # NOTE: store mac->pci allocation as post binding # to dpdk, it disappears from PCIDevices. db.set(mac, pcidev.pci_address) db.flush() pci_address = db.get(mac) if pci_address: resolved_devices[pci_address] = bridge return resolved_devices
def __call__(self): ports = config('data-port') if ports: # Map of {port/mac:bridge} portmap = parse_data_port_mappings(ports) ports = portmap.keys() # Resolve provided ports or mac addresses and filter out those # already attached to a bridge. resolved = self.resolve_ports(ports) # FIXME: is this necessary? normalized = { get_nic_hwaddr(port): port for port in resolved if port not in ports } normalized.update( {port: port for port in resolved if port in ports}) if resolved: return { bridge: normalized[port] for port, bridge in six.iteritems(portmap) if port in normalized.keys() } return None
def test_parse_data_port_mappings(self): ret = neutron.parse_data_port_mappings(None) self.assertEqual(ret, {}) ret = neutron.parse_data_port_mappings('br0:eth0') self.assertEqual(ret, {'eth0': 'br0'}) # Back-compat test ret = neutron.parse_data_port_mappings('eth0', default_bridge='br0') self.assertEqual(ret, {'eth0': 'br0'}) # Multiple mappings ret = neutron.parse_data_port_mappings('br0:eth0 br1:eth1') self.assertEqual(ret, {'eth0': 'br0', 'eth1': 'br1'}) # MultMAC mappings ret = neutron.parse_data_port_mappings('br0:cb:23:ae:72:f2:33 ' 'br0:fa:16:3e:12:97:8e') self.assertEqual(ret, { 'cb:23:ae:72:f2:33': 'br0', 'fa:16:3e:12:97:8e': 'br0' })
def __call__(self): ports = config('data-port') if ports: portmap = parse_data_port_mappings(ports) ports = portmap.values() resolved = self.resolve_ports(ports) normalized = {get_nic_hwaddr(port): port for port in resolved if port not in ports} normalized.update({port: port for port in resolved if port in ports}) if resolved: return {bridge: normalized[port] for bridge, port in six.iteritems(portmap) if port in normalized.keys()} return None
def __call__(self): ports = config('data-port') if ports: # Map of {port/mac:bridge} portmap = parse_data_port_mappings(ports) ports = portmap.keys() # Resolve provided ports or mac addresses and filter out those # already attached to a bridge. resolved = self.resolve_ports(ports) # FIXME: is this necessary? normalized = {get_nic_hwaddr(port): port for port in resolved if port not in ports} normalized.update({port: port for port in resolved if port in ports}) if resolved: return {bridge: normalized[port] for port, bridge in six.iteritems(portmap) if port in normalized.keys()} return None
def __call__(self): ports = config('data-port') if ports: portmap = parse_data_port_mappings(ports) ports = portmap.values() resolved = self.resolve_ports(ports) normalized = { get_nic_hwaddr(port): port for port in resolved if port not in ports } normalized.update( {port: port for port in resolved if port in ports}) if resolved: return { bridge: normalized[port] for bridge, port in six.iteritems(portmap) if port in normalized.keys() } return None