P4学习——p4runtime
文章目录
- 步骤一:运行不完整代码
- 步骤二:开始实现隧道转发
- 步骤三:运行解决方案
参考:https://blog.csdn.net/qq_33681684/article/details/123646883
在这个练习中,我们将使用P4Runtime向交换机发送流条目,而不是使用交换机的CLI。我们将基于您在basic_tunnel练习中使用的相同的P4程序进行构建。P4程序已被重命名为advanced_tunnel。p4和增加了两个计数器(ingressTunnelCounter, egressTunnelCounter)和两个新动作(myTunnel_ingress, myTunnel_egress)。
您将使用starter程序mycontroller.py和p4runtime_lib目录中的几个助手库来创建主机1和主机2之间的通道通信所需的表条目。
关于控制平面的说明
P4程序定义了一个包处理管道,但是每个表中的规则是由控制平面插入的。在本例中,mycontroller.py实现了我们的控制平面,而不是像我们在前面的练习中那样安装静态表条目。
重要提示:一个.p4的文件会编译生成一个Info文件里面是含有table id等信息是控制平面下发具体规则的依据;再生成一个配置文件(格式根据target而定)下发数据平面作为包处理的pipeline。控制平面还通过p4runtime对数据平面管理。
步骤一:运行不完整代码
- sudo make run (编译advanced_tunnel.p4,启动mininet实例搭建拓扑,为hosts分配IP)
- h1 ping h2,此时还不能正常通信,因为此时交换机上还没有任何规则,所以不能够收到任何的回复
- 打开另一个终端,运行mycontroller.py。这将安装advanced_tunnel。p4在交换机上编程并加载tunnel ingress rules。该程序每2秒打印一次tunnel ingress 和 egres计数。您应该看到s1的tunnel ingress计数器在增加:
因为s1和s2之间的transit rules还没有,所以只能看到s1 进入隧道计数。
- Ctrl-C 停止mycontroller.py,完成switches间的流量基于隧道ID转发的rules。打开mycontroller.py,完成TODO部分。目前每个交换机都在根据目的IP地址将流量映射到隧道中。目标是编写基于隧道ID在交换机之间转发流量的规则。
步骤二:开始实现隧道转发
mycontroller.py 是一个基础的控制平面,它会做以下操作:
1.为P4Runtime服务建立到switches的gRPC连接;
2.Pushes the P4 program to each switch.推送P4程序到每台switches;
3.为h1到h2间的两个隧道编写规则,h1到h2隧道ID 100,h2到h1隧道ID 200;
4.每2秒钟读取一次tunnel ingress和egress 的计数。
工作将是在writeTunnelRules函数中编写隧道传输规则,该函数将匹配隧道ID并将数据包转发到下一跳。
在实验中,会使用p4runtime_lib下的一些类和方法:
helper.py
包含用于解析p4info文件的 P4InfoHelper 类。
提供实体名称与ID的转换方法。
构建P4Runtime table的P4程序相关部分。
switch.py
包含SwitchConnection类,该类获取gRPC客户端stub,并建立到交换机的连接。
提供helper方法,用于构造P4Runtime协议缓冲区消息并进行P4Runtime gRPC服务调用
bmv2.py
包含Bmv2SwitchConnection,它扩展了SwitchConnections,并提供BMv2特定的设备载荷以加载P4程序。
convert.py
提供便捷的方法,将friendly字符串和数字编码、解码成协议缓冲区消息所需的字节字符串。
Helper.py 使用
步骤三:运行解决方案
打开另一个终端执行python文件,控制平面会把rules下发到数据平面。这时会看到计数增长
./my_controller.py
这时通过命令行登录s1,看下switch的转发规则如下:
simple_switch_CLI --thrift-port 9090
目的IP10.0.2.2/32进行LPM匹配,送进隧道100(显示的64是十六进制)。
精确匹配隧道ID100,送到接口2。
隧道ID是200(显示c8是十六进制),封装08–0111的h1的Mac,送到接口1。
P4学习——p4runtime相关推荐
- P4学习笔记(一)初识P4
P4学习笔记(一)初识P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 P4简介 P4提供的核心抽象 P4的优点 本系列我学习P4的学习笔记,很多是翻译自官方文档, 很多不是很准确的地方,建议 ...
- P4学习笔记(三)P4编程语言简介
文章目录 P4学习笔记(三)P4编程语言简介 基本数据类型 Typedef 声明和初始化变量 元数据 参考资料 P4学习笔记(三)P4编程语言简介 上图展示了P4语言主要结构,下面简单讲解一下P4的基 ...
- P4学习笔记(二)一个简单P4交换机实现
P4学习笔记(一)初始P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 1. 架构模型 2.预定义模块详细描述 2.1 Arbiter 模块 2.2 Parser runtime 模块 2.3 ...
- SONiC+P4实践——P4Runtime下发ACL表项
转载请表明出处 注:SONiC系统为vs版本 Part1:实现外部宿主机与SONiC的网络连通 步骤 1:打开一个ubuntu系统安装kvm及其依赖 (1)查看CPU是否支持虚拟化 egrep -c ...
- P4语言——p4runtime
练习三:使用p4runtime 使用p4runtime而不是json文件控制交换机的table. 控制平面代码 #!/usr/bin/env python2 import argparse impor ...
- P4 学习笔记(1)-- P4程序的构成、基本组件
首部(Headers) 解析器(Parsers) 表(Tables) 动作(Action) 流控制程序(Controller) 我们在所有的P4程序中(.p4文件),都可以发现其拥有5个基本组件: 首 ...
- 六年级下计算机教案封面,六年级下册信息技术教案21279(43页)-原创力文档
附件 2 六桶镇 2017~2018 学年第一学期单元集体备课教学计划表 年级学 主备教师 科备课 六 主备教师 陈义向 2018年 2 月 27 日 初备时间 组 备课组 李树成 集体研讨后修 年 ...
- 论文研读-基于种群分布的两阶段自适应知识迁移多目标进化多任务
论文研读-基于种群分布的两阶段自适应知识迁移多目标进化多任务 Multiobjective Evolutionary Multitasking With Two-Stage Adaptive Know ...
- 分享12张企业数据中台架构图
一.技术中台架构图 中台概念出现之前,在信息化模式上,前端为支撑业务的应用端,后端为各个应用系统,为前端用户,如:客户.供应商.伙伴.社会,提供服务,但随着市场.用户需求.业务的多变性,底层僵硬的应用 ...
最新文章
- 聊聊那些令人惋惜的车模
- python3文件下载-python3获取文件中url内容并下载代码实例
- (2)双机调试+符号文件
- TurboMail邮件系统通过涉密信息系统产品认定
- [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
- Hardcoded string 下一步, should use @string resource警告 (转载)
- Android的手势交互
- 多个Activity关闭问题
- leetcode329. 矩阵中的最长递增路径
- 12. OD-XOFTSPY监控系统软件,通过windows API进行破解(双重验证,聪明的加密师)
- [Origin]图像属性:画图时修改直线的起点和终点、随图层和坐标变化、多y轴图独立编辑线条属性
- 【Flink】 Flink 应用资源分配问题排查思路
- python 生成excel像素画_【译】只用 CSS 就能做到的像素画/像素动画
- 什么行业适合年轻人自主创业
- iphone怎么查看wifi密码_WiFi密码忘了怎么办?一秒找回密码
- 两轮差速驱动机器人运动模型及应用分析(图片版)
- OpenStack Rocky Octavia 的实现与分析(零)架构简介
- 为什么训练时测试准确率大幅度波动_Nature Mach Intell|类药性预测准确率有极限...
- 魔兽世界服务端源码各个重要文件详细情况说明开服一条龙
- 第六章 XML 拨号方案