P4编程环境搭建
本文参照了sdnlab上相关文章的搭建推荐。 使用的系统环境为ubuntu 18.04
组件介绍
主要安装五个组件:
- BMv2:是一款支持P4编程的软件交换机
- p4c:是一款P4的编译器
- PI:是P4 runtime的实现,用于控制平面对数据平面的控制。
- mininet:这个之前用过,是一个虚拟的网络拓扑搭建软件。
- p4 tutorials :提供了用于学习的示例代码。例如负载均衡,简单的隧道机制以及源路由等。
额外说一个
- scapy:一个python库,提供构建数据包,抓包,解析包等的功能。
开始搭建
这里介绍一个个组件安装的搭建,然后最后会有一个一键安装的脚本。
搭建前的准备
这里我们先创建一个P4的目录,然后加入一下环境变量
//创建一个p4的文件夹目录
mkdir ~/P4
//进入目录
cd ~/P4
//写入环境变量
echo "P4_HOME=$(pwd)" >> ~/.bashrc
//更新环境变量
source ~/.bashrc
安装Protocol
sudo apt-get install autoconf automake libtool curl make g++ unzip
git clone https://github.com/google/protobuf.git
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
这里比较比较建议加上git checkout v3.2.0
安装bmv2
在p4目录中
git clone https://github.com/p4lang/behavioral-model.git bmv2
cd ~/P4/bmv2
//安装依赖
./install_deps.sh
//编译bmv2
./autogen.sh
./configure
make
//安装bmv2
sudo make install
//更新共享库
sudo idconfig
//测试
sudo make check
安装p4c
这里从陈翔学长哪里剽到了一个直接安装p4c的脚本installp4c.sh
原来的安装方法
git clone --recursive https://github.com/p4lang/p4c.git
//安装依赖
sudo apt-get install g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev pkg-config python python-scapy python-ipaddr tcpdump cmake
//用于生成文档
sudo apt-get install -y doxygen graphhviz texlive-full
//构建
mkdir build
cd build
cmake .. [-DCMAKE_BUILD_TYPE=RELEASE|DEBUG] [-DCMAKE_INSTALL_PREFIX=<path>] [-DENABLE_DOCS=ON (default off)] [-DENABLE_P4RUNTIME_TO_PD=OFF (default on)]
//安装
sudo make install
安装PI
git clone git@github.com:p4lang/PI.git
//安装依赖
sudo apt-get install libjudy-dev libreadline-dev
git submodule update --init --recursive
//配置
./autogen.sh
./configure [--with-bmv2] [--with-proto] make
关于这个参数,可以去原库中看readme
安装mininet
这个可以参考以前源码安装mininet的blog 源码安装mininet
安装p4-tutorials
git clone https://github.com/p4lang/tutorials
这里大致的组件就安装完了。
一键安装
这里是sdnlab上P4编程理论与实践提供的一键配置。 p4-quick 先安装依赖
sudo apt-get update 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 apt install libreadline-dev sudo pip install psutil
sudo pip install crcmod
其中部分仓库克隆非常的慢,建议搞个梯子会快很多。
然后运行上述那个p4-quick的env_up.sh脚本,就可以搭建完成了。
其实在安装过程中有许多与上述内容有所出入的修改,在后续在一一说明。
P4编程环境搭建的更多相关文章
- P4编程环境搭建遇到的问题与解决方法
在经历了无数的折腾之后,算是折腾,最后采用的是陈翔学长的脚本加上可爱的shell调整装好的. 链接:p4Install 也许是ubuntu18.04的问题,也有可能是我自己把这个系统折腾的有点杂乱的原 ...
- Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)
此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...
- Qt在Windows下的三种编程环境搭建
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...
- Qt在Mac OS X下的编程环境搭建
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...
- Qt4.8在Windows下的三种编程环境搭建
Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...
- unix网络编程环境搭建
unix网络编程环境搭建 网络编程 环境 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xz ...
- ArduinoYun教程之Arduino编程环境搭建
ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...
- Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...
- Qt在Windows下的三种编程环境搭建(图文并茂,非常清楚)good
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...
随机推荐
- ;(function($,window,document,undefined){})(jQuery,window,document)
;(function($,window,document,undefined){})(jQuery,window,doucment) 1.自调函数(function(){})() 2.好处是不会产生任 ...
- 创建jq插件步骤
无意看了这篇<jQuery插件开发精品教程,让你的jQuery提升一个台阶>文章,现在做一下总结. 一.jQuery插件的创建可以有三种方法 1.通过$.extend()来扩展jQuery ...
- spring-构建mvc工程
SpringMVC基于模型-视图-控制器(MVC)模式实现,可以构建松耦合的web应用程序. 1.SpringMVC的请求过程 1)请求离开浏览器,并携带用户所请求的内容 2)DispatcherSe ...
- collections.namedtuple()命名序列元素
## collections.namedtuple()命名序列元素 from collections import namedtuple Student = namedtuple("Stud ...
- 【Spark】算子
1. mapWith mapWith(i => i*10)((a,b) => b+2) (拿到分区号)(a是每次取到的RDD中的元素,b接收i*10的结果) 2. flatMapWith ...
- C++编译错误杂记
目录 2018年12月23日 error: no matching function for call to ××× 2018年12月10日 error: expected ')' before '* ...
- R tutorial
http://www.clemson.edu/economics/faculty/wilson/R-tutorial/Introduction.html https://www.youtube.com ...
- 厦门Uber优步司机奖励政策(1月11日~1月17日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- JavaScript---设计模式之职责链模式
概念 职责链模式是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 链中收到请求的对象要么亲自处理它,要 ...
- (转)Html邮件CSS指南
转载地址:http://www.maildesign.cn/archives/937 分享来自Campaignmonitor非常实用的Html邮件中CSS的支持文档! 他们总结的Html邮件的CSS指 ...