p4-hlir和p4c-bm 編譯工具

本文時間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更唯一
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章