介绍p4app
p4app是一个可以构建、运行、调试和测试P4程序的工具,p4app背后蕴含的哲学是“简单的事情应尽可能简单”,旨在使小而简单的P4程序易于编写、易于与他人分享。这个工具站的角度比较高,忽略了底层的一些配置,让用户了解p4的门槛变低,直接开始设计p4程序。👌
p4lang/p4app的镜像结构
Docker 镜像是分层结构以Ubuntu 16.04为base镜像依次构建,p4app为最顶层.
对于如何构建这些镜像,有兴趣的可以看p4app的Dockerfile.💪
- p4app
- p4c
- pi
- bmv2
- third-party
- ubuntu:16.04
安装p4app
- 前提保证机器上安装了docker 🖥
下载github的p4app源码
git clone https://github.com/p4lang/p4app.git
cd p4app
sudo cp p4app /usr/local/bin
p4app run examples/simple_router.p4app
😘 其他具体的说明参照https://github.com/p4lang/p4app中README.md的说明。
下面讨论下p4c 和 p4c-bm 的关系以及 p4factory 和 p4app 的关系
从sdnlab网站上帖子的理解,大概是这样的:P4语言(P4_14)提出不久时,p4-hilr:https://github.com/p4lang/p4-hlir是它的编译器,P4软件交换机是BMv1: https://github.com/p4lang/p4c-behavioral;同时,为使大家更好的上手P4语言,提供了p4factory和tutorials这两个仓库;
后来P4社区使用C++重写了BMv1软件交换机,形成现在通用的P4软件交换机BMv2:🖥https://github.com/p4lang/behavioral-model,并对p4-hilr编译器做了对应的拓展,形成p4c-bm编译器,p4c-bm 只支持 p4-14 而且指针对 bmv2 这个目标,而 p4c 可以支持 p4-14 和 p4-16,而且包含了多个后端编译器。16年,为解决P4_14语言的语法问题和限制,社区开发了P4_16语言,并基于P4_16语言做了新的编译器p4c;p4c是P4语言的前端编译器,🌐既支持p4_16语言也支持p4_14语言,同时允许各大厂商开发架构相关的的后端编译器,即对应于ebpf、bmv2、tofino、NetFPGA等架构的后端编译器。这个过程中,P4语言官方教程Tutorial是不断更新的,而p4factory不再被官方维护,所以如果要上手P4的话建议从Tutorial开始。p4app是通过docker环境运行P4实验的一个仓库,可以参考上面的教程或者想多了解可以访问孙勇峰老师的博客:sunyongfeng.com/201705/networks/p4/repo_p4app.html。