The old mlnx mechanism driver was used for SR-IOV with Ethernet
and infiniband support but the PCI allocation wasn't done by nova.
Juno introduced sriovnicswitch mechanism driver for SR-IOV with
Ethernet support. Mellanox recommends on using it.
The updated mlnx mechanism driver supports SR-IOV infiniband.
* support only port vnic_type 'direct'
* update vif_type name to ib_hostdev (the ib_hostdev is generic vif_type
for SR-IOV infiniband see https://review.openstack.org/#/c/187052/)
Closes-Bug: #
1460430
DocImpact
Change-Id: Ia822b492afdfeb1aecf373d5a8cdb72174512884
VIF_TYPE_802_QBH = '802.1qbh'
VIF_TYPE_HYPERV = 'hyperv'
VIF_TYPE_MIDONET = 'midonet'
-VIF_TYPE_MLNX_HOSTDEV = 'hostdev'
+VIF_TYPE_IB_HOSTDEV = 'ib_hostdev'
VIF_TYPE_HW_VEB = 'hw_veb'
VIF_TYPE_VROUTER = 'vrouter'
VIF_TYPE_OTHER = 'other'
VIF_TYPES = [VIF_TYPE_UNBOUND, VIF_TYPE_BINDING_FAILED, VIF_TYPE_OVS,
VIF_TYPE_IVS, VIF_TYPE_BRIDGE, VIF_TYPE_802_QBG,
VIF_TYPE_802_QBH, VIF_TYPE_HYPERV, VIF_TYPE_MIDONET,
- VIF_TYPE_MLNX_HOSTDEV, VIF_TYPE_HW_VEB,
+ VIF_TYPE_IB_HOSTDEV, VIF_TYPE_HW_VEB,
VIF_TYPE_DVS, VIF_TYPE_OTHER, VIF_TYPE_DISTRIBUTED,
VIF_TYPE_VROUTER]
"""
def __init__(self):
- # REVISIT(irenab): update supported_vnic_types to contain
- # only VNIC_DIRECT once its possible to specify
- # vnic_type via nova API/GUI. Currently VNIC_NORMAL is included
- # to enable VM creation via GUI. It should be noted, that if
- # several MDs are capable to bring bind port on chosen host, the
- # first listed MD will bind the port for VNIC_NORMAL
super(MlnxMechanismDriver, self).__init__(
agent_type=n_const.AGENT_TYPE_MLNX,
- vif_type=portbindings.VIF_TYPE_MLNX_HOSTDEV,
+ vif_type=portbindings.VIF_TYPE_IB_HOSTDEV,
vif_details={portbindings.CAP_PORT_FILTER: False},
- supported_vnic_types=[portbindings.VNIC_DIRECT,
- portbindings.VNIC_NORMAL])
+ supported_vnic_types=[portbindings.VNIC_DIRECT])
def get_allowed_network_types(self, agent=None):
return [p_constants.TYPE_LOCAL, p_constants.TYPE_FLAT,
AGENTS = None
AGENTS_DEAD = None
AGENTS_BAD = None
+ VNIC_TYPE = portbindings.VNIC_NORMAL
def _check_unbound(self, context):
self.assertIsNone(context._bound_segment_id)
def test_unknown_type(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS,
- self.UNKNOWN_TYPE_SEGMENTS)
+ self.UNKNOWN_TYPE_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_unbound(context)
def test_type_local(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS,
- self.LOCAL_SEGMENTS)
+ self.LOCAL_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_bound(context, self.LOCAL_SEGMENTS[1])
def test_type_local_dead(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS_DEAD,
- self.LOCAL_SEGMENTS)
+ self.LOCAL_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_unbound(context)
def test_type_flat(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS,
- self.FLAT_SEGMENTS)
+ self.FLAT_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_bound(context, self.FLAT_SEGMENTS[1])
def test_type_flat_bad(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS_BAD,
- self.FLAT_SEGMENTS)
+ self.FLAT_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_unbound(context)
def test_type_vlan(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS,
- self.VLAN_SEGMENTS)
+ self.VLAN_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_bound(context, self.VLAN_SEGMENTS[1])
def test_type_vlan_bad(self):
context = FakePortContext(self.AGENT_TYPE,
self.AGENTS_BAD,
- self.VLAN_SEGMENTS)
+ self.VLAN_SEGMENTS,
+ vnic_type=self.VNIC_TYPE)
self.driver.bind_port(context)
self._check_unbound(context)
class MlnxMechanismBaseTestCase(base.AgentMechanismBaseTestCase):
- VIF_TYPE = portbindings.VIF_TYPE_MLNX_HOSTDEV
+ VIF_TYPE = portbindings.VIF_TYPE_IB_HOSTDEV
CAP_PORT_FILTER = False
AGENT_TYPE = constants.AGENT_TYPE_MLNX
+ VNIC_TYPE = portbindings.VNIC_DIRECT
GOOD_MAPPINGS = {'fake_physical_network': 'fake_bridge'}
GOOD_CONFIGS = {'interface_mappings': GOOD_MAPPINGS}
pass
-class MlnxMechanismVnicTypeTestCase(MlnxMechanismBaseTestCase,
- base.AgentMechanismVlanTestCase):
-
- def _check_vif_type_for_vnic_type(self, vnic_type,
- expected_vif_type):
- context = base.FakePortContext(self.AGENT_TYPE,
- self.AGENTS,
- self.VLAN_SEGMENTS,
- vnic_type)
- self.driver.bind_port(context)
- self.assertEqual(expected_vif_type, context._bound_vif_type)
-
- def test_vnic_type_direct(self):
- self._check_vif_type_for_vnic_type(portbindings.VNIC_DIRECT,
- portbindings.VIF_TYPE_MLNX_HOSTDEV)
-
- def test_vnic_type_normal(self):
- self._check_vif_type_for_vnic_type(portbindings.VNIC_NORMAL,
- self.VIF_TYPE)
+class MlnxMechanismVlanTestCase(MlnxMechanismBaseTestCase,
+ base.AgentMechanismVlanTestCase):
+ pass
class MlnxMechanismVifDetailsTestCase(MlnxMechanismBaseTestCase):