QoS DSCP 标记支持

RFE: https://bugs.launchpad.net/neutron/+bug/1468353

问题描述

当前的 QoS API 不提供使用 DSCP 值标记传出网络流量的功能。本提案讨论了通过添加 DSCP 标记支持来增强现有的 QoS API。该功能将利用 Open vSwitch 支持将 DSCP 标记添加到出站网络流量。

提议的变更

我们建议更新 QoS API 和 OVS 驱动程序以支持 DSCP 标记。有效的 DSCP 标记值是 0 到 56 之间的偶数,但不包括 2-6、42、44 和 50-54。完整的有效 DSCP 标记列表是

0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 46, 48, 56

这将作为使用 QoS API 通过 OVS 驱动程序管理 DSCP 标记的参考实现。

数据模型影响

该模型遵循 QoS 带宽限制功能应用于 QoS 策略的方式,通过添加 QosDscpMarkingRule 表来实现。

QosDscpMarkingRule 模型如下所示

属性名称

类型

访问

默认值

验证/转换

描述

qos_policy_id

字符串 (UUID)

RO,全部

N/A

uuid

QoSPolicy 引用

dscp_mark

integer

RW, tenant

N/A

0 和 56,但不包括 2-6、42、44 和 50-54

DSCP 标记

REST API 影响

拟议属性

SUB_RESOURCE_ATTRIBUTE_MAP = {
   'dscp_marking_rules':{
        'parent': {'collection_name': 'policies',
                   'member_name': 'policy'},
        'parameters': dict(QOS_RULE_COMMON_FIELDS,
            **{'dscp_mark': {
                'allow_post': True, 'allow_put': True,
                'convert_to': attr.convert_to_int,
                'is_visible': True, 'default': None,
                'validate': {'type:values': common_constants.
                            VALID_DSCP_MARKS}}})
              })
        }
}

示例 REST 调用

GET /v2.0/qos/policies

Response:
{
    "policy": {
        "name": "AF32",
        "description": "This policy marks DSCP outgoing AF32 traffic for DTV Control",
        "shared": "False"
     }
}

GET /v2.0/qos/policies/<policy-uuid>

Response:
{
    "policy": {
        "tenant_id": "<tenant-id>",
        "id": "<id>",
        "name": "AF32",
        "description": "This policy marks DSCP outgoing AF32 traffic for DTV Control",
        "shared": False,
        "dscp_marking_rules": [{
            "id": "<id>",
            "policy_id": "<policy-uuid>",
            "dscp_mark": 16
        }]
     }
}

POST /v2.0/qos/policies/<policy-uuid>/dscp-marking-rules/
{
    "dscp_marking_rule": {
        "dscp_mark": 16
    }
}

Response:
{
    "dscp_marking_rule":{
        "id": "<id>",
        "policy_id": "<policy-uuid>",
        "dscp_mark": 16
    }
}

PUT /v2.0/qos/policies/<policy-uuid>/dscp-marking-rules/<rule-uuid>
{
    "dscp_marking_rule": {
        "dscp_mark": 8
    }
}

Response:
{
    "dscp_marking_rule":{
        "id": "<id>",
        "policy_id": "<policy-uuid>",
        "dscp_mark": 8
    }
}

命令行客户端影响

  • qos-dscp-marking-rule-create <policy-id> –dscp_mark <value>

  • qos-dscp-marking-rule-show <mark-rule-id> <policy-id>

  • qos-dscp-marking-rule-list <policy-id>

  • qos-dscp-marking-rule-update <mark-rule-id> <policy-id> –dscp_mark <value>

  • qos-dscp-marking-rule-delete <mark-rule-id> <policy-id>

安全影响

通知影响

性能影响

IPv6 影响

其他部署者影响

部署者可能需要配置特定的 QoS 驱动程序 / ML2 代理扩展。

开发人员影响

社区影响

使用 OVS 在端口或网络上的 QoS 策略上设置 DSCP 标记的能力。

实现

负责人

  • victor-r-howard

  • nate-johnston

  • james-reeves5546

  • margaret-frances

工作项

  • 新规则类型的版本化 DB 对象

  • 允许进行 DSCP API 修改的 API 变更

  • 允许设置 DSCP 值的客户端变更

  • OVS 驱动程序中的 Openflow 集成,以添加 qos_dscp 标记功能

依赖项

API 测试

  • 创建 DSCP 值

  • 更新 DSCP 值

  • 删除 DSCP 值

  • 列出 DSCP 值

  • 显示 DSCP 值

功能测试

将使用功能测试来验证系统交互

  • 设置 DSCP 值

  • 更新 DSCP 值

  • 删除 DSCP 值

  • 列出 DSCP 值

  • 确保传出流量使用 DSCP 标记

Fullstack 测试

  • 从 API 设置端口上的标记 QoS 策略,检查低级系统位是否设置正确以进行 DSCP

  • 更新 QoS 策略,并检查低位(DSCP 标记位)

  • 删除 QoS 策略并验证所有 DSCP 规则是否已正确删除

文档影响

用户文档

现有的 网络指南 将针对此功能进行更新。

现有的 CLI 指南 将针对此功能进行更新。

开发人员文档

现有的 QoS devref 文档 将针对此功能进行更新。

API 文档

现有的 QoS API 文档 将针对此功能进行更新。

参考资料