Realtek交换芯片Vlan功能实现(基于838x、839x系列)

1  S9999 Vlan的实现方式

1.1 普通端口之间的报文处理流程

S9999 在普通端口模式下(accesstrunk)在芯片内部使用Inner Vlan进行转发QinQ端口使用Outer Vlan进行转发。所有的端口,不论是access、trunk,还是QinQ模式的端口,Outer TPID掩码都配置为0x0,即不再识别报文的outer tag。

1.1.1 Ingress报文Tag识别流程

报文Tag识别流程如下图:

 

    从流程图中可以看出,当报文到达以后,首先匹配的O-TPID,之后是I-TPID,在现有的Vlan实现中,O-TPIDmask配置为0,即不会识别出报文的Outer Tag,认为报文都是Outer Untag的,之后在芯片内部为报文加上O-TPID

 

              

a . untag报文被识别成inner untag + outer untag类型的报文。报文进入芯片后被加上了Inner PVID和Outer PVID

b. single tag报文被识别成了inner tag + outer untag类型的报文,报文进入芯片内部以后被加上了Outer PVID

c.  double tag报文被识别成了inner tag + outer untag类型的报文,报文进入芯片内部后被加上了Outer PVID,原始报文中的TagB在芯片内部当做数据,不再走Vlan处理流程。

 

1.1.2 Access(Trunk)与Access(Trunk)类型的端口之间Untag报文与Single Tag的报文处理过程

  Vlan实现时,Access、Trunk口Ingress的Keep值为:

      IGR_P_ITAG_KEEP=0,

                   IGR_P_OTAG_KEEP=1

   Vlan实现时,Access、Trunk口Egress的Keep值为:

                  EGR_P_ITAG_KEEP=1

                  EGR_P_OTAG_KEEP=1

     Access与Trunk使用Inner Vlan转发,untag报文的inner vlan来自于端口的Inner PVID,single tag报文来自于原始报文的Vlan。这两种类型的报文在芯片类型的处理方式类似。

     报文经过VLAN Table Loopup、L2 Process之后,到达出端口,在出端口的时候,满足,Rx_Port.IGR_P_OTAG_KEEP=1&Tx_Port.Egr_P_OTAG_KEEP=1,报文在出口时,会再次剥掉Outer Vlan,和原始报文保持一致。

    

      在出端口的时候, Rx_Port.IGR_P_ITAG_KEEP=0&& Tx_Port.Egr_P_OTAG_KEEP=1,Inner Tag不能保持原始报文状态,会根据vlan中该端口的tag/untag状态去选择剥除vlan或者保留vlan

       

1.1.3   Access(Trunk)与Access(Trunk)类型的端口之间Double Tag的报文处理过程

    与Access、Trunk下single报文类似,double tag报文进入芯片之后,还是会由于Outer TPID的识别模式,而加上一层Outer PVID。

  

   TagA在内部当做Inner Tag,用于进行转发,TagB被当做数据处理,始终不会有变化。在Egress出,Outer VLAN(来自于O-PVID),根据KEEP值被剥除,TagA根据Vlan下的端口状态选择剥除或者不剥除。

 

1.2  QinQ端口与Trunk口之间的报文处理流程  

      Vlan实现时,QinQ端口Ingress的Keep值与一般模式有区别,为:

      IGR_P_ITAG_KEEP=1,

                IGR_P_OTAG_KEEP=0

   Vlan实现时,QinQ端口Egress的Keep值与一般模式相同,为:

                 EGR_P_ITAG_KEEP=1

                    EGR_P_OTAG_KEEP=1

    QinQ端口使用Outer Vlan转发,untag报文的inner vlan为来自于端口的Inner PVID,single tag报文来自于原始报文的Vlan。

    QinQ端口处理untag报文时,端口设置成outer vlan转发和inner vlan转发的效果是一样的,因为实现vlan时所以的端口的    Outer PVID和Inner PVID的值是一样的。

   QinQ端口处理single tag报文时,与其它端口在业务上的区别是,QinQ端口不能使用原始报文中的Vlan来进行转发,只能使用端口的PVID进行转发,原始报文的vlan在芯片内部识别成inner vlan,不能设置QinQ端口为Inner Vlan转发模式,所以QinQ端口必须设置成Outer Vlan转发模式。

 1.2.1  上行QinQ业务流

          上行QinQ业务流是指从QinQ端口到Trunk口的业务流。从QinQ端口进来的流分为两种,untag报文、single tag报文,对应的从Trunk口出去的报文为single tag、double tag报文。

           这两种类型的报文在芯片类型的处理方式类似。

          

 a.上行untag报文

 

       上行的untag报文会同时被打上Inner PVID、Outer PVID,此时使用内层Vlan转发与使用外层Vlan转发的效果是一样的。

       在从Trunk口出去的时候,Rx_Port.IGR_P_ITAG_KEEP=1&& Tx_Port.Egr_P_ITAG_KEEP=1,Inner Vlan会保持原有状态,被剥除。

       在从Trunk口出去的时候,Rx_Port.IGR_P_OTAG_KEEP=0&& Tx_Port.Egr_P_OTAG_KEEP=1,Outer Vlan,会根据vlan中该端口的tag/untag状态去选择剥除vlan或者保留outer vlan.

 

b.上行single tag报文

 

    

       QinQ端口特殊的地方在于,QinQ端口不能使用原始报文中的Vlan来进行转发,只能使用端口的PVID进行转发。

        当Single Tag报文进入到QinQ端口时,会打上O-PVID,由于配置了外层转发模式,所以QinQ端口的报文进入Vlan Table Lookup的时候会根据Outer Vlan(通过Outer PVID得到)来转发。

 

1.2.2  下行QinQ业务流

        

    a、下行single tag报文

        下行的single tag报文,进入到trunk口,被打上outer pvid,根据outer vlan进行转发,发送到QinQ端口,由于:

Rx_Port.IGR_P_OTAG_KEEP=1&& Tx_Port.Egr_P_OTAG_KEEP=1,Outer Vlan直接剥掉。由于:

        Rx_Port.IGR_P_ITAG_KEEP=0&& Tx_Port.Egr_P_ITAG_KEEP=1,Inner Vlan会根据vlan中该端口的tag/untag状态去选择剥除inner vlan。

       b、下行double tag报文

       TagA在内部当做Inner Tag,用于进行转发,TagB被当做数据处理,始终不会有变化。Trunk口设置成了Inner Vlan转发,会有以下处理流程:

      a、Inner Vlan也就是TagA所在的Vlan是Vlan-A

      b、我的端口是Port Num,该端口加入了Vlan-A吗?

      c、如果没有加入,丢弃该报文;如果加入了,则在该Vlan里面查找端口,会根据L2 Mac地址表查找,查找完以后,会发送到目的端口,如QinQ。到达QinQ端口以后,由于

           Rx_Port.IGR_P_OTAG_KEEP=1&& Tx_Port.Egr_P_OTAG_KEEP=1 Outer Vlan直接剥掉。由于:

           Rx_Port.IGR_P_ITAG_KEEP=0&& Tx_Port.Egr_P_ITAG_KEEP=1, Inner Vlan会根据vlan中该端口的tag/untag状态去选择剥除outer vlan,出去的时候,报文只带有TagB。

1.3  QinQ端口与Trunk口的对比

                                                                          Tag、报文处理

          出口 

入口

Trunk

QinQ

Trunk

Keep剥除Outer VlanInner Vlan转发

Keep剥除Outer VlanInner Vlan转发

QinQ

Keep剥除Inner VlanOuter Vlan转发

 

 

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值