首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

P4语言规范》parser详解

前言 为深入研究P4语言相关规范及运行操作使用,本系列文章根据P4.org网站给出的《The P4 Language Specification v1.0.2》[1]内容,并通过我们的运行使用的具体实例和分析汇总...,希望能为大家研究P4提供一点参考。...解析器中解析的过程可以被一个解析图(parser graph)所表示,解析图中所表示的某一个状态(或者说,在P4语言中的某一个解析函数)看做是一个状态节点,每一个状态转换等同于跨越状态节点之间的边界。...在P4语言中,属于最高级别(top level)的值集定义位于解析函数的定义部分之外。值集有一个独立的全局命名空间。 2. 只有已定义的值集才能在解析函数中被引用。 3....(图七:解析函数的巴科斯范式) 1、select函数是目的转移状态选择逻辑的主体,类比于C语言中的switch-case操作;该函数采用了逗号分隔的字段列表(a comma-separated list

1.9K90

P4语言编程详解

在文章《P4:开创数据平面可编程时代》中介绍了P4的架构特性、交换机结构以及P4程序的工作原理,本篇为大家介绍P4语言编码及规范,从编码角度去理解P4程序的工作流程。...(10)tutorials P4语言教程,内含8个教程,覆盖了P4语言中的解析器、动作、状态存储、匹配-动作表、等基础组件。...2.P4语言标准 当前P4语言标准的最新版本为《The P4 Language Specification Version1.1》(以下简称V1.1),目前版本的P4语言编译器已经基本实现了P4语言标准中的绝大部分特性...P4语言中解析器采用有限状态机的设计思路,每个解析器方法视为一种状态。...表8中展示了P4中定义的基本动作。 ? ? 这些动作高度抽象且与协议无关,以实现P4语言处理数据的协议无关性。

6.9K54
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    P4语言编程快速开始

    经过前两篇的P4理论介绍,相信大家已经对P4有个基本的了解了,本片文章为大家带来P4语言编程实战。...2、环境依赖包 P4项目主要由C++和Python语言开发,同时需要对源码进行编译安装,所以需要安装许多环境依赖包。...每个子项目的作用在上篇文章《P4语言编程详解》中已介绍,这里不再赘述。图1中展示了P4项目主要模块的依赖关系,在进行编译安装时可以参考该依赖关系选择安装顺序。...这里需要注意模块依赖图与P4架构图的区别。...在看具体实例之前先回顾一下P4程序定义数据平面的流程: 图3 P4程序定义数据平面流程 这里介绍一下笔者在看P4程序时候的方法,仅供大家参考:首先,从流控制程序(control)开始,查看流水线

    2.3K61

    P4语言规范》Header & Instances详解

    一、前言 为深入研究P4语言相关规范及运行操作使用,本系列文章根据P4.org网站给出的《The P4 Language Specification v1.0.2》[1]内容,并通过我们的运行使用的具体实例和分析汇总...(5)操作符优先级和可结合性 操作符优先级和可结合性语义与C语言语法一致。 不定长字段计算方法: P4通过对值为“*”的字段的使用,来支持从数据报中解析出不定长的首部实例。...但是,如果仅从语言语义的角度来琢磨代码,不能很好的理解P4程序定义底层数据报处理过程的作用;因此作者认为,理解P4程序,不仅仅要从代码语义的角度出发,更要与底层的真实处理流程联系起来,结合去理解。...3.2 首部实例栈 P4支持首部实例栈的概念,它是一种邻近的,相同类型的首部实例的序列。首部实例栈的声明和C语言中的数组类似,声明的关键字是array_instance。...五、字段列表 在某些情况下,用P4语言描述出一个字段列表会使处理过程变得更加方便:比如一个哈希函数,它把这个字段列表作为函数的输入;根据这个字段列表来计算检验和(checksum)。

    1.4K80

    关于P4编程语言的几个误区

    和OpenFlow刚刚面世一样,用于网络设备编程的P4编程语言也存在众多误解。本文的主要目的就是解惑P4编程语言的几个常见误区。...P4语言则是要打破藩篱,让数据平面设备也具备在线实现新功能的能力。...而P4作为一种语言本身就是对网络行为的描述,所以只要能够让传统非可编程网络芯片可以理解由P4定义的转发流水线就能让传统芯片也支持P4定义的行为。...误区四:P4语言是Python一样的高级语言 P4虽然是高级语言但是属于针对特定领域的DSL语言,它和Python等计算机高级语言相比有很大的差别,首先P4语言需要考虑物理资源的限制,P4最终管控的是资源有限的数据平面转发芯片...因此在OpenFlow时代诞生了OpenDaylight和ONOS等SDN控制器项目;P4语言的协议独立意味着不会原生支持任何协议,P4语言只是描述报文头部格式以及程序中需要的协议字段。

    1.6K31

    P4语言,踢馆OpenFlow的SDN新秀

    上周五,由两位SDN大师----来自普林斯顿的Jennifer Rexford和斯坦福的Nick McKeown----共同发起的P4联盟正式对外公布全新的项目主页,详细阐述了P4的目标定位、如何使用P4...P4是一门主要用于数据平面的编程语言,它的名字是根据一篇论文的标题“Programming Protocol-Independent Packet Processors”而来,意思是“与协议无关的数据包处理编程语言...SDN编程语言和库(Frenetic和Pyretic);另外一位斯坦福的Nick McKeown教授更是SDN的缔造者之一,鼎鼎大名的clean slate项目的领军人物。...最重要的是两位教授在P4项目上达成了高度的共识。 P4到底是什么呢?...P4是一种声明式编程语言,它主要用于编程程序以下达指令给数据转发平面的设备(如交换机、网卡、防火墙、过滤器等)如何处理数据包,Jennifer Rexford和Nick McKeown认为P4将会改变传统网络设备的设计方式

    1.4K60

    智能网卡系列三:P4语言的演进简述

    ---- 自从 P4 语言首次在 ACM CCR 文章中提出以来已经有一段时间了。在过去的时间里,该语言已经从提案演变为规范到现在广泛应用在智能网卡等领域。...论文中使用的 P4 程序 DC.p4 可在 P4 github 存储库中找到,我们用它来说明 P4 的特定方面。 如图所示:描述P4语言的开发环境 这个练习给了我们几个教训。...这些语言添加:动作配置文件、新的动作原语以及本文中更详细的几个内容现在是当前 P4 规范的一部分。 总的来说,我们发现 P4 达到了数据包处理的正确抽象级别。具体来说,操作标头字段不需要一点摆动。...必须添加到 P4 语言规范中的数据包克隆和摘要生成等操作原语现在可以成为供应商库的一部分,而供应商库又是特定供应商 PPE 的一部分。...如果它们被证明是广泛使用的,它们最终可能会迁移到标准的 P4 库中。总的来说,将一些 P4 结构(如动作原语)移动到库组件中将简化语言核心。

    41530

    Hello World in P4

    P4 简史 P4 的想法最早诞生于 2013 年,由斯坦福大学的 Nick Mckeown 教授提出,在 2014 年发布了 P4 语言的第一个正式规范 ,称为P4_14。...可以看出 P4 语言使用发布年限作为其大版本的标识。...在 PSA 官方介绍中,PSA 与 P14_16 语言的关系类似于 C 语言标准库与 C 语言的关系。...P4 语言核心抽象 为了对网络设备的转发行为进行适当建模,P4 语言定义了如下核心概念: Header types:定义了每个报文中各个报头的格式(所包含的字段和它们的大小) Parsers:描述如何处理所收到报文的包头...p4c P4 是一种编程语言,而编程语言的实体存在就是编译器(解释型语言需要解释器)。p4c 就是 P4 语言的参考编译器。

    1.9K20

    智能网卡系列一:P4语言学习笔记一

    什么是P4语言 P4 是一种声明性语言,用于告诉转发平面设备(交换机、NIC、防火墙、过滤器等)如何处理数据包。...P4旨在从根本上改变我们设计网络系统的方式。使用P4语言,您可以从系统设计要求开始,编写一个 P4 程序来描述系统需要如何处理数据包,然后编译程序以告诉转发元素要做什么。...独立于协议的NIC和交换机芯片需要一种语言来指定其行为,那么需要一种可以编译为各种目标转发设备(硬件和软件)的语言P4就是这种语言。...有许多有趣的研究问题需要解决与P4有关的问题: P4应该如何进化? 编写任意 P4 程序的最佳方法是什么? 我们如何测试两个 P4 程序(编译前和编译后)的等效性? 如何证明P4程序的正确性?...如何从更高级别的网络策略生成 P4P4与软件定义网络(SDN)和OpenFlow有何关系? P4 允许您告诉交换机如何处理数据包,并自动生成连接控制平面和转发平面的 API。

    32820

    P4入门教程(2):P4程序的编译、运行验证与分析

    在前面《P4入门教程:搭建开发和实验环境》一文中,梳理了P4实验的大致流程。P4程序只需要经过一次编译过程,生成数据平面的JSON格式描述文件,最后在启动软件交换机时将JSON描述文件导入即可。...本文重点讲述编译P4程序、启动P4交换机的方法,并以这样一个小功能为例展示P4程序的运行: 交换机只处理IPv4包,把收到的包打上三层MPLS标签,再从入端口把包发回去。...--p4v 16指明程序是用P4-16版语言编写的; -o output.file指明生成文件的位置和名字; 代码文件的位置和名字写在最后。 如果编译成功,命令行不会有任何显示。...P4交换机使用Thrift库来实现RPC服务。控制面通过RPC向服务器下发配置、更改转发表、修改寄存器中的值等。...到此,P4程序的编译、运行和验证就顺利结束了,希望能给朋友们一点启发。下一篇“P4入门教程”系列连载文章中,我们将利用本次演示中的P4程序,进行P4程序结构的简析,敬请期待!

    3.8K50

    P4虚拟化数据平面

    这个结果使得像P4这样的领域专用语言使得这些可编程数据平面可简单地以一个统一的方式在多种交换机上部署(比如基于RMT的ASIC、FPGA为基础的交换机、像PISCES一样的软件交换机、behavior...那么,是不是可以有一种使用纯P4语言实现的通用虚拟化框架呢?如何使用一个用户级别的程序来实现虚拟化?是否可以使用一个特殊设计的具有模拟其他P4程序的能力的P4程序?...HyPer4使用软件的方式拓展了P4语言,使得支持P4语言的设备可以具有如下功能: 可以在逻辑上存储多个P4程序并且同时运行它们(作为网络切片)或者热切换的快照 在每一个程序之间可以形成一个虚拟网络(...运行环境 P4语言运行环境简介 ?...上图左边部分描述了P4设备开始配置的过程。首先,用户会编译P4的代码,然后将二进制代码(或者其等价形式)装载进P4兼容的设备中。

    1.3K60

    为何P4“落户”智能网卡?

    作者:张渐修 由前思科“MPLS”四人组新成立的Pensando Systems公司最近推出了一款基于全可编程处理器的分布式服务卡(DSC),支持P4语言的编程。...DSC卡从物理规格看就是插入标准服务器的适配卡,鼎鼎大名的业内大拿们为何选择了PCIe卡作为突破口,并且选择P4语言作为主要的开发工具,本文基于公开资料介绍如何实现一款支持P4语言的接口卡以及P4语言发挥的关键作用...图1: 分布式服务卡DSC 网络边缘的价值 网络交换机曾经是P4编程的最初重点,但把P4理念应用到网络外围的终端节点时,它可以呈现出更大的潜力,此时终端节点可以在scale-out模型中实现网络、安全和存储服务...为了充分利用流水线中设计的专用处理器并与卡的其他组件紧密集成,系统编程依赖于对P4语言的扩展。 报文缓存作为片上的主数据包交换器,将数据报文从网络接口传送到P4可编程报文处理数据平面,反之亦然。...为了实现这些目标,Pensando于今年2月份加入P4社区,致力于围绕便携式网卡架构(PNA)的规范积极推动架构工作组的工作,并可能在语言设计工作组内提出P4语言的扩展,以实现网卡和主机之间通过PCI总线的交互

    1.6K20

    P4论文分享】基于P4的可编程数据平面研究及其应用

    4语言的局限性 2 . 6 其它数据平面编程语言 3 P4相关研究的最新进展 3 . 1 异构平台与编译器设计 3 . 1 . 1 硬件平台与后端编译器 1) 在可编程交换机上运行P4程序 2) 在FPGA...文献[43 – 44] 为P4程序实现了一个从P4语言到ODP的编译器MACSAD 设计并实现了从P4程序到ODP规范A P I的编译器,借助ODP项目的多平台支持性,使得P4程序可以无缝的迁移到大量支持...文献[ 48] 为包括P4在内的多种领域专用语言提供了中间表达语言 NetASM, NetASM可以通过平台特定的后端编译器编译运行在不同平台上....语言进行扩展 P4语言存在着语法上的局限性、 功能上的局限性、 标准规范上的局限性, 制约着P 4语言能够表达的数据包处理逻辑....a) 平台无关的扩展 仅对P4语言本身进行扩展, 并且保证扩展是不依赖于平台的 b) 平台相关的扩展 平台相关的扩展包含两种方式: (1) 第一种是扩展新原动作 原动作是P4语言的最小处理单元

    2.2K10

    P4和POF的对比

    P4是一种对底层设备数据处理行为进行编程的高级语言,用户可以直接使用P4语言编写网络应用,之后经编译对底层设备进行配置进而使其完成用户的功能需求。...二、总体架构 2.1 P4 P4是一种高级编程语言,它的三个目标是:(1)可重配置,程序员可以修改已经配置过的交换机的数据处理方式。(2)协议独立,交换机不需要绑定任何专用的网络协议。...所以程序员只需要使用P4语言进行编程就可以对底层交换机进行配置。...六、与控制器通信 由于P4的定位是高级编程语言,所以P4可以定义任意自己想要的配置。它可以让设备与SDN控制器通过OpenFlow通信,也可以通过本地的交换机操作系统控制,一切皆因P4程序设计而定。...在P4语言中,OpenFlow只是一个程序,两者可以协同工作。事实上也已经有了名为openflow.p4程序,就是用P4语言编写的实现OpenFlow功能的程序。

    2.3K30

    P4加入ONF和Linux基金会,推动P4的创新和采用

    P4语言联盟(P4.org)是P4编程语言的创建者,上周五宣布将成为开放网络基金会(ONF)旗下的一个项目,并且成为Linux基金会投资组合的一部分,P4联盟自2013年以来一直致力于可编程语言P4的非盈利组织...P4最初由谷歌、Intel、微软研究院、Barefoot、普林斯顿大学和斯坦福大学的工程师和研究人员组成,目标很简单:创建一个易于使用的语言,软件开发人员可以在一天内学习,并用它来精确描述数据包在网络中的转发方式...从一开始,P4就被设计为与目标无关(即,用P4编写的程序可以在不修改的情况下编译为在ASIC、FPGA、CPU、NPU和GPU等各种设备上裕运行)和协议(即P4程序可以描述现有的标准协议,或者可以用来指定转发行为...P4目前已经发展成为一个如此庞大的社区,成熟度逐渐为业界认可,需要得到ONF和Linux基金会的帮助。” P4可以同时用于可编程和固定功能设备。...P4也可以用来编写程序来描述全新的数据包转发行为。例如,P4广泛用于数据中心、企业和服务提供商网络的遥测和测量。

    81140

    P4编程理论与实践——理论篇

    基于这种初衷,P4应运而生。 什么是P4 P4(Programming Protocol-Independent Packet Processors)是一种数据面的高级编程语言。...通过P4语言,我们可以定义我们想要的数据面。进而再通过南向协议添加流表项。...而P4只是一个数据面的编程语言。 通过P4,我们可以定义各种各样形状的积木,而通过南向协议,我们可以组装这些积木来实现特定的功能。...P4中的那些事 P4是一种高级数据面编程语言,既然是高级语言,那么其设计本身就有着很高的抽象程度。我们先来看一种图: ? 这是P4中提供的最简单最易理解的编程结构,V1Model。...P4为我们提供了上述抽象,我们就可以把所有的交换机理解为上述的模型,然后按照上述模型进行开发就可以了。所以,按照上述模型,P4语言的代码结构通常为这样: ? ? ?

    3.1K100

    P4:真正的SDN还遥远吗?

    P4作为新的网络编程语言很好的弥补这个缺陷。P4会改变网络吗?是否能带来具有完全可编程能力的SDN?还是仅仅是学术界的宠儿?...两位教授也是P4组织的主要推动者之一。目前,P4语言作为一种潜在的OpenFlow2.0的发展方向在努力发展。...正如写C语言或者Python语言时并不需要关心CPU的相关信息,使用P4语言进行网络编程同样无需关心底层设备的具体信息。...P4的编译器会将通用的P4语言处理逻辑编译成设备相关的指令,从而写入转发设备,完成转发设备的配置和编程。 抽象的P4转发设备模型如图1所示。...完成一个P4语言程序之后,需要通过P4的编译器将程序编译并写入到交换机中,其主要分为数据解析逻辑的编译写入和控制流程的编译写入。

    1.7K90

    P4 2018中国峰会圆满落幕

    P4专家、互联网企业技术精英、金融企业技术精英、设备厂家等共同探讨可编程数据平面芯片、P4语言、网络创新应用等热点问题,共同推动P4的落地应用和产品解决方案走向成熟。...图2 中国通信学会副秘书长 宋彤 新华三集团副总裁王玮先生首先向各位参会者表达了诚挚的问候,并指出可编程语言P4的出现打开了网络领域的另一扇门,它将“软件定义”延伸到了芯片层面,他希望P4的活力与价值能够吸引更多的企业...、高校和科研机构加入开源社区,共同推动P4语言发展。...图3 新华三集团副总裁 王玮 第一位演讲嘉宾是斯坦福大学教授、美国国家工程院院士Nick McKeown,他演讲的主题是:SDN和可编程交换机,介绍了网络解耦的必要性、PISA架构、P4语言编程等重要内容...图14 Xilinx系统架构师及战略营销 宗家友 本次P4 2018中国峰会聚焦可编程数据平面芯片、P4语言、网络创新应用等热点问题,为全球的专家学者、技术精英和企业厂商们提供一个高层次、高水平、高效率的交流平台

    1.1K20
    领券