【交换芯片】基于SDE-9.4版本下Barefoot交换python模块的使用方法

背景

Barefoot的SDE里提供了许多python开发可调用的模块,方便对项目中的设备做启动配置加载或者设备自动化测试工具的二次开发,本文基于接口管理操作对PYTHON中的PAL模块的使用进行举例说明。

环境

SDE-9.4

实现方式

1. 建立连接

目前交换进程提供的是RPC通信方式,建立clnt可参考:class:ThriftInterface的实现。

class ThriftInterface(BaseTest):
……
……
def setUp(self):
        # Set up thrift client and contact server
        thrift_server = 'localhost'
        self.transport = TSocket.TSocket(thrift_server, 9090)

        self.transport = TTransport.TBufferedTransport(self.transport)
        bprotocol = TBinaryProtocol.TBinaryProtocol(self.transport)

        # And the diag server as well
        self.transport_diag = None
        if self.diag_client_module:
            thrift_server = 'localhost'

            self.transport_diag = TSocket.TSocket(thrift_server, 9090)
            self.transport_diag = TTransport.TBufferedTransport(self.transport_diag)
            #bprotocol_diag = TBinaryProtocol.TBinaryProtocol(self.transport_diag)
……
……

2. 模块调用

2.1 test脚本的私有class初始化操作:
def __init__(self, p4_names, p4_prefixes):
    ThriftInterface.__init__(self, p4_names, p4_prefixes=p4_prefixes)
    ThriftInterface.setUp(self)
    self.sess_hdl = self.conn_mgr.client_init()
    self.dev      = 0
    self.dev_tgt  = DevTarget_t(self.dev, hex_to_i16(0xFFFF))    
2.2 完成初始化操作后,即可封装自定义实现接口,例如:
  • a.封装接口初始化为所有接口全部使能:
    def port_init(self):
for port in range(len(portmap)):
    stat=self.pal.pal_port_add(self.dev, portmap[port]["dp"],portmap[port]["speed"],portmap[port]["fec"])
    self.pal.pal_port_enable_all(self.dev)
  • 为适配公司/部门自动化测试框架,封装单独想要查看的数据信息,方便过滤或者信息搜集,例如:
def port_show_single(self,port):
	print_top()
	stat=self.pal.pal_port_is_valid(self.dev,portmap[port]["dp"])
if stat:
        rx,tx,fcs,link_val=port_info_get(self,portmap[port]["dp"])
    else:
        rx,tx,fcs,link_val=0,0,0,"null"
    print("P_%-5d%-7d%-7s%-20d%-20d%-20d" %(port,portmap[port]["dp"],link_val,rx,tx,fcs))

这里不在过多介绍,对于封装实现的举例port_stats.py脚本下载地址:
基于barefoot-sde-9.4的python调用测试工具port-stats

工具实现功能有:

  -s [PORT], --show [PORT]                //显示接口状态及收发包,fcs错包信息   
  -a PORT SPEED FEC, --add PORT SPEED FEC  //手动添加接口 具体使用请看帮助
  --addall [NONE]                        //按照Port_config.json属性,添加所有接口
  -d PORT, --delete PORT                  // 删除指定接口
  --delall [NONE]                         //删除所有接口
  -c [PORT], --clear [PORT]                 //清除所有统计信息
  --vlan-create VLAN                      //vlan创建
  --vlan-destroy VLAN 					   // vlan 删除
  --port-vlan-add [VLAN [PORT ...]]           //接口添加vlan
  --port-vlan-del [VLAN [PORT ...]]            //接口删除vlan
  --def-vlan-set PORT VLAN                 //设置接口默认vlan
  --def-vlan-reset PORT                    //重置接口默认vlan
  --def-vlan-get PORT   				   //获取接口默认vlan号
  --tx [VLAN PKTNUM LEN [PORT-LIST ...]]     //向指定vlan的接口发包
  --rule-add IG-PORT EG-PORT              // 报文转发规则配置

注意事项:

1. 如果要对PYTHON封装的模块使用,需要在芯片程序启动前,进行环境变量配置:

export PYTHONPATH=./:$SDE_INSTALL/lib/python2.7/site-packages/p4testutils:$SDE_INSTALL/lib/python2.7/site-packages/tofinopd/:$SDE_INSTALL/lib/python2.7/site-packages/tofino:$SDE_INSTALL/lib/python2.7/site-packages/:$PYTHONPATH

2. 举例脚本中调用原库API的接口定义路径,如下:

   / install/lib/python2.7/site-packages/tofino/pal_rpc/pal.py
   /install/lib/python2.7/site-packages/diag_rpc/diag_rpc.py

这两处所有的API都可以使用,目前port_test.py只是封装了自动化测试中常用的功能操作。

注: SDE-9.4需要对install/lib/python2.7/site-packages/ptf/下: init.py进行修改:文件注释掉对log_dir配置文件的检索操作,原因是因为diag版本没有加载该模块。

脚本只基于SDE-9.4做说明,安装过高级版本可能相关操作有所差异。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyh_halo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值