BCM芯片实现QinQ

  • 背景
  • 56150芯片简介
    • 芯片整体架构
    • VCAP
  • 基于CLI的配置简介
    • 基于端口QinQ
    • 灵活的QinQ
    • 1:1Vlan-Mapping
    • 2:1、2:2Vlan-Mapping
    • Untag报文直接打双层标签

背景

这篇文章主要讲解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)

博通平台下实现QinQ功能相关推荐

  1. 关于博客园的TrackBack功能

    博客园的TrackBack功能已经重新开通.      TrackBack功能分为:发送TrackBack与接收TrackBack.      发送TrackBack:      当你添加或编辑随笔时 ...

  2. php语录网站,杨泽业:给你的wordpress博客添加经典语录功能,适合所有php网站

    我们做一个网站就是要不断给访客 提供最佳的用户体验,同时 提升自己的品牌价值,而文章结束的经典语录的功能,完全可以实现我们所要达到的效果.(如下图) 给你的wordpress博客添加经典语录功能 这个 ...

  3. 【博客项目】—登录功能实现( 四)

    [博客项目]-登录功能实现( 四) 创建用户集合,初始化用户 连接数据库 创建用户集合 初始化项目

  4. TIA博途V17中ProDiag功能的使用方法示例(三)文本列表

    TIA博途V17中ProDiag功能的使用方法示例(三)文本列表 前面给大家分享了TIA博途V17中通过ProDiag功能监控数据类型和插入文本域的具体方法,具体可参考如下链接中的内容: TIA博途V ...

  5. TIA博途中如何通过Prodiag功能制作报警并显示在HMI上?

    TIA博途中如何通过Prodiag功能制作报警并显示在HMI上? 环境搭建: TIA PORTAL V16及以上版本博途软件 具体步骤可参考如下: 打开博途软件新建一个项目,如下图所示,添加PLC和H ...

  6. 安卓(android)6.0高通平台下设备树专题视频讲解【全国独家+设备树视频教程】

    安卓(android)6.0高通平台下设备树专题视频讲解[全国独家+设备树视频教程]                                                      独家拥有 ...

  7. Django by Example·第二章|Enhancing Your Blog with Advanced Features(为博客系统添加高级功能)@笔记

    Django by Example·第二章|Enhancing Your Blog with Advanced Features(为博客系统添加高级功能)@笔记 这本书的结构确实很不错,如果能够坚持看 ...

  8. TIA博途V17中ProDiag功能的使用方法示例(一)PLC数据类型的监控

    TIA博途V17中ProDiag功能的使用方法示例(一)PLC数据类型的监控 如下图所示,新建一个项目,添加如下所示的FB和DB块,并新建一个数据类型,数据类型中的具体内容如右侧框中所示, 在Moto ...

  9. 10分钟实现个人博客布置说说留言功能,Artitalk.js插件使用

    问题: 在我们学习了html与css的基础后,往往便申请了域名写了自己的个人博客.而个人博客常常有一个功能,那就是说说留言功能.而实现说说留言那必定得有后端数据库的数据交互支持才能实现,但是后端的环境 ...

最新文章

  1. bzoj1588[HNOI2002]营业额统计——双向链表
  2. 排序算法(一) 冒泡排序
  3. 【自动驾驶】Eigen:矩阵Matrix的使用
  4. bootstrap菜单展开收起_基于bootstrap的后台左侧导航菜单和点击二级菜单刷新二级页面时候菜单展开显示当前菜单...
  5. 警示:一个update语句引起大量gc等待和业务卡顿
  6. 工信部:2019年全国继续加大网络提速降费力度
  7. MySQL:BlackHole
  8. 细说php第四版笔记,细说PHP 学习笔记(三)
  9. 用户界面设计实验指导书
  10. 中南计算机绘图试题,中南大学计算机绘图试题b答案
  11. 同时安装 瑞星、金山、腾讯、百度和360这五大杀毒软件
  12. 【python】字符串前加u,r,b,f的含义
  13. AS打包V1和V2签名,使用乐固加固安装包签名有误 ShieldCode = 40186
  14. 数据文献相关数据库 (数学建模\学术论文)
  15. 大数据为什么需要学python?
  16. 探究KVO的底层实现原理
  17. Lanczos方法计算严格对角化格林函数
  18. slam初学(一)——Kdevelop的安装及汉化
  19. 浅谈JS转换字符串为数字
  20. “有一只鸟来到这个世界,它该做什么?”你知道么?

热门文章

  1. 00后的程序员都开始期望年薪百万
  2. 基于php的土特农产品销售网站设计与开发
  3. 致橡树---------纯真的爱
  4. 安装操作系统前须知的知识(理论)
  5. linux怎么使用ksh执行脚本,执行shell脚本遇到 ksh not found的问题
  6. 新股上市当天有涨跌幅限制吗?
  7. 升级iOS 17测试版后如何降级?iOS17降级教程
  8. 让你的微信公众平台中支持QQ在线客服功能
  9. PLSQL Developer安装配置教程(超详细)
  10. 并发实际场景(保持余额操作的正确)