三层交换机之VP和LLTAG

VP(Virtual Port)

VP端口可以理解为VLAN+PORT的索引。

上行报文从物理端口A进入交换机,经过VFP/VLAN_XLATE处理VLAN时,根据VFP/VLAN_XLATE的配置转换为VP端口,这样后续的MAC地址学习过程中,SVLAN+SRC MAC就学习到VP端口,而不是物理端口A。

下行报文首先根据SVLAN+DST MAC查找MAC地址表项,如果L2_ENTRY中匹配的表项为VP端口,则查找对应的VFP/EGR_VLAN_XLATE表项,进行VLAN转换;但是VP端口对应哪个物理口,是通过NEXT_HOP查表而来(此过程比较复杂,涉及多个表项)。

VLAN_XLATE API

extern int bcm_vlan_translate_action_add(
    int unit, 
    bcm_gport_t port,          ---可以为物理端口或者VP端口
    bcm_vlan_translate_key_t key_type, 
    bcm_vlan_t outer_vlan, 
    bcm_vlan_t inner_vlan, 
    bcm_vlan_action_set_t *action);

extern int bcm_vlan_translate_egress_action_add(
    int unit, 
    int port_class,            ---可以为物理端口或者VP端口
    bcm_vlan_t outer_vlan, 
    bcm_vlan_t inner_vlan, 
    bcm_vlan_action_set_t *action);

VFP API

BCM_GPORT_LOCAL_SET(gport, phyport);
BCM_GPORT_VLAN_PORT_ID_SET(gvp, vp_id);
BCM_GPORT_MPLS_PORT_ID_SET(gport, vp_id);
bcm_field_action_add(unit, entry_id, bcmFieldActionIncomingMplsPortSet, gport, 0);
bcm_vlan_port_t_init(&vlan_port);
vlan_port.flags |= BCM_VLAN_PORT_WITH_ID;
vlan_port.vlan_port_id = gvp;
vlan_port.port = gport;
bcm_vp_create_for_vfp_without_vt(unit, &vlan_port);

查看正在使用的VP端口

BCM.0> d chg SOURCE_VP
SOURCE_VP.ipipe0[1]: <ENTRY_TYPE=3,CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
BCM.0> 
BCM.0> list vp         
 Flags   Name                  Entry/Copy Description
 -----C  EGR_DVP_ATTRIBUTE      8192      Egress DVP Attribute Table, Featur...
 -----C  ING_DVP_TABLE          8192      Used to generte a NHI from the DVP...
 -----C  SOURCE_VP              8192      Source Virtual Port Properties
Flags: (r)eadonly, (d)ebug, (s)orted, (h)ashed
       C(A)M, (c)bp, (b)ist-able, (C)achable
BCM.0> 
BCM.0> l2 show         
mac=00:10:94:00:00:28 vlan=4012 GPORT=0x44000001 port=0x44000001(vlan) Hit
mac=00:00:01:00:00:27 vlan=4013 GPORT=0x44000001 port=0x44000001(vlan) Hit

 

LLTAG(Logical Link Tag)

LLTAG可以理解为一个VLAN Tag,其TPID由如下寄存器指定,一般用来标识报文来自哪个ONU。

ING_LLTAG_TPID.LLTAG_ETHERTYPE_ENABLE = 1
Packet TPID match ING_LLTAG_TPID.TPID

VFP API

extern int bcm_field_qualify_SubportPktTag(
    int unit, 
    bcm_field_entry_t entry, 
    uint16 data,                                  ---LLTAG
    uint16 mask);

 

隔离和互通

互通需求:

1、同VLAN同网段;(同PON口、不同PON口、不同线卡)

2、同VLAN不同网段;(同PON口、不同PON口、不同线卡)

3、不同VLAN;(同PON口、不同PON口、不同线卡)

实现方式:

源剪枝 bcm_port_control_set(bcmPortControlBridge)

端口隔离 bcm_port_egress_set(port, pbmp)

ARP代理实现不同IP网段互通,其原理是ARP Proxy代答ARP Request,然后创建VLAN IF三层接口,后续单播报文转发走L3转发流程

不同VLAN互通依赖FID? SuperVLAN和SubVLAN实现

 

物理端口:

PORT_TAB.PORT_BRIDGE 物理端口的源剪枝功能开关

VLAN_TAB.PORT_BITMAP 端口必须在VLAN转发域

ERG_MASK.EGRESS_MASK (egress show查看允许转发的端口列表,即端口隔离)

 

虚端口:

EGR_DVP_ATTRIBUTE.DISABLE_VP_PRUNING 虚端口的源剪枝功能开关

VLAN_TAB.PORT_BITMAP 端口必须在VLAN转发域

ERG_MASK.EGRESS_MASK (egress show查看允许转发的端口列表,即端口隔离)

 

posted on 2022-02-10 14:52  者旨於陽  阅读(732)  评论(0编辑  收藏  举报

导航