阅读更多
本文时间10/15/2016,如果时间久远请参考网站 以免被旧信息误导
p4-hlir项目解析p4,可以看成p4语言的python解析器,生成对应的python对象。
基于这个解析结果可以再加上模板输出json或者c, 或者RTL,或者DPDK,或者NP的微码。。
BMv2可以看成是一个设备或者模拟器,p4c-bm就是调用p4-hlir解析p4,生成BMv2配置所需的json文件和远程调用接口。所以一个p4模型被mininet模拟的picture是这样的:
p4 -> p4-hlir -> p4c-bm -> BMv2 -> mininet
p4c-bm安装会把p4-hlir一并安装:
git clone https://github.com/p4lang/p4c-bm.git
cd p4c-bm
sudo pip install -r requirements_v1_1.txt
sudo python setup.py install
至此/usr/local/bin下面就有了p4开头的编译、校验、图片生成命令。
p4-validate用来检查p4语法
p4-shell simple_router.p4
这是python界面,h对象包含了HLIR已经解析出的对象,用法参见https://github.com/p4lang/p4-hlir
p4-graph,这个项目不见了,原来跑到这里。这个命令会在当前目录下生成几个图片来描述Table/parser关系。
p4c-bmv2
--json 生成P4的Json格式
--pd 生成 PD C++ code
--p4-v1.1 if your input program is a P4 v1.1 program
进入p4-factory的targets/simple_router/p4src,编译一下p4模型:
p4c-bmv2 --json JSON simple_router.p4
这时候JSON文件就生成了,打开看看是不是很眼熟?
1. metadata跟header_type放在一起
2. headers成员里面有个metadata:true/false来标记
3. headers里面还有standard_metadata
4. 还有parsers/actions组。。。
至于怎么用BMv2或者mininet跑起来请看下一篇
如果你有自己的设备,CPU/FPGA/NP或者其它想支持P4的设备,可以用p4-hlir用python解析生成代码,或者基于p4c-bmv2输出的JSON生成代码或者执行文件。
BMv2j记得不是生成代码,而是加载JSON作为配置,如果代码效率要求不高应该可以这么用。
BTW,P4这个名字本来是Perforce的缩写,一个版本管理工具,P4全名是Programming Protocol independent Packet Processing, PPiPP更唯一