`
steeven
  • 浏览: 312355 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

p4-hlir和p4c-bm 编译工具

    博客分类:
  • p4
阅读更多
本文时间10/15/2016,如果时间久远请参考网站 以免被旧信息误导

p4-hlir项目解析p4,可以看成p4语言的python解析器,生成对应的python对象。
基于这个解析结果可以再加上模板输出json或者c, 或者RTL,或者DPDK,或者NP的微码。。

BMv2可以看成是一个设备或者模拟器,p4c-bm就是调用p4-hlir解析p4,生成BMv2配置所需的json文件和远程调用接口。所以一个p4模型被mininet模拟的picture是这样的:

p4 -> p4-hlir -> p4c-bm -> BMv2 -> mininet

p4c-bm安装会把p4-hlir一并安装:
git clone https://github.com/p4lang/p4c-bm.git
cd p4c-bm
sudo pip install -r requirements_v1_1.txt
sudo python setup.py install
至此/usr/local/bin下面就有了p4开头的编译、校验、图片生成命令。

p4-validate用来检查p4语法

p4-shell simple_router.p4
这是python界面,h对象包含了HLIR已经解析出的对象,用法参见https://github.com/p4lang/p4-hlir

p4-graph,这个项目不见了,原来跑到这里。这个命令会在当前目录下生成几个图片来描述Table/parser关系。

p4c-bmv2
--json 生成P4的Json格式
--pd 生成 PD C++ code
--p4-v1.1 if your input program is a P4 v1.1 program

进入p4-factory的targets/simple_router/p4src,编译一下p4模型:
p4c-bmv2 --json JSON simple_router.p4
这时候JSON文件就生成了,打开看看是不是很眼熟?
1. metadata跟header_type放在一起
2. headers成员里面有个metadata:true/false来标记
3. headers里面还有standard_metadata
4. 还有parsers/actions组。。。

至于怎么用BMv2或者mininet跑起来请看下一篇

如果你有自己的设备,CPU/FPGA/NP或者其它想支持P4的设备,可以用p4-hlir用python解析生成代码,或者基于p4c-bmv2输出的JSON生成代码或者执行文件。

BMv2j记得不是生成代码,而是加载JSON作为配置,如果代码效率要求不高应该可以这么用。

BTW,P4这个名字本来是Perforce的缩写,一个版本管理工具,P4全名是Programming Protocol independent Packet Processing, PPiPP更唯一

0
1
分享到:
评论

相关推荐

    p4-perforce repo.pdf

    P4-Perforce 版本工具使用指南 P4-Perforce 是一款版本控制系统,提供了强大的版本管理功能。该工具提供了多种命令供用户使用,涵盖了客户端工作空间、文件管理、变更列表、作业管理、分支和合并、管理等多个方面。...

    hlir16:P4-16的Python表示形式

    假设环境变量P4C包含通向p4c和/或T4P4S的路径(基于P4-14的版本,或基于实验性的基于P4-16的版本,使用该库),则可以运行以下示例道路。 它需要Python 3。 python test_hlir.py " $P4C /testdata/p4_16_samples/...

    matlab超声成像代码-P4-1-FAPI:P4-1多角度平面波超声对比成像方法代码

    matlab超声成像代码P4-1-FAPI P4-1 换能器 (P4-1FAPI) 的闪光角脉冲反演成像 描述:这是一个多角度平面波超声对比成像序列,专为在 Verasonics Vantage Research 超声系统上运行的 P4-1 相控阵换能器而专门编写和...

    P4-OvS:将P4的力量带到OvS!

    p4c-ubpf作为编译器,可将P4程序转换为与BPF兼容的C代码 请检查以获取有关到目前为止已实施的详细信息。 笔记! 当前的P4-OVS版本仍然是一个研究项目,几乎可以肯定它包含严重的错误或代码怪癖。 入门 要自己玩P4-...

    IPB70P04P4-09 INFINEON 英飞凌 电子元器件芯片.pdf

    9. **封装与标识**:IPB70P04P4-09有三种封装形式,包括PG-TO263-3-24、PG-TO262-3-14和PG-TO220-3-14,每种封装都有相应的标记代码,如IPI70P04P4-09和IPP70P04P4-09。 10. **应用领域**:由于其出色的性能和耐温...

    一个PPT讲清楚P4-P4runtime-Yang-ONOS.rar

    给学习SDN,网络编程,P4交换机使用者的福利。本材料系统地讲解了P4编程,P4runtime接口,Yang,ONOS内部实现以支持P4编程。从数据面,讲到接口,讲到控制模型,讲到控制器实现。从下到上,条理清晰。上传者倾力推荐...

    p4-14-v1.0.5_P4语言标准_

    9. **验证和测试**:文档还会涵盖如何使用P4验证工具确保程序的正确性,并提供测试用例和调试建议。 通过深入学习P4语言标准v1.0.5,开发者能够掌握如何编写P4程序,从而定制网络设备的功能,创建创新的网络服务和...

    vnc-P4_6_3-x86_x64_win32

    vnc-P4_6_3-x86_x64_win32

    北航计组代码(三)p4--Verilog单周期

    【标题】"北航计组代码(三)p4--Verilog单周期"涉及的是一个计算机组织实验项目,其中的“计组”是计算机组成原理的简称,而“p4”可能代表实验的第四部分。这个项目的核心是设计一个用Verilog语言编写的单周期...

    P4-16-v1.0.0-spec.pdf

    8. P4数据类型:详细介绍了P4的基本类型和派生类型,以及它们的定义和用途。 9. 名称解析和可见性:解释了P4程序中名称如何解析以及不同代码元素的可见性规则。 10. 文法和语义:提供了P4语言的语法规则和语义,...

    NDN-tools以及NDN.p4总结.docx

    NDN-tools和NDN.p4是与NDN相关的两个重要工具集,分别用于数据分析和网络层协议的编程。 1. NDN-tools: dissect-wireshark dissect-wireshark是NDN-tools的一部分,它是一个用于Wireshark的数据包分析器,专门针对...

    IPD90P04P4-05-VB一款P沟道TO252封装MOSFET应用分析

    总之,IPD90P04P4-05-VB是一款高性能的P沟道MOSFET,适合需要高效能、低热阻和高可靠性的电源管理应用,如DC-DC转换器、电机驱动和负载开关等。其优秀的电气和热特性使其成为高电流、低损耗应用的理想选择。在实际...

    北航计组实验代码(三)p4--Verilog单周期

    【描述】"北航计组实验p4代码--Verilog单周期 支持36种指令 附设计文档"表明实验提供了详细的代码实现以及设计文档,帮助学习者理解每个模块的功能和整个系统的集成。设计文档通常会包含系统架构图、指令集架构(ISA...

    onos-p4-dev:各种P4工具,程序和脚本,使开发人员可以尝试ONOS中的P4实验功能

    有关更多信息,请访问: : 快速开始重要提示:以下脚本已在的上进行了测试首先,您需要为onos-bmv2(BMv2的ONOS分支)和p4c-bmv2(BMv2的P4编译器)提取git子模块: git submodule update --init --recursive按照各...

    IPD90P03P4-04 INFINEON 英飞凌 电子元器件芯片.pdf

    IPD90P03P4-04 英飞凌 电子元器件芯片 本文档介绍了英飞凌 (INFINEON) 公司生产的 IPD90P03P4-04 Power-Transistor 芯片,属于 OptiMOS®-P2 家族。该芯片是 P-通道增强型 MOSFET,具有高性能和可靠性。 主要特点 ...

    P4-3.py

    P4-3.py

    P4-1.py

    P4-1.py

    IPD50P04P4-13-VB一款P沟道TO252封装MOSFET应用分析

    IPD50P04P4-13-VB是一款由VBsemi公司生产的P沟道金属氧化物半导体场效应晶体管(MOSFET),它采用TO252封装,适用于电源管理、开关和驱动应用。以下是这款MOSFET的关键特性和技术参数的详细分析: 1. **TrenchFET...

    P4-prg6-各类三角形.py

    P4-prg6-各类三角形.py

Global site tag (gtag.js) - Google Analytics