支持 QinQ 的 Neutron VLAN 网络¶
Launchpad Bug: https://bugs.launchpad.net/neutron/+bug/1915151
Neutron 支持 VLAN 透明性网络,但在与 VLAN 网络一起使用时,无法将其用作 QinQ,后者与常规 VLAN ethertype (0x8100) 不同 (例如 0x8a88)。
问题描述¶
启用 VLAN 透明性的网络可以是 Neutron 中可用的任何类型 (vxlan, vlan, flat 等)。在大多数情况下,从节点发送的具有 ethertype 0x8100 (802.1q) 的数据包是可以的。但如果已经有 2 个 VLAN (S-Tag 和 C-Tag),则在某些用例中,应将其作为 QinQ 发送,这是一种略有不同的标准,具有不同的 ethertype (0x8a88) [1]。
提议的变更¶
添加新的 API 扩展,以扩展 Neutron 中的 network 资源,并添加 qinq 属性。此新属性仅对 vlan 网络有效,并且对于这些网络,其工作方式与当前的 VLAN 透明性 扩展 [2] 类似。VLAN 透明性和新的 qinq 扩展之间的区别在于为从节点发送的此类网络中的数据包配置的 ethertype。在 qinq=True 的情况下,S-Tag 和 C-Tag 的工作方式与启用 VLAN 透明性的网络相同。C-Tag 由用户直接在实例中配置,S-Tag 由 Neutron 配置和控制。区别在于从节点发送的数据包的 ethertype 将为 0x8a88。属性 vlan_transparent 和 qinq 将互斥。网络中只能将其中一个设置为 True。
服务器端变更¶
将添加 Neutron 的一个新的 API 扩展,其中包含 network 资源的新的属性。这个新的属性将被称为 qinq
RESOURCE_ATTRIBUTE_MAP = {
network.COLLECTION_NAME: {
"qinq": {
'allow_post': True,
'allow_put': False,
'convert_to': converters.convert_to_boolean,
'default': constants.ATTR_NOT_SPECIFIED,
'is_visible': True,
'is_filter': True
}
}
}
注意
属性 qinq 仅对 vlan 网络有效。
注意
属性 vlan_transparent 和 qinq 将互斥。其中只能将一个设置为 True。
Agent 端更改¶
目前 linuxbridge、ovn 和 SR-IOV 后端支持 VLAN 透明性,并且相同的后端将支持 QinQ。对于 linuxbridge 和 ovn 后端,需要在节点上设置正确的 ethertype,以便为数据包设置正确的 ethertype。对于 SR-IOV 后端,对该功能的的支持将取决于硬件及其驱动程序,并且需要单独进行测试。
数据库影响¶
将 networks 表扩展为包含布尔列 qinq。
REST API 影响¶
无。
客户端影响¶
在 osc 和 openstacksdk 中进行相关更改,以添加对新网络属性的支持。要为其启用,应该如下所示
openstack network create --qinq
要禁用它
openstack network create --no-qinq
测试¶
单元测试。
全栈测试。
neutron-tempest-plugin 中的 Tempest 测试。
负责人¶
Slawek Kaplonski <skaplons@redhat.com>