Page 93 - 《软件学报》2020年第9期
P. 93
2714 Journal of Software 软件学报 Vol.31, No.9, September 2020
后端编译器详情请见 https://p4.org/.
Fig.2 SDN data plane software conformance testcase generation tool data flow diagram
for P4 programming language
图 2 面向 P4 编程语言的 SDN 数据平面软件一致性测试用例生成工具数据流图
Fig.3 P4 program compilation process diagram
图 3 P4 程序编译过程图
图 3 所示为 P4 程序的编译过程, 本文使用的是 p4c-bm2-ss 来编译 P4 程序,p4c-bm2-ss 是 p4c 项目编译完
后的产物之一,具体编译过程为: p4c 编译器首先将 P4 14 和 P4 16 编写的 P4 源程序转换成通用的中间表示 IR,然
后经过前端编译器,生成为通用的后端中间表示 IR 和 P4 信息文件(.p4info 文件),中间表示 IR 经过 p4c-bm2-ss
编译生成一个 JSON 格式的数据文件,此文件专门用于将 P4 程序编译生成 BMv2 使用的数据平面描述文件.我
们研究发现:由于 P4 官方提供了一个 Helper 类以帮助解析.p4info 文件,该文件格式更加便于处理,因此,.p4info
文件可用于 P4 表信息的解析过程.
3.2 解析过程
由于面向 P4 编程语言的 SDN 的实现,是通过定义匹配动作表(match-action tables)来部署 P4 网络设备.匹
配动作表(match-action tables)是面向 P4 编程语言的 SDN 实现的关键载体,也是体现 P4 编程语言特性的重要部
分.用户可以直接把自己对处理数据包的需求编写成 P4 程序来部署网络设备,因而网络架构师等人员可以通过
控制网络设备、指定转发行为、填充定义表来实现 SDN.而确定装载 P4 程序的网络设备是否真正实现用户需
求,则需要对目标网络设备进行一致性测试.一致性测试用例的生成,需要通过解析 P4 目标设备的控制命令集
来获取每条命令所需要的表名、匹配字段、动作、动作参数信息.
• 控制命令信息类结构设计
我们以面向对象的思想来建模控制命令信息 Command 类,该类成员包括 CommandName,CommandFormat,
TableName,ActionName,MatchField,ActionParameter1,ActionParameter2,如图 4 所示.
• 解析控制命令集
我们研究发现,不同的 P4 网络设备具有不同的控制命令集.生成用于 P4 网络设备的测试用例首先需要解
析 P4 网络设备的控制命令集,进而生成包含控制命令头、控制命令格式以及控制命令字段的控制命令信息实
体.本节设计了用以解析控制命令集的方法,生成控制命令信息实体列表,其工作流程如图 5 所示.