本文参照了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. Vue——关于css过渡和动画那些事

    1. 单元素/组件的过渡transition Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡 条件渲染 (使用 v-if) 条件展示 (使用 v ...

  2. nginx的docker化部署

    nginx的docker化有一个隐藏的坑,就是其默认的配置目录(/etc/nginx)需要先从容器中拷贝出来. 拉取镜像 docker pull nginx 启动容器 docker run -d -- ...

  3. java synchronized 关键字原理

    Synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象.同步静态方法,锁的是当前 Class 对象.同步块,锁的是 {} 中的对象. 实现原理: ...

  4. Git安装配置(Windows)

    下载Git并安装 下载地址:https://git-scm.com/ 安装一般默认即可 配置用户信息 配置之前最好已经有了Github的账号,如果没有可以先去注册一个 安装后打开Git Bash gi ...

  5. Dijkstra算法堆优化(vector建图)

    #include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> ...

  6. 给无符号数赋值负数(有符号数)的理解(unsigned\signedf)

    无符号数赋负数(有符号数)就类似于给字符型变量赋数值(char word=0x56),对相同的值不同的类型解析 //s16:signed short; u16:unsigned short s16 t ...

  7. Lucene第二讲——索引与搜索

    一.Feild域 1.Field域的属性 是否分词:Tokenized 是:对该field存储的内容进行分词,分词的目的,就是为了索引. 否:不需要对field存储的内容进行分词,不分词,不代表不索引 ...

  8. MVC保存二进制到数据库,并显示文件的方法(图片显示)

    通过两篇文章解决了数据库存储图片并显示到View的方法: http://blog.sina.com.cn/s/blog_6da396a50101639u.htmlhttp://www.cnblogs. ...

  9. EL/JSTL-jsp页面更简单的输出方式

    1.EL(Expression Language):表达式语言,用于页面输出 格式:${表达式} EL支持四则运算,关系运算[常用eq来比较字符串或判断相等],逻辑运算 EL访问空间内对象,[类.对象 ...

  10. JDK核心源码(2)

    Java的基础知识有很多,但是我认为最基础的知识应该要属jdk的基础代码, jdk的基础代码里面,有分了很多基础模块,其中又属jdk包下面的lang包最为基础. 我们下面将总结和分析一下lang包下面 ...