Barefoot的SDE里提供了许多python开发可调用的模块,方便对项目中的设备做启动配置加载或者设备自动化测试工具的二次开发,本文基于接口管理操作对PYTHON中的PAL模块的使用进行举例说明。
SDE-9.4
目前交换进程提供的是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)
……
……
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))
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 // 报文转发规则配置
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
/ 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做说明,安装过高级版本可能相关操作有所差异。