Aquila: A Practically Usable Verification System for Production-Scale Programmable Data Planes
Introduction
四个目标:
- 网络工程师能够轻松地表达他们的正确性规范;
- 能够在几分钟内有效地验证生产规模的数据平面程序;
- 在检测到违规行为后,它应该能够自动准确地定位数据平面和表条目中的错误;
- 系统应该有能力自我验证自己的实施正确性
四个挑战:
- 规则复杂 —— 提出了LPI语言
- 验证可扩展 —— 一种新的顺序编码算法
- 漏洞定位
- 自验证
Overview
- Specification expressing
- Verification
- Bug localization
- 无法检查语句缺失;
- 现有工具无法解决P4下的问题;
- Verifier self validation
SPECIFICATION LANGUAGE
- Assumption:3种类型的preconfitions
- switch的初始状态(内存中的值等)
- 输入包的头部(头部字段值和顺序等)
- 元数据(镜像状态和输入端口等)
- Assertion:specify the correctness of a single pipeline
- Program:将假设和断言连接到相应的数据平面模块,形成整个规范化。
VERIFICATION APPROACH
Sequential Encoding
状态爆炸问题
- 以编码parser为例
Data Structure Encoding
- Table encoding
- Encode
- Use Action BitVector (ABV) to encode each entry in the table to avoid branches
- Use a tree like lookup algorithm to encode the search operation among the ABVs.
- ABV
- 根据匹配字段查找匹配条件,以获得第一个匹配的ABV
- 根据ABV的动作和参数字段应用相应的操作。
- ABV lookup
- 建模为平衡查找树
- 建模为平衡查找树
- Encode
- Packet encoding
- 使用键值对节省开销
Encoding Other Features
AUTOMATIC BUG LOCALIZATION
C及Haskell方法不适用的原因:
- 现有工作无法定位因语句缺失而导致的错误,这些错误通常存在于开发中
- 通用语言调试工具无法本地化P4特定语义中的错误,例如解析器和lookahead中的错误
Finding Violated Assertion
- let the solver only return the first violated assertion
- 移除继续找到所有的违背断言
Bug Localization
Preparation
使用SMT求解器返回一个反例,该反例显示所有变量的具体值来触发违规
Table entry bug localization.
- 查找正确条目纠正表行为
- Aquila试图找到此类条目通过将所有表替换为变量并让SMT求解器为每个表搜索有效条目
- 如果求解器可以找到此类条目,则进行 下一步
- 否则bug位于数据平面
- Aquila试图找到此类条目通过将所有表替换为变量并让SMT求解器为每个表搜索有效条目
- 尽量减少潜在位置
- 表被建模为: t i = i t e ( r e p i , f v i , e i