来聊聊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 代码时候的经验逐渐整理出,如有不对或者欠缺的地方希望得到大神们的指点。
相关文章