Example #1
0
 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
Example #3
0
    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
Example #4
0
 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'
     })
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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