
Today the sriov qos service plugin blindly blocks creating ports with minimum bandwidth qos and with direct_physical vnic_type. This was originally added when only dataplane enforcement was the scope of the qos service plugin. However in the last many releases we created placement enforcement for this qos rule regardless of the vnic_type. So now blindly blocking the port creation is now preventing using the placement enforcement for this rule for direct_physical ports. This patch removes this limitation by marking minimum bandwidth as supported rule for the sriov qos service plugin. The limitation that data plane enforcement is not supported for this rule remains. The agent will not even try to apply any kind of rules to these ports as port binding is not forwarded for the sriov agent at all. The documentation is extended to explain that placement enforcement now works while data plane enforcement still not supported. This is somewhat similar to the case when the support for egress direction is added to the minimum bandwidth rule, while the sriov data plane enforcement was not (could not) been implemented for this direction in the sriov agent. Today the sriov agent simply ignores the egress direction rules in the minimum bandwidth qos rule during applying the data plane enforcement. Closes-Bug: #1949877 Change-Id: I20ad32eac414ff90b551bff940d92cbcfa848101
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
# Copyright (c) 2016 Red Hat Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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 portbindings
|
|
from neutron_lib import constants
|
|
from neutron_lib.db import constants as db_consts
|
|
from neutron_lib.services.qos import base
|
|
from neutron_lib.services.qos import constants as qos_consts
|
|
from oslo_log import log as logging
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
DRIVER = None
|
|
|
|
SUPPORTED_RULES = {
|
|
qos_consts.RULE_TYPE_BANDWIDTH_LIMIT: {
|
|
qos_consts.MAX_KBPS: {
|
|
'type:range': [0, db_consts.DB_INTEGER_MAX_VALUE]},
|
|
qos_consts.MAX_BURST: {
|
|
'type:range': [0, db_consts.DB_INTEGER_MAX_VALUE]},
|
|
qos_consts.DIRECTION: {
|
|
'type:values': [constants.EGRESS_DIRECTION]}
|
|
},
|
|
qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH: {
|
|
qos_consts.MIN_KBPS: {
|
|
'type:range': [0, db_consts.DB_INTEGER_MAX_VALUE]},
|
|
qos_consts.DIRECTION: {'type:values': constants.VALID_DIRECTIONS}
|
|
}
|
|
}
|
|
|
|
|
|
class SRIOVNICSwitchDriver(base.DriverBase):
|
|
|
|
@staticmethod
|
|
def create():
|
|
return SRIOVNICSwitchDriver(
|
|
name='sriovnicswitch',
|
|
vif_types=[portbindings.VIF_TYPE_HW_VEB],
|
|
vnic_types=[portbindings.VNIC_DIRECT,
|
|
portbindings.VNIC_MACVTAP,
|
|
portbindings.VNIC_DIRECT_PHYSICAL],
|
|
supported_rules=SUPPORTED_RULES,
|
|
requires_rpc_notifications=True)
|
|
|
|
|
|
def register():
|
|
"""Register the driver."""
|
|
global DRIVER
|
|
if not DRIVER:
|
|
DRIVER = SRIOVNICSwitchDriver.create()
|
|
LOG.debug('SR-IOV NIC Switch QoS driver registered')
|