运行./run_switchd.sh -p <program_name>或者./run_switchd.sh -p <program_name> --arch=tf可以进入bf_shell

控制面操作

up需要的端口

需要注意的是 这里的端口是与实际接线有关的 如果不确定的话需要去机房实地考察接线情况或者咨询网管

另外以下所有交互界面使用?都可以获得一定的帮助:

  1. 使用如下命令可以查看目前的端口联通情况:

    1
    2
    3
    bfshell> ucli
    bfsde> pm
    bfsde.pm> show
  1. bfsde.pm> 界面使用如下命令可以配置端口的开启和关闭:

  2. 端口开启:

    1. port add <conn_id/chnl> <speed> <fec>这里的fec可以选RS/NONE/FC;哪一个能用用哪一个
    2. port enb <conn_id/chnl>
  3. 端口开启的例子(比如13口开100G;因为是100G所以只能13/0):

    1. port-add 13/0 100G RS
    2. port-enb 13/0
    3. show (多次 如果正常的话OPR那一栏会从DWN变成UP)
  4. 端口关闭例子:

    1. port-dis 13/0 这个对应于enb指令
    2. port-del 13/0
  5. bfsde.pm>可以通过..退到bfsde>;

下表

需要注意的是 并不是物理上的13口就意味着形如:

ig_intr_tm_md.ucast_egress_port = port;

这条命令中的port为13;

事实上,需要在bfsde.pm>中使用show -a进行确认:

1
2
3
4
5
6
7
8
9
10
------+----+---+----+-------+----+--+--+---+---+---+--------+----------------+----------------+-
PORT |MAC |D_P|P/PT|SPEED |FEC |AN|KR|RDY|ADM|OPR|LPBK |FRAMES RX |FRAMES TX |E
-----+----+---+----+-------+----+--+--+---+---+---+--------+----------------+----------------+-
12/3 |12/3| 39|0/39|-------|----|--|--|NO |---|---|--------|----------------|----------------|-
13/0 |11/0| 28|0/28|100G | RS |Au|Au|YES|ENB|UP | NONE | 53 | 0 |-
13/1 |11/1| 29|0/29|-------|----|--|--|YES|---|---|--------|----------------|----------------|-
13/2 |11/2| 30|0/30|-------|----|--|--|YES|---|---|--------|----------------|----------------|-
13/3 |11/3| 31|0/31|-------|----|--|--|YES|---|---|--------|----------------|----------------|-
14/0 |10/0| 20|0/20|100G | RS |Au|Au|YES|ENB|UP | NONE | 73 | 0 |-
14/1 |10/1| 21|0/21|-------|----|--|--|YES|---|---|--------|----------------|----------------|-

比如这里应该是28;

因此在aplusb.p4中下ipv4表的时候应该的值为:

对应14口

1
bfrt.aplusb.pipe.SwitchIngress.ipv4_lpm.add_with_ipv4_forward(hdr_ipv4_dstAddr="192.168.42.8",dstAddr="10:70:fd:00:d8:ac",port=20)

对应13口:

1
bfrt.aplusb.pipe.SwitchIngress.ipv4_lpm.add_with_ipv4_forward(hdr_ipv4_dstAddr="192.168.42.7",dstAddr="10:70:fd:00:da:cc",port=28)

debug 抓包操作 snapshot

能够在交换机控制面装多个”钩子“,并且打印符合”钩子“要求的第一个数据包经 过的时候的stage信息;

  1. snap-create -d 0 -p 0xFFFF -s 0 -e 11 -i 0
    1. -s 0 -e 11表示从第0个stage到第11个stage的信息
  2. snap-ig-mode-set -h 0xff581 -m 1
    1. 这里的0xff581来自于第一条的输出;相当于一个handler
  3. snap-trig-add -h 0xff581 -n hdr_ipv4_dstAddr -v 0 -m 0
    1. 这是用于匹配的规则;这里表示监视hdr_ipv4_dstAddr这个信息,-v表示 值,-m表示掩码;值掩码符合要求的时候发生命中
    2. 这种规则可以有多条
  4. snap-state-set -h 0xff581 -e 1
    1. 表示启用0xff581这个监视器
  5. snap-capture-get -h 0xff581 -p 0
    1. 打印信息;这个时候直接打印是啥都没有的;只有符合条件的第一个包经 过交换机才能抓到东西(可以打印每一个stage的匹配情况)