前言
最近由于科研的需要,搭建SDN的P4编程环境,但是这个过程比较麻烦。网上相关的资源较老,P4的库依赖众多,出现了很多库版本不对导致的错误。最后以GitHub上P4项目教程的实验环境的配置文档和一些相关的文档为参考而搭建成功。
下面对整个搭建环境过程进行一下总结。
系统环境
- Ubuntu 16.04
- Python 2.7
- 内存 4G+
- 内核 4.15
系统内核版本一定要更新到4.15及以上的版本,不然在安装P4C的过程中会出现error。同时内存太小的情况下,执行脚本过程中系统容易崩溃。
环境组件
P4编程环境主要需要5个组件。
- p4c是最新的p4编译器。
- Bmv2是支持P4编程的软件交换机。
- PI是P4 runtime的实现,用于Control Plane对数据平面的控制。
- Mininet的功能是构建一个虚拟的网络拓扑。 它通过linux内核的一些特性(net命名空间),在一个主机上划分出多个虚拟网络空间,各个网络空间之间相互隔离,有自己的端口, ip等等。
- p4 tutorials 提供了用于学习的实例代码,它提供了很多个带有方向性的实际场景,例如负载均衡,简单的隧道机制,源路由等。
搭建过程
1.安装依赖
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install automake cmake libjudy-dev libpcap-dev libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev libevent-dev libtool flex bison pkg-config g++ libssl-dev -y
sudo apt-get install cmake g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev libboost-graph-dev llvm pkg-config python python-scapy python-ipaddr python-ply tcpdump curl -y
sudo apt-get install libreadline6 libreadline6-dev python-pip -y
sudo pip install psutil
sudo pip install crcmod
分别执行这些语句,安装P4编程环境需要的依赖。
2.创建工作目录
在home目录下创建一个P4的工作目录,方便之后的使用,并且加入环境变量。
mkdir ~/P4
cd ~/P4
echo "P4_HOME=$(pwd)" >> ~/.bashrc
source ~/.bashrc
3.P4相关组件版本
截至本篇文章书写时间,P4项目教程的实验环境的配置文档中的各组件和依赖库的版本如下。
BMV2_COMMIT="b447ac4c0cfd83e5e72a3cc6120251c1e91128ab" #August 10, 2019
PI_COMMIT="41358da0ff32c94fa13179b9cee0ab597c9ccbcc" #August 10, 2019
P4C_COMMIT="69e132d0d