目錄
1.驗證環境及工具
PC 1
Helix4 Switch
5120 Switch
PC 2
BCM芯片Ingress 流程
BCM.0> v
Broadcom Command Monitor: Copyright (c) 1998-2010 Broadcom Corporation
Release: sdk-6.4.8 built 20160524 (Tue May 24 13:17:02 2016)
From broadcom@old-CentOS:/work/platform/broadcom/sdk-xgs-robo-6.4.8
Platform: IPROC_CMICD
OS: Unix (Posix)
Chips:
BCM56640_A0,
BCM56340_A0,
PHYs: BCM5218, BCM5220/21, BCM5226, BCM5228,
BCM5238, BCM5248, BCM5324/FE, BCM5348/FE,
BCM53242/FE, BCM53262/FE, BCM53101/FE, BCM53280/FE,
BCM53600/FE, BCM5400, BCM5401, BCM5402,
BCM5404, BCM5424/34, BCM5411, BCM5461,
BCM5464, BCM5466, BCM5478, BCM5488,
BCM54980, BCM54980, BCM54980, BCM54980,
BCM53314, BCM5482/801x, BCM54684, BCM54640,
BCM54682E, BCM54684E, BCM54685, BCM54616,
BCM54618E, BCM54618SE, BCM54210, BCM54220,
BCM54280, BCM54282, BCM54240, BCM54285,
BCM5428X, BCM54290, BCM54292, BCM54294,
BCM54295, BCM54296, BCM5421S, BCM54680,
BCM53324, BCM53125, BCM53128, BCM53010,
BCM53018, BCM5302X, BCM54880, BCM54881,
BCM54810, BCM54811, BCM89500, BCM54640E
BCM54880E, BCM54680E, BCM52681E, BCM8703,
BCM8704, BCM8705/24/25, BCM8706/8726, BCM8727,
BCM8728/8747, BCM8072, BCM8073, BCM8074,
BCM8040, BCM8481X, BCM84812, BCM84821,
BCM84822, BCM84823, BCM84833, BCM84834,
BCM84835, BCM84836, BCM84844, BCM84846,
BCM84848, BCM84858, BCM84856, BCM84860,
BCM84861, BCM84864, BCM84868, BCM8750,
BCM8752, BCM8754, BCM84740, BCM84164,
BCM84758, BCM84780, BCM84784, BCM84318,
BCM84328, copper sfp
BCM.0>
Xcap 0.4.2
1.3 軟件配置環境
在L2 Entry表中增加如下cpu mac 表項
BCM.0>L2 add mac=02:10:18:db:88:47 vlan=1 pbm=cpu0 Static=true ReplacePriority=false Replace=false L3=true
BCM.0> knet filter show
Filter ID 1: prio=127 dest=NetIF(1) desc='' striptag
BCM.0> knet filter destroy 1
BCM.0> knet filter create desttype=netif destid=1 prio=127 striptag=yes mirror=yes
Filter ID 1: prio=127 dest=NetIF(1) desc='' mirror=rxapi striptag
BCM.0>
Shell下配置虛擬接口vintf0的ip地址,即為交換機ip地址。
ifconfig vintf0 192.168.21.231
2.端口狀態
2.1 獲取端口當前工作狀態
BCM.0> ps ge12
ps ge12
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge12 up 100M FD SW Yes Forward TX RX None FA SGMII 16356
BCM.0> ps ge8
ps ge8
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge8 up 1G FD SW Yes Forward TX RX None FA SGMII 16356
如上所示命令調用下面兩個驅動接口獲取端口狀態
Void port_info_init(int unit, int port, bcm_port_info_t *info, uint32 actions)
int bcm_port_selective_get(int unit, bcm_port_t port, bcm_port_info_t *info)
Actions = BCM_PORT_ATTR_ALL_MASK
2.2 獲取端口的轉發狀態
BCM.0> debug bcm api
debug bcm api
BCM.0> stg show 1
stg show 1
API: bcm_stg_vlan_list(0,1,...) -> 0 Ok
STG 1: contains 2 VLANs (1-2)
API: bcm_stg_vlan_list_destroy(0,...) -> 0 Ok
BCM.0> stg stp 1
stg stp 1
STG 1:
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_stg_stp_get(0,1,1,...) -> 0 Ok
API: bcm_stg_stp_get(0,1,2,...) -> 0 Ok
...
API: bcm_stg_stp_get(0,1,55,...) -> 0 Ok
Forward: ge,xe,hg
如上所示,調用驅動接口獲取端口stp 狀態。
bcm_stg_stp_get(int unit, bcm_stg_t stg, bcm_port_t port, int *stp_state)
2.3 設置端口的轉發狀態
BCM.0> debug bcm api
debug bcm api
BCM.0> stg stp 1 ge15 block
stg stp 1 ge15 block
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_stg_stp_set(0,1,16,...) -> 0 Ok
BCM.0> ps ge15
ps ge15
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_port_selective_get(0,16,...) -> 0 Ok
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge15 up 1G FD SW Yes Block TX RX None FA SGMII 16356
BCM.0> clear c
clear c
BCM.0> show c
show c
R255.ge10 : 1 +1
R511.ge10 : 4 +4
RPKT.ge10 : 5 +5
RMCA.ge10 : 5 +5
RPOK.ge10 : 5 +5
RBYT.ge10 : 1,499 +1,499
RPORTD.ge15 : 25 +11
RDBGC0.ge15 : 25 +11
R127.ge15 : 7 +6
R255.ge15 : 7 +4
R511.ge15 : 1 +1
RPKT.ge15 : 25 +11
RMCA.ge15 : 7 +4
RBCA.ge15 : 18 +7
RPOK.ge15 : 25 +11
RBYT.ge15 : 2,631 +1,422
命令在調用驅動接口
bcm_stg_stp_set( int unit, bcm_stg_t stg, bcm_port_t port, int stp_state)
設置端口ge15 stp 狀態為Block之后,查看端口狀態,顯示為block,打入廣播報文,其他端口沒有廣播報文統計計數。
BCM.0> m L2_user_entry 3 1 MAC_ADDR=0x000000000003 VLAN_ID=1 MODULE_ID=0 MASK=0x00ffffffffffffff cpu=0 PORT_NUM=15
BCM.0> d l2_user_entry 3 1
d l2_user_entry 3 1
L2_USER_ENTRY.ipipe0[3]: <VLAN_ID=1,VFI=1,VALID=1,TGID=0xf,T=0,RPE=0,RESERVED_0=0,PRI=0,PORT_NUM=0xf,MODULE_ID=0,MASK=0x00ffffffffffffff,MAC_ADDR=0x000000000003,L2_PROTOCOL_PKT=0,KEY_TYPE=0,KEY=0x0001000000000003,EVEN_PARITY=0,DST_DISCARD=0,DO_NOT_LEARN_MACSA=0,CPU=0,CLASS_ID=0,BPDU=1>
修改L2_user_entry 表index 為3的表項,mac 為0x000000000003,從block 的ge12打入構造的目的mac為0x03的二層報文,其他端口有統計計數。
或者通過如下方式增加L2_user_entry表項
BCM.0> bpdu add index=-1 mac=0x000000000001
BCM.0> bpdu show
unit 0 has 512 BPDU entries
BPDU 0: 01:80:c2:00:00:00
BPDU 1: 01:80:c2:00:00:00
BPDU 2: 01:80:c2:00:00:00
BPDU 3: 01:80:c2:00:00:00
BPDU 4: 01:80:c2:00:00:00
BPDU 5: 01:80:c2:00:00:00
BPDU 6: 01:80:c2:00:00:10
BPDU 7: 00:00:00:00:00:01
BPDU 510: 01:80:c2:00:00:20
BPDU 511: 01:80:c2:00:00:00
BCM.0>
BCM.0> d chg L2_user_entry
L2_USER_ENTRY.ipipe0[0]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[1]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[2]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[3]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[4]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[5]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[6]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000010,KEY=0x00000180c2000010,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[7]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x000000000001,KEY=0x0000000000000001,BPDU=1>
L2_USER_ENTRY.ipipe0[510]: <VALID=1,MASK=0x0000fffffffffff0,MAC_ADDR=0x0180c2000020,KEY=0x00000180c2000020,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[511]: <VALID=1,MASK=0x0000fffffffffff0,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
BCM.0>
BCM.0> stg stp 1 ge12 block
stg stp 1 ge12 block
BCM.0> ps ge12
ps ge12
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge12 up 1G FD SW Yes Block TX RX None FA SGMII 16356
BCM.0> show c
show c
RUC.ge12 : 10 +10
R64.ge12 : 10 +10
RPKT.ge12 : 10 +10
RUCA.ge12 : 10 +10
RPRM.ge12 : 10 +10
RPOK.ge12 : 10 +10
RBYT.ge12 : 640 +640
T64.ge14 : 10 +10
TPOK.ge14 : 10 +10
TPKT.ge14 : 10 +10
TUCA.ge14 : 10 +10
TBYT.ge14 : 640 +640
MC_PERQ_PKT(0).ge14 : 10 +10
MC_PERQ_BYTE(0).ge14 : 640 +640
T64.ge48 : 10 +10
TPOK.ge48 : 10 +10
TPKT.ge48 : 10 +10
TUCA.ge48 : 10 +10
TBYT.ge48 : 640 +640
MC_PERQ_PKT(0).ge48 : 10 +10
MC_PERQ_BYTE(0).ge48 : 640 +640
BCM.0> stg stp 1 ge8 block
BCM.0> clear c
BCM.0> show c
RPORTD.ge8 : 10 +10
RDBGC0.ge8 : 10 +10
R64.ge8 : 10 +10
RPKT.ge8 : 10 +10
RBCA.ge8 : 10 +10
RPOK.ge8 : 10 +10
RBYT.ge8 : 640 +640
BCM.0> bpdu show
unit 0 has 512 BPDU entries
BPDU 0: 01:80:c2:00:00:00
BPDU 1: 01:80:c2:00:00:00
BPDU 2: 01:80:c2:00:00:00
BPDU 3: 01:80:c2:00:00:00
BPDU 4: 01:80:c2:00:00:00
BPDU 5: 01:80:c2:00:00:00
BPDU 6: 01:80:c2:00:00:10
BPDU 510: 01:80:c2:00:00:20
BPDU 511: 01:80:c2:00:00:00
BCM.0> bpdu add index=-1 mac=01:80:c2:05:00:01
BCM.0> bpdu show
unit 0 has 512 BPDU entries
BPDU 0: 01:80:c2:00:00:00
BPDU 1: 01:80:c2:00:00:00
BPDU 2: 01:80:c2:00:00:00
BPDU 3: 01:80:c2:00:00:00
BPDU 4: 01:80:c2:00:00:00
BPDU 5: 01:80:c2:00:00:00
BPDU 6: 01:80:c2:00:00:10
BPDU 7: 01:80:c2:05:00:01
BPDU 510: 01:80:c2:00:00:20
BPDU 511: 01:80:c2:00:00:00
BCM.0> d chg L2_user_entry
L2_USER_ENTRY.ipipe0[0]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[1]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[2]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[3]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[4]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[5]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[6]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2000010,KEY=0x00000180c2000010,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[7]: <VALID=1,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2050001,KEY=0x00000180c2050001,BPDU=1>
L2_USER_ENTRY.ipipe0[510]: <VALID=1,MASK=0x0000fffffffffff0,MAC_ADDR=0x0180c2000020,KEY=0x00000180c2000020,CPU=1,BPDU=1>
L2_USER_ENTRY.ipipe0[511]: <VALID=1,MASK=0x0000fffffffffff0,MAC_ADDR=0x0180c2000000,KEY=0x00000180c2000000,CPU=1,BPDU=1>
BCM.0> d L2_user_entry 7 1
L2_USER_ENTRY.ipipe0[7]: <VLAN_ID=0,VFI=0,VALID=1,TGID=0,T=0,RPE=0,RESERVED_0=0,PRI=0,PORT_NUM=0,MODULE_ID=0,MASK=0x0000ffffffffffff,MAC_ADDR=0x0180c2050001,L2_PROTOCOL_PKT=0,KEY_TYPE=0,KEY=0x00000180c2050001,EVEN_PARITY=0,DST_DISCARD=0,DO_NOT_LEARN_MACSA=0,CPU=0,CLASS_ID=0,BPDU=1>
BCM.0> mod L2_user_entry 7 1 cpu=1
BCM.0> clear c
BCM.0> show c
MC_PERQ_PKT(0).cpu0 : 10 +10
MC_PERQ_BYTE(0).cpu0 : 680 +680
R64.ge8 : 10 +10
RPKT.ge8 : 10 +10
RMCA.ge8 : 10 +10
RPOK.ge8 : 10 +10
RBYT.ge8 : 640 +640
BCM.0> stg stp 1 ge15 forward
stg stp 1 ge15 forward
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_stg_stp_set(0,1,16,...) -> 0 Ok
BCM.0> clear c
clear c
BCM.0> show c
show c
T64.ge10 : 10 +10
T127.ge10 : 2 +2
TPOK.ge10 : 12 +12
TPKT.ge10 : 12 +12
TBCA.ge10 : 12 +12
TBYT.ge10 : 812 +812
MC_PERQ_PKT(0).ge10 : 12 +12
MC_PERQ_BYTE(0).ge10 : 812 +812
R64.ge15 : 10 +10
R127.ge15 : 2 +2
RPKT.ge15 : 12 +12
RBCA.ge15 : 12 +12
RPOK.ge15 : 12 +12
RBYT.ge15 : 812 +812
T64.ge48 : 10 +10
T127.ge48 : 2 +2
TPOK.ge48 : 12 +12
TPKT.ge48 : 12 +12
TBCA.ge48 : 12 +12
TBYT.ge48 : 812 +812
MC_PERQ_PKT(0).ge48 : 12 +12
MC_PERQ_BYTE(0).ge48 : 812 +812
BCM.0> ps ge15
ps ge15
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_port_selective_get(0,16,...) -> 0 Ok
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge15 up 1G FD SW Yes Forward TX RX None FA SGMII 16356
BCM.0>
在將端口ge15 stp設置為forward 之后,查看端口狀態顯示為forward, 從ge15打入二層廣播報文,其他端口有報文統計計數。
BCM.0> stg stp 1 ge10 disable
stg stp 1 ge10 disable
BCM.0> clear c
clear c
BCM.0> ps ge10
ps ge10
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge10 up 1G FD SW Yes Disable TX RX None FA SGMII 16356
BCM.0> show c
show c
RPORTD.ge10 : 10 +10
RDBGC0.ge10 : 10 +10
R64.ge10 : 10 +10
RPKT.ge10 : 10 +10
RBCA.ge10 : 10 +10
RPOK.ge10 : 10 +10
RBYT.ge10 : 640 +640
BCM.0>
BCM.0> stg stp 1 ge10 forward
stg stp 1 ge10 forward
BCM.0> clear c
clear c
BCM.0> show c
show c
R64.ge10 : 10 +10
RPKT.ge10 : 10 +10
RBCA.ge10 : 10 +10
RPOK.ge10 : 10 +10
RBYT.ge10 : 640 +640
R511.ge14 : 1 +1
RPKT.ge14 : 1 +1
RMCA.ge14 : 1 +1
RPOK.ge14 : 1 +1
RBYT.ge14 : 333 +333
T64.ge14 : 10 +10
TPOK.ge14 : 10 +10
TPKT.ge14 : 10 +10
TBCA.ge14 : 10 +10
TBYT.ge14 : 640 +640
MC_PERQ_PKT(0).ge14 : 10 +10
MC_PERQ_BYTE(0).ge14 : 640 +640
BCM.0>
BCM.0> stg stp 1 ge10 listen
stg stp 1 ge10 listen
BCM.0> ps ge10
ps ge10
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge10 up 1G FD SW Yes Block TX RX None FA SGMII 16356
BCM.0> clear c
clear c
BCM.0> show c
show c
RPORTD.ge10 : 11 +11
RDBGC0.ge10 : 11 +11
R64.ge10 : 10 +10
R255.ge10 : 1 +1
RPKT.ge10 : 11 +11
RBCA.ge10 : 11 +11
RPOK.ge10 : 11 +11
RBYT.ge10 : 887 +887
BCM.0>
BCM.0> stg stp 1 ge10 forward
stg stp 1 ge10 forward
BCM.0> ps ge10
ps ge10
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge10 up 1G FD SW Yes Forward TX RX None FA SGMII 16356
BCM.0> stg stp 1 ge10 learn
stg stp 1 ge10 learn
BCM.0> ps ge10
ps ge10
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge10 up 1G FD SW Yes LEarn TX RX None FA SGMII 16356
BCM.0> clear c
clear c
BCM.0> show c
show c
RPORTD.ge10 : 10 +10
RDBGC0.ge10 : 10 +10
R64.ge10 : 10 +10
RPKT.ge10 : 10 +10
RBCA.ge10 : 10 +10
RPOK.ge10 : 10 +10
RBYT.ge10 : 640 +640
R255.ge14 : 1 +1
RPKT.ge14 : 1 +1
RMCA.ge14 : 1 +1
RPOK.ge14 : 1 +1
RBYT.ge14 : 167 +167
BCM.0>
2.4 端口狀態變化通知注冊
2.4.1 電口up/down事件
BCM.0> dispatch linkreg 0
dispatch linkreg 0
API: bcm_linkscan_register(0,...) -> 0 Ok
BCM.0> port ge8 en=false
port ge8 en=false
BCM.0> [bcmLINK.0] port 0.9 link down
BCM.0> ps ge8
ps ge8
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge8 !ena - SW Yes Forward TX RX None FA SGMII 16356
BCM.0> port ge8 en=true
port ge8 en=true
BCM.0> [bcmLINK.0] port 0.9 link up 1000Mb/s FD
命令調用驅動接口
int bcm_linkscan_register( int unit, bcm_linkscan_handler_t f)
注冊linkscan 回調處理函數,在port ge8 enable 設置為false 時,打印link down消息,
在enable 設置為true之后,打印link up消息。
2.4.2 光口up/down事件
分別使用光轉電,光模塊,線纜驗證。接光轉電模塊時,在插拔網線或光轉電模塊都會上報up/down事件;在接光模塊時,插拔光纖或光模塊都會上報up/down事件;在接線纜時,插拔線纜會上報up/down事件。
BCM.0> dispatch linkreg 0
dispatch linkreg 0
[bcmLINK.0] port 0.3 link up 1000Mb/s FD
[bcmLINK.0] port 0.3 link down
[bcmLINK.0] port 0.3 link up 1000Mb/s FD
[bcmLINK.0] port 0.3 link down
[bcmLINK.0] port 0.1 link up 1000Mb/s FD
[bcmLINK.0] port 0.1 link down
[bcmLINK.0] port 0.1 link up 1000Mb/s FD
[bcmLINK.0] port 0.7 link up 1000Mb/s FD
[bcmLINK.0] port 0.1 link down
[bcmLINK.0] port 0.7 link down
[bcmLINK.0] port 0.1 link up 1000Mb/s FD
[bcmLINK.0] port 0.7 link up 1000Mb/s FD
[bcmLINK.0] port 0.1 link down
[bcmLINK.0] port 0.7 link down
[bcmLINK.0] port 0.1 link up 1000Mb/s FD
[bcmLINK.0] port 0.7 link up 1000Mb/s FD
[bcmLINK.0] port 0.1 link down
[bcmLINK.0] port 0.7 link down
[bcmLINK.0] port 0.3 link up 1000Mb/s FD
[bcmLINK.0] port 0.6 link up 1000Mb/s FD
[bcmLINK.0] port 0.3 link down
[bcmLINK.0] port 0.6 link down
2.5 端口狀態變化通知反注冊
BCM.0> dispatch linkunreg 0
dispatch linkunreg 0
API: bcm_linkscan_unregister(0,...) -> 0 Ok
BCM.0> port ge8 en=false
port ge8 en=false
BCM.0> ps ge8
ps ge8
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge8 !ena - SW Yes Forward TX RX None FA SGMII 16356
BCM.0> port ge8 en=true
port ge8 en=true
BCM.0> ps ge8
ps ge8
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge8 up 1G FD SW Yes Forward TX RX None FA SGMII 16356
BCM.0>
命令調用驅動接口
int bcm_linkscan_unregister(int unit, bcm_linkscan_handler_t f)
取消注冊的回調處理函數,在將port ge8設置為enable = false 或true 之后,都不打印linkdown /linkup消息。
2.6 VCT
BCM.0> cable ge12
cable ge12
port ge12: cable (4 pairs, length +/- 10 meters)
pair A Open, length 1 meters
pair B Open, length 1 meters
pair C Open, length 1 meters
pair D Open, length 1 meters
2.7 Mirror
BCM.0> dmir 11 mode=ingress destport=13
dmir 11 mode=ingress destport=13
3.地址表
3.1 地址表通知注冊
BCM.0> l2 watch start
l2 watch start
API: bcm_l2_addr_register(0,...) -> 0 Ok
BCM.0> API: bcm_stk_my_modid_get(0,...) -> 0 Ok
L2 ADD: mac=00:00:00:00:00:03 vlan=1 GPORT=0x9API: bcm_port_local_get(0,134217737,...) -> 0 Ok modid=0 port=9/ge8
命令調用驅動接口
int bcm_l2_addr_register( int unit, bcm_l2_addr_callback_t callback, void *userdata)
打入mac=00:00:00:00:00:03 的廣播報文,可以看到,提示mac地址添加消息。
3.2 地址表通知反注冊
BCM.0> l2 watch stop
l2 watch stop
API: bcm_l2_addr_unregister(0,...) -> 0 Ok
BCM.0> debug bcm api -
debug bcm api -
BCM.0> l2 show
l2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=2 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0>
命令調用驅動接口
int bcm_l2_addr_unregister( int unit, bcm_l2_addr_callback_t callback,
void *userdata)
打入mac=00:00:00:00:00:04 的廣播報文,可以看到,沒有打印mac地址添加消息,查看L2 地址表,04 mac地址已學習到。
3.3 添加單播地址
BCM.0> debug bcm api
debug bcm api
BCM.0> l2 add port=ge8 MACaddress=0x000000000005 vlanid=1 STatic=true
l2 add port=ge8 MACaddress=0x000000000005 vlanid=1 STatic=true
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_l2_addr_add(0,...) -> 0 Ok
API: bcm_stk_my_modid_get(0,...) -> 0 Ok
ADD: mac=00:00:00:00:00:05 vlan=1 GPORT=0x9API: bcm_port_local_get(0,134217737,...) -> 0 Ok modid=0 port=9/ge8 Static ReplacePriority
BCM.0> debug bcm api -
debug bcm api -
BCM.0> l2 show
l2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=2 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static ReplacePriority
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0>
在命令添加L2 地址時,調用驅動接口
int bcm_l2_addr_add( int unit, bcm_l2_addr_t *l2addr)
添加單播地址mac = 0x000000000005,查看L2 地址表,添加成功。
3.4 刪除單播地址
BCM.0> debug bcm api
debug bcm api
BCM.0> l2 del macaddress=0x000000000005 vlanid=1
l2 del macaddress=0x000000000005 vlanid=1
API: bcm_l2_addr_get(0,...) -> 0 Ok
API: bcm_l2_addr_delete(0,...) -> 0 Ok
BCM.0> debug bcm api -
debug bcm api -
BCM.0> l2 show
l2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=2 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0>
在命令刪除mac 為0x000000000005 vlanid=1 的表項時,調用驅動接口
int bcm_l2_addr_delete( int unit, bcm_mac_t mac, bcm_vlan_t vid)
查看L2 表,成功刪除。
3.5 添加組播地址
BCM.0> mcast add mac=0x01005e000009 vlanid=1 pbm=ge8-ge11
mcast add mac=0x01005e000009 vlanid=1 pbm=ge8-ge11
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=2 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=01:00:5e:00:00:09 vlan=1 GPORT=0x0 modid=0 port=0/cpu0 Static CPU MCast=1
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0> d L2mc 1 1
d L2mc 1 1
L2MC.ipipe0[1]: <VALID=1,PORT_BITMAP_W1=0,PORT_BITMAP_W0=0x1e00,PORT_BITMAP=0x0000000000001e00,HIGIG_TRUNK_OVERRIDE_PROFILE_PTR=0,EVEN_PARITY=0>
BCM.0> pbmp 0x0000000000001e00
pbmp 0x0000000000001e00
0x0000000000000000000000000000000000000000000000000000000000001e00 ==> ge8-ge11
命令在調用驅動接口
int bcm_mcast_addr_add( int unit, bcm_mcast_addr_t *mcaddr)
添加組播mac=0x01005e000009 vlanid=1 pbm=ge8-ge11 的表項后,查看L2 entry表,MCast=1,即L2mc 表的index為1,dump L2mc,端口位圖為0x1e00,對應ge8-ge11.
3.6 刪除組播地址
BCM.0> debug bcm api
debug bcm api
BCM.0> mcast delete mac=0x01005e000009 vlanid=1
mcast delete mac=0x01005e000009 vlanid=1
API: bcm_mcast_addr_remove(0,...) -> 0 Ok
BCM.0> debug bcm api -
debug bcm api -
BCM.0> d chg L2mc
d chg L2mc
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=2 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0>
命令調用驅動接口
int bcm_mcast_addr_remove( int unit, bcm_mac_t mac, bcm_vlan_t vid)
刪除mac=0x01005e000009 vlanid=1 的組播地址之后,查看L2mc 及L2 entry
都沒有此表項。
3.7 清除所有動態地址
BCM.0> l2 show
l2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0> debug bcm api
debug bcm api
BCM.0> L2 clear port=ge8 Static=false
L2 clear port=ge8 Static=false
L2: Deleting non-static addresses by port, local module ID
API: bcm_l2_addr_delete_by_port(0,-1,9,...) -> 0 Ok
BCM.0> debug bcm api -
debug bcm api -
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
BCM.0>
命令調用驅動接口
int
bcm_l2_addr_delete_by_port( int unit, bcm_module_t mod,
bcm_port_t port, uint32 flags)
基於端口刪除所有動態地址之后,查看L2 entry表,靜態地址保留,動態地址刪除。
mac=d4:be:d9:e3:95:8d 為pc 的地址。
3.8 獲取地址表老化時間
BCM.0> debug bcm api
debug bcm api
BCM.0> age
age
API: bcm_l2_age_timer_get(0,...) -> 0 Ok
Current age timer is 0.
BCM.0>
命令調用驅動接口
int bcm_l2_age_timer_get(int unit, int *age_seconds)
獲取地址表老化時間,Setting to 0 disables hardware aging。
3.9 地址表老化時間設置
BCM.0> age 60
age 60
API: bcm_l2_age_timer_set(0,60) -> 0 Ok
Set age timer to 60.
BCM.0> age
age
API: bcm_l2_age_timer_get(0,...) -> 0 Ok
Current age timer is 60.
BCM.0>
BCM.0> debug bcm api -
debug bcm api -
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
BCM.0> date
date
1970/01/01 02:39:50 UTC
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8 Hit
mac=00:00:00:00:00:03 vlan=1 GPORT=0x9 modid=0 port=9/ge8
mac=00:00:00:00:00:01 vlan=1 GPORT=0x9 modid=0 port=9/ge8
mac=00:00:00:00:00:02 vlan=1 GPORT=0x9 modid=0 port=9/ge8
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
mac=00:00:00:00:00:04 vlan=1 GPORT=0x9 modid=0 port=9/ge8
BCM.0> L2 show
L2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xd modid=0 port=13/ge12
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
BCM.0> date
date
1970/01/01 02:41:10 UTC
BCM.0>
BCM.0> L2 show
L2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0x9 modid=0 port=9/ge8
mac=00:00:00:00:00:05 vlan=1 GPORT=0x9 modid=0 port=9/ge8 Static
BCM.0>
命令調用驅動接口
int bcm_l2_age_timer_set( int unit, int age_seconds)
設置硬件老化時候為60s 之后,在第一個60s 到來時,如果地址沒有再次命中,將hit 置0,第二個60s 到來時,將hit為0的表項刪除。
4. VLAN
4.1 創建VLAN
BCM.0> vlan create 2 pbm=ge8-ge13 ubm=ge8-ge10
vlan create 2 pbm=ge8-ge13 ubm=ge8-ge10
API: bcm_vlan_create(0,2) -> 0 Ok
API: bcm_vlan_port_add(0,2,...) -> 0 Ok
BCM.0> db bcm api -
db bcm api -
BCM.0> vlan show 2
vlan show 2
vlan 2 ports ge8-ge13 (0x0000000000000000000000000000000000000000000000000000000000007e00), untagged ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00) MCAST_FLOOD_UNKNOWN
BCM.0>
命令調用驅動接口
int bcm_vlan_create( int unit, bcm_vlan_t vid)
創建vlan 2 ,添加端口ge8--ge10以untag方式,ge11--ge13以tag方式加入vlan.
4.2 刪除VLAN
BCM.0> db bcm api
db bcm api
BCM.0> vlan destroy 2
vlan destroy 2
API: bcm_vlan_destroy(0,2) -> 0 Ok
BCM.0> db bcm api -
db bcm api -
BCM.0> vlan show
vlan show
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0>
命令調用驅動接口
int bcm_vlan_destroy( int unit, bcm_vlan_t vid)
刪除vlan 2 之后,查看vlan entry,只有vlan 1 的表項。
4.3 端口以UNTAG形式加入VLAN
BCM.0> vlan create 2
vlan create 2
API: bcm_vlan_create(0,2) -> 0 Ok
API: bcm_vlan_port_add(0,2,...) -> 0 Ok
BCM.0> vlan add 2 pbm=ge8-ge10 ubm=ge8-ge10
vlan add 2 pbm=ge8-ge10 ubm=ge8-ge10
API: bcm_vlan_port_add(0,2,...) -> 0 Ok
BCM.0> vlan show 2
vlan show 2
API: bcm_vlan_list(0,...) -> 0 Ok
API: bcm_vlan_mcast_flood_get(0,2,...) -> 0 Ok
vlan 2 ports ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00), untagged ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00) MCAST_FLOOD_UNKNOWN
API: bcm_vlan_list_destroy(0,...) -> 0 Ok
BCM.0>
命令調用驅動接口
int
bcm_vlan_port_add( int unit, bcm_vlan_t vid, bcm_pbmp_t pbmp,
bcm_pbmp_t ubmp)
添加untag bmp ge8-ge10到vlan 2中。
4.4 端口以TAG形式加入VLAN
BCM.0> vlan add 2 pbm=ge11-ge13
vlan add 2 pbm=ge11-ge13
API: bcm_vlan_port_add(0,2,...) -> 0 Ok
BCM.0> vlan show 2
vlan show 2
API: bcm_vlan_list(0,...) -> 0 Ok
API: bcm_vlan_mcast_flood_get(0,2,...) -> 0 Ok
vlan 2 ports ge8-ge13 (0x0000000000000000000000000000000000000000000000000000000000007e00), untagged ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00) MCAST_FLOOD_UNKNOWN
API: bcm_vlan_list_destroy(0,...) -> 0 Ok
BCM.0>
命令調用驅動接口
int
bcm_vlan_port_add( int unit, bcm_vlan_t vid, bcm_pbmp_t pbmp,
bcm_pbmp_t ubmp)
添加tag bmp ge11-ge13到vlan 2中。
4.5 端口退出VLAN
BCM.0> vlan remove 2 pbm=ge11-ge13
vlan remove 2 pbm=ge11-ge13
API: bcm_vlan_port_remove(0,2,...) -> 0 Ok
BCM.0> vlan show 2
vlan show 2
API: bcm_vlan_list(0,...) -> 0 Ok
API: bcm_vlan_mcast_flood_get(0,2,...) -> 0 Ok
vlan 2 ports ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00), untagged ge8-ge10 (0x0000000000000000000000000000000000000000000000000000000000000e00) MCAST_FLOOD_UNKNOWN
API: bcm_vlan_list_destroy(0,...) -> 0 Ok
BCM.0>
命令調用驅動接口
int
bcm_vlan_port_remove( int unit, bcm_vlan_t vid, bcm_pbmp_t pbmp)
從vlan 2 的pbm中刪除ge11-ge13。
4.6 獲取端口默認VLAN
BCM.0> vlan default
vlan default
API: bcm_vlan_default_get(0,...) -> 0 Ok
Default VLAN ID is 1
BCM.0>
命令調用
int
bcm_port_untagged_vlan_get( int unit, bcm_port_t port, bcm_vlan_t *vid_ptr)
獲取端口的default vlanid.
4.7 設置端口默認VLAN
BCM.0> vlan default 2
vlan default 2
API: bcm_vlan_default_set(0,2) -> 0 Ok
Default VLAN ID set to 2
BCM.0> vlan default
vlan default
API: bcm_vlan_default_get(0,...) -> 0 Ok
Default VLAN ID is 2
BCM.0>
命令調用驅動接口
int
bcm_port_untagged_vlan_set(int unit, bcm_port_t port, bcm_vlan_t vid)
設置端口的default vlan id。
4.8 廣播報文轉發
端口狀態中,有ge9, ge10, ge11 三個端口為up, 創建vlan 2 ,將ge9, ge10以tagged加入valn中,構造20個帶vlan tag為2的廣播報文,從ge9打入,查看端口報文統計,只有ge10 出。
BCM.0> vlan create 2 pbm=ge9,ge10
vlan create 2 pbm=ge9,ge10
BCM.0> vlan show
vlan show
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
vlan 2 ports ge9-ge10 (0x0000000000000000000000000000000000000000000000000000000000000c00), untagged none (0x0000000000000000000000000000000000000000000000000000000000000000) MCAST_FLOOD_UNKNOWN
BCM.0> clear c
clear c
BCM.0> show c
show c
所有端口以untag 方式加入vlan 1 ,從ge11口打入目的未知單播的二層報文,查看端口統計計數,報文在vlan 1內廣播。
BCM.0> vlan show 1
vlan show 1
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0>
4.9 已知單播報文轉發
端口ge9, ge10, ge11 都以untag 加入vlan 1中,從ge9打入20個目的mac為00:50:c5:00:00:d7的untag報文,查看端口報文統計,只有ge10 收到。
BCM.0> l2 show
l2 show
mac=00:50:c5:00:00:d7 vlan=1 GPORT=0xb modid=0 port=11/ge10 Hit
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xa modid=0 port=10/ge9 Hit
mac=3c:8c:40:0f:8d:1f vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=00:00:00:00:00:01 vlan=2 GPORT=0xa modid=0 port=10/ge9 Hit
BCM.0> vlan destroy 2
vlan destroy 2
BCM.0> vlan show
vlan show
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0> clear c
5. IGMP SNOOPING
5.1 獲取IGMP報文送CPU
BCM.0> db bcm api
db bcm api
BCM.0> switchcontrol IgmpPktToCpu
switchcontrol IgmpPktToCpu
API: bcm_switch_control_get(0,92,...) -> 0 Ok
0x0
BCM.0>
命令調用驅動接口
int
bcm_switch_control_port_get( int unit, bcm_port_t port,
bcm_switch_control_t type, int *arg)
獲取IGMP報文送cpu是否使能。
5.2 設置IGMP報文送CPU
BCM.0> switchcontrol IgmpPktToCpu=1
switchcontrol IgmpPktToCpu=1
API: bcm_switch_control_set(0,92,1) -> 0 Ok
BCM.0> switchcontrol IgmpPktToCpu
switchcontrol IgmpPktToCpu
API: bcm_switch_control_get(0,92,...) -> 0 Ok
0x1
BCM.0>
命令調用驅動接口
int
bcm_switch_control_port_set( int unit, bcm_port_t port,
bcm_switch_control_t type, int arg)
設置IGMP報文送CPU使能。
5.3 獲取未知名組播不轉發
BCM.0> db bcm api
db bcm api
BCM.0> vlan MulticastFlood 1
vlan MulticastFlood 1
API: bcm_vlan_mcast_flood_get(0,1,...) -> 0 Ok
vlan 1 Multicast Flood Mode is MCAST_FLOOD_UNKNOWN
BCM.0>
或者是如下命令
BCM.0> vlan 1
vlan 1
Current settings:
VRF=0
OuterTPID=0x8100
LearnDisable=0
UnknownIp6McastToCpu=0
UnknownIp4McastToCpu=0
Ip4Disable=0
Ip6Disable=0
Ip4McastDisable=0
Ip6McastDisable=0
Ip4McastL2Disable=0
Ip6McastL2Disable=0
L3VrfGlobalDisable=0
MplsDisable=0
CosqEnable=0
MiMTermDisable=0
Cosq=0
Ip6McastFloodMode=MCAST_FLOOD_UNKNOWN
Ip4McastFloodMode=MCAST_FLOOD_UNKNOWN
L2McastFloodMode=MCAST_FLOOD_UNKNOWN
IfClass=0
BCM.0>
命令調用驅動接口
int
bcm_vlan_mcast_flood_set( int unit, bcm_vlan_t vlan,
bcm_vlan_mcast_flood_t mode)
獲取vlan 1 的multicast flood mode。
5.4 設置未知名組播不轉發
BCM.0> vlan MulticastFlood 1 2
vlan MulticastFlood 1 2
API: bcm_vlan_mcast_flood_set(0,1,2) -> 0 Ok
BCM.0> vlan MulticastFlood 1
vlan MulticastFlood 1
API: bcm_vlan_mcast_flood_get(0,1,...) -> 0 Ok
vlan 1 Multicast Flood Mode is MCAST_FLOOD_NONE
BCM.0>
/*
* Defines:
* _SHR_PORT_MCAST_FLOOD_*
* Purpose:
* Multicast packet flooding mode
*/
typedef enum _shr_port_mcast_flood_e {
_SHR_PORT_MCAST_FLOOD_ALL = 0,
_SHR_PORT_MCAST_FLOOD_UNKNOWN = 1,
_SHR_PORT_MCAST_FLOOD_NONE = 2,
_SHR_PORT_MCAST_FLOOD_COUNT /* last, please */
} _shr_port_mcast_flood_t;
命令調用驅動接口
int
bcm_vlan_mcast_flood_set( int unit, bcm_vlan_t vlan,
bcm_vlan_mcast_flood_t mode)
設置vlan 1 的pfm為2,即未知組播丟棄。
5.5 組播報文轉發
1. Vlan 1 的組播報文pfm設置為FLOOD UNKNOWN, 打入目的mac為01005e000010的組播mac,在vlan內所有端口轉發。
BCM.0> vlan show 1
vlan show 1
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0> d chg l2mc
d chg l2mc
2. 配置未知組播丟棄之后,配置ge11為組播源,ge15加入組播組,從ge11打入13個目的mac為01:00:00:00:00:10 的報文,只有ge15收到組播報文。
BCM.0> vlan MulticastFlood 1 2
BCM.0> vlan multicastflood 1
vlan 1 Multicast Flood Mode is MCAST_FLOOD_NONE
BCM.0> mcast add mac=01:00:00:00:00:10 vlan=1 pbm=ge11 ubm=ge11
BCM.0> mcast join mac=01:00:00:00:00:10 vlan=1 pbm=ge15
port ge15 updated
BCM.0> l2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=01:00:00:00:00:10 vlan=1 GPORT=0x0 modid=0 port=0/cpu0 Static CPU MCast=1
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> d chg l2mc 1 1
L2MC.ipipe0[1]: <VALID=1,PORT_BITMAP_W0=0x11000,PORT_BITMAP=0x0000000000011000,>
BCM.0> pbmp 0x0000000000011000
0x0000000000000000000000000000000000000000000000000000000000011000 ==> ge11,ge15
3. 端口ge15 離開組播組,從ge11發送組播流量,未知組播都被丟棄。
BCM.0> mcast leave mac=01:00:00:00:00:10 vlan=1 pbm=ge15
mcast leave mac=01:00:00:00:00:10 vlan=1 pbm=ge15
port ge15 updated
BCM.0> l2 show
l2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=01:00:00:00:00:10 vlan=1 GPORT=0x0 modid=0 port=0/cpu0 Static Hit CPU MCast=1
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> d chg l2mc 1 1
d chg l2mc 1 1
L2MC.ipipe0[1]: <VALID=1,PORT_BITMAP_W0=0x1000,PORT_BITMAP=0x0000000000001000,>
BCM.0> pbmp 0x0000000000001000
pbmp 0x0000000000001000
0x0000000000000000000000000000000000000000000000000000000000001000 ==> ge11
BCM.0> clear c
BCM.0> vlan multicastflood 1
vlan multicastflood 1
vlan 1 Multicast Flood Mode is MCAST_FLOOD_NONE
BCM.0>
6. 端口聚合
6.1 創建聚合口
BCM.0> trunk init
trunk init
API: bcm_trunk_init(0) -> 0 Ok
BCM.0> trunk add id=1 rtag=1 pbmp=ge8-ge10
trunk add id=1 rtag=1 pbmp=ge8-ge10
API: bcm_stk_my_modid_get(0,...) -> 0 Ok
API: bcm_trunk_chip_info_get(0,...) -> 0 Ok
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_trunk_create(0,16,...) -> 0 Ok
API: bcm_trunk_set(0,1,...) -> 0 Ok
BCM.0> db bcm api -
db bcm api -
BCM.0> trunk show id=1
trunk show id=1
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
trunk 1: (front panel, 3 ports)=ge8,ge9,ge10 dlf=any mc=any ipmc=any psc=srcmac (0x1)
命令調用驅動接口
int bcm_trunk_create( int unit, uint32 flags, bcm_trunk_t *tid)
創建trunk ID 1 ,並添加端口。
6.2 刪除聚合口
BCM.0> db bcm api
db bcm api
BCM.0> trunk remove id=1 pbmp=ge8-ge10
trunk remove id=1 pbmp=ge8-ge10
API: bcm_stk_my_modid_get(0,...) -> 0 Ok
API: bcm_trunk_get(0,1,...) -> 0 Ok
API: bcm_stk_my_modid_get(0,...) -> 0 Ok
API: bcm_trunk_destroy(0,1) -> 0 Ok
BCM.0> trunk show id=1
trunk show id=1
API: bcm_trunk_chip_info_get(0,...) -> 0 Ok
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
API: bcm_trunk_get(0,1,...) -> -7 Entry not found
[no matching trunks defined]
BCM.0>
命令調用驅動接口
int bcm_trunk_destroy( int unit, bcm_trunk_t tid)
刪除trunk ID 為1 的trunk 組。
6.3 聚合口是否存在
BCM.0> trunk show id=1
trunk show id=1
API: bcm_trunk_chip_info_get(0,...) -> 0 Ok
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
API: bcm_trunk_get(0,1,...) -> -7 Entry not found
[no matching trunks defined]
BCM.0>
命令調用驅動接口
int
bcm_trunk_get( int unit, bcm_trunk_t tid, bcm_trunk_info_t *t_data,
int member_max, bcm_trunk_member_t *member_array,
int *member_count)
獲取trunk 組是否存在。
6.4 端口加入聚合口
BCM.0> trunk show id=1
trunk show id=1
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
trunk 1: (front panel, 3 ports)=ge8,ge9,ge10 dlf=any mc=any ipmc=any psc=srcmac (0x1)
BCM.0> db bcm api
db bcm api
BCM.0> trunk add id=1 rtag=1 pbmp=ge11-13
trunk add id=1 rtag=1 pbmp=ge11-13
API: bcm_stk_my_modid_get(0,...) -> 0 Ok
API: bcm_trunk_chip_info_get(0,...) -> 0 Ok
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_stk_modmap_map(0,2,0,...) -> 0 Ok
API: bcm_trunk_create(0,16,...) -> -8 Entry exists
API: bcm_trunk_set(0,1,...) -> 0 Ok
BCM.0> db bcm api -
db bcm api -
BCM.0> trunk show id=1
trunk show id=1
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
trunk 1: (front panel, 2 ports)=ge11,ge12 dlf=any mc=any ipmc=any psc=srcmac (0x1)
BCM.0>
命令調用驅動接口
int
bcm_trunk_set( int unit, bcm_trunk_t tid, bcm_trunk_info_t *trunk_info,
int member_count, bcm_trunk_member_t *member_array)
添加port ge11-ge13到trunk id 1 中。
6.5 端口退出聚合口
如5.4 中所示,
命令調用驅動接口
int
bcm_trunk_set( int unit, bcm_trunk_t tid, bcm_trunk_info_t *trunk_info,
int member_count, bcm_trunk_member_t *member_array)
在將新的端口ge11-ge13加入到trunk id 1 中之后,原有的ge8, ge9, ge10不存在於trunk 組中。
6.6 聚合組負載分擔
如下,創建Trunk 組,配置rtag 為1,基於源mac負載分擔,將端口ge9, ge10加入trunk組。
BCM.0> trunk init
BCM.0> pbmp ge9,ge10
pbmp ge9,ge10
0x0000000000000000000000000000000000000000000000000000000000000c00 ==> ge9-ge10
BCM.0> trunk add id=1 rtag=1 pbmp=0x0c00
BCM.0> trunk show
Device supports 1032 trunk groups:
1024 front panel trunks (0..1023), 256 ports/trunk
8 fabric trunks (1024..1031), 16 ports/trunk
trunk 1: (front panel, 2 ports)=ge9,ge10 dlf=any mc=any ipmc=any psc=srcmac (0x1)
添加靜態mac,目的端口為trunk組,構造目的mac為00:00:00:03:02:02,源mac遞增的二層報文,分別打入10000個和以1000p/s速率打入ge12,查看ge9,ge10上報文統計計數,
報文個數和速率都已負載分擔。
BCM.0> l2 add mac=00:00:00:03:02:02 Vlanid=1 Trunk=true TrunkGroupId=1
BCM.0> show c
show c
MC_PERQ_PKT(0).cpu0 : 1 +1
MC_PERQ_BYTE(0).cpu0 : 337 +337
RUC.ge9 : 5,000 +5,000
RDBGC0.ge9 : 5,000 +5,000
R64.ge9 : 5,000 +5,000
R511.ge9 : 1 +1
RPKT.ge9 : 5,001 +5,001
RUCA.ge9 : 5,000 +5,000
RMCA.ge9 : 1 +1
RPRM.ge9 : 5,000 +5,000
RPOK.ge9 : 5,001 +5,001
RBYT.ge9 : 320,333 +320,333
T64.ge9 : 5,000 +5,000
T127.ge9 : 2 +2
TPOK.ge9 : 5,002 +5,002
TPKT.ge9 : 5,002 +5,002
TUCA.ge9 : 5,000 +5,000
TBCA.ge9 : 2 +2
TBYT.ge9 : 320,172 +320,172
MC_PERQ_PKT(0).ge9 : 2 +2
MC_PERQ_BYTE(0).ge9 : 172 +172
UC_PERQ_PKT(0).ge9 : 5,000 +5,000
UC_PERQ_BYTE(0).ge9 : 320,000 +320,000
RUC.ge10 : 5,000 +5,000
RDBGC0.ge10 : 5,000 +5,000
R64.ge10 : 5,000 +5,000
R127.ge10 : 2 +2
RPKT.ge10 : 5,002 +5,002
RUCA.ge10 : 5,000 +5,000
RBCA.ge10 : 2 +2
RPRM.ge10 : 5,000 +5,000
RPOK.ge10 : 5,002 +5,002
RBYT.ge10 : 320,172 +320,172
T64.ge10 : 5,000 +5,000
TPOK.ge10 : 5,000 +5,000
TPKT.ge10 : 5,000 +5,000
TUCA.ge10 : 5,000 +5,000
TBYT.ge10 : 320,000 +320,000
UC_PERQ_PKT(0).ge10 : 5,000 +5,000
UC_PERQ_BYTE(0).ge10 : 320,000 +320,000
RUC.ge12 : 10,000 +10,000
R64.ge12 : 10,000 +10,000
R127.ge12 : 2 +2
RPKT.ge12 : 10,002 +10,002
RUCA.ge12 : 10,000 +10,000
RBCA.ge12 : 2 +2
RPRM.ge12 : 10,000 +10,000
RPOK.ge12 : 10,002 +10,002
RBYT.ge12 : 640,172 +640,172
T127.ge12 : 2 +2
TPOK.ge12 : 2 +2
TPKT.ge12 : 2 +2
TBCA.ge12 : 2 +2
TBYT.ge12 : 172 +172
MC_PERQ_PKT(0).ge12 : 2 +2
MC_PERQ_BYTE(0).ge12 : 172 +172
T127.ge48 : 4 +4
TPOK.ge48 : 4 +4
TPKT.ge48 : 4 +4
TBCA.ge48 : 4 +4
TBYT.ge48 : 344 +344
MC_PERQ_PKT(0).ge48 : 4 +4
MC_PERQ_BYTE(0).ge48 : 344 +344
BCM.0> clear c
clear c
BCM.0> show c
show c
RUC.ge9 : 1,716 +1,716 501/s
RDBGC0.ge9 : 1,716 +1,716 501/s
R64.ge9 : 1,716 +1,716 501/s
RPKT.ge9 : 1,716 +1,716 501/s
RUCA.ge9 : 1,716 +1,716 501/s
RPRM.ge9 : 1,716 +1,716 501/s
RPOK.ge9 : 1,716 +1,716 501/s
RBYT.ge9 : 109,824 +109,824 32,072/s
T64.ge9 : 1,716 +1,716 501/s
T255.ge9 : 1 +1 1/s
TPOK.ge9 : 1,717 +1,717 502/s
TPKT.ge9 : 1,717 +1,717 502/s
TUCA.ge9 : 1,716 +1,716 501/s
TMCA.ge9 : 1 +1 1/s
TBYT.ge9 : 109,985 +109,985 32,220/s
MC_PERQ_PKT(0).ge9 : 1 +1 1/s
MC_PERQ_BYTE(0).ge9 : 161 +161 148/s
UC_PERQ_PKT(0).ge9 : 1,732 +1,732 495/s
UC_PERQ_BYTE(0).ge9 : 110,848 +110,848 31,661/s
RUC.ge10 : 1,716 +1,716 501/s
RDBGC0.ge10 : 1,716 +1,716 501/s
RDBGC1.ge10 : 1 +1 1/s
R64.ge10 : 1,716 +1,716 501/s
R255.ge10 : 1 +1 1/s
RPKT.ge10 : 1,717 +1,717 502/s
RUCA.ge10 : 1,716 +1,716 501/s
RMCA.ge10 : 1 +1 1/s
RPRM.ge10 : 1,716 +1,716 501/s
RPOK.ge10 : 1,717 +1,717 502/s
RBYT.ge10 : 109,985 +109,985 32,220/s
T64.ge10 : 1,715 +1,715 501/s
TPOK.ge10 : 1,715 +1,715 501/s
TPKT.ge10 : 1,715 +1,715 501/s
TUCA.ge10 : 1,715 +1,715 501/s
TBYT.ge10 : 109,760 +109,760 32,072/s
UC_PERQ_PKT(0).ge10 : 1,731 +1,731 494/s
UC_PERQ_BYTE(0).ge10 : 110,784 +110,784 31,602/s
RUC.ge12 : 3,424 +3,424 1,002/s
RDBGC1.ge12 : 1 +1 1/s
R64.ge12 : 3,423 +3,423 1,002/s
R255.ge12 : 1 +1 1/s
RPKT.ge12 : 3,424 +3,424 1,003/s
RUCA.ge12 : 3,423 +3,423 1,002/s
RMCA.ge12 : 1 +1 1/s
RPRM.ge12 : 3,423 +3,423 1,002/s
RPOK.ge12 : 3,424 +3,424 1,003/s
RBYT.ge12 : 219,169 +219,169 64,291/s
T255.ge12 : 1 +1 1/s
TPOK.ge12 : 1 +1 1/s
TPKT.ge12 : 1 +1 1/s
TMCA.ge12 : 1 +1 1/s
TBYT.ge12 : 161 +161 148/s
MC_PERQ_PKT(0).ge12 : 1 +1 1/s
MC_PERQ_BYTE(0).ge12 : 161 +161 148/s
7. 端口安全
7.1 開啟端口安全
在端口ge11 上使能安全檢查,LearnEnable 設置為false之后,查看port ge11,Lrn 標識為cpu。從ge11 打入構造的源mac 為非L2 Entry表中的廣播二層報文,查看端口報文統計,其他端口沒有收到,打入源mac為d4:be:d9:e3:95:8d 廣播報文,其他端口都可以收到。
BCM.0> auth init
auth init
BCM.0> auth mac init
auth mac init
All ports set to MAC address 00:19:ad:75:01:11
BCM.0> port ge11
port ge11
PORT: Status (* indicates PHY link up)
*ge11 LS(SW) Auto(1GFD,pause) Ability (fd = 10MB,100MB,1000MB hd = intf = sgmii medium = copper pause = pause_tx,pause_rx,pause_asymm lb = none,MAC,PHY flags = autoneg )Local (fd = 10MB,100MB,1000MB hd = intf = medium = pause = pause_tx,pause_rx lb = flags = )Remote (fd = 10MB,100MB,1000MB hd = 10MB,100MB,1000MB intf = medium = pause = pause_rx lb = flags = )STP(Forward) Lrn(ARL,FWD) UtPri(0) Pfm(FloodNone) IF(SGMII) PH(Auto) Max_frame(16356) MDIX(Auto, Normal) Medium(Copper) VLANFILTER(2)
BCM.0> l2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> db bcm api
db bcm api
BCM.0> BCM.0> auth enable pbm=ge11 LE=false IL=false
auth enable pbm=ge11 LE=false IL=false
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_auth_mode_set(0,12,4) -> 0 Ok
port ge11 authorization enabled.
BCM.0> port ge11
PORT: Status (* indicates PHY link up)
*ge11 LS(SW) Auto(1GFD,pause) Ability (fd = 10MB,100MB,1000MB hd = intf = sgmii medium = copper pause = pause_tx,pause_rx,pause_asymm lb = none,MAC,PHY flags = autoneg )Local (fd = 10MB,100MB,1000MB hd = intf = medium = pause = pause_tx,pause_rx lb = flags = )Remote (fd = 10MB,100MB,1000MB hd = 10MB,100MB,1000MB intf = medium = pause = pause_rx lb = flags = )STP(Forward) Lrn(CPU) UtPri(0) Pfm(FloodNone) IF(SGMII) PH(Auto) Max_frame(16356) MDIX(Auto, Normal) Medium(Copper) VLANFILTER(2)
BCM.0> clear c
命令調用驅動接口
int bcm_auth_mode_set( int unit, int port, uint32 mode)
7.2 關閉端口安全
BCM.0> debug bcm api
debug bcm api
BCM.0> auth unblock pbm=ge11
auth unblock pbm=ge11
API: bcm_port_config_get(0,...) -> 0 Ok
API: bcm_auth_mode_set(0,12,1) -> 0 Ok
port ge11 unblock - all traffic allowed now.
從ge11 口打入源mac在與不在L2 Entry表中二層廣播的報文,其他端口都能收到。
8. 路由表
8.1 創建三層接口
BCM.0> l3 init
l3 init
API: bcm_l3_init(0) -> 0 Ok
BCM.0> l3 intf add mac=00:19:ad:75:01:11 vlan=1 intf=1
l3 intf add mac=00:19:ad:75:01:11 vlan=1 intf=1
API: bcm_l3_intf_create(0,...) -> 0 Ok
BCM.0>
BCM.0> l3 intf show intf=1
l3 intf show intf=1
Free L3INTF entries: 8190
Unit Intf VRF Group VLAN Source Mac MTU TTL Tunnel InnerVlan NATRealm
------------------------------------------------------------------
0 1 0 0 1 00:19:ad:75:01:11 16383 0 0 0 0
命令調用驅動接口
int bcm_l3_intf_create( int unit, bcm_l3_intf_t *intf)
創建Intf 1,交換機mac 為00:19:ad:75:01:11, vlan 1。
查看my_station_tcam 表,已成功創建。
BCM.0> d chg my_station_tcam
d chg my_station_tcam
MY_STATION_TCAM.ipipe0[511]: <VLAN_ID_MASK=0xfff,VLAN_ID=1,VALID=1,MASK=0x00000fffffffffffffff,MAC_ADDR_MASK=0xffffffffffff,MAC_ADDR=0x0019ad750111,KEY=0x000000010019ad750111,IPV6_TERMINATION_ALLOWED=1,IPV4_TERMINATION_ALLOWED=1,DATA=0x38,ARP_RARP_TERMINATION_ALLOWED=1>
8.2 添加IP
BCM.0> debug bcm api
debug bcm api
BCM.0> l3 l3table add ip=192.168.6.10 intf=1 mac=00:19:ad:75:01:12 port=ge8
l3 l3table add ip=192.168.6.10 intf=1 mac=00:19:ad:75:01:12 port=ge8
API: bcm_l3_host_add(0,...) -> 0 Ok
BCM.0> l3 l3table show
l3 l3table show
Unit 0, free L3 table entries: 24575
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 192.168.6.10 00:19:ad:75:01:12 1 0 9 0 n
命令調用驅動接口
int bcm_l3_host_add( int unit, bcm_l3_host_t *info)
創建主機路由表項192.168.6.10 對應mac 00:19:ad:75:01:12,端口為9.
8.3 刪除IP
BCM.0> debug bcm api
debug bcm api
BCM.0> l3 l3table destroy vrf=0 ip=192.168.6.10
l3 l3table destroy vrf=0 ip=192.168.6.10
API: bcm_l3_host_delete(0,...) -> 0 Ok
BCM.0>
BCM.0> l3 l3table show
l3 l3table show
Unit 0, free L3 table entries: 24576
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
BCM.0>
命令調用驅動接口
int bcm_l3_host_delete( int unit, bcm_l3_host_t *ip_addr)
刪除主機路由ip = 192.168.6.10.
8.4 添加路由
BCM.0> l3 defip add vrf=0 ip=192.168.5.0 MaSk=255.255.255.0 Mac=0x000000030201 INtf=2 port=ge12
API: bcm_l3_route_add(0,...) -> 0 Ok
BCM.0>
BCM.0> l3 defip show
l3 defip show
Unit 0, Total Number of DEFIP entries: 8192
# VRF Net addr Next Hop Mac INTF MODID PORT PRIO CLASS HIT VLAN
2048 0 192.168.5.0/24 00:00:00:03:02:01 2 0 13 0 0 n
BCM.0>
命令調用驅動接口
int bcm_l3_route_add( int unit, bcm_l3_route_t *info)
添加網段路由192.168.5.0/24 ,dmac 0x000000030201, egress intf 2, 出端口ge12.
8.5 刪除路由
BCM.0> debug bcm api
BCM.0> l3 defip destroy vrf=0 ip=192.168.5.0 mask=255.255.255.0
API: bcm_l3_route_delete(0,...) -> 0 Ok
BCM.0> debug bcm api -
debug bcm api -
BCM.0> l3 defip show
l3 defip show
Unit 0, Total Number of DEFIP entries: 8192
# VRF Net addr Next Hop Mac INTF MODID PORT PRIO CLASS HIT VLAN
BCM.0>
命令調用驅動接口
int bcm_l3_route_delete( int unit, bcm_l3_route_t *info)
刪除dip 為192.168.5.0/24 的網段路由。
8.6 路由表項流程分析
8.6.1 添加intf 2,交換機mac 02:01
BCM.0> L3 intf add mac=00:00:00:00:02:01 vlan=2 intf=2
BCM.0> L3 intf show intf=2
Free L3INTF entries: 8190
Unit Intf VRF Group VLAN Source Mac MTU TTL Tunnel InnerVlan NATRealm
------------------------------------------------------------------
0 2 0 0 2 00:00:00:00:02:01 16383 0 0 0 0
查看my_station_tcam,成功添加。
BCM.0> d chg my_station_tcam
d chg my_station_tcam
MY_STATION_TCAM.ipipe0[511]: <VLAN_ID_MASK=0xfff,VLAN_ID=2,VALID=1,MASK=0x00000fffffffffffffff,MAC_ADDR_MASK=0xffffffffffff,MAC_ADDR=0x000000000201,KEY=0x00000002000000000201,IPV6_TERMINATION_ALLOWED=1,IPV4_TERMINATION_ALLOWED=1,DATA=0x38,ARP_RARP_TERMINATION_ALLOWED=1>
8.6.2 添加主機路由
BCM.0> L3 l3table add ip=192.168.2.1 intf=2 mac=00:00:00:00:02:02 port=ge8
BCM.0> L3 l3table show
l3 l3table show
Unit 0, free L3 table entries: 24575
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 192.168.2.1 00:00:00:00:02:02 2 0 9 0 n
8.6.3 查看L3_ENTRY表,獲取Next_hop_index.
BCM.0> d chg L3_ENTRY_1
L3_ENTRY_1.ism0[5972]: <WIDE_ENTRY_BITS=0x0000000000100006054010080003,VALID=1,NEXT_HOP_INDEX=2,KEY=0x01815004020000,IP_ADDR=0xc0a80201,IPV4UC:NEXT_HOP_INDEX=2,IPV4UC:KEY=0x01815004020000,IPV4UC:IP_ADDR=0xc0a80201,IPV4UC:HASH_LSB=0x201,IPV4UC:DATA=0x0000020000,HASH_LSB=0x201,EVEN_PARITY=1,DATA=0x0000020000,>
8.6.4 根據NH index索引INITIAL_ING_L3_NEXT_HOP,獲取MODULE_ID和出端口
BCM.0> d chg INITIAL_ING_L3_NEXT_HOP 2 1
INITIAL_ING_L3_NEXT_HOP.ipipe0[2]: <TGID=9,PORT_NUM=9,>
8.6.5 根據NH index索引ING_L3_NEXT_HOP
BCM.0> d chg ING_L3_NEXT_HOP 2 1
ING_L3_NEXT_HOP.ipipe0[2]: <VLAN_ID=2,TGID=9,PORT_NUM=9,L3_OIF=2,DVP_RES_INFO=2,DVP_ATTRIBUTE_1_INDEX=2,>
8.6.6 根據NH index索引EGR_L3_NEXT_HOP
BCM.0> d chg EGR_L3_NEXT_HOP 2 1
EGR_L3_NEXT_HOP.epipe0[2]: <SD_TAG_VID=2,OVID=2,MAC_ADDRESS=0x000000000202,L3MC:INTF_NUM=2,L3MC:EH_TAG_TYPE=2,L3MC:EH_QUEUE_TAG=0x40,L3:OVID=2,L3:MAC_ADDRESS=0x000000000202,L3:IVID=0x202,L3:INTF_NUM=2,IVID=0x202,INTF_NUM=2,DVP=0x202,>
獲取到下一跳的目的mac地址。
8.6.7 根據EGR_L3_NEXT_HOP 中的INTF_NUM索引到EGR_L3_INTF
BCM.0> d chg EGR_L3_INTF 2 1
EGR_L3_INTF.epipe0[2]: <VID=2,OVID=2,MAC_ADDRESS=0x000000000201,>
獲取到交換機的mac地址,作為源mac,以及egress vid。
8.6.8 添加網段路由
BCM.0> L3 defip add ip=192.168.3.0 mask=255.255.255.0 mac=00:00:02:00:00:03 intf=2 port=ge8
BCM.0> d chg L3_defip
L3_DEFIP.ipipe0[2048]: <VRF_ID_MASK0=0x7ff,VALID0=1,NEXT_HOP_INDEX0=2,MODE_MASK0=3,MASK0=0x1ffffffffc03,KEY0=0x000302a00c00,IP_ADDR_MASK0=0xffffff00,IP_ADDR0=0xc0a80300,EVEN_PARITY=1,ECMP_PTR0=2,>
通過命令添加網段路由的處理過程和添加主機路由的是相同的,不同的是路由表下發到硬件的defip中。
8.7 主機路由
默認情況下,所有端口都以untag方式加入vlan 1,將ge11從vlan 1 中刪除,以untag方式加入到vlan 2,並設置port ge11 的port_vid 為2,使從ge11打入不帶tag的報文時,打上vlan tag 2.
BCM.0> vlan show 1
vlan show 1
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FL OOD_UNKNOWN
BCM.0> vlan remove 1 pbm=ge11
vlan remove 1 pbm=ge11
BCM.0> vlan create 2 pbm=ge11 ubm=ge11
vlan create 2 pbm=ge11 ubm=ge11
BCM.0> vlan show 2
vlan show 2
vlan 2 ports ge11 (0x0000000000000000000000000000000000000000000000000000000000001000), untagge d ge11 (0x0000000000000000000000000000000000000000000000000000000000001000) MCAST_FLOOD_UNKNOWN
BCM.0> vlan show 1
vlan show 1
vlan 1 ports cpu,ge0-ge10,ge12-ge48,xe,hg (0x00000000000000000000000000000000000000000000000000 ffffffffffefff), untagged ge0-ge10,ge12-ge48,xe,hg (0x000000000000000000000000000000000000000000 00000000ffffffffffeffe) MCAST_FLOOD_UNKNOWN
BCM.0> age 60
age 60
Set age timer to 60.
BCM.0> L2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:1f vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L2 clear port=ge11
L2: Deleting static and non-static addresses by port, local module ID
BCM.0> L2 show
mac=3c:8c:40:0f:8d:1f vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> d chg port 12 1
PORT.ipipe0[12]: <VT_PORT_TYPE_SELECT_2=1,VT_PORT_TYPE_SELECT=1,VT_KEY_TYPE_2=5,VT_KEY_TYPE=4,VL AN_PROTOCOL_DATA_INDEX=0xc,VFP_ENABLE=1,V6L3_ENABLE=1,V6IPMC_ENABLE=1,V4L3_ENABLE=1,V4IPMC_ENABL E=1,TRUST_INCOMING_VID=1,TRUST_DSCP_PTR=0xc,SUBNET_BASED_VID_ENABLE=1,PRI_MAPPING=0xfac688,PORT_ VID=1,OVID=1,OUTER_TPID_ENABLE=1,OAM_ENABLE=1,MIM_TERM_ENABLE=1,MIM_MC_TERM_ENABLE=1,MAC_BASED_V ID_ENABLE=1,IPRI_MAPPING=0xfac688,IPMC_DO_VLAN=1,ICFI_1_MAPPING=1,FP_PORT_FIELD_SEL_INDEX=0xc,FI LTER_ENABLE=1,CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,CFI_1_MAPPING=1,>
BCM.0> mod port 12 1 PORT_VID=2
BCM.0> L2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L2 clear port=ge11
L2: Deleting static and non-static addresses by port, local module ID
BCM.0> L2 show
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
mac=00:00:00:00:00:33 vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
分別添加L3 intf 1,2 配置交換機mac為00:00:00:03:02:01.
BCM.0> L3 init
BCM.0> L3 intf add vlan=2 mac=00:00:00:03:02:01 intf=2 vrf=0 mtu=1500
BCM.0> L3 intf add vlan=1 mac=00:00:00:03:02:01 intf=1 vrf=0 mtu=1500
BCM.0> L3 intf show
Free L3INTF entries: 8189
Unit Intf VRF Group VLAN Source Mac MTU TTL Tunnel InnerVlan NATRealm
------------------------------------------------------------------
0 1 0 0 1 00:00:00:03:02:01 1500 0 0 0 0
0 2 0 0 2 00:00:00:03:02:01 1500 0 0 0 0
添加主機路由1.1.1.1 和2.1.1.1 分別和intf 1, 2 對應,出端口分別為ge15,ge11.
從ge11口打入構造的目的mac為交換機mac 000000030201,源mac為d4:be:d9:e3:95:8d,
目的ip 為1.1.1.1,源ip為2.1.1.1的ipv4報文,查看端口報文統計,可以看到ge15端口有報文計數,查看L3table,Hit位都置位了。
BCM.0> L2 show
mac=00:00:00:03:02:01 vlan=1 GPORT=0x0 modid=0 port=0/cpu0 Static CPU
mac=00:00:00:03:02:01 vlan=2 GPORT=0x0 modid=0 port=0/cpu0 Static CPU
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L3 l3table add vrf=0 ip=2.1.1.1 mac=d4:be:d9:e3:95:8d intf=2 port=ge11
BCM.0> L3 l3table add vrf=0 ip=1.1.1.1 mac=3c:8c:40:0f:8d:40 intf=1 port=ge15
BCM.0> L3 l3table show
Unit 0, free L3 table entries: 24574
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 1.1.1.1 3c:8c:40:0f:8d:40 1 0 16 0 n
2 0 2.1.1.1 d4:be:d9:e3:95:8d 2 0 12 0 n
BCM.0> d chg my_station_tcam
d chg my_station_tcam
MY_STATION_TCAM.ipipe0[510]: <VLAN_ID_MASK=0xfff,VLAN_ID=1,VALID=1,MASK=0x00000fffffffffffffff,M AC_ADDR_MASK=0xffffffffffff,MAC_ADDR=0x000000030201,KEY=0x00000001000000030201,IPV6_TERMINATION_ ALLOWED=1,IPV4_TERMINATION_ALLOWED=1,DATA=0x38,ARP_RARP_TERMINATION_ALLOWED=1>
MY_STATION_TCAM.ipipe0[511]: <VLAN_ID_MASK=0xfff,VLAN_ID=2,VALID=1,MASK=0x00000fffffffffffffff,M AC_ADDR_MASK=0xffffffffffff,MAC_ADDR=0x000000030201,KEY=0x00000002000000030201,IPV6_TERMINATION_ ALLOWED=1,IPV4_TERMINATION_ALLOWED=1,DATA=0x38,ARP_RARP_TERMINATION_ALLOWED=1>
BCM.0> clear c
BCM.0> show c
RIPC4.ge11 : 3 +3
RUC.ge11 : 3 +3
RDBGC0.ge11 : 4 +4
R64.ge11 : 7 +7
RPKT.ge11 : 7 +7
RUCA.ge11 : 3 +3
RBCA.ge11 : 4 +4
RPRM.ge11 : 3 +3
RPOK.ge11 : 7 +7
RBYT.ge11 : 448 +448
TDBGC4.ge15 : 3 +3
T64.ge15 : 3 +3
TPOK.ge15 : 3 +3
TPKT.ge15 : 3 +3
TUCA.ge15 : 3 +3
TBYT.ge15 : 192 +192
UC_PERQ_PKT(0).ge15 : 3 +3
UC_PERQ_BYTE(0).ge15 : 192 +192
BCM.0> L2 show
mac=00:00:00:03:02:01 vlan=1 GPORT=0x0 modid=0 port=0/cpu0 Static CPU
mac=00:00:00:03:02:01 vlan=2 GPORT=0x0 modid=0 port=0/cpu0 Static Hit CPU
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L3 l3table show
Unit 0, free L3 table entries: 24574
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 1.1.1.1 3c:8c:40:0f:8d:40 1 0 16 0 y
2 0 2.1.1.1 d4:be:d9:e3:95:8d 2 0 12 0 y
8.8 網段路由
將ge11以不帶vlan tag的方式加入到vlan 2 中,並設置ge11的port_vid為2。
BCM.0> vlan remove 1 pbm=ge11
vlan remove 1 pbm=ge11
BCM.0> vlan create 2 pbm=ge11 ubm=ge11
vlan create 2 pbm=ge11 ubm=ge11
BCM.0> vlan show
vlan show
vlan 1 ports cpu,ge0-ge10,ge12-ge48,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffefff), untagged ge0-ge10,ge12-ge48,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffeffe) MCAST_FLOOD_UNKNOWN
vlan 2 ports ge11 (0x0000000000000000000000000000000000000000000000000000000000001000), untagged ge11 (0x0000000000000000000000000000000000000000000000000000000000001000) MCAST_FLOOD_UNKNOWN
^[[A BCM.0> l2 show
mac=d4:be:d9:e3:95:8d vlan=1 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L2 clear port=ge11
L2: Deleting static and non-static addresses by port, local module ID
BCM.0> l2 show
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> d chg port 12 1
PORT.ipipe0[12]: <VT_PORT_TYPE_SELECT_2=1,VT_PORT_TYPE_SELECT=1,VT_KEY_TYPE_2=5,VT_KEY_TYPE=4,VLAN_PROTOCOL_DATA_INDEX=0xc,VFP_ENABLE=1,V6L3_ENABLE=1,V6IPMC_ENABLE=1,V4L3_ENABLE=1,V4IPMC_ENABLE=1,TRUST_INCOMING_VID=1,TRUST_DSCP_PTR=0xc,SUBNET_BASED_VID_ENABLE=1,PRI_MAPPING=0xfac688,PORT_VID=1,OVID=1,OUTER_TPID_ENABLE=1,OAM_ENABLE=1,MIM_TERM_ENABLE=1,MIM_MC_TERM_ENABLE=1,MAC_BASED_VID_ENABLE=1,IPRI_MAPPING=0xfac688,IPMC_DO_VLAN=1,ICFI_1_MAPPING=1,FP_PORT_FIELD_SEL_INDEX=0xc,FILTER_ENABLE=1,CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,CFI_1_MAPPING=1,>
BCM.0> mod port 12 1 port_vid=2
mod port 12 1 port_vid=2
BCM.0> l2 clear port=ge11
l2 clear port=ge11
L2: Deleting static and non-static addresses by port, local module ID
BCM.0> l2 show
l2 show
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
創建L3 intf 1和2,配置交換機mac為00:00:00:03:02:01,分別對應vlan 1,2
BCM.0> L3 init
BCM.0> L3 intf add vlan=2 mac=00:00:00:03:02:01 intf=2 vrf=0 mtu=1500
L3 intf add vlan=2 mac=00:00:00:03:02:01 intf=2 vrf=0 mtu=1500
BCM.0> L3 intf add vlan=1 mac=00:00:00:03:02:01 intf=1 vrf=0 mtu=1500
L3 intf add vlan=1 mac=00:00:00:03:02:01 intf=1 vrf=0 mtu=1500
BCM.0> L3 intf show
Free L3INTF entries: 8189
Unit Intf VRF Group VLAN Source Mac MTU TTL Tunnel InnerVlan NATRealm
------------------------------------------------------------------
0 1 0 0 1 00:00:00:03:02:01 1500 0 0 0 0
0 2 0 0 2 00:00:00:03:02:01 1500 0 0 0 0
創建主機路由2.1.1.1,對應intf 2, port ge11;
創建網段路由1.1.1.0/24 ,對應inf 1 , port ge15;
構造目的mac為00:00:00:03:02:01,源mac為d4:be:d9:e3:95:8d 的不帶vlan tag的ipv4報文,
源ip為2.1.1.1,目的ip為1.1.1.1,從ge11口打入,查看報文統計計數,ge15口有計數,查看L3 defip,Hit位已置位。
BCM.0> l2 show
l2 show
mac=d4:be:d9:e3:95:8d vlan=2 GPORT=0xc modid=0 port=12/ge11 Hit
mac=3c:8c:40:0f:8d:40 vlan=1 GPORT=0x10 modid=0 port=16/ge15 Hit
BCM.0> L3 l3table add vrf=0 ip=2.1.1.1 mac=d4:be:d9:e3:95:8d intf=2 port=ge11
L3 l3table add vrf=0 ip=2.1.1.1 mac=d4:be:d9:e3:95:8d intf=2 port=ge11
BCM.0> L3 defip add vrf=0 ip=1.1.1.0 mask=255.255.255.0 mac=3c:8c:40:0f:8d:40 intf=1 port=ge15
BCM.0> L3 L3table show
Unit 0, free L3 table entries: 24575
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 2.1.1.1 d4:be:d9:e3:95:8d 2 0 12 0 n
BCM.0> L3 defip show
Unit 0, Total Number of DEFIP entries: 8192
# VRF Net addr Next Hop Mac INTF MODID PORT PRIO CLASS HIT VLAN
2048 0 1.1.1.0/24 3c:8c:40:0f:8d:40 1 0 16 0 0 n
BCM.0> clear c
clear c
BCM.0> show c
show c
RIPC4.ge11 : 5 +5
RUC.ge11 : 5 +5
R64.ge11 : 5 +5
RPKT.ge11 : 5 +5
RUCA.ge11 : 5 +5
RPRM.ge11 : 5 +5
RPOK.ge11 : 5 +5
RBYT.ge11 : 320 +320
TDBGC4.ge15 : 5 +5
T64.ge15 : 5 +5
TPOK.ge15 : 5 +5
TPKT.ge15 : 5 +5
TUCA.ge15 : 5 +5
TBYT.ge15 : 320 +320
UC_PERQ_PKT(0).ge15 : 5 +5
UC_PERQ_BYTE(0).ge15 : 320 +320
BCM.0> L3 defip show
Unit 0, Total Number of DEFIP entries: 8192
# VRF Net addr Next Hop Mac INTF MODID PORT PRIO CLASS HIT VLAN
2048 0 1.1.1.0/24 3c:8c:40:0f:8d:40 1 0 16 0 0 y
BCM.0> L3 L3table show
Unit 0, free L3 table entries: 24575
Entry VRF IP address Mac Address INTF MOD PORT CLASS HIT
1 0 2.1.1.1 d4:be:d9:e3:95:8d 2 0 12 0 y
BCM.0>
BCM.0> vlan create 2
BCM.0> vlan add 2 pbm=ge10 ubm=ge10
BCM.0> mod port 11 1 port_vid=2
BCM.0> l3 intf add int=2 vlan=2 mac=00:00:00:00:00:f2
BCM.0> l3 egress add intf=2 mac=d4:be:d9:e3:95:8d port=ge10
BCM.0> l3 defip add ip=2.2.2.0 mask=255.255.255.0 intf=$egr_object_id
優先級映射實現從QoS優先級到內部優先級或從內部優先級到QoS優先級的映射,並利用DiffServ域來管理和記錄QoS優先級和服務等級之間的映射關系。
對於進入設備的報文,將報文攜帶的優先級或者端口優先級映射為內部優先級,然后根據內部優先級與隊列之間的映射關系確定報文進入的隊列,從而針對隊列進行流量整形、擁塞避免、隊列調度等處理,並可以根據配置修改報文發送出去時所攜帶的優先級,以便其他設備根據報文的優先級提供相應的QoS服務。
對報文進行優先級標記,可以打在二層報文上,也可以在三層(ip)報文頭上。
1. 二層802.1P 優先級映射
如下,查看port ge8的COS配置,PRIO 0 映射到COS QUEUE 0, PRIO 3 映射到COS QUEUE 1 , PRIO 5映射到COS QUEUE 2.
BCM.0> cos port show pbm=ge8
Port ge8 COS configuration:
------------------------------
Config (max queues): 4
Schedule mode: weighted round-robin
Weighting (in packets):
COSQ 0 = 1 packets
COSQ 1 = 1 packets
COSQ 2 = 1 packets
COSQ 3 = 1 packets
Priority to queue mappings:
PRIO 0 ==> COSQ 0
PRIO 1 ==> COSQ 0
PRIO 2 ==> COSQ 1
PRIO 3 ==> COSQ 1
PRIO 4 ==> COSQ 2
PRIO 5 ==> COSQ 2
PRIO 6 ==> COSQ 3
PRIO 7 ==> COSQ 3
PRIO 8 ==> COSQ 3
PRIO 9 ==> COSQ 3
PRIO 10 ==> COSQ 3
PRIO 11 ==> COSQ 3
PRIO 12 ==> COSQ 3
PRIO 13 ==> COSQ 3
PRIO 14 ==> COSQ 3
PRIO 15 ==> COSQ 3
配置隊列調度模式為為Deficit Round Robin,四個隊列權重分別為1,3,5,7.
BCM.0> cos drr W0=1 W1=3 W2=5 W3=7
BCM.0> cos show
COS configuration:
Config (max queues): 4
Schedule mode: deficit round-robin
Weighting (in Kbytes):
COSQ 0 = 1 Kbytes
COSQ 1 = 3 Kbytes
COSQ 2 = 5 Kbytes
COSQ 3 = 7 Kbytes
Priority to queue mappings:
PRIO 0 ==> COSQ 0
PRIO 1 ==> COSQ 0
PRIO 2 ==> COSQ 1
PRIO 3 ==> COSQ 1
PRIO 4 ==> COSQ 2
PRIO 5 ==> COSQ 2
PRIO 6 ==> COSQ 3
PRIO 7 ==> COSQ 3
PRIO 8 ==> COSQ 3
PRIO 9 ==> COSQ 3
PRIO 10 ==> COSQ 3
PRIO 11 ==> COSQ 3
PRIO 12 ==> COSQ 3
PRIO 13 ==> COSQ 3
PRIO 14 ==> COSQ 3
PRIO 15 ==> COSQ 3
配置從ge8 端口入的報文的Prio 0 CFI 0 映射到內部IntPrio 3,設置Queue 1 的帶寬范圍,ge8以帶vlan tag方式加入到vlan 1,打入不帶vlan tag上送CPU的ARP報文,rxAPI打印出來的報文IntPrio為3,COS QUEUE 為1.
BCM.0> memwatch ING_PRI_CNG_MAP write
BCM.0> color map port=2 pktPrio=0 cfi=0 intprio=1 color=green
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 16, Entry - <PRI=1,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 17, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 18, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 19, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 20, Entry - <PRI=0,EVEN_PARITY=0,CNG=1>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 21, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 22, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 23, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 24, Entry - <PRI=1,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 25, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 26, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 27, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 28, Entry - <PRI=1,EVEN_PARITY=0,CNG=1>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 29, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 30, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 31, Entry - <PRI=0,EVEN_PARITY=0,CNG=0>
其中,ING_PRI_CNG_MAP的index值由Port 中的TRUST_DOT1P_PTR *16 索引。
BCM.0> d chg port 2 1
PORT.ipipe0[2]: <VT_PORT_TYPE_SELECT_2=1,VT_PORT_TYPE_SELECT=1,VT_KEY_TYPE_2=5,VT_KEY_TYPE=4,VLAN_PROTOCOL_DATA_INDEX=2,VFP_ENABLE=1,V6L3_ENABLE=1,V6IPMC_ENABLE=1,V4L3_ENABLE=1,V4IPMC_ENABLE=1,TRUST_INCOMING_VID=1,TRUST_DSCP_PTR=2,TRUST_DOT1P_PTR=1,SUBNET_BASED_VID_ENABLE=1,PROTOCOL_PKT_INDEX=2,PRI_MAPPING=0xfac688,PORT_VID=1,OVID=1,OUTER_TPID_ENABLE=1,OAM_ENABLE=1,MIM_TERM_ENABLE=1,MIM_MC_TERM_ENABLE=1,MAC_BASED_VID_ENABLE=1,IPRI_MAPPING=0xfac688,IPMC_DO_VLAN=1,ICFI_1_MAPPING=1,FP_PORT_FIELD_SEL_INDEX=2,FILTER_ENABLE=1,CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,CFI_1_MAPPING=1,>
BCM.0> memwatch ING_PRI_CNG_MAP read
BCM.0> color map port=ge8 PktPrio=-1
Color map settings for port ge8
Packet Prio=0, CFI=0, Internal Prio=3, Color=Green
Packet Prio=0, CFI=1, Internal Prio=0, Color=Red
Packet Prio=1, CFI=0, Internal Prio=1, Color=Green
Packet Prio=1, CFI=1, Internal Prio=1, Color=Red
Packet Prio=2, CFI=0, Internal Prio=2, Color=Green
Packet Prio=2, CFI=1, Internal Prio=2, Color=Red
Packet Prio=3, CFI=0, Internal Prio=5, Color=Green
Packet Prio=3, CFI=1, Internal Prio=3, Color=Red
Packet Prio=4, CFI=0, Internal Prio=4, Color=Green
Packet Prio=4, CFI=1, Internal Prio=4, Color=Red
Packet Prio=5, CFI=0, Internal Prio=5, Color=Green
Packet Prio=5, CFI=1, Internal Prio=5, Color=Red
Packet Prio=6, CFI=0, Internal Prio=6, Color=Green
Packet Prio=6, CFI=1, Internal Prio=6, Color=Red
Packet Prio=7, CFI=0, Internal Prio=7, Color=Green
Packet Prio=7, CFI=1, Internal Prio=7, Color=Red
BCM.0> d ING_PRI_CNG_MAP 16 1
Unit = 0, mem = ING_PRI_CNG_MAP (3202), copyno = 4 index = 16, Entry - <PRI=1,EVEN_PARITY=0,CNG=0>
ING_PRI_CNG_MAP.ipipe0[16]: <PRI=1,EVEN_PARITY=0,CNG=0>
BCM.0>
BCM.0> memwatch ING_PRI_CNG_MAP off
BCM.0>
BCM.0> vlan add 1 pbm=ge8
BCM.0> vlan show
vlan 1 ports ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe), untagged ge0-ge7,ge9-ge 48,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffdfe) MCAST_FLOOD_UNKNOWN
BCM.0>
BCM.0> cos bandwidth pbm=ge8 Queue=1 KbpsMIn=20 KbpsMAx=1000
BCM.0> cos bandwidth_show
cos bandwidth_show
COSQ bandwith configuration:
-----+---+----------+----------+-------
ge8 | 0 | 0 | 0 | 0
ge8 | 1 | 24 | 1000 | 0
ge8 | 2 | 0 | 0 | 0
ge8 | 3 | 0 | 0 | 0
-----+---+----------+----------+-------
BCM.0> pw start
BCM.0> pw report +raw
[bcmPW.0]
[bcmPW.0]Packet[11]: data[0000]: {ffffffffffff} {d4bed9e3958d} 0806 0001
[bcmPW.0]Packet[11]: data[0010]: 0800 0604 0001 d4be d9e3 958d c0a8 154d
[bcmPW.0]Packet[11]: data[0020]: 0000 0000 0000 c0a8 154d 0000 0000 0000
[bcmPW.0]Packet[11]: data[0030]: 0000 0000 0000 0000 0000 0000 8d22 f91b
[bcmPW.0]Packet[11]: data[0040]: 0000 0000
[bcmPW.0]Packet[11]: length 68 (68). rx-port 9. cos 1. prio_int 3. vlan 1. reason 0x2000. Untagged.
[bcmPW.0]Packet[11]: dest-port 1. dest-mod 0. src-port 9. src-mod 0. opcode 2. matched 0. classification-tag 0.
[bcmPW.0]Packet[11]: reasons: Protocol
BCM.0> pw quiet
配置報文優先級0映射為Int Prio 5,對應的隊列為2。
BCM.0> color unmap Port=ge8 IntPrio=3 Color=green PktPrio=0 CFI=0
BCM.0> color map port=ge8 IntPrio=5 Color=green PktPrio=0 CFI=0
color map port=ge8 IntPrio=5 Color=green PktPrio=0 CFI=0
BCM.0> pw report +raw
[bcmPW.0]Packet[12]: data[0000]: {ffffffffffff} {d4bed9e3958d} 0806 0001
[bcmPW.0]Packet[12]: data[0010]: 0800 0604 0001 d4be d9e3 958d c0a8 154d
[bcmPW.0]Packet[12]: data[0020]: 0000 0000 0000 c0a8 15d3 0000 0000 0000
[bcmPW.0]Packet[12]: data[0030]: 0000 0000 0000 0000 0000 0000 41d7 d706
[bcmPW.0]Packet[12]: data[0040]: 0000 0000
[bcmPW.0]Packet[12]: length 68 (68). rx-port 9. cos 2. prio_int 5. vlan 1. reason 0x2000. Untagged.
[bcmPW.0]Packet[12]: dest-port 1. dest-mod 0. src-port 9. src-mod 0. opcode 2. matched 0. classification-tag 0.
[bcmPW.0]Packet[12]: reasons: Protocol
通過FP 規則,匹配報文,修改IntPrio。
BCM.0> fp init
BCM.0> fp qset add IpProtocol
BCM_FIELD_QSET_ADD(IpProtocol) okay
BCM.0> fp group create 0 0
BCM.0> fp entry create 0 1
BCM.0> fp qual 1 IpProtocol 0x1 0xf
BCM.0> fp action add 1 PrioIntNew 4
BCM.0> fp entry install 1
BCM.0> pw report +raw
BCM.0> [bcmPW.0]
[bcmPW.0]Packet[252]: data[0000]: {0019ad197521} {000000000002} 0800 4500
[bcmPW.0]Packet[252]: data[0010]: 0014 0001 0000 4001 ce77 c0a8 154d c0a8
[bcmPW.0]Packet[252]: data[0020]: 15d3 0000 0000 0000 0000 0000 0000 0000
[bcmPW.0]Packet[252]: data[0030]: 0000 0000 0000 0000 676f a7d2 4574 6865
[bcmPW.0]Packet[252]: length 64 (64). rx-port 1. cos 2. prio_int 4. vlan 1. reason 0x80000000. Outer tagged.
[bcmPW.0]Packet[252]: dest-port 0. dest-mod 0. src-port 1. src-mod 0. opcode 1. matched 0. classification-tag 0.
[bcmPW.0]Packet[252]: reasons: Nhop
-
三層DSCP 報文優先級映射
配置源DSCP為0的三層報文映射為5,IntPrio 為3。
BCM.0> dscp ge8 mode=2 0 5 3 0
BCM.0> dscp ge8
0:ge8 dscp map:
0->5 prio=3 cng=0
1->0 prio=0 cng=0
2->0 prio=0 cng=0
3->0 prio=0 cng=0
4->0 prio=0 cng=0
5->0 prio=0 cng=0
6->0 prio=0 cng=0
7->0 prio=0 cng=0
8->0 prio=0 cng=0
9->0 prio=0 cng=0
10->0 prio=0 cng=0
11->0 prio=0 cng=0
12->0 prio=0 cng=0
13->0 prio=0 cng=0
14->0 prio=0 cng=0
15->0 prio=0 cng=0
16->0 prio=0 cng=0
17->0 prio=0 cng=0
18->0 prio=0 cng=0
19->0 prio=0 cng=0
20->0 prio=0 cng=0
21->0 prio=0 cng=0
22->0 prio=0 cng=0
23->0 prio=0 cng=0
24->0 prio=0 cng=0
25->0 prio=0 cng=0
26->0 prio=0 cng=0
27->0 prio=0 cng=0
28->0 prio=0 cng=0
29->0 prio=0 cng=0
30->0 prio=0 cng=0
31->0 prio=0 cng=0
32->0 prio=0 cng=0
33->0 prio=0 cng=0
34->0 prio=0 cng=0
35->0 prio=0 cng=0
36->0 prio=0 cng=0
37->0 prio=0 cng=0
38->0 prio=0 cng=0
39->0 prio=0 cng=0
40->0 prio=0 cng=0
41->0 prio=0 cng=0
42->0 prio=0 cng=0
43->0 prio=0 cng=0
44->0 prio=0 cng=0
45->0 prio=0 cng=0
46->0 prio=0 cng=0
47->0 prio=0 cng=0
48->0 prio=0 cng=0
49->0 prio=0 cng=0
50->0 prio=0 cng=0
51->0 prio=0 cng=0
52->0 prio=0 cng=0
53->0 prio=0 cng=0
54->0 prio=0 cng=0
55->0 prio=0 cng=0
56->0 prio=0 cng=0
57->0 prio=0 cng=0
58->0 prio=0 cng=0
59->0 prio=0 cng=0
60->0 prio=0 cng=0
61->0 prio=0 cng=0
62->0 prio=0 cng=0
63->0 prio=0 cng=0
BCM.0> pw report +raw
BCM.0> [bcmPW.0]
[bcmPW.0]Packet[25]: data[0000]: {0019ad197521} {000000000033} 0800 4500
[bcmPW.0]Packet[25]: data[0010]: 0014 0001 0000 4001 ce77 c0a8 154d c0a8
[bcmPW.0]Packet[25]: data[0020]: 15d3 0000 0000 0000 0000 0000 0000 0000
[bcmPW.0]Packet[25]: data[0030]: 0000 0000 0000 0000 0000 0000 76a3 5424
[bcmPW.0]Packet[25]: data[0040]: 6173 6520
[bcmPW.0]Packet[25]: length 68 (68). rx-port 9. cos 1. prio_int 3. vlan 1. reason 0x80000000. Untagged.
[bcmPW.0]Packet[25]: dest-port 0. dest-mod 0. src-port 9. src-mod 0. opcode 1. matched 0. classification-tag 0.
[bcmPW.0]Packet[25]: reasons: Nhop
[bcmPW.0]
10. 問題及解決方法
以大於200p/s發送二層廣播報文時出現發送流控問題,此時cpu口在vlan 1內,將cpu口從vlan中移除,不會發送流控,對於需要上送cpu的報文可以通過添加L2 Entry表項或設置寄存器或ACL規則上送,此外需要配置cpu上送報文限速。
BCM.0> vlan show 1
vlan show 1
vlan 1 ports cpu,ge,xe,hg (0x00000000000000000000000000000000000000000000000000ffffffffffffff), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0> vlan remove 1 pbm=cpu0
vlan remove 1 pbm=cpu0
BCM.0> vlan show 1
vlan show 1
vlan 1 ports ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe), untagged ge,xe,hg (0x00000000000000000000000000000000000000000000000000fffffffffffffe) MCAST_FLOOD_UNKNOWN
BCM.0>
BCM.0> rate pbm=cpu0 bc=true limit=400
-
通過添加L2 Entry,目的mac為cpu mac的ICMP報文實現上送
BCM.0>L2 add mac=02:10:18:db:88:47 vlan=1 pbm=cpu0 Static=true ReplacePriority=false Replace=false L3=true
2. 寄存器配置ARP報文上送
BCM.0> sc ArpReplyToCpu=1
BCM.0> sc ArpRequestToCpu=1
3. 通過FP規則配置EtherType 為0x0806的ARP報文上送cpu
配置如下:
BCM.0> fp init
BCM.0> fp qset add EtherType
BCM_FIELD_QSET_ADD(EtherType) okay
BCM.0> fp group create 0 0
BCM.0> fp entry create 0 1
BCM.0> fp qual 1 EtherType 0x0806 0xfff
BCM.0> fp action add 1 CopyToCPU 0 0
BCM.0> fp entry install 1
BCM.0> fp show
fp show
FP: unit 0:PIPELINE STAGE INGRESS
FP: :tcam_sz=4096(0x1000), tcam_slices=16, tcam_ext_numb=-1,
PIPELINE STAGE EGRESS
FP: :tcam_sz=1024(0x400), tcam_slices=4, tcam_ext_numb=-1,
PIPELINE STAGE LOOKUP
FP: :tcam_sz=2048(0x800), tcam_slices=4, tcam_ext_numb=-1,
GID 0: gid=0x0, instance=0 mode=Single, stage=Ingress lookup=Enabled, ActionResId={-1}, pbmp={0x00000000000000000000000000000000000000000000000000ffffffffffffff}
qset={EtherType, Stage},
selcodes[0]=
{
FPF1=4
Intraslice=Primary slice.
{
Stage->EtherType},
slice_pri= 0 {slice_number=0, Entry count=256(0x100),pbmp={0x00000000000000000000000000000000000000000000000000ffffffffffffff}},
group_status={prio_min=0, prio_max=2147483647, entries_total=4096, entries_free=4095,
counters_total=4096, counters_free=4096, meters_total=4096, meters_free=4096}
EID 0x00000001: gid=0x0,
slice=0, slice_idx=0, part =0 prio=0, flags=0x10602, Installed, Enabled
tcam: color_indep=1,
Stage
EtherType
Offset0: 201 Width0: 16
DATA=0x00000806
MASK=0x00000fff
action={act=CopyToCpu, param0=0(0), param1=0(0), param2=0(0), param3=0(0)}
policer=
statistics=NULL
BCM.0>
BCM.0> pw start report +dec
BCM.0> pw report +raw
BCM.0> pw quiet
_bcm_modules_init <--_bcm_esw_init <--bcm_esw_init <--bcm_init <-- sh_init <--
cmdlist_init <-- diag_init <-- sh_rcload_file <--diag_shell
函數sh_init 中,對從rc.soc中讀取到的,或通過命令下發的init soc, init bcm , init mmu, init all 進行處理,下發init bcm時,調用bcm_init 函數。
在_bcm_modules_init中,完成各個模塊的初始化。
首先,初始化tx, rx ,然后注冊驅動功能處理函數指針,實現根據芯片類型dispatch到對應的處理。
如下為_bcm_modules_init 中處理流程:
而由bcm_init 調用到bcm_esw_init 是通過dispatch 實現的。
Src/bcm/Control.c 中的bcm_init 調用函數指針_dispatch_init[BCM_DTYPE(unit)](unit); 分發到具體的芯片處理初始化函數。
在src/bcm/Control.c中,定義宏BCM_DLIST_ENTRY 參數為_dtype 時,聲明的外部函數為
Int bcm_##_dtype##_init(int);
#define BCM_DLIST_ENTRY(_dtype)\
extern int bcm_##_dtype##_init(int);
#include <bcm_int/bcm_dlist.h>
#define BCM_DLIST_ENTRY(_dtype)\
bcm_##_dtype##_init,
static int (*_dispatch_init[])(int) = {
#include <bcm_int/bcm_dlist.h>
};
在bcm_dlist.h 中,定義
#ifdef BCM_ESW_SUPPORT
BCM_DLIST_ENTRY(esw)
#endif
這樣,支持esw類型的芯片(Helix4)調用_dispatch_init 時,就分發到bcm_esw_init 函數處理。
和芯片初始化相關的函數定義在Src/bcm/Control.c中,和功能相關的函數定義在src/bcm/Dispatch.c中。
上面為一次分發調用過程,此外還有多次分發調用過程。
例如src/bcm/Dispatch.c 中的bcm_l3_init,首先分發到src/bcm/esw/L3.c 中的bcm_esw_l3_init,在其中再調用
mbcm_driver[unit]->mbcm_l3_tables_init(unit),
mbcm_l3_tables_init 是一個函數指針,在src/bcm/esw/Mbcm.c 的mbcm_init 中,通過
mbcm_driver[unit] = &mbcm_firebolt_driver;
將函數指針數組mbcm_firebolt_driver 賦值給mbcm_driver,這樣,調用mbcm_l3_tables_init就會調用到函數指針數組中對應的bcm_xgs3_l3_tables_init 。