p4pktgen学习笔记(2)——运行示例

本文档介绍了P4pktgen工具如何运行示例,特别是针对`demo1.p4_16.p4`的测试。内容包括不同运行选项如 `-au` 的影响,以及`result`、`expected_path`、`complete_path`等关键概念的解释。通过`input_packet`和`uninitialized_read_data`,深入解析了测试用例的输入包和未初始化读取数据的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行示例:demo1.p4_16.p4

文件位置:

~/p4pktgen-master/examples/ demo1.p4_16.p4

同文件夹下有已经编译好的json文件:

~/p4pktgen-master/examples/ demo1.p4_16.json

可以看到 p4文件有ParserImpl(),verifyChecksum(),ingress(),egress(),computeChecksum(),DeparserImpl()六个模块,但是对于p4pktgen来说只关心ParserImpl()ingress(),剩下四个control的内容不关心。

test-cases.json是描述测试用例的数据文件,其中一个大括号括起来的是一个测试用例。

① 可得到"SUCCESS"和"UNINITIALIZED_READ"结果:

% p4pktgen examples/demo1.p4_16.json >& log1.txt

② 可得到"SUCCESS"和"INVALID_HEADER_WRITE"结果:

% p4pktgen -au examples/demo1.p4_16.json >& log2.txt

选项 –au是–allow-uninitialized-reads的缩写,让p4pktgen假设将所有域都初始化为0,这样就不会出现“result”:“UNINITIALIZED_READ”的情况。

③ 可得到"SUCCESS"和"NO_PACKET_FOUND"结果:

% p4pktgen examples/demo1-no-uninit-reads.p4_16.json >& log3.txt

-“result”:

  • “SUCCESS”
    在整个路径中没有发现任何问题
  • “UNINITIALIZED_READ”
    p4pktgen判定在该path中读取了一个或多个未初始化的域(P4_14语言将所有字段都自动初始化为0,除非在程序中指定了不同的初始值;然而,在P4_16中,语言规范并没有自动初始化所有字段,它只将header中隐藏的有效位初始化为false。)
  • “INVALID_HEADER_WRITE”
    当header无效时header的某个字段被赋值了(在P4_14语言规范中,这被定义为一个no-op;在P4_16语言规范中,这种行为没有定义。)
  • “NO_PACKET_FOUND”
    未能找到可能导致执行此路径的表项和输入包的组合。

-“expected_path”:

  • “start”:标志解析开始
  • “sink”: 标志解析结束
  • [(“table名”, “该table要执行的action” )]

-“complete_path”

是否执行到controll ingress完成

在发包之前,两个table必须先有实体表项。simple_switch_CLI指令中有一个用于table_add的特殊语法的命令。

-“ss_cli_setup_cmds”

用于添加table表项的命令集合。

table_add 表名 action名 匹配项 => action要用到的参数

-“input_packet”

描述要输入给这个设备的packet对象的列表

  • “port”: 入端口号
  • “packet_len_bytes” : 包的长度
  • “packet_hexstr” : 16进制表示的内容

-“uninitialized_read_data”

与前面的“result”呼应,给出了更多关于那些域的细节(一个列表,列表中的元素就代表了一个域)。

  • "variable_name”:变量名
  • “source_info”:该变量第一次赋值的地方,在这之前未初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值