CTC平台实现QinQ
背景
闲来无事,把之前在CTC5160上实现的QinQ拿来整理一下,供大家参考学习。整体思路主要是参考SDK_V5.3.0_TypicalConfiguration_APP.chm提供的示例,再结合市场实际应用进行开发。
博通QinQ功能实现
理论知识
查阅相关文献,总结归纳需要实现以下功能。
基于端口的QinQ
也称为基本QinQ,完全基于端口进行实现,端口对Ingress方向的报文,打上一层tag。vlan id值为端口缺省vlan(PVID)。根据进来的报文,做不同的处理。
- 进入端口的报文,携带tag,打上端口的pvid值,出去的是双层tag。
- 进入端口的报文, 没有携带802.1tag,打上一层端口的pvid,出去是单层tag。
基于vlan的灵活QinQ
由于基本的QinQ只能打特定的vlan tag,而且进来的报文都要强制加上一层tag。限制太大,所以这里有基于vlan的灵活QinQ配置。
原理:基于接口与vlan相结合的方式实现的,为具有不同内层VLAN ID的报文添加不同的外层vlan tag。出去的报文携带双层标签。
在后面的cli介绍可以看出来,灵活的QinQ和1:1、2:1、2:2都是基于vlan mapping来实现的,可以灵活控制。
还有一种针对untag报文,进来之后直接打上双层标签。
1:1 vlan mapping
Vlan mapping通过修改报文携带的vlan tag来实现不同VLAN的相互映射。1:1vlan映射表示携带单层tag的报文,映射成指定tag的报文,发送出去。
2:1 2:2 vlan mapping
2:1、2:2特指进入交换机端口的报文携带双层标签,2:1表示仅仅修改outer-vid,而2:2 同时映射修改Inner-Vid和Outer-vid。
CLI讲解
以下分别对上面不同场景的CLI配置
基本的QinQ
基本的QinQ
场景是进入端口23的报文将打上端口的默认vid。
- port 23 vlan-filtering direction both enable—使能端口vlan filter功能,默认关闭。
- port 23 default vlan 10----默认vid
- vlan add port 23 vlan 10----port 23加入到vlan10中
- port 23 vlan-domain cvlan ----修改端口23的vlan域为customer vlan,这样可以hit到cvlan-tagged,默认都是svlan 域
- port 23 dot1q-type cvlan-tagged ----端口规则,匹配cvlan-tagged,针对svlan 域,cvlan domain过来的报文,都是untag报文,将打上一层svid
- port 23 vlan-ctl drop-stag—设置vlan control,丢弃stag的报文,只要ctag的报文。
配置后会发现可能不转发,需要把出端口添加到默认转发域中去
- l2 fdb vlan-default-entry fid 10 add port 23
- l2 fdb vlan-default-entry fid 10 add port 45
这里的fid表示转发域,在转发域中会洪泛。1-4095为vid值,4096–+1K表示VPLS的实例号,也相当于转发域。在同一个转发域内,未知报文会洪泛。
灵活QinQ
基于vlan的QinQ配置
以下配置和基于端口的QinQ相同,即端口的默认规则,规则匹配失败后所走的统一操作。
port 23 default vlan 5
vlan add port 23 vlan 5
vlan add port 23 vlan 100
port 23 vlan-domain cvlan
port 23 dot1q-type cvlan-tagged
port 23 vlan-ctl drop-stag
以下是精确匹配规则项
场景,针对入方向报文,携带的tag-vid在50-100之间的,在cvlan tag基础之上在加一层stag100,在10-30之间的除了增加一层svlan100之外,并且会修改pri字段为3
- vlan range create vrange-grp 0 direction ingress is-cvlan—创建一个vlan区域组
- vlan range add 50 to 100 vrange-grp 0 direction ingress—往这个组添加vlan区域成员,每个组可以添加8个vlan区域
- vlan mapping add port 23 cvid 50 to-cvid 100 vrange-grp 0 mapping-to new-svid 100 stag-op 2 sl-svid 2—下发vlan mapping 规则,
- vlan mapping add port 23 cvid 10 to-cvid 30 vrange-grp 0 mapping-to new-svid 100 stag-op 2 sl-svid 2 sl-scos 2 new-scos 3—外加一层outer tag,并同步修改pri值(值范围0-7)
- port 23 vlan-range direction ingress vrange-grp 0 enable —每个端口一个方向只能关联一个vlan区域组
- port 23 scl-key-type scl-id 0 direction ingress type cvid—查找方式基于cvid
vlan mapping 中的重要字段
stag-op : TAG_OP
1. 0:NONE(Do nothing),
2. 1:REP_OR_ADD (Replace for tagged, add for untagged. Rep or add is auto-ajusted)
3. 2:APPEND(add for untagged, even for tagged ),
4. 3:DELETE (delete tagged)
sl-svid : TAG_SL
1. 0:AS_RECEIVE(Select packet’s vid|cos),
2. 1:ALTERNATE(Select the other tag’s vid|cos),
3. 2:NEW (Select the tag user assigned),
4. 3:Default (Select the default vid|cos)
sl-scos : TAG_SL
1. 0:AS_RECEIVE(Select packet’s vid|cos)
2. 1:ALTERNATE(Select the other tag’s vid|cos)
3. 2:NEW (Select the tag user assigned)
4. 3:Default (Select the default vid|cos)
1:1 vlan mapping
配置场景,进入端口23并携带vid值为101到200的报文,vid将会被替换成120
- port 23 scl-key-type scl-id 0 direction ingress type svid–查找方式为svid,注意和vlan QinQ 的区别,此时端口23处于svlan domain中
- vlan range create vrange-grp 0 direction ingress is-svlan 创建的vrange用于svlan域中的
- port 23 vlan-range direction ingress vrange-grp 0 enable —绑定到端口23上
- vlan range add 101 to 200 vrange-grp 0 direction ingress—添加vlan区域
- vlan mapping add port 23 svid 101 to-svid 200 vrange-grp 0 mapping-to new-svid 120 stag-op 1 sl-svid 2—同样使用vlan mapping规则,主要是针对stag-op的控制,上面有讲解
2:1 2:2vlanmapping
进入端口23的报文携带双层标签,根据stag-op 和ctag-op进行控制inner和outer的vlan tag。
两种映射的共同配置
- port 23 scl-key-type scl-id 0 direction ingress type dvid—hit的是双层标签
- vlan range create vrange-grp 0 direction ingress is-cvlan —可以给inner vlan进行区域匹配
- port 23 vlan-range direction ingress vrange-grp 0 enable
- port 23 scl-key-type scl-id 0 direction egress type dvid—这里是使能egress的查找方式,两个方向配置差不多
2:2vlan mapping
区域配置举例
5. vlan range add 50 to 100 vrange-grp 0 direction ingress
6. vlan mapping add port 23 svid 60 cvid 50 to-cvid 100 vrange-grp 0 mapping-to new-svid 200 stag-op 1 sl-svid 2 new-cvid 300 ctag-op 1 sl-cvid 2—ingress方向的配置
不进行区域匹配的vlan mapping
7. vlan mapping add port 0x0001 cvid 6 svid 5 mapping-to new-svid 10 stag-op 1 sl-svid 2 new-cvid 12 ctag-op 1 sl-cvid 2 —ingress方向配置
8. vlan mapping egress add port 0x0001 cvid 12 svid 10 mapping-to new-svid 5 stag-op 1 sl-svid 2 new-cvid 6 ctag-op 1 sl-cvid 2 —egress方向,如果需要区域匹配,则配置上vrange即可,和ingress配置差不多。
2:1vlan mapping
区域配置举例
- vlan range add 50 to 100 vrange-grp 0 direction ingress
- vlan mapping add port 23 svid 60 cvid 50 to-cvid 100 vrange-grp 0 mapping-to new-svid 200 stag-op 1 sl-svid 2
不需要range控制
- vlan mapping add port 0x0001 cvid 6 svid 5 mapping-to new-svid 10 stag-op 1 sl-svid 2
- vlan mapping egress add port 0x0001 cvid 12 svid 10 mapping-to new-svid 5 stag-op 1 sl-svid 2 new-cvid 6 ctag-op 1 sl-cvid 2 —egress 方向的vlan mapping
备注
优先级可以在vlan_mapping的命令行里用sl-sclos 2 new-scos来更改
tpid的修改,CTC5160要借用egs scl来实现,可以配置scl egs-vlan-edit来替换tpid