P4环境搭建

2023-11-01

P4的运行环境包括以下组件:

protobuf
p4c
behavioral-model
grpc
PI
mininet

一、安装全新的Ubuntu
在vmware上安装Ubuntu的过程这篇文章就不写了,大伙可以找其他博主的教程。我建议的版本是Ubuntu 20.04。

我要强调的最重要的一点是:Ubuntu最好是新安装的!!!因为如果你之前在Ubuntu上安装过相关组件,那路径可能被污染了,而这个教程中安装脚本好像是会指定路径下载的,到时候可能会出现版本冲突或无法识别等一系列奇怪问题。

所以我建议有条件最好重新安装个虚拟机,从头开始!再不济也要保证虚拟机上没有安装过P4的相关组件的历史。

二、安装运行环境
首先保证代理在虚拟机中运行起来了。这个非常重要!!!

然后在根目录下执行以下命令:

$ sudo apt install git
$ git clone https://github.com/jafingerhut/p4-guide
$ ./p4-guide/bin/install-p4dev-v5.sh |& tee log.txt
其中install-p4dev-v5.sh需要根据Ubuntu版本的不同而改变,版本关系如下:


三、测试
在以上命令运行完后我们需要对组件进行测试。github提供的tutorials教程是个很好的选择。

 

测试步骤如下:

$ git clone https://github.com/p4lang/tutorials
$ cd tutorials/exercises/basic
$ cp solution/basic.p4 basic.p4
$ make run
现在你应该看到一个Mininet命令提示符。尝试在拓扑中的主机之间进行ping操作:

mininet> h1 ping h2
mininet> pingall
ping会失败,因为每个交换机都是根据basic.p4进行编程的,它会在到达时丢弃所有数据包。我们需要扩展此文件,以便它转发数据包。这是后面要做的工作,只要出现mininet就是成功啦!

在mininet命令行输入exit退出每个xterm和Mininet命令行。然后,停止mininet:

make stop
然后要删除所有pcap、构建文件和日志,执行以下操作:

make clean
如果以上步骤都没问题,那么恭喜你成功安装P4啦!!!
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P4环境搭建 的相关文章

  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • 从远程获取上个月在 git 分支上提交的文件列表

    我正在尝试获取上个月在 master 分支的 github 存储库上更改的所有文件的列表 我的本地克隆没有可以追溯到那么远的日志 因此当我运行以下命令时 git diff stat 1 month ago 我收到一条警告消息和一小部分更改
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 仅将单个文件放入 git 子模块/存储库中

    我在 git 源代码存储库中有一个特定文件 其中包含生产设置 密码 我想限制此文件 以便只有制作团队的成员才能看到它 但是 我想控制它的变化 我考虑过在 git 中使用子模块 然后限制对新存储库的访问 然而 git 似乎需要子模块的整个子目
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • 无法从另一台计算机访问 git 分支

    基本上我看不到另一台计算机上的分支 我跑 git branch a 在家用电脑上我得到 C learn ror sample app filling in layout gt git branch a filling in layout m
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na

随机推荐

  • 将jar包打包成镜像:Dockerfile 看这一篇就够了

    新建一个目录 该目录下 Dockerfile文件 默认文件名称 内容下面所示 对应的jar包 penjdk 8 jre 为基础镜像 来构建此镜像 可以理解为运行的需要基础环境 FROM openjdk 8 jre WORKDIR指令用于指定
  • unity使物体运行时自动旋转

    using System Collections using System Collections Generic using UnityEngine public class jiaobeng MonoBehaviour public f
  • 网络安全难学吗?前途怎么样?

    会者不难 网络安全是比较复杂的 涵盖网络的各个方面 入门简单 但是要深入学习相对比较难一些 还是要通过各种方法去系统的学习网络安全知识 掌握网络安全技能 才能比较容易的进入到网络安全行业 发展前景 根据相关调研今年上半年 网络安全产业人才需
  • 微信小程序服务器里有数据库吗?,微信小程序云开发服务端数据库API 在集合上新增记录...

    Collection add 在集合上新增记录 函数签名如下 function add options object Promise 参数说明字段名类型必填默认值说明dataObject是新增记录的定义 返回值说明 Promise 的 re
  • Java 概述

    目录 1 Java 语言背景介绍 2 Java 语言跨平台原理 3 JRE 和 JDK 4 JDK 的下载和安装 1 Java 语言背景介绍 语言 人与人交流沟通的表达方式 计算机语言 人与计算机之间进行信息交流沟通的一种特殊语言 Java
  • MIPI CSI接口调试方法:时序调试

    关于的mipi 的规范 协议及物理接口定义 网上文章确实比较多 想必也是每个想要了解mipi的人首先会阅读的 本人也是其中之一 所以这篇短文主要是想记录自己在调试mipi这个接口时遇到的一些问题 1 clock lane continue
  • Linux内核4.14 LTS发布:那些最新最好的功能特性

    9月份 Linux内核开发人员格雷格 克罗 哈特曼 Greg Kroah Hartman 在其个人博客上证实 Linux内核4 14是下一个LTS内核 这个内核将至少被支持两年 最近这个年限被延长到了六年 因此 Linux 4 14的开发周
  • 知识图谱构建过程

    公众号 写bug的程旭源 知识图谱 是结构化的语义知识库 用于迅速描述物理世界中的概念及其相互关系 通过将数据粒度从document级别降到data级别 聚合大量知识 从而实现知识的快速响应和推理 1 知识图谱的基本单位 是 实体 Enti
  • PostgreSQL导出数据到sql文件

    打开cmd 进入数据库名ql安装路径 可以使用 pg dump help命令查看帮助 C Program Files 数据库名QL 9 2 bin gt pg dump h 数据库地址 主机名 p 端口号 U postgres column
  • Nginx(三)源码剖析之内存池,与内存管理

    Nginx源码剖析之内存池 与内存管理 作者 July dreamice 阿波 yixiao 出处 http blog csdn net v JULY v 引言 Nginx 发音同 engine x 是一款轻量级的Web 服务器 反向代理服
  • MAC 下访问EBS Java form

    背景 学习Oracle EBS系统 在最新的 2018年9月 Mac OS 10 13 6下无法使用Safari浏览器打开form 在网上找了很久 也试了很多 都不管用 最终通过重装jre 旧版Chrome 或 Firefox 搞定 安装j
  • 为什么Go是一种设计糟糕的编程语言

    好吧 我承认这个标题有点放肆 我多告诉你一点 我爱肆意妄言的标题 它能够吸引注意力 不管怎样 在这篇博文中我会试图证明 Go 是一个设计得很糟糕的语言 剧透 事实上它是 我已经摆弄 Go 有几个月了 而且 我想我在六月某个时候运行了第一个
  • 正则表达式(校验规则)

    正则表达式 说明 abc a b c中任意一个字符 abc 除了abc的任意一个字符 a z a z中任意一个字符 a zA Z0 9 a zA Z0 9中任意一个字符 a z bc a z中除了bc的任意一个字符 知识点案例 String
  • 剑指Offer - 面试题6:从尾到头打印链表

    题目 输入一个链表的头节点 从尾到头反过来打印出来每个节点的值 链表节点定义如下 struct ListNode int m nKey struct ListNode m pNext 思路 栈方法 从尾到头完全符合栈的特性 我们直接拿栈来存
  • 402. Remove K Digits

    402 Remove K Digits Given a non negative integer num represented as a string remove k digits from the number so that the
  • 【知识点总结】电力电子技术——第二讲

    电力电子技术 第二讲 总结内容 逆变电路 电压型逆变电路 电流型逆变电路 直流斩波器 Buck电路 Boost电路 升降压斩波电路 Cuk斩波电路 Sepic斩波电路 Zeta斩波电路 扩展 电赛 双向DC DC电路 隔离电源 多重斩波电路
  • GDB调试器常用命令

    1 l命令 list 列出所有程序源码 2 b命令 break 用于设置断点 break main 表示在 main 函数处设置断点 break 11 在第 11 行设置断点 3 c命令用于运行到断点处 输入 c 命令程序就会运行 直到下一
  • 来聊聊DenseNet及其变体PeleeNet、VoVNet

    关注公众号 AI算法修炼营 选择 星标 公众号 精选作品 第一时间送达 前面 基础积累系列的文章讲了ResNet网络及其变体 具体可以参考文章 来聊聊ResNet及其变体 ResNet通过前层与后层的 短路连接 Shortcuts 加强了前
  • Pytorch清空显存缓冲区(torch.cuda.empty_cache)

    torch cuda empty cache 因为PyTorch是有缓存区的设置的 意思就是一个Tensor就算被释放了 进程也不会把空闲出来的显存还给GPU 而是等待下一个Tensor来填入这一片被释放的空间 所以我们用nvidia sm
  • P4环境搭建

    P4的运行环境包括以下组件 protobuf p4c behavioral model grpc PI mininet 一 安装全新的Ubuntu 在vmware上安装Ubuntu的过程这篇文章就不写了 大伙可以找其他博主的教程 我建议的版