Added driver option for Contrail DPDK

With x710 NICs Contrail can make use of vfio driver.
uio_pci_generic is still default.

Change-Id: I23b173ea86d8f109da4059a3d3a1df6806e213be
This commit is contained in:
Michael Henkel 2017-09-25 20:27:19 +02:00
parent 04b9cb114f
commit 0b8cd76dbd
6 changed files with 43 additions and 3 deletions

View File

@ -8,7 +8,8 @@
"name": "em3"
}
],
"mtu": 1500
"mtu": 1500,
"driver": "vfio"
}
]
}

View File

@ -7,3 +7,4 @@ network_config:
type: interface
name: em3
mtu: 1500
driver: vfio #default driver is uio_pci_generic

View File

@ -722,6 +722,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
if len(contrail_vrouter_dpdk.members) > 1:
data += "BOND_MODE=%s\n" % contrail_vrouter_dpdk.bond_mode
data += "BOND_POLICY=%s\n" % contrail_vrouter_dpdk.bond_policy
data += "DRIVER=%s\n" % contrail_vrouter_dpdk.driver
data += "CPU_LIST=%s\n" % contrail_vrouter_dpdk.cpu_list
if contrail_vrouter_dpdk.vlan_id:
data += "VLAN_ID=%s\n" % contrail_vrouter_dpdk.vlan_id

View File

@ -1279,7 +1279,7 @@ class ContrailVrouterDpdk(_BaseOpts):
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
members=None, bond_mode=None, bond_policy=None,
cpu_list='0-31', vlan_id=None):
driver=None, cpu_list='0-31', vlan_id=None):
addresses = addresses or []
super(ContrailVrouterDpdk, self).__init__(name, use_dhcp, use_dhcpv6,
@ -1292,6 +1292,7 @@ class ContrailVrouterDpdk(_BaseOpts):
self.members = members or []
self.bond_mode = bond_mode
self.bond_policy = bond_policy
self.driver = driver or 'uio_pci_generic'
self.cpu_list = cpu_list
self.vlan_id = vlan_id
@ -1300,6 +1301,7 @@ class ContrailVrouterDpdk(_BaseOpts):
name = _get_required_field(json, 'name', 'ContrailVrouterDpdk')
bond_mode = json.get('bond_mode', '')
bond_policy = json.get('bond_policy', '')
driver = json.get('driver', 'uio_pci_generic')
cpu_list = json.get('cpu_list', '0-31')
vlan_id = json.get('vlan_id', '')
@ -1310,5 +1312,5 @@ class ContrailVrouterDpdk(_BaseOpts):
return ContrailVrouterDpdk(name, *opts, members=members,
bond_mode=bond_mode,
bond_policy=bond_policy,
bond_policy=bond_policy, driver=driver,
cpu_list=cpu_list, vlan_id=vlan_id)

View File

@ -731,6 +731,8 @@ definitions:
oneOf:
- $ref: "#/definitions/string_or_param"
- $ref: "#/definitions/int_or_param"
driver:
$ref: "#/definitions/string_or_param"
coremask:
$ref: "#/definitions/string_or_param"
vlan_id:

View File

@ -420,6 +420,24 @@ NETMASK=255.255.255.0
DEVICETYPE=vhost
TYPE=dpdk
BIND_INT=0000:00:03.0
DRIVER=uio_pci_generic
CPU_LIST=0-31
"""
_CONTRAIL_VROUTER_DPDK_IFACE_CUST_DRIVER = """# This file is autogenerated by \
os-net-config
DEVICE=vhost0
HOTPLUG=no
ONBOOT=yes
NM_CONTROLLED=no
PEERDNS=no
BOOTPROTO=static
IPADDR=10.0.0.30
NETMASK=255.255.255.0
DEVICETYPE=vhost
TYPE=dpdk
BIND_INT=0000:00:03.0
DRIVER=vfio
CPU_LIST=0-31
"""
@ -438,6 +456,7 @@ TYPE=dpdk
BIND_INT=0000:00:03.0,0000:00:01.0
BOND_MODE=2
BOND_POLICY=802.3ad
DRIVER=uio_pci_generic
CPU_LIST=2,3
"""
@ -816,6 +835,20 @@ class TestIfcfgNetConfig(base.TestCase):
self.provider.interface_data['vhost0'])
self.assertEqual('', self.get_route_config('vhost0'))
def test_add_contrail_vrouter_dpdk_interface_cust_driver(self):
addresses = [objects.Address('10.0.0.30/24')]
interface1 = objects.Interface('em3')
self.stubs.Set(utils, 'get_stored_pci_address',
self.stub_get_stored_pci_address)
cvi = objects.ContrailVrouterDpdk('vhost0', addresses=addresses,
members=[interface1], driver='vfio')
self.provider.noop = True
self.provider.add_contrail_vrouter_dpdk(cvi)
self.assertEqual(
_CONTRAIL_VROUTER_DPDK_IFACE_CUST_DRIVER,
self.provider.interface_data['vhost0'])
self.assertEqual('', self.get_route_config('vhost0'))
def test_add_contrail_vrouter_dpdk_interface_nic_mapping(self):
nic_mapping = {'nic1': 'em3'}
self.stubbed_mapped_nics = nic_mapping