本文参照了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编程环境搭建的更多相关文章

  1. P4编程环境搭建遇到的问题与解决方法

    在经历了无数的折腾之后,算是折腾,最后采用的是陈翔学长的脚本加上可爱的shell调整装好的. 链接:p4Install 也许是ubuntu18.04的问题,也有可能是我自己把这个系统折腾的有点杂乱的原 ...

  2. Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

    此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...

  3. Qt在Windows下的三种编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  4. Qt在Mac OS X下的编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

  5. Qt4.8在Windows下的三种编程环境搭建

    Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...

  6. unix网络编程环境搭建

    unix网络编程环境搭建 网络编程 环境 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xz ...

  7. ArduinoYun教程之Arduino编程环境搭建

    ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...

  8. Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

  9. Qt在Windows下的三种编程环境搭建(图文并茂,非常清楚)good

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

随机推荐

  1. Kali Basic Configuration

    1:Kali Version root@kali-node01:~# cat /etc/os-release PRETTY_NAME="Kali GNU/Linux Rolling" ...

  2. .net第三方数据库物理卡号同步功能实现

    本地数据库用的是Oracle,第三方数据库是SQL Server,连接字符串保存在web.config里面. 第三方数据库为增量,每次读取要记录读取的最大位置.我是保存在本地txt文件里面. //保存 ...

  3. 10种简单的Java性能优化

    你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了很多简单方便的性能优化小贴士以及扩展程序性能的技巧. 最近“全网域(Web Scale)”一词被炒得火热,人 ...

  4. django路由基本使用-6

    路由定义位置 django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的. urls.py 文件是路由解析的入口. from django.conf.urls import ...

  5. Python学习笔记:第3天 字符串的操作

    目录 1. python的数据类型 2. int类型的操作 3. bool类型 4. 字符串的操作 5. for循环 1. python的数据类型 int 整数 str 字符串.一般不会用字符串保存大 ...

  6. java 代理模式(模拟代购)

    interface Isubject{ void buyAJ(); } class realsubject implements Isubject{ public void buyAJ(){ Syst ...

  7. Batch Normalization 批量标准化

    本篇博文转自:https://www.cnblogs.com/guoyaohua/p/8724433.html Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效 ...

  8. onenet基础通信套件加B300移植

    1. 遇到的第一个问题,说是少了文件,但是明明有这个文件的啊? scons: warning: Ignoring missing SConscript 'build_scons\arm\Hi2115\ ...

  9. 第十五届北京师范大学程序设计竞赛现场决赛题解&源码(A.思维,C,模拟,水,坑,E,几何,思维,K,字符串处理)

    #include <bits/stdc++.h> using namespace std; int main() { int T,n,a,b; while(cin>>T) { ...

  10. 05-JVM对象探秘

    一.对象的内存布局         以Hotspot虚拟机为例,对象在内存中的结构可以分为三部分:对象头(header).实例数据(instance data).对齐填充(padding). 1.1. ...