Page 92 - 《软件学报》2020年第9期
P. 92

张雯雯  等:SDN 数据平面软件一致性测试用例生成方法                                                     2713


             •   p4pktgen [10] 是一个可以为 P4 程序自动化生成测试用例的开源工具. p4pktgen 不直接依赖 P4 程序,而
                是解析 P4 程序经编译后的 JSON 格式文件,并为给定程序中的路径生成数据包和表配置,用户可以选
                择生成所有路径的测试用例,也可以生成优先考虑分支覆盖范围的测试用例.随后, p4pktgen 配置
                BMv2 交换机、发送测试包并验证数据包的转发是否和预期的路径一致.p4pktgen 支持 P4 14 和 P4 16 两
                个版本的 P4 程序,其功能上尚且有一些没有修复的 bug,生成的数据包不能随 P4 程序更新而灵活改变,
                其针对性有待改进;
             •   p4app 是一个可以构建、运行、调试和测试 P4 程序的工具,其工作过程具体包括:p4app 运行一个
                以.p4app 为后缀的程序包,该程序包可以封装 P4 程序、JSON 格式文件等,还可以封装 P4 编译器、抓
                包、发包等工具.在测试过程中,stf 测试框架直接编译 p4app 程序包将生成一个.stf 文件,发送.stf 文件
                中的报文并验证 BMv2 交换机发出的报文与预期是否一致;
             •   ptf 是一个用 python 实现的数据平面测试框架,主要功能来自 OFTest 测试框架.ptf 专注于数据平面,并
                且不依赖于 OpenFlow,且添加了 Filters、Ternary matching 和 Test timeout 等功能.
             上述常见的测试工具已经部分应用于 P4 程序的功能测试.2019 年 11 月,ONF 先后发布了交换机操作系统
         Stratum 和目前正在开发中的针对 Stratum 交换机测试的 Test Vector Framework,该框架正在致力于开发一系列
         供应商无关的测试来检验目标交换机与 Stratum 的一致性.本文着重针对面向 P4 编程语言的一致性测试用例生
         成方法进行相关研究.
         2    一致性测试用例覆盖标准

             软件测试的覆盖指标包括语句覆盖、判定覆盖、路径覆盖等,而面向 P4 程序的一致性测试指标定义尚未
         明确.通过分析 P4 程序,我们发现首部(header)、解析器(parser)、动作(actions)、表(tables)、控制模块(control
         blocks)这 5 个 P4 编程语言的基本组成部分的工作都是与匹配动作表(match-action tables)相关联,而 P4 网络设
         备也是通过匹配流水线(pipeline)中的表来执行相应处理数据包的操作.因此,我们可以通过 P4 网络设备的控制
         命令来进行面向 P4 编程语言的 SDN 数据平面软件一致性测试,则相应的测试用例为控制命令.
             由于每条控制命令所含字段不同,每条字段的合法类型也不同,经过分析,本文将面向 P4 编程语言的 SDN
         数据平面软件一致性测试用例覆盖标准确立为:生成足够的测试用例,使得所有针对 match-action tables 操作的
         控制命令都被执行,其中每条命令的每个字段都要覆盖合法和不合法两种测试结果.
         3    面向 P4 编程语言的一致性测试用例自动生成方法设计

             本节设计了一致性测试用例自动化生成方法,详细介绍了 P4 程序经过编译、解析、测试用例生成的整个
         自动化过程.
             如图 2 所示,本节设计的测试用例自动生成方法基本流程为:P4 程序经过编译过程,生成解析过程所需要的
         P4 信息文件(.p4info 文件)和 P4 数据平面描述文件;所述 P4 数据平面描述文件包括 JSON 格式的网络设备配置
         文件;解析过程包括获取目标网络设备控制命令集,依据每条控制命令格式,从所述 P4 程序编译单元生成的 P4
         信息文件中解析出 TABLE_NAME,ACTION_NAME,MATCH_KEY,PARAMETERS 字段信息,最终生成控制信
         息实体集合;测试用例生成过程划分了测试用例类型,将所述解析过程生成的控制信息实体集按照测试用例类
         型组织,最终生成面向 P4 编程语言 SDN 数据平面软件一致性测试用例集.
         3.1   编译过程
             p4c 编译器是为 P4 编译器设计的编译器基础设施,同时支持 P4 14 以及 P4 16 两个版本的 P4 语言.如图 3 所
         示: p4c 提供了标准的前端和中间件,通过在编译时添加选项,可以和特定目标的后端相结合使用.p4c 编译器支
         持 EBPF Backend,BMv2 Backend 和 P4test Backend.其中 EBPF 能够生成可以扩展 Berkeley 数据包过滤程序的
         C 代码, BMv2 能够生成用于简单的网络交换仿真的 JSON 格式文件,P4test 是一个测试用的后端编译器.最新的
   87   88   89   90   91   92   93   94   95   96   97