三层交换机之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查看允许转发的端口列表,即端口隔离)