P4 Runtime和p4 info
p4runtime
P4 Runtime是一套基于Protobuf以及gRPC框架上的协议,通过P4runtime,SDN控制器可以控制能够支援p4的设备。
p4runtime当前由p4 API workgroup指定,主要来自于barefoot公司。
barefoot公司,其还设计了第一款原生支持p4的芯片——tofino,以及基于tofino的交换机——wedge 100bf-65x。
控制器也能通过p4runtime去修改装置上的pipeline。与openflow不同的除了具备高度弹性的信息格式意外,控制器与设备之间连接的顺序也不同,以往openflow是需要控制器开始特定的接口,然后设备才能连上控制器。
p4runtime则是在设备上开始gRPC server,由控制器联系设备,因此设备上会有一个代理人Agent负责处理由控制器来的连接。

关于p4runtime是通过一个protobuf档案定义出来的,最新的定义现在在github上。
https://github.com/p4lang/p4runtime/blob/master/proto/p4/v1/p4runtime.proto
gRPC除了提供单向的RPC(RPC就是远程过程调用)界面以外,还提供双向的stream channel,这个就是双向流式调用,举例来说有时候我们会希望switch做出packet-in/out的动作,这部分就需要stream channel,p4runtime也提供了下相关信息格式来使用。
p4 info
p4 info就是p4的infomation。
原则上在编译阶段,前端的编译器除了将原始的p4档案编译成中间码(IR)以外,也会将名称与ID讯息转换成p4 info档案,p4 info档案会和编译好的p4 binary(bmv2->json,Tofino->bin)一起上传给设备上的Agent,p4 info也会导入给控制器供控制器去查询。

p4源码转换成p4 info如下:

控制器取得p4 info之后,可以通过p4 info来产生p4 runtime的信息。

P4 Runtime和p4 info的更多相关文章
- Run P4 without P4factory - A Simple Example In Tutorials.
前言 本文是我运行P4社区于Github开源教程Tutorials中的P4 SIGCOMM 2015 Tutorial一些实战小结,Github链接: Github. 测试的例子:P4 SIGCOMM ...
- A Simple Note on "P4FPGA: A Rapid Prototyping Framework for P4"
论文:P4FPGA: A Rapid Prototyping Framework for P4 Github:https://github.com/p4fpga Reference: Han Wang ...
- P4编程环境搭建
本文参照了sdnlab上相关文章的搭建推荐. 使用的系统环境为ubuntu 18.04 组件介绍 主要安装五个组件: BMv2:是一款支持P4编程的软件交换机 p4c:是一款P4的编译器 PI:是P4 ...
- 使用p4c将P4 14代码转换为16代码
参考: [Question] How to make conversion between P4 14 and P4 16? 使用p4c将P4 14代码转换为16代码: $ p4test --p4v ...
- Future Works on P4
Future Works on P4 P4 and NV: MPvisor, Hyper4, HyperV, Flex4 P4 and NFV P4 and Network Cache P4 and ...
- 2017年P4中国峰会北京站 会议小结
2017 P4 中国峰会 北京 本次会议依然侧重介绍P4,并highlight P4的benifit,大致分为以下几类: 1.学术界 - 未来网络的发展,为何提出P4技术? 未来网络和实体经济.其他学 ...
- 【P4语言学习】basic_routing.p4
headers.p4 /* Copyright 2013-present Barefoot Networks, Inc. Licensed under the Apache License, Vers ...
- 用P4对数据平面进行编程
引言 SDN架构强调了对控制平面的可编程,数据平面只负责转发,导致数据平面很大程度上受制于功能固定的包处理硬件. P4语言的特性: 目标无关性:P4语言不受制于具体设备,所有可编程芯片都可以使用P4编 ...
- P4语法(5) Package
Package 对于package这个概念,类似于将一个框架中各组成部件以一个规律进行打包,以正常运转. 基于一个架构去编写一个新的pipeline的时候,需要先了解初始化的时候需要提供那些东西,pa ...
随机推荐
- CentOS7.6离线安装JDK1.8
卸载CentOS自带的openJDK: 查看openJDK命令:rpm -qa|grep java 结果: java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el ...
- vrrp_script不起作用解决方案
我这里主要是因为windows转码造成的:将可执行的check_nginx.sh检测脚本内容复制到U盘,然后插入内网windows,将内容用nodepad++打开,复制,粘贴到服务器的check_ng ...
- 偏前端 - ios下position:fixed失效的问题解决
如图,考虑到用户体验的问题,一般页面的下方提交按钮都会随着固定在页面上,方便用户点击. 有些人肯定就说了,这还不简单,position:fixed: 但是在ios这个坑货系统上这个position:f ...
- 将变量做为一个对象的key,push新增进一个数组
var orgnIdListValue=["0","2"]; function arrayField(a,b){ let arrayMes=[]; for(va ...
- swiper在vue中正确的使用方法
1.安装swiper,执行npm install vue-awesome-swiper --save命令 2.在main.js中添加下面三行 import 'swiper/dist/css/swipe ...
- mysql 基本的操作数据库命令
注意:命令操作都是分号结尾 1 .连接mysql: mysql -u 用户名 -p 密码 2.展示所有数据库: show databases; 3.进入数据库: use 数据库名字; 4. ...
- 我们比较常见的PHP实现openSug.js参数调试
这是一款利PHP对百度搜索下拉框提示免费代码实现参数配置调试的程序源代码. 由想要对网站进行搜索下拉调试的站长朋友们进行方便.快速的效果演示,具体参考下面的PHP代码. 如何使用? 请新建一份PHP文 ...
- 字符编码——python学习
python学习—字符编码 例如汉字“中” 十进制:20013 二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六进 ...
- Fiddler抓取手机APP数据包
第一步:下载神器Fiddler,下载链接: http://w.x.baidu.com/alading/anquan_soft_down_ub/10963 下载完成之后,傻瓜式的安装一下了! 第二步:设 ...
- BurpSuite—-Target模块(目标模块)
Target功能 目标工具包含了SiteMap,用你的目标应用程序的详细信息.它可以让你定义哪些对象在范围上为你目前的工作,也可以让你手动测试漏洞的过程,Target分为site map和scope两 ...