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 所示.
   88   89   90   91   92   93   94   95   96   97   98