BCMShell使用说明简介 - 二层交换芯片调试接口

1 BCMShell简介

BCMShell是BroadCom公司提供的命令解释器器。利用该工具不仅可以对交换芯片的
所有的寄存器和内存进行读写操作,更可以利用相应的脚本在交换芯片上搭建各种复杂的网络环境。BCMShell的熟练使用,可以帮助开发人员有效的定位问题,并且利用该工具可以更好的与BroadCom的技术支持人员进行交流。

2 BCMShell模式切换

注意:该文档所有基于BCMShell的举例和应用全部基于某网络设备。

2.1 切换到BCMShell模式

#debug-hide 0906
(debug)#bcmshell
BCM.0>
此时已经切换到BCMShell模式,但是当前模式下输入的命令可执行但不可见。若使输入命令可见。需要以下操作:
BCM.0> shell
-> exit
BCM.0>
注意:蓝线部分在输入过程中是不可见的。

2.2 退出BCMShell模式

BCM.0> exit
(debug)#

3.3 BCMShell模式下命令行的特点

在BCMShell模式下,输入的命令具有如下特点,
输入的命令不区分大小写
举例:BCMShell下有PortStat命令,该命令可以显示交换芯片上对应端口的状态。
BCM.0> PortStat
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge0 up 1G FD SW Yes Forward TX RX None FA GMII 13312
ge1 down - SW Yes Forward None FA SGMII 13312
ge2 down - SW Yes Forward None FA SGMII 13312
ge3 up 1G FD SW Yes Forward None FA SGMII 13312
ge4 down 100M FD SW No Forward TX RX None FA GMII 13312
ge5 down - SW Yes Forward None FA SGMII 13312
ge6 down 100M FD SW No Forward TX RX None FA GMII 13312
ge7 down 1G HD SW Yes Forward TX RX None FA GMII 13312
xe0 down - SW Yes Forward None FA SGMII 16356
xe1 down - SW Yes Forward None FA SGMII 16356

因为输入的命令不区分大小写,所有我们也可以输入portstat,发现回显内容与PortStat相同。
BCM.0> portstat
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge0 up 1G FD SW Yes Forward TX RX None FA GMII 13312
ge1 down - SW Yes Forward None FA SGMII 13312
ge2 down - SW Yes Forward None FA SGMII 13312
ge3 up 1G FD SW Yes Forward None FA SGMII 13312
ge4 down 100M FD SW No Forward TX RX None FA GMII 13312
ge5 down - SW Yes Forward None FA SGMII 13312
ge6 down 100M FD SW No Forward TX RX None FA GMII 13312
ge7 down 1G HD SW Yes Forward TX RX None FA GMII 13312
xe0 down - SW Yes Forward None FA SGMII 16356
xe1 down - SW Yes Forward None FA SGMII 16356
输入的命令支持缩写操作,缩写格式为:大写字母为可缩写项。
举例:依据可缩写的原则,PortStat命令行可以缩写为ps
BCM.0> ps
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge0 up 1G FD SW Yes Forward TX RX None FA GMII 13312
ge1 down - SW Yes Forward None FA SGMII 13312
ge2 down - SW Yes Forward None FA SGMII 13312
ge3 up 1G FD SW Yes Forward None FA SGMII 13312
ge4 down 100M FD SW No Forward TX RX None FA GMII 13312
ge5 down - SW Yes Forward None FA SGMII 13312
ge6 down 100M FD SW No Forward TX RX None FA GMII 13312
ge7 down 1G HD SW Yes Forward TX RX None FA GMII 13312
xe0 down - SW Yes Forward None FA SGMII 16356
xe1 down - SW Yes Forward None FA SGMII 16356
输入的命令中的数值可支持十六进制和十进制
数值的十进制表示方法:5;
数值的十六进制表示方法:0x5;

4 BCMShell模式下命令行概述

总体来说,BCMShell下的命令可以概括的分为以下五类,
帮助命令
SHOW命令
低级命令:对寄存器/RAM进行读写的命令
端口命令:与端口相关的命令
高级命令:芯片MAC学习、ACL、OAM等命令。

4.1 帮助命令

帮助命令可以获取命令的用法。在BCMShell的使用应用过程中,遇到不懂的命令,
帮助命令可以使我们迅速的掌握命令的用法。
帮助命令如下五种使用方法:
BCM.0> help
BCM.0> help
BCM.0> h
BCM.0> ?
BCM.0> ?
我们依旧用PortStat命令举例,如下:
第一种帮助命令的使用方法
BCM.0> PortStat help
(回显略)
第二种帮助命令的使用方法
BCM.0> help PortStat
(回显略)
第三种帮助命令的使用方法
BCM.0> h PortStat
(回显略)
第四种帮助命令的使用方法
BCM.0> PortStat ?
(回显略)
第三种帮助命令的使用方法
BCM.0> ? PortStat
(回显略)

4.2 SHOW命令

SHOW命令主要用于显示某些信息。常用的SHOW命令如下:
show c 查看交换芯片各个网口收发包情况
show ip 查看ip报文统计计数
show icmp 查看icmp报文统计计数
show arp 查看arp报文统计计数
show udp 查看udp报文统计计数
show tcp 查看tcp报文统计计数
show routes 查看子网路由表和主机路由表

show unit 打印系统中的芯片信息
show params 打印当前芯片驱动配置参数
show features 打印当前芯片的作用
因为show命令的用法简单,易于理解,再次举例略。

4.3 低级命令

低级命令的作用主要是对寄存器和RAM进行读写。

4.3.1 对寄存器进行读写

交换芯片内寄存器分类见下表 1:

寄存器类别类别含义
PCICPCI 配置寄存器
PCIMPCI 内存映射寄存器
SOC交换芯片寄存器与内存
PHYPHY寄存器

寄存器的常用低级命令如下,
getreg:获取寄存器的值。
listreg:显示所支持的寄存器信息
setreg:设置寄存器的值。
下面对寄存器常用的低级命令分写举例:

getreg 使用举例

举例:GRUC寄存器统计是特定端口入方向的单播数量。GRUC相应的硬件描述如下,其中红线标识的为该寄存器的地址。
在这里插入图片描述

如果此时我们想获取是client1电口下对应GRUC的值(client1 端口对应的是ge2口),那么其GRUC的地址是多少呢?
要解答该问题,我们就需要了解GRUC地址0x00b0p09D的含义。地址中的b和p是需要与特定的端口匹配的,b对应的是block的数目,而p对应的为portindex。我们查看表2。
在这里插入图片描述
通过上表我们可以知道GE2端口下的GRUC对应的地址为0x20209d。通过以下命令,
我们可以获取GE2端口下的GRUC的值。
BCM.0> getreg 0x20209d
schan[0x20209d] = 0

读者看到这是不是感觉头有点大呢,觉得很麻烦。是不是有简单的办法获取特定端口的GRUC的值呢?答案是有的。下面我们就介绍另一种方法在BCMShell下面获取特定寄存器的值。
该方法是可以直接输入寄存器的名称来获取寄存器的值,但是需要对代码做一些修改。
打开bcminit.c文件,在 bcm_tms_reset_load()函数中寻找diag_init()函数。此时读者是否发现该函数被注释了呢,如果是,那么把该函数前的注释去掉。重新编译版本。
然后进入BCMShell模式,输入以下命令,
BCM.0> getreg GRUC
GRUC.ge0[0x20009d]=0: <COUNT=0>
GRUC.ge1[0x20109d]=0: <COUNT=0>
GRUC.ge2[0x20209d]=0: <COUNT=0>
GRUC.ge3[0x20309d]=0: <COUNT=0>
GRUC.ge4[0x20409d]=0: <COUNT=0>
GRUC.ge5[0x20509d]=0: <COUNT=0>
GRUC.ge6[0x20609d]=0: <COUNT=0>
GRUC.ge7[0x20709d]=0: <COUNT=0>
GRUC.xe0[0x50009d]=0: <COUNT=0>
GRUC.xe1[0x60009d]=0: <COUNT=0>
此时我们也获得了GE2端口下的GRUC的值。
说明:简单介绍diag_init()函数,该函数主要是将对应的寄存器名与相应的地址对应的函数。该函数的存在,我们在读写寄存器的时候时候就可以直接输入寄存器名。

setreg 使用举例

因为GRUC是可以读写的函数,下面通过setreg命令对GE2下的GRUC进行一下写操作。
举例如下:
BCM.0> setreg 0x20209d 99
BCM.0> getreg 0x20209d
schan[0x20209d] = 0x63

至于运用寄存器名对寄存器进行写操作的读者可自己尝试。

listreg 使用举例

我们依旧对GE2下的GRUC进行操作。
举例如下:
BCM.0> listreg 0x20209d
Address GRUC.ge2
Register: GRUC.ge2 port register address 0x0020209d
Flags: 32-bits counter
Blocks: gport0 [gport1] [gport2] xgport0 xgport1 [xgport2] [xgport3] (7 copies, 4 disabled)
Description: Receive Unicast Counter
Displaying: reset defaults, reset value 0 mask 0
COUNT<31:0> = x

4.3.2 对内存表进行读写

有关内存表主要操作命令无非也是读写,
内存表读操作的命令为:dump
内存表写操作的命令为:write
下面针对内存表的读写操作分别举例说明。

对内存表dump操作

dump命令是对特定内存表的读操作。但是一般的情况下,内存表的条目都相当的大。
例如MAC学习表L2_ENTRY,该内存表共有32767个条目。如果我们dump的话,可能等命令执行完就需要几分钟的时间。所以我们一般在使用dump的时候,会配合chg使用,chg(change)命令的含义是将内存表中改变的条目显示出来。
举例如下:
BCM.0> dump chg L2_ENTRY
L2_ENTRY.ipipe0[25800]: L2:VFI=1,VFI=1,L2:VLAN_ID=1,OVID=1,VLAN:OVID=1,VLAN_ID=1,IVID=0x35b,VLAN:IVID=0x35b,PORT_NUM_1=7,VLAN:PORT_NUM_1=7,TGID_1=7,VLAN:TGID_1=7,DESTINATION_1=7,VLAN:DESTINATION_1=7,VLAN:VPG_1=7,VPG_1=7,L2:MAC_ADDR=0xe5e8fd35b,MAC_ADDR=0xe5e8fd35b,L2:PORT_NUM=5,PORT_NUM=5,VLAN:PORT_NUM=5,L2:TGID=5,TGID=5,VLAN:TGID=5,L2:L2MC_PTR=5,L2MC_PTR=5,DESTINATION=5,L2:DESTINATION=5,L2:VPG=5,VLAN:DESTINATION=5,VLAN:VPG=5,VPG=5,L2:LIMIT_COUNTED=1,LIMIT_COUNTED=1,VLAN:LIMIT_COUNTED=1,VALID=1,ASSOCIATED_DATA=0x2200000005,L2:ASSOCIATED_DATA=0x2200000005,HITSA=1,LOCAL_SA=1
L2_ENTRY.ipipe0[27000]: L2:VFI=1,VFI=1,L2:VLAN_ID=1,OVID=1,VLAN:OVID=1,VLAN_ID=1,IVID=0x102,VLAN:IVID=0x102,PORT_NUM_1=7,VLAN:PORT_NUM_1=7,TGID_1=7,VLAN:TGID_1=7,DESTINATION_1=7,VLAN:DESTINATION_1=7,VLAN:VPG_1=7,VPG_1=7,L2:MAC_ADDR=0xe5e000102,MAC_ADDR=0xe5e000102,L2:STATIC_BIT=1,STATIC_BIT=1,VLAN:STATIC_BIT=1,VALID=1,ASSOCIATED_DATA=0x6800000000,L2:ASSOCIATED_DATA=0x6800000000,EVEN_PARITY=1

注意:dump当然可以显示特定entry的内存表,在这就不在举例,读者自己研究。

对内存表write操作

对内存表的操作需要write来进行。下面来介绍一下write命令。
BCM.0> help write
Usage (Write): Parameters:

[.]
{ … | =[,…] }
Number of must be a multiple of table entry size.
Writes entry(s) into table index(es).
以上为write的help信息,其中命令参数解释如下:
TABLE:对应的表名
ENTRY:对应的entry号
ENTRYCOUNT:打算更改的entry数目。
FIELD:entry内对应的字段。
VALUE:字段对应的修改值。

下面我们采用write命令修改一下L2_ENTRY表25801项。
BCM.0> write L2_ENTRY 25801 1 MAC_ADDR=0x000000000001 VALID=1
BCM.0> dump chg L2_ENTRY
L2_ENTRY.ipipe0[25800]: L2:VFI=1,VFI=1,L2:VLAN_ID=1,OVID=1,VLAN:OVID=1,VLAN_ID=1,IVID=0x35b,VLAN:IVID=0x35b,PORT_NUM_1=7,VLAN:PORT_NUM_1=7,TGID_1=7,VLAN:TGID_1=7,DESTINATION_1=7,VLAN:DESTINATION_1=7,VLAN:VPG_1=7,VPG_1=7,L2:MAC_ADDR=0xe5e8fd35b,MAC_ADDR=0xe5e8fd35b,L2:PORT_NUM=5,PORT_NUM=5,VLAN:PORT_NUM=5,L2:TGID=5,TGID=5,VLAN:TGID=5,L2:L2MC_PTR=5,L2MC_PTR=5,DESTINATION=5,L2:DESTINATION=5,L2:VPG=5,VLAN:DESTINATION=5,VLAN:VPG=5,VPG=5,L2:LIMIT_COUNTED=1,LIMIT_COUNTED=1,VLAN:LIMIT_COUNTED=1,VALID=1,ASSOCIATED_DATA=0x2200000005,L2:ASSOCIATED_DATA=0x2200000005,HITSA=1,LOCAL_SA=1
L2_ENTRY.ipipe0[25801]: <IVID=1,VLAN:IVID=1,L2:MAC_ADDR=1,MAC_ADDR=1,VALID=1,ASSOCIATED_DATA=0x2000000000,L2:ASSOCIATED_DATA=0x2000000000>
L2_ENTRY.ipipe0[27000]: L2:VFI=1,VFI=1,L2:VLAN_ID=1,OVID=1,VLAN:OVID=1,VLAN_ID=1,IVID=0x102,VLAN:IVID=0x102,PORT_NUM_1=7,VLAN:PORT_NUM_1=7,TGID_1=7,VLAN:TGID_1=7,DESTINATION_1=7,VLAN:DESTINATION_1=7,VLAN:VPG_1=7,VPG_1=7,L2:MAC_ADDR=0xe5e000102,MAC_ADDR=0xe5e000102,L2:STATIC_BIT=1,STATIC_BIT=1,VLAN:STATIC_BIT=1,VALID=1,ASSOCIATED_DATA=0x6800000000,L2:ASSOCIATED_DATA=0x6800000000,EVEN_PARITY=1

4.4 端口命令

端口的命令主要有PORT, PORTSTAT。其中PORT的命令为设置端口。下面简单介绍PORT的用法。
举例如下:
修改ge2 的speed为10。
BCM.0> port ge2 speed=10
BCM.0> ps
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
ge0 up 1G FD SW Yes Forward TX RX None FA GMII 13312
ge1 down - SW Yes Forward None FA SGMII 13312
ge2 up 10M FD SW Yes Forward None FA SGMII 13312
ge3 down - SW Yes Forward None FA SGMII 13312
ge4 down 100M FD SW No Forward TX RX None FA GMII 13312
ge5 down - SW Yes Forward None FA SGMII 13312
ge6 down 100M FD SW No Forward TX RX None FA GMII 13312

4.5 高级命令

高级命令可以用来直接设定ACL、设置OAM功能等复杂的功能。高级命令在理解上也
是比较复杂的,一般情况下载设置的时候和相应的协议和处理流程有关系。因为高级命令比较复杂,在这就不在详细举例。下面自己值针对二层MAC学习功能的高级命令简单举例。
举例如下:
交换机的转发功能主要是通过MAC学习表,下面通过高级命令显示二层学习表.
BCM.0> l2 show
mac=00:0e:5e:8f:d3:5b vlan=1 modid=0 port=4/ge2 Hit
mac=00:0e:5e:00:01:02 vlan=1 modid=0 port=0/ Static CPU

我们现在在ge2 端口上静态添加0x000000000001的MAC。
BCM.0> l2 add port=ge2 macaddress=0x000000000001 vlan=1
ADD: mac=00:00:00:00:00:01 vlan=1 modid=0 port=4/ge2 ReplacePriority
BCM.0> l2 show
mac=00:00:00:00:00:01 vlan=1 modid=0 port=4/ge2 ReplacePriority
mac=00:0e:5e:8f:d3:5b vlan=1 modid=0 port=4/ge2 Hit
mac=00:0e:5e:00:01:02 vlan=1 modid=0 port=0/ Static CPU

我们现在在ge2 端口上删除0x000000000001 的MAC
BCM.0> l2 del mac=0x000000000001 vlan=1
BCM.0> l2 show
mac=00:0e:5e:8f:d3:5b vlan=1 modid=0 port=4/ge2 Hit
mac=00:0e:5e:00:01:02 vlan=1 modid=0 port=0/ Static CPU

5 结束语
该文档针对BCMShell的描述不过是BCMShell功能极小一部分。BCMShell功能是异常
强大的,该工具的使用在开发中的作用也是相当重要的。希望有关BCMShell的更多功能大家一起交流,共同进步!

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值