port-hint-ovs-tx-steering: shim extension

and a ML2 extension that does nothing, just loads the API extension.
All the real implementation is in the agent-side change.

To enable this:

* ml2_conf.ini:
  [ml2]
  extension_drivers += port_hint_ovs_tx_steering

Change-Id: I572072b3817484129a60ef68adf74ffd52b9eab8
Closes-Bug: #1990842
Related-Change (spec): https://review.opendev.org/c/openstack/neutron-specs/+/862133
Related-Change (n-lib api-def): https://review.opendev.org/c/openstack/neutron-lib/+/873112
This commit is contained in:
Bence Romsics 2023-02-08 13:39:39 +01:00
parent 6b55589ae0
commit 97d658c4ce
5 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,21 @@
# Copyright 2023 Ericsson Software Technology
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import port_hint_ovs_tx_steering \
as phint_txs_def
from neutron_lib.api import extensions as api_extensions
class Port_hint_ovs_tx_steering(api_extensions.APIExtensionDescriptor):
api_definition = phint_txs_def

View File

@ -0,0 +1,35 @@
# Copyright 2023 Ericsson Software Technology
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.plugins.ml2 import api
from oslo_log import log as logging
from neutron_lib.api.definitions import port_hint_ovs_tx_steering \
as phint_txs_def
LOG = logging.getLogger(__name__)
class PortHintOvsTxSteeringExtensionDriver(api.ExtensionDriver):
_supported_extension_alias = phint_txs_def.ALIAS
def initialize(self):
LOG.info(
'PortHintOvsTxSteeringExtensionDriver initialization complete')
@property
def extension_alias(self):
return self._supported_extension_alias

View File

@ -0,0 +1,13 @@
---
features:
- |
The first hint using the new ``hints`` port attribute is the
``ovs-tx-steering`` hint. The availability of this is marked
by the extension: ``port-hint-ovs-tx-steering``. This hint is
specific to the ``openvswitch`` mechanism driver. It enables
the control of Open vSwitch's Userspace Tx packet steering
feature. For details about the Open vSwitch feature please see:
https://docs.openvswitch.org/en/latest/topics/userspace-tx-steering/
The valid values for the ``hints`` attribute introduced by the 2nd
extension are:
``{"openvswitch": {"other_config": {"tx-steering": "hash|thread"}}}``

View File

@ -0,0 +1,12 @@
---
features:
- |
Ports now have a ``hints`` attribute, in which backend specific
tuning options can be passed to Neutron. The availability of the
``hints`` attribute is signaled by the ``port-hints`` extension.
The ``hints`` attribute is admin-only by default. Its value is a
dict, keyed by mechanism driver aliases. The possible values are
defined by the mechanism drivers. An admin user can ask for a
hint in a port create or update request. As the name suggests a
hint is not a demand - Neutron applies the hint when it can, but
it is free to ignore it, when it can't.

View File

@ -126,6 +126,7 @@ neutron.ml2.extension_drivers =
subnet_dns_publish_fixed_ip = neutron.plugins.ml2.extensions.subnet_dns_publish_fixed_ip:SubnetDNSPublishFixedIPExtensionDriver
dns_domain_keywords = neutron.plugins.ml2.extensions.dns_domain_keywords:DnsDomainKeywordsExtensionDriver
port_hints = neutron.plugins.ml2.extensions.port_hints:PortHintsExtensionDriver
port_hint_ovs_tx_steering = neutron.plugins.ml2.extensions.port_hint_ovs_tx_steering:PortHintOvsTxSteeringExtensionDriver
neutron.ipam_drivers =
fake = neutron.tests.unit.ipam.fake_driver:FakeDriver
internal = neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool