文章目录

  • 步骤一:运行不完整代码
  • 步骤二:开始实现隧道转发
  • 步骤三:运行解决方案

参考: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相关推荐

  1. P4学习笔记(一)初识P4

    P4学习笔记(一)初识P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 P4简介 P4提供的核心抽象 P4的优点 本系列我学习P4的学习笔记,很多是翻译自官方文档, 很多不是很准确的地方,建议 ...

  2. P4学习笔记(三)P4编程语言简介

    文章目录 P4学习笔记(三)P4编程语言简介 基本数据类型 Typedef 声明和初始化变量 元数据 参考资料 P4学习笔记(三)P4编程语言简介 上图展示了P4语言主要结构,下面简单讲解一下P4的基 ...

  3. P4学习笔记(二)一个简单P4交换机实现

    P4学习笔记(一)初始P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 1. 架构模型 2.预定义模块详细描述 2.1 Arbiter 模块 2.2 Parser runtime 模块 2.3 ...

  4. SONiC+P4实践——P4Runtime下发ACL表项

    转载请表明出处 注:SONiC系统为vs版本 Part1:实现外部宿主机与SONiC的网络连通 步骤 1:打开一个ubuntu系统安装kvm及其依赖 (1)查看CPU是否支持虚拟化 egrep -c ...

  5. P4语言——p4runtime

    练习三:使用p4runtime 使用p4runtime而不是json文件控制交换机的table. 控制平面代码 #!/usr/bin/env python2 import argparse impor ...

  6. P4 学习笔记(1)-- P4程序的构成、基本组件

    首部(Headers) 解析器(Parsers) 表(Tables) 动作(Action) 流控制程序(Controller) 我们在所有的P4程序中(.p4文件),都可以发现其拥有5个基本组件: 首 ...

  7. 六年级下计算机教案封面,六年级下册信息技术教案21279(43页)-原创力文档

    附件 2 六桶镇 2017~2018 学年第一学期单元集体备课教学计划表 年级学 主备教师 科备课 六 主备教师 陈义向 2018年 2 月 27 日 初备时间 组 备课组 李树成 集体研讨后修 年 ...

  8. 论文研读-基于种群分布的两阶段自适应知识迁移多目标进化多任务

    论文研读-基于种群分布的两阶段自适应知识迁移多目标进化多任务 Multiobjective Evolutionary Multitasking With Two-Stage Adaptive Know ...

  9. 分享12张企业数据中台架构图

    一.技术中台架构图 中台概念出现之前,在信息化模式上,前端为支撑业务的应用端,后端为各个应用系统,为前端用户,如:客户.供应商.伙伴.社会,提供服务,但随着市场.用户需求.业务的多变性,底层僵硬的应用 ...

最新文章

  1. 聊聊那些令人惋惜的车模
  2. python3文件下载-python3获取文件中url内容并下载代码实例
  3. (2)双机调试+符号文件
  4. TurboMail邮件系统通过涉密信息系统产品认定
  5. [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
  6. Hardcoded string 下一步, should use @string resource警告 (转载)
  7. Android的手势交互
  8. 多个Activity关闭问题
  9. leetcode329. 矩阵中的最长递增路径
  10. 12. OD-XOFTSPY监控系统软件,通过windows API进行破解(双重验证,聪明的加密师)
  11. [Origin]图像属性:画图时修改直线的起点和终点、随图层和坐标变化、多y轴图独立编辑线条属性
  12. 【Flink】 Flink 应用资源分配问题排查思路
  13. python 生成excel像素画_【译】只用 CSS 就能做到的像素画/像素动画
  14. 什么行业适合年轻人自主创业
  15. iphone怎么查看wifi密码_WiFi密码忘了怎么办?一秒找回密码
  16. 两轮差速驱动机器人运动模型及应用分析(图片版)
  17. OpenStack Rocky Octavia 的实现与分析(零)架构简介
  18. 为什么训练时测试准确率大幅度波动_Nature Mach Intell|类药性预测准确率有极限...
  19. 魔兽世界服务端源码各个重要文件详细情况说明开服一条龙
  20. 第六章 XML 拨号方案

热门文章

  1. Linux下清理日志及自动清理
  2. ETM地形编辑DEMO运行时出错问题
  3. spring data jpa 与 jpa的区别
  4. walking机器人入门教程-硬件清单
  5. 网络安全基础:公钥密码体制
  6. vmware搭建多台虚拟机-桥接模式
  7. Leiden算法介绍
  8. 计算机图形学在卫星的应用,计算机图形学课程设计教程-反走样卫星
  9. 多种开关电源MOS管驱动电路详细解析
  10. keystone的详细功能