SR-IOV: Remove deprecated supported_pci_vendor_devs option
The SR-IOV option supported_pci_vendor_devs has been deprecated in Newton and This change removes it from Ocata. Change-Id: I42dadfd0b62730ca2d34d37cb63f19f6fec75567
This commit is contained in:
parent
3c7c8ee67a
commit
e8fd2505e2
@ -36,9 +36,6 @@ def setup_conf():
|
|||||||
cfg.CONF.import_group('VXLAN', 'neutron.plugins.ml2.drivers.linuxbridge.'
|
cfg.CONF.import_group('VXLAN', 'neutron.plugins.ml2.drivers.linuxbridge.'
|
||||||
'agent.common.config')
|
'agent.common.config')
|
||||||
cfg.CONF.import_group('ml2', 'neutron.plugins.ml2.config')
|
cfg.CONF.import_group('ml2', 'neutron.plugins.ml2.config')
|
||||||
cfg.CONF.import_group('ml2_sriov',
|
|
||||||
'neutron.plugins.ml2.drivers.mech_sriov.mech_driver.'
|
|
||||||
'mech_driver')
|
|
||||||
cfg.CONF.import_group('SECURITYGROUP', 'neutron.agent.securitygroups_rpc')
|
cfg.CONF.import_group('SECURITYGROUP', 'neutron.agent.securitygroups_rpc')
|
||||||
dhcp_agent.register_options(cfg.CONF)
|
dhcp_agent.register_options(cfg.CONF)
|
||||||
cfg.CONF.register_opts(l3_hamode_db.L3_HA_OPTS)
|
cfg.CONF.register_opts(l3_hamode_db.L3_HA_OPTS)
|
||||||
|
@ -54,7 +54,6 @@ import neutron.extensions.securitygroup
|
|||||||
import neutron.plugins.ml2.config
|
import neutron.plugins.ml2.config
|
||||||
import neutron.plugins.ml2.drivers.macvtap.agent.config
|
import neutron.plugins.ml2.drivers.macvtap.agent.config
|
||||||
import neutron.plugins.ml2.drivers.mech_sriov.agent.common.config
|
import neutron.plugins.ml2.drivers.mech_sriov.agent.common.config
|
||||||
import neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver
|
|
||||||
import neutron.plugins.ml2.drivers.openvswitch.agent.common.config
|
import neutron.plugins.ml2.drivers.openvswitch.agent.common.config
|
||||||
import neutron.wsgi
|
import neutron.wsgi
|
||||||
|
|
||||||
@ -257,14 +256,6 @@ def list_ml2_conf_opts():
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def list_ml2_conf_sriov_opts():
|
|
||||||
return [
|
|
||||||
('ml2_sriov',
|
|
||||||
neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver.
|
|
||||||
sriov_opts)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def list_ovs_opts():
|
def list_ovs_opts():
|
||||||
return [
|
return [
|
||||||
('ovs',
|
('ovs',
|
||||||
|
@ -14,10 +14,9 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from oslo_config import cfg
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
from neutron._i18n import _, _LE, _LW
|
from neutron._i18n import _LW
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.plugins.common import constants as p_const
|
from neutron.plugins.common import constants as p_const
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
from neutron.plugins.ml2 import driver_api as api
|
||||||
@ -32,22 +31,6 @@ VIF_TYPE_HW_VEB = 'hw_veb'
|
|||||||
VIF_TYPE_HOSTDEV_PHY = 'hostdev_physical'
|
VIF_TYPE_HOSTDEV_PHY = 'hostdev_physical'
|
||||||
FLAT_VLAN = 0
|
FLAT_VLAN = 0
|
||||||
|
|
||||||
sriov_opts = [
|
|
||||||
cfg.ListOpt('supported_pci_vendor_devs',
|
|
||||||
help=_("Comma-separated list of supported PCI vendor devices, "
|
|
||||||
"as defined by vendor_id:product_id according to the "
|
|
||||||
"PCI ID Repository. Default None accept all PCI vendor "
|
|
||||||
"devices"
|
|
||||||
"DEPRECATED: This option is deprecated in the Newton "
|
|
||||||
"release and will be removed in the Ocata release. "
|
|
||||||
"Starting from Ocata the mechanism driver will accept "
|
|
||||||
"all PCI vendor devices."),
|
|
||||||
deprecated_for_removal=True),
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
cfg.CONF.register_opts(sriov_opts, "ml2_sriov")
|
|
||||||
|
|
||||||
|
|
||||||
class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
||||||
"""Mechanism Driver for SR-IOV capable NIC based switching.
|
"""Mechanism Driver for SR-IOV capable NIC based switching.
|
||||||
@ -95,15 +78,6 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
|||||||
def get_mappings(self, agent):
|
def get_mappings(self, agent):
|
||||||
return agent['configurations'].get('device_mappings', {})
|
return agent['configurations'].get('device_mappings', {})
|
||||||
|
|
||||||
def initialize(self):
|
|
||||||
try:
|
|
||||||
self.pci_vendor_info = cfg.CONF.ml2_sriov.supported_pci_vendor_devs
|
|
||||||
if self.pci_vendor_info is not None:
|
|
||||||
self._check_pci_vendor_config(self.pci_vendor_info)
|
|
||||||
except ValueError:
|
|
||||||
LOG.exception(_LE("Failed to parse supported PCI vendor devices"))
|
|
||||||
raise cfg.Error(_("Parsing supported pci_vendor_devs failed"))
|
|
||||||
|
|
||||||
def bind_port(self, context):
|
def bind_port(self, context):
|
||||||
LOG.debug("Attempting to bind port %(port)s on "
|
LOG.debug("Attempting to bind port %(port)s on "
|
||||||
"network %(network)s",
|
"network %(network)s",
|
||||||
@ -116,10 +90,6 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
|||||||
vnic_type)
|
vnic_type)
|
||||||
return
|
return
|
||||||
|
|
||||||
if not self._check_supported_pci_vendor_device(context):
|
|
||||||
LOG.debug("Refusing to bind due to unsupported pci_vendor device")
|
|
||||||
return
|
|
||||||
|
|
||||||
if vnic_type == portbindings.VNIC_DIRECT_PHYSICAL:
|
if vnic_type == portbindings.VNIC_DIRECT_PHYSICAL:
|
||||||
# Physical functions don't support things like QoS properties,
|
# Physical functions don't support things like QoS properties,
|
||||||
# spoof checking, etc. so we might as well side-step the agent
|
# spoof checking, etc. so we might as well side-step the agent
|
||||||
@ -183,24 +153,6 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
|||||||
"""SR-IOV driver vlan transparency support."""
|
"""SR-IOV driver vlan transparency support."""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _check_supported_pci_vendor_device(self, context):
|
|
||||||
if self.pci_vendor_info is None:
|
|
||||||
return True
|
|
||||||
if self.pci_vendor_info:
|
|
||||||
profile = context.current.get(portbindings.PROFILE, {})
|
|
||||||
if not profile:
|
|
||||||
LOG.debug("Missing profile in port binding")
|
|
||||||
return False
|
|
||||||
pci_vendor_info = profile.get('pci_vendor_info')
|
|
||||||
if not pci_vendor_info:
|
|
||||||
LOG.debug("Missing pci vendor info in profile")
|
|
||||||
return False
|
|
||||||
if pci_vendor_info not in self.pci_vendor_info:
|
|
||||||
LOG.debug("Unsupported pci_vendor %s", pci_vendor_info)
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _get_vif_details(self, segment):
|
def _get_vif_details(self, segment):
|
||||||
network_type = segment[api.NETWORK_TYPE]
|
network_type = segment[api.NETWORK_TYPE]
|
||||||
if network_type == p_const.TYPE_FLAT:
|
if network_type == p_const.TYPE_FLAT:
|
||||||
@ -212,15 +164,3 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
|
|||||||
vif_details = self.vif_details.copy()
|
vif_details = self.vif_details.copy()
|
||||||
vif_details[portbindings.VIF_DETAILS_VLAN] = str(vlan_id)
|
vif_details[portbindings.VIF_DETAILS_VLAN] = str(vlan_id)
|
||||||
return vif_details
|
return vif_details
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _check_pci_vendor_config(pci_vendor_list):
|
|
||||||
for pci_vendor_info in pci_vendor_list:
|
|
||||||
try:
|
|
||||||
vendor_id, product_id = [
|
|
||||||
item.strip() for item in pci_vendor_info.split(':')
|
|
||||||
if item.strip()]
|
|
||||||
except ValueError:
|
|
||||||
raise ValueError(_('Incorrect pci_vendor_info: "%s", should be'
|
|
||||||
' pair vendor_id:product_id') %
|
|
||||||
pci_vendor_info)
|
|
||||||
|
@ -13,14 +13,11 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import mock
|
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from oslo_config import cfg
|
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.plugins.common import constants as p_const
|
from neutron.plugins.common import constants as p_const
|
||||||
from neutron.plugins.ml2 import config # noqa
|
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
from neutron.plugins.ml2 import driver_api as api
|
||||||
from neutron.plugins.ml2.drivers.mech_sriov.mech_driver \
|
from neutron.plugins.ml2.drivers.mech_sriov.mech_driver \
|
||||||
import exceptions as exc
|
import exceptions as exc
|
||||||
@ -149,79 +146,6 @@ class SriovSwitchMechVnicTypeTestCase(SriovNicSwitchMechanismBaseTestCase):
|
|||||||
mech_driver.VIF_TYPE_HOSTDEV_PHY)
|
mech_driver.VIF_TYPE_HOSTDEV_PHY)
|
||||||
|
|
||||||
|
|
||||||
class SriovSwitchMechProfileTestCase(SriovNicSwitchMechanismBaseTestCase):
|
|
||||||
def _check_vif_for_pci_info(self, pci_vendor_info, expected_vif_type):
|
|
||||||
context = TestFakePortContext(self.AGENT_TYPE,
|
|
||||||
self.AGENTS,
|
|
||||||
self.VLAN_SEGMENTS,
|
|
||||||
portbindings.VNIC_DIRECT,
|
|
||||||
{'pci_vendor_info': pci_vendor_info})
|
|
||||||
self.driver.bind_port(context)
|
|
||||||
self.assertEqual(expected_vif_type, context._bound_vif_type)
|
|
||||||
|
|
||||||
def test_profile_supported_pci_info(self):
|
|
||||||
self._check_vif_for_pci_info(MELLANOX_CONNECTX3_PCI_INFO,
|
|
||||||
mech_driver.VIF_TYPE_HW_VEB)
|
|
||||||
|
|
||||||
def test_profile_unsupported_pci_info(self):
|
|
||||||
cfg.CONF.set_override('supported_pci_vendor_devs', ['aa:bb'],
|
|
||||||
'ml2_sriov')
|
|
||||||
self.driver.initialize()
|
|
||||||
with mock.patch('neutron.plugins.ml2.drivers.mech_sriov.'
|
|
||||||
'mech_driver.mech_driver.LOG') as log_mock:
|
|
||||||
self._check_vif_for_pci_info('xxxx:yyyy', None)
|
|
||||||
log_mock.debug.assert_called_with('Refusing to bind due to '
|
|
||||||
'unsupported pci_vendor device')
|
|
||||||
|
|
||||||
|
|
||||||
class SriovSwitchMechProfileFailTestCase(SriovNicSwitchMechanismBaseTestCase):
|
|
||||||
def _check_for_pci_vendor_info(
|
|
||||||
self, pci_vendor_info, expected_result=False):
|
|
||||||
context = TestFakePortContext(self.AGENT_TYPE,
|
|
||||||
self.AGENTS,
|
|
||||||
self.VLAN_SEGMENTS,
|
|
||||||
portbindings.VNIC_DIRECT,
|
|
||||||
pci_vendor_info)
|
|
||||||
self.assertEqual(
|
|
||||||
expected_result,
|
|
||||||
self.driver._check_supported_pci_vendor_device(context))
|
|
||||||
|
|
||||||
def test_profile_missing_profile(self):
|
|
||||||
cfg.CONF.set_override('supported_pci_vendor_devs', ['aa:bb'],
|
|
||||||
'ml2_sriov')
|
|
||||||
self.driver.initialize()
|
|
||||||
with mock.patch('neutron.plugins.ml2.drivers.mech_sriov.'
|
|
||||||
'mech_driver.mech_driver.LOG') as log_mock:
|
|
||||||
self._check_for_pci_vendor_info({})
|
|
||||||
log_mock.debug.assert_called_with("Missing profile in port"
|
|
||||||
" binding")
|
|
||||||
|
|
||||||
def test_profile_missing_pci_vendor_info(self):
|
|
||||||
cfg.CONF.set_override('supported_pci_vendor_devs', ['aa:bb'],
|
|
||||||
'ml2_sriov')
|
|
||||||
self.driver.initialize()
|
|
||||||
with mock.patch('neutron.plugins.ml2.drivers.mech_sriov.'
|
|
||||||
'mech_driver.mech_driver.LOG') as log_mock:
|
|
||||||
self._check_for_pci_vendor_info({'aa': 'bb'})
|
|
||||||
log_mock.debug.assert_called_with("Missing pci vendor"
|
|
||||||
" info in profile")
|
|
||||||
|
|
||||||
def test_pci_vendor_info_with_none(self):
|
|
||||||
self.driver.initialize()
|
|
||||||
self._check_for_pci_vendor_info(
|
|
||||||
{'aa': 'bb'}, expected_result=True)
|
|
||||||
|
|
||||||
def test_pci_vendor_info(self):
|
|
||||||
cfg.CONF.set_override(
|
|
||||||
'supported_pci_vendor_devs',
|
|
||||||
[MELLANOX_CONNECTX3_PCI_INFO],
|
|
||||||
'ml2_sriov')
|
|
||||||
self.driver.initialize()
|
|
||||||
self._check_for_pci_vendor_info(
|
|
||||||
{'pci_vendor_info': MELLANOX_CONNECTX3_PCI_INFO},
|
|
||||||
expected_result=True)
|
|
||||||
|
|
||||||
|
|
||||||
class SriovSwitchMechVifDetailsTestCase(SriovNicSwitchMechanismBaseTestCase):
|
class SriovSwitchMechVifDetailsTestCase(SriovNicSwitchMechanismBaseTestCase):
|
||||||
VLAN_SEGMENTS = [{api.ID: 'vlan_segment_id',
|
VLAN_SEGMENTS = [{api.ID: 'vlan_segment_id',
|
||||||
api.NETWORK_TYPE: 'vlan',
|
api.NETWORK_TYPE: 'vlan',
|
||||||
@ -268,47 +192,3 @@ class SriovSwitchMechVifDetailsTestCase(SriovNicSwitchMechanismBaseTestCase):
|
|||||||
|
|
||||||
self.driver.bind_port(context)
|
self.driver.bind_port(context)
|
||||||
self.assertEqual(constants.PORT_STATUS_ACTIVE, context._bound_state)
|
self.assertEqual(constants.PORT_STATUS_ACTIVE, context._bound_state)
|
||||||
|
|
||||||
|
|
||||||
class SriovSwitchMechConfigTestCase(SriovNicSwitchMechanismBaseTestCase):
|
|
||||||
def _set_config(self, pci_devs=['aa:bb']):
|
|
||||||
cfg.CONF.set_override('mechanism_drivers',
|
|
||||||
['logger', 'sriovnicswitch'], 'ml2')
|
|
||||||
if pci_devs:
|
|
||||||
cfg.CONF.set_override('supported_pci_vendor_devs', pci_devs,
|
|
||||||
'ml2_sriov')
|
|
||||||
|
|
||||||
def test_pci_vendor_config_single_entry(self):
|
|
||||||
self._set_config()
|
|
||||||
self.driver.initialize()
|
|
||||||
self.assertEqual(['aa:bb'], self.driver.pci_vendor_info)
|
|
||||||
|
|
||||||
def test_pci_vendor_config_multiple_entry(self):
|
|
||||||
self._set_config(['x:y', 'a:b'])
|
|
||||||
self.driver.initialize()
|
|
||||||
self.assertEqual(['x:y', 'a:b'], self.driver.pci_vendor_info)
|
|
||||||
|
|
||||||
def test_pci_vendor_config_wrong_entry(self):
|
|
||||||
self._set_config(['wrong_entry'])
|
|
||||||
self.assertRaises(cfg.Error, self.driver.initialize)
|
|
||||||
|
|
||||||
def test_initialize_missing_product_id(self):
|
|
||||||
self._set_config(['vendor_id:'])
|
|
||||||
self.assertRaises(cfg.Error, self.driver.initialize)
|
|
||||||
|
|
||||||
def test_initialize_missing_vendor_id(self):
|
|
||||||
self._set_config([':product_id'])
|
|
||||||
self.assertRaises(cfg.Error, self.driver.initialize)
|
|
||||||
|
|
||||||
def test_initialize_multiple_colons(self):
|
|
||||||
self._set_config(['foo:bar:baz'])
|
|
||||||
self.assertRaises(cfg.Error, self.driver.initialize)
|
|
||||||
|
|
||||||
def test_initialize_empty_string(self):
|
|
||||||
self._set_config([''])
|
|
||||||
self.assertRaises(cfg.Error, self.driver.initialize)
|
|
||||||
|
|
||||||
def test_initialize_pci_devs_none(self):
|
|
||||||
self._set_config(pci_devs=None)
|
|
||||||
self.driver.initialize()
|
|
||||||
self.assertIsNone(self.driver.pci_vendor_info)
|
|
||||||
|
@ -140,7 +140,6 @@ oslo.config.opts =
|
|||||||
neutron.ml2.linuxbridge.agent = neutron.opts:list_linux_bridge_opts
|
neutron.ml2.linuxbridge.agent = neutron.opts:list_linux_bridge_opts
|
||||||
neutron.ml2.macvtap.agent = neutron.opts:list_macvtap_opts
|
neutron.ml2.macvtap.agent = neutron.opts:list_macvtap_opts
|
||||||
neutron.ml2.ovs.agent = neutron.opts:list_ovs_opts
|
neutron.ml2.ovs.agent = neutron.opts:list_ovs_opts
|
||||||
neutron.ml2.sriov = neutron.opts:list_ml2_conf_sriov_opts
|
|
||||||
neutron.ml2.sriov.agent = neutron.opts:list_sriov_agent_opts
|
neutron.ml2.sriov.agent = neutron.opts:list_sriov_agent_opts
|
||||||
neutron.qos = neutron.opts:list_qos_opts
|
neutron.qos = neutron.opts:list_qos_opts
|
||||||
nova.auth = neutron.opts:list_auth_opts
|
nova.auth = neutron.opts:list_auth_opts
|
||||||
|
Loading…
Reference in New Issue
Block a user