博通平台下实现QinQ功能

背景

这篇文章主要讲解QinQ怎么在bcm芯片上实现,其实底层实现原理和盛科也差不多,就是在ingress方向对进入的报文进行802.1Q编辑。下面给出盛科QinQ开发文档连接,可供参考。
盛科芯片QinQ功能实现

56150芯片简介

博主使用的是bcm的一款56150 soc芯片,内部集成cpu。sdk软件版本为6.5.12不是最新的,但也不老。下面简单介绍下这款芯片对vlan的相关支持,有了这部分基础之后再进行开发。

芯片整体架构

vlan模块由VCAP处理器进行处理(Vlan ContentAware Processor)。
在这里插入图片描述
各个模块相当于一个个管道一样,组合成一个功能强大且丰富的集合。
在这里插入图片描述

VCAP

VCAP是博通芯片中一个针对vlan的感知处理器,VCAP包含以下功能模块。
bcm56150支持VFP、Vlan Translation、MAC Based Vlan、Subnet Based Vlan、Protocol Based Vlan、Port Based Vlan.下图就是介绍各个功能组件的组成以及各个组件的作用优先级。
在这里插入图片描述

  1. 报文首先经由Vlan Filter Process模块,如果匹配上就进入Ingress Tag Actions(一种vlan的操作集合,后面会介绍)编辑模式。
  2. VFP匹配失败,继续往下走,首先判断PORT有没有使能vlan translate,然后再匹配vlan xlate表项里面的规则,进而进入Ingress Tag Actions编辑模式。
  3. 同理第二部VT Hit失败后继续往下走,和本文无关的不多介绍。
  4. 当前面所有的组件都Hit不到时,进入port based规则,优先级最低。其实就是端口对vlan的默认操作,会使用ing_vlan_tag_action_profile 0的Ingress Tag Actions编辑规则,下面介绍cli时,针对untag–>double tag就是port based打上去的。

基于CLI的配置简介

借用vlan action进行port default配置以及translate配置。
为了便于理解ingress tag action配置,下面给出各种action解释。
每条vlan_xlate(Ingress vlan translate table)和egr_vlan_xlate(Egress vlan translate table)表项都会有一个指针,分别指向ING_VLAN_TAG_ACTION_PROFILE,EGR_VLAN_TAG_ACTION_PROFILE。每个profile都有以下成员。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
VT_KEY_TYPE 索引值配置
在这里插入图片描述

基于端口QinQ

修改端口默认规则。

  1. vlan action port default add port=ge0 OuterVlan=1001(pvid) UtOuter=Add ItOuter=Add
  2. modi port 2 1 OUTER_TPID_ENABLE=0—关闭端口的tpid匹配规则,无需hit其他规则,直接进入port based.

灵活的QinQ

也可以叫做vlan-stacking技术,在原有的报文基础之上,外加一层vlan tag

  1. vlan action translate add Port=ge0 KeyType=PortInner OldInnerVlan=101 OuterVlan=1001 ItOuter=Add ItInner=None—添加一条vlan_xlate表项
  2. vlan action translate delete Port=ge0 KeyType=PortInner OldInnerVlan=101–删除vlan_xlate表项
  3. vlan action translate range add Port=ge0 InnerVlanLo=110 InnerVlanHi=120 OuterVlan=1001 ItOuter=Add ItInner=None—配置一条基于vlan range进行匹配的vlan_xlate表项
  4. vlan action translate range delete Port=ge0 InnerVlanLo=110 InnerVlanHi=120—删除基于vlan range匹配的vlan_xlate表项
  5. modi port 2 1 OUTER_TPID_ENABLE=4—修改相关寄存器,匹配tpid值

1:1Vlan-Mapping

  1. vlan action translate add Port=ge0 KeyType=PortInner OldInnerVlan=101 OuterVlan=1001 ItOuter=Add ItInner=None —基于指定tag匹配的vlan_xlate表项
    基于action的动作ItInner =none:基于vlan的QinQ、=delete 1:1vlan mapping
  2. vlan action translate delete Port=ge0 KeyType=PortInner OldInnerVlan=101—删除vlan_xlate表项
  3. vlan action translate range add Port=ge0 InnerVlanLo=110 InnerVlanHi=120 OuterVlan=1001 ItOuter=Add ItOuter=Add ItInner=Delete—基于vlan range匹配的vlan_xlate 表项
  4. vlan action translate range delete Port=ge0 InnerVlanLo=110 InnerVlanHi=120—删除vlan_xlate表项
  5. modi port 2 1 OUTER_TPID_ENABLE=4—和vlan stacking一样,需要匹配正确的tpid值

2:1、2:2Vlan-Mapping

所有的编辑方式上面都已阐述清楚,下面针对ingress double tag的报文进行编辑,从命令中就可以看到所要做的动作

  1. vlan action translate add Port=ge0 KeyType=PortDouble OldOuterVlan=101 OldInnerVlan=102 OuterVlan=1001 InnerVlan=2001 DtOuter=Replace
  2. vlan action translate delete Port=ge0 KeyType=PortDouble OldOuterVlan=101 OldInnerVlan=102
  3. modi port 2 1 VT_ENABLE=1(使能vlan translate) VT_KEY_TYPE_USE_GLP=1 VT_KEY_TYPE=0(匹配内外层tag)—基于端口的配置
  4. modi port 2 1 OUTER_TPID_ENABLE=1
  5. vlan action translate range add Port=ge0 OuterVlanLo=10 OuterVlanHi=100 OuterVlan=1001 InnerVlan=300 DtOuter=Replace DtInner=Replace—Inner Vlan是特指,Outer Vlan是区域匹配,目前sdk针对double tag的vlan range配置只支持这种配置
  6. modi port 2 1 VT_KEY_TYPE=4 默认为4,和vlan_xlate的type保持一致。上面有介绍基于OVID为健值匹配

Untag报文直接打双层标签

针对ingress方向的untag报文,走的是port based规则,并且按照UtOuter,UtInner配置的规则进行编辑。ItOuter=Add表示进入端口的单层tag报文,再打上一层Outertag,tag值就是port下配置的OuterVlan。
vlan action port default add port=ge0 OuterVlan=1001 InnerVlan=2001 UtOuter=Add UtInner=Add (ItOuter=Add 单层打上一层Outertag)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值