# (StrOpt) Type of Network Interface to allocate for VM:
# mlnx_direct or hostdev according to libvirt terminology
# vnic_type = mlnx_direct
-# (BoolOpt) Enable server compatibility with old nova
-# apply_profile_patch = False
default=portbindings.VIF_TYPE_MLNX_DIRECT,
help=_("Type of VM network interface: mlnx_direct or "
"hostdev")),
- cfg.BoolOpt('apply_profile_patch',
- default=False,
- help=_("Enable server compatibility with old nova")),
]
from neutron.common import constants
from neutron.extensions import portbindings
-from neutron.openstack.common import jsonutils
from neutron.openstack.common import log
from neutron.plugins.ml2 import driver_api as api
from neutron.plugins.ml2.drivers import mech_agent
cfg.CONF.ESWITCH.vnic_type,
{portbindings.CAP_PORT_FILTER: False},
portbindings.VNIC_TYPES)
- self.update_profile = cfg.CONF.ESWITCH.apply_profile_patch
def check_segment_for_agent(self, segment, agent):
mappings = agent['configurations'].get('interface_mappings', {})
context.set_binding(segment[api.ID],
vif_type,
self.vif_details)
- # REVISIT(irenab): Temporary solution till nova support
- # will be merged for physical_network propagation
- # via VIF object to VIFDriver (required by mlnx vif plugging).
- if self.update_profile:
- profile = {'physical_network':
- segment['physical_network']}
- context._binding.profile = jsonutils.dumps(profile)
def _get_vif_type(self, requested_vnic_type):
if requested_vnic_type == portbindings.VNIC_MACVTAP:
cur_binding.driver = new_binding.driver
cur_binding.segment = new_binding.segment
- # REVISIT(rkukura): The binding:profile attribute is
- # supposed to be input-only, but the Mellanox driver
- # currently modifies it while binding. Remove this
- # code when the Mellanox driver has been updated to
- # use binding:vif_details instead.
- if cur_binding.profile != new_binding.profile:
- cur_binding.profile = new_binding.profile
-
# Update PortContext's port dictionary to reflect the
# updated binding state.
self._update_port_dict_binding(port, cur_binding)
cur_binding.vif_details = new_binding.vif_details
cur_binding.driver = new_binding.driver
cur_binding.segment = new_binding.segment
- if cur_binding.profile != new_binding.profile:
- cur_binding.profile = new_binding.profile
def delete_port(self, context, id, l3_port_check=True):
LOG.debug(_("Deleting port %s"), id)
# under the License.
-import mock
-from oslo.config import cfg
-
from neutron.common import constants
from neutron.extensions import portbindings
from neutron.plugins.ml2 import driver_api as api
self.VIF_TYPE)
-class MlnxMechanismProfileTestCase(MlnxMechanismBaseTestCase):
- def setUp(self):
- cfg.CONF.set_override('apply_profile_patch', True, 'ESWITCH')
- super(MlnxMechanismProfileTestCase, self).setUp()
-
- def test_profile_contains_physical_net(self):
- VLAN_SEGMENTS = [{api.ID: 'vlan_segment_id',
- api.NETWORK_TYPE: 'vlan',
- api.PHYSICAL_NETWORK: 'fake_physical_network',
- api.SEGMENTATION_ID: 1234}]
-
- context = base.FakePortContext(self.AGENT_TYPE,
- self.AGENTS,
- VLAN_SEGMENTS,
- portbindings.VNIC_DIRECT)
- context._binding = mock.Mock()
- context._binding.profile = {}
- segment = VLAN_SEGMENTS[0]
- agent = self.AGENTS[0]
- self.driver.try_to_bind_segment_for_agent(context, segment, agent)
- self.assertEqual('{"physical_network": "fake_physical_network"}',
- context._binding.profile)
-
-
class MlnxMechanismVifDetailsTestCase(MlnxMechanismBaseTestCase):
def setUp(self):
super(MlnxMechanismVifDetailsTestCase, self).setUp()