p4tutorials-Implementing a Control Plane using P4Runtime

P4Runtime参照P4Runtime--基于mininet和bmv2环境的解析 - forestj - 博客园 (cnblogs.com)

目录

一 实验简介

二 实验步骤

1.创建拓扑

2.运行脚本mycontroller.py下发流表项

3.测试h1和h2之间连通性

三 实验拓展

一 实验简介

在本练习中,我们将使用P4Runtime将流表项发送到交换机,而不是使用交换机的CLI。我们将构建与basic_tunnel练习中使用的相同的P4程序。P4程序已重命名为advanced_tunnel。P4程序中还增加了两个计数器(ingressTunnelCounter, egressTunnelCounter)和两个新动(myTunnel_ingress, myTunnel_egress)。本次实验将使用脚本文件mycontroller.py和p4runtime_lib目录中的几个辅助库来创建主机1和主机2之间的通道通信所需的表项。

二 实验步骤

1.创建拓扑

首先编译新的P4程序,启动网络,使用它来安装一些规则

make run

注:这里我使用make run命令创建好网络拓扑结构后执行h1 ping h2操作后发现是ping不通的,因为没有下发流表项的匹配规则。

2.运行脚本mycontroller.py下发流表项

P4程序定义了一个包处理管道,但是每个表中的规则由控制平面插入。在本实验中,实现我们的控制平面,而不是像在前面的练习中那样安装静态表项,P4程序还定义了开关管道和控制平面之间的接口。因此我们这里需要实现mycontroller.py中的TODO部分内容

mycontroller.py文件是一个基本的控制器平面,执行以下操作:

1.为P4Runtime服务建立到交换机的gRPC连接。
2.将P4程序推送到每个交换机。
3.为h1和h2之间的两条隧道写入隧道入和隧道出规则。
4.每2秒读取隧道入口和出口计数器。

在本练习中,还需要与p4runtime_lib目录中的一些类和方法进行交互。以下是该目录中每个文件的摘要:

  • helper.py

包含用于解析p4info文件的P4InfoHelper类。
提供实体名称与ID号之间的转换方法。
构建P4Runtime表项的P4程序相关部分。

  • switch.py

包含SwitchConnection类,该类获取gRPC客户端存根,并建立到交换机的连接。
提供构建P4Runtime协议缓冲区消息并进行P4Runtime gRPC服务调用的帮助器方法。

  • bmv2.py

包含Bmv2SwitchConnection,它扩展了SwitchConnections,并提供了特定于bmv2的设备负载来加载P4程序。

  • convert.py

提供方便的方法,将友好的字符串和数字编码和解码为协议缓冲区消息所需的字节字符串。
由helper.py使用.

导入P4Runtime库

sys.path.append(
    os.path.join(os.path.dirname(os.path.abspath(__file__)),
                 '../../utils/'))
import p4runtime_lib.bmv2
from p4runtime_lib.error_utils import printGrpcError
from p4runtime_lib.switch import ShutdownAllSwitchConnections
import p4runtime_lib.helper

写入隧道规则

(1) Tunnel Ingress Rule 入接口规则

ipv4_lpm表中入口交换机上的隧道进入规则将流量封装到指定ID的隧道中

# 1) Tunnel Ingress Rule
    table_entry = p4info_helper.buildTableEntry(
        table_name="MyIngress.ipv4_lpm",
        match_fields={
            "hdr.ipv4.dstAddr": (dst_ip_addr, 32)
        },
        action_name="MyIngress.myTunnel_ingress",
        action_params={
            "dst_id": tunnel_id,
        })
    ingress_sw.WriteTableEntry(table_entry)
    print("Installed ingress tunnel rule on %s" % ingress_sw.name)

(2)Tunnel Transit Rule 转发规则

### 关于P4编程教程 对于希望深入了解P4编程寻找相关教程的学习者来说,存在多种资源可以利用。当前已有的中文资料主要集中在对P4开源代码库中的tutorial部分进行流程上的描述,而较少涉及详细的网络协议及程序原理分析[^1]。 #### P4 Tutorial 库简介 有一个专门为初学者准备的快速上手系列,旨在帮助新手更高效地掌握如何使用P4编写自定义的数据平面应用程序。此系列假设读者已经熟悉了《P4: Programming Protocol-Independent Packet Processors》这篇论文的内容,因为这被认为是理解P4的基础。 #### 实验环境搭建与工具链介绍 在具体的实践中,比如`Basic Forwarding`实验案例中,所使用的组件包括但不限于: - **P4 Program**: `basic.p4` - **Compiler**: `p4c` - **Architecture Model**: V1Model - **Target Device**: BMv2 Software Switch - **Control Plane API**: P4Runtime 在这个过程中,`basic.p4`会被编译成JSON格式(`basic.json`)通过BMv2加载至目标设备;与此同时,还会创建一个`.p4info.txt`文件来记录表项、键值和动作等信息供后续配置控制面时调用[^2]。 #### 获取更多官方文档和支持材料 除了上述提到的具体实例外,还可以访问[tutorials](https://gitcode.com/gh_mirrors/tutorials/tutorials)[^3]获取更多的练习项目和技术支持文档。这些资源不仅有助于加深对概念的理解,还能提供实际操作的机会以便更好地巩固所学知识。 此外,在完成某些特定任务之后(如编译运行P4程序),可以通过SSH连接到远程服务器来进行进一步的操作测试,借助SFTP下载日志文件以备审查之需[^4]。 最后值得注意的是,《Makefile符号表示》这篇文章提供了有关构建过程中的自动化脚本解析,这对于想要深入研究背后机制的人来说是非常有价值的参考资料[^5]。 ```bash ssh user@remote_host cd /path/to/p4_project ./run_exercise.py --target bmv2 -- exercise basic_tutorial ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值