【P4lang】什么是P4?

news/2024/11/28 21:53:03/

前言

可以通过此博客了解P4部署硬件的流程以及编程结构,对重要的match-action部分内容进行了补充。

本文目录

  • 前言
  • P4语言
  • P4架构模型
  • P4可编程块
  • P4编程举例
    • 头定义
    • 解析器实现
    • 什么是 match-action pipeline?
    • 控制块:table实现
      • key
      • action
      • 其他属性
    • 控制块:apply块实现
  • P4 程序编译和执行
  • 参考资料

P4语言

在这里插入图片描述
在这里插入图片描述

  • P416在P414的基础上降低了语言的复杂度以及提供了核心语言库。
  • 最重要的就是P416引入了P4架构模型,定义给定数据平面存在的所有功能块。

P4架构模型

下面是P4通用架构模型介绍:
在这里插入图片描述

  • 数据包将以流水线的形式被处理,将逐个访问所有块。
  • 所有块分为固定块和可编程块。

在这里插入图片描述
tips:P4部署设备有好几种,每一种的架构细看不太一样,需要根据厂商给的架构模型来设计程序。目前我所了解到的由V1MODLE、PSA、PISA、VSA、TNA。
在这里插入图片描述

  • PISA架构中所有块都是可编程的

P4可编程块

在这里插入图片描述

  • 解析器:一种状态机,标识正在处理的数据包头。
  • 控制块:匹配-动作表、执行检查和验证、解析等。

P4编程举例

头定义

在这里插入图片描述

所有需要使用的协议都需要自定义格式;左边的片段定义了ethernet的头部和ipv4的报头,右上片段自定义了一个协议报头,右下片段可以将所有结构体结合在一个结构体中。

解析器实现

在这里插入图片描述

  • 解析器就像一个状态机,定义每个状态的结构。

什么是 match-action pipeline?

在这里插入图片描述

  • pipeline中每个独立的control块有独立的表

控制块:table实现

在这里插入图片描述

  • 表块分为action和table部分,其中table里面有一个key用于匹配定义条件,action定义相关操作。

补充资料:P4语法(3)Table,Action - 水喵桑 - 博客园 (cnblogs.com)

匹配动作表定义了匹配字段(key)、动作(action)等相关属性,其处理数据包的流程:

  1. 建立其匹配字段key
  2. 数据包中去匹配table中的key中的字段,并获得要执行的"action"。
  3. 执行动作action
    在这里插入图片描述

key

key由一个个表单对组成(e:m),其中e是对应数据包中匹配的字段,而m是一个match_kind常数用来表示匹配的算法。
例如:

key = {hdr.ipv4.dstAddr:lpm;
}

就是以ipv4头的目的地址作为匹配字段,采用的是lpm(最长前缀字段)匹配方式。
p416 core现在提供三种默认的match_kind:

match_kind{    lpm,//最长前缀字段ternary,//三元匹配exact//完全匹配
}

action

table中的action list是列举了该table支持的action类型

  • p4中在table里可以利用action去对封包做出处理,action非常类似于其他高级语言中所示的函数,抽象程度可以很高,并且表现出协议无关的特性,同时也能体现一部分p4的扩展性。
    在这里插入图片描述
  • action可以读取控制平面(control plane)提供的数据进行操作,然后根据action的代码内容影响数据平面(data plane)的工作。

对于action的定义:

action action_name(parameter1,parameter2,……){//语句块
}

p4有提供不少基本操作(Primitive Actions),这些action高度抽象。在p416中,大部分的基本操作被移动到了一些函数库中(arch.p4或者vendor.p4),部分操作依然保留在了core.p4中。另外,更多详细的内容可以在spec查看。

例如,ipv4转发的code:

action ipv4_forward(bit<48> dstAddr,bit<9> port){standard_metadata.egress_spec = port;hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;hdr.ethernet.dstAddr = dstAddr;hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}

其他属性

p416提供了一些预设的其他属性:

  • default_action:当table miss的时候执行的动作。
  • counters:计数器
  • size:table大小
  • implementation:指定table实际运作方式,这部分通常取决于架构,例如v1model中action profile提供了通过hash的方式随机选择一个action profile member去执行。
  • const entries:预设的table entry,在编译阶段会写到编译好的档案中。

控制块:apply块实现

在这里插入图片描述

  • 每个控制块包含一个apply子块,定义数据包处理中那个表会被使用以及应用的顺序。
  • 示例中的代码就是定义了ecmp_group和ecmp_nhop两个表的使用及顺序。

P4 程序编译和执行

在这里插入图片描述

  1. 检查设备符合的模型架构,了解模型功能以及限制
  2. 编写完整的P4代码
  3. 使用设备制造商提供的编译器编译P4代码
  4. 编译器将代码编译成特定的二进制文件,该二进制文件被加载到目标设备。
  5. 控制平面软件管理和控制由P4定义的数据平面,例如使用一些开源软件作为终端控制器。

参考资料

  1. 【P4可编程】ONF2021 P4Workshop-从四个维度看P4可编程交换机_哔哩哔哩_bilibili
  2. P416 Programming for Intel Tofino Using Intel P4 Studio - Vladimir Gurevich & Andy Fingerhut, Intel - YouTube
  3. P4 programming language - introduction to network programming with P4 - YouTube
    Note:主要来源于第三个视频,讲的很好,适合浅显了解。深入了解建议直接看p4官网和官方库。

http://www.ppmy.cn/news/179986.html

相关文章

linux 找回root密码(CentOS7.6)

linux 找回root密码(CentOS7.6) 首先&#xff0c;启动系统&#xff0c;进入开机界面&#xff0c;在界面中按“e”进入编辑界面。如图 2. 进入编辑界面&#xff0c;使用键盘上的上下键把光标往下移动&#xff0c;找到以““Linux16”开头内容所在的行数”&#xff0c;在行的最后…

连接显示器与计算机主机的接口电路是,液晶显示器VGA模拟输入接口电路

VGA模拟输入接口电路的工作过程如下&#xff1a; 由显示器VGA接口1、2、3脚接收到的R、G、B信号&#xff0c;经双向二极管D12、D11、D10限幅&#xff0c;R31、R30、R29三个电阻进行阻抗匹配&#xff0c;由C7、C10、C14耦合到主控芯片U4(CM5 126)进行A&#xff0f;D转换等处理(该…

基于OpenGL的雷达P显的系统设计与仿真 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码

基于OpenGL 开发的雷达P显 可以设置各种参数 源码下载链接 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码-C文档类资源-CSDN下载

Virtual Display Manager(windows虚拟显示器软件)官方中文版V3.3.2.44650 | Win7/win10虚拟显示器下载

Virtual Display Manager 是一款非常实用的Windows虚拟显示器软件&#xff0c;通过附加虚拟显示器的便利性来补充您现有的单显示器或多显示器系统&#xff0c;这些显示器可以使用现有硬件共享现有的物理屏幕&#xff0c;适用于任意数量的物理显示器&#xff0c;并且可针对每个物…

台式计算机屏幕出现数字模拟,电脑显示器黑屏左上角显示数字模拟什么回事

电脑显示器黑屏左上角显示数字模拟什么回事 电脑显示器黑屏左上角显示"数字模拟"什么回事呢?有什么解决方法呢?下面一起来看看! 故障现象&#xff1a; 电脑使用几年了&#xff0c;最近总是出问题&#xff0c;开机后显示器屏幕只显示“数字/模拟”几个字&#xff0c…

6915. 【2020.12.02提高组模拟】显示器(display)

Description 你可能很熟悉的 7 段显示器&#xff0c;它被广泛用于各种设备上显示数字&#xff0c;如手表或计算器。由于其简洁、直观及美观&#xff0c;这种设计已被世界各国所接受。尽管如此&#xff0c;年轻的 Soaring 反对 7 段式设计&#xff0c;并声称仅使用 5 段显示器&a…

模拟彩票,双色球

package cp.xql;import java.text.DecimalFormat; import java.util.Scanner;public class Demo {public static Integer[] cache; //缓存产生的彩票号码public static String[] lottynum; //把自选或机选产生的号码格式化时public static String[] pincNum; //开奖彩…