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

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

    • 背景
    • 环境
    • 实现方式
      • 1. 建立连接
      • 2. 模块调用
        • 2.1 test脚本的私有class初始化操作:
        • 2.2 完成初始化操作后,即可封装自定义实现接口,例如:
    • 注意事项:
      • 1. 如果要对PYTHON封装的模块使用,需要在芯片程序启动前,进行环境变量配置:
      • 2. 举例脚本中调用原库API的接口定义路径,如下:

背景

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做说明,安装过高级版本可能相关操作有所差异。

你可能感兴趣的:(交换芯片,python,linux,网络,信息与通信,运维,驱动开发,测试工具)