最近在研究SDN P4 的编译器(p4factory),以下是关于P4的安装和简要使用。
p4factory安装
1.下载P4源码
github上(https://github.com/p4lang/p4factory) 有开源的P4源码下载,在这里,我采用的是ssh的下载方式。
git clone git@github.com:p4lang/p4factory.git
记得此步骤需要在自己电脑上设置ssh key,不然会提示no RSA,具体设置比较简单,自行百度。
2.安装git submodules
cd p4factory
git submodule update –init –recursive
3.下载安装依赖 (以下命令均在…/p4factory下执行)
./install_deps.sh
这一步要注意了:
1.官方readme上的运行环境明确写明是Ubuntu 14.04,亲测12.04不能使用(apt-get install thrift-compiler会失败),更高版本的Ubuntu应该也能用;
2.关于在虚拟机安装的,最重要的一点,内存一定要够大,不然这步会失败(因为宿主机的系统是Ubuntu12.04,由于种种原因没有升级系统,于是在虚拟机上装了个Ubuntu14.04,分配1G内存,重复多次Readme上的安装步骤,都没有成功,居然也没有提示是内存不够0.0,后来在google上才发现了这个困扰已久的问题,于是果断跑去服务器虚拟机上装了个8G的Ubuntu14.04,内存大,任性,终于运行成功了。
4.设定veth和makefile,安装完毕
第3步通过之后,接下来应该没什么问题了。
sudo ./tools/veth_setup.sh
./autogen.sh
./configure
5.启动
接下来进入p4factory/target,target里面的便是完整的model了,随便选择一个编译就可以了,下面选择的是simple_router
cd p4factory/targets/simple_router/
make bm
sudo ./behavioral-model
启动如下:
p4@ubuntu:~/p4factory/targets/simple_router$ sudo ./behavioral-model
[sudo] password for p4:
No PD RPC server address specified, using 127.0.0.1:9090
No listener specified, switch will run in standalone mode
P4 Program: simple_router
Starting RPC server on port 9090
至此,p4factory安装完毕了。
p4factory的简单使用
下面简要介绍一下p4 compiler的使用,compiler一般分为前端(front)和后端(back),p4–>target switch的编译器也是,这里的前端主要是生成P4的依赖关系图(TDG),有利于分析流水线的步骤和挖掘流水线的并发性,而后端主要就是做映射了,把流表映射到各个流水级里。这里主要是简单使用p4factory生成TDG。
其实很简单,我们选择一个完整的P4程序(p4factory/target里面的每一个model就是完整的p4程序里),这里,我们采用上述的simple_router。
cd p4factory/targets/simple_router/p4src
p4-graphs simple_router.p4
就会在 …/simple_router的文件夹上生成3个png文件了:
simple_router.parser.png simple_router.ingress.tables_dep.png simple_router.tables.png
具体的代码和关系依赖接下来再分析。
参考链接:
1 https://github.com/p4lang/p4factory
2 https://takeshi.tw/%E6%9E%B6%E8%A8%AD-p4-%E6%A8%A1%E6%93%AC%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83/