交換芯片Helix4 L2 L3功能驗證



 Helix4 L2 L3功能驗證

 


 

目錄

Helix4 L2 L3功能驗證 1

1

1.驗證環境及工具 5

1.1 驗證環境 5

5

1.2 報文構造工具 6

1.3 軟件配置環境 6

2.端口狀態 6

2.1 獲取端口當前工作狀態 6

2.2 獲取端口的轉發狀態 7

2.3 設置端口的轉發狀態 7

2.4 端口狀態變化通知注冊 14

2.5 端口狀態變化通知反注冊 15

3.地址表 16

3.1 地址表通知注冊 16

3.2 地址表通知反注冊 16

3.3 添加單播地址 17

3.4 刪除單播地址 17

3.5 添加組播地址 18

3.6 刪除組播地址 19

3.7 清除所有動態地址 19

3.8 獲取地址表老化時間 20

3.9 地址表老化時間設置 21

4. VLAN 22

4.1 創建VLAN 22

4.2 刪除VLAN 22

4.3 端口以UNTAG形式加入VLAN 23

4.4 端口以TAG形式加入VLAN 24

4.5 端口退出VLAN 24

4.6 獲取端口默認VLAN 25

4.7 設置端口默認VLAN 25

4.8 廣播報文轉發 26

4.9 已知單播報文轉發 27

5. IGMP SNOOPING 28

5.1 獲取IGMP報文送CPU 28

5.2 設置IGMP報文送CPU 29

5.3 獲取未知名組播不轉發 29

5.4 設置未知名組播不轉發 30

5.5 組播報文轉發 31

6. 端口聚合 34

6.1 創建聚合口 34

6.2 刪除聚合口 34

6.3 聚合口是否存在 35

6.4 端口加入聚合口 35

6.5 端口退出聚合口 36

6.6 聚合組負載分擔 37

7. 端口安全 41

7.1 開啟端口安全 41

7.2 關閉端口安全 42

8. 路由表 43

8.1 創建三層接口 43

8.2 添加IP 43

8.3 刪除IP 44

8.4 添加路由 44

8.5 刪除路由 45

8.6 路由表項流程分析 45

8.7 主機路由 47

8.8 網段路由 50

9. QoS 53

10. 問題及解決方法 60

10. SDK初始化處理流程 62
























1.驗證環境及工具

1.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>


1.2 報文構造工具

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下配置虛擬接口vintf0ip地址,即為交換機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打入構造的目的mac0x03的二層報文,其他端口有統計計數。

或者通過如下方式增加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 表的index1dump 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 到來時,將hit0的表項刪除。


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--ge10untag方式,ge11--ge13tag方式加入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-ge10vlan 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-ge13vlan 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, ge10tagged加入valn中,構造20個帶vlan tag2的廣播報文,從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個目的mac00:50:c5:00:00:d7untag報文,查看端口報文統計,只有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 pfm2,即未知組播丟棄。


5.5 組播報文轉發

1. Vlan 1 的組播報文pfm設置為FLOOD UNKNOWN, 打入目的mac01005e000010的組播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個目的mac01: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-ge13trunk 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組,構造目的mac00: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 ge11Lrn 標識為cpu。從ge11 打入構造的源mac 為非L2 Entry表中的廣播二層報文,查看端口報文統計,其他端口沒有收到,打入源macd4: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,將ge11vlan 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 12 配置交換機mac00: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,源macd4:be:d9:e3:95:8d,

目的ip 1.1.1.1,源ip2.1.1.1ipv4報文,查看端口報文統計,可以看到ge15端口有報文計數,查看L3tableHit位都置位了。

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 中,並設置ge11port_vid2

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 12,配置交換機mac00: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

構造目的mac00:00:00:03:02:01,源macd4:be:d9:e3:95:8d 的不帶vlan tagipv4報文,

ip2.1.1.1,目的ip1.1.1.1,從ge11口打入,查看報文統計計數,ge15口有計數,查看L3 defipHit位已置位。

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


  1. QoS

優先級映射實現從QoS優先級到內部優先級或從內部優先級到QoS優先級的映射,並利用DiffServ域來管理和記錄QoS優先級和服務等級之間的映射關系。

對於進入設備的報文,將報文攜帶的優先級或者端口優先級映射為內部優先級,然后根據內部優先級與隊列之間的映射關系確定報文進入的隊列,從而針對隊列進行流量整形、擁塞避免、隊列調度等處理,並可以根據配置修改報文發送出去時所攜帶的優先級,以便其他設備根據報文的優先級提供相應的QoS服務。

對報文進行優先級標記,可以打在二層報文上,也可以在三層(ip)報文頭上。

1. 二層802.1P 優先級映射

如下,查看port ge8COS配置,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上送CPUARP報文,rxAPI打印出來的報文IntPrio3COS 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_MAPindex值由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


  1. 三層DSCP 報文優先級映射

配置源DSCP0的三層報文映射為5IntPrio 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


  1. 通過添加L2 Entry,目的maccpu macICMP報文實現上送

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 0x0806ARP報文上送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


  1. SDK初始化處理流程

_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






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM