来聊聊P4的GitHub仓库吧

GitHub 中 P4 仓库的地址:https://github.com/p4lang/

P4 语言编译/转换流程

每个仓库的功用和说明

仓库名称 仓库介绍 具体说明 是否可用
Behavior-model(BMV2) Rewrite of the behavioral model as a C++ project without auto-generated code (except for the PD interface)新的 Behavior-model,用于替换之前的 p4c-behavioral,是一个新的 P4 运行时环境。 需要使用 p4c-bm 工具把 P4 代码转换成一个表示成软交换的 json 文件 可以正常使用
p4c P4_16 prototype compiler 解耦了前端编译和后端编译,均用统一的 IR 表示,前端针对 P4_14 和 P4_16 均可,后端可以编译为 bmv2 的 json 配置和 ebpf 的 cpp 代码 还在试验阶段,不过已经可用
p4factory Compile P4 and run the P4 behavioral simulator 集合了 P4 的各种工具,可以直接让 P4 代码跑起来,在 target 文件夹中有许多 p4-14 的例子,并没有和 P4-16 工程同步更新 大体上可以跑起来,但是由于很久都没有更新,所以关于 docker-image 和 INT 应用的代码都已经 broken,目前有修复的迹象(INT 貌似已经修复)
p4c-bm Generates the JSON configuration for the behavioral-model (bmv2), as well as the C/C++ PD code 为 bmv2 运行时环境生成 json 配置文件,(pd c++ code 应该是 protocol dependence cpp code) 可以正常使用
p4-hlir P4 的前端编译器,应该是针对于把 P4 代码转换成其他语言使用的(而且应该是针对于 P4-14,因为 P4-16 已经将前端编译器放置于 p4c 的库中),使用 bcc 可以将 P4 解释为 ebpf(和中间的 c 语言表示) 可以正常使用
ptf Packet Test Framework
papers Repository for papers related to P4 关于 P4 的一些文档和论文
switch Consolidated switch repo (API, SAI and Nettlink) 包含了 SAI 和 switchAPI 的 P4 比较完整的 switch 示例(switch.p4),使用 bmv2,支持 INT,支持 SAI 安装 thrift 的时候出现问题,没有运行成功,但理论上可以运行
ntf Network Test Framework 基于 mininet 还没有使用过
SAI Switch Abstraction Interface forked from opencomputeproject/SAI
p4-build Infrastructure needed to generate, build and install the PD library for a given P4 program 为 P4 代码生成 PD 库(protocol dependence) 很久没更新了,但是目前可使用
p4ofagent Openflow agent on a P4 dataplane openflow 控制器和 P4 运行时的中间翻译器 很久没更新了,还没使用过
tutorials P4 language tutorials 一些会议或者活动的论文和示例,比如 P4workshop 和 SIGCOMM 可用,应该去看看
p4c-behavioral P4 compiler for the behavioral model 将 P4 代码编译成可以运行的代码,已经被 bmv2 代替 很久很久没更新了,更没有用过
scapy-vxlan A scapy clone, with support for additional packet headers 使得 scapy 支持 vxlan 协议 可用
thrift Mirror of Apache Thrift thrift 的镜像 可用
mininet Emulator for rapid prototyping of Software Defined Networks http://mininet.org mininet 的镜像 可用
PI P4 PI headers and target-independent code
提供一个 CLI 下给 bmv2 提供流表得接口 可用
P4app p4app is a tool that can build, run, debug, and test P4 programs. The philosophy behind p4app is “easy things should be easy” - p4app is designed to make small, simple P4 programs easy to write and easy to share with others. 一个可以编译、运行(14、16 两种版本)、测试(ptf 和 mininet 等)P4 语言的库,它使用了一个封装好的 docker 镜像,并且把 P4 的运行变成了一个可以描述的工程 可用
Third-party Third-party dependencies for p4lang software P4 仓库所依赖的一些第三方库

注:以上均根据最近尝试运行 P4 的 GitHub 代码时候的经验逐渐整理出,如有不对或者欠缺的地方希望得到大神们的指点。