Package

对于package这个概念,类似于将一个框架中各组成部件以一个规律进行打包,以正常运转。

基于一个架构去编写一个新的pipeline的时候,需要先了解初始化的时候需要提供那些东西,parser,ingress或一些校验的模块。

v1model的package

 package V1Switch(Parser p,
VerifyChecksum vr
Ingress ig,
Egress eg,
ComputeChecksum ck,
Deparser dep
)

从package的定义中可以看出v1model需要的东西,这些东西在框架的设计中也有相对应的定义。

就如之前control中提到的ingress,其就需要包含header,metadata,standard metadata。

编写一个最基本的p4程序,官方建议使用core.p4这个标准函数库以及官方提供的v1model架构,其导入的方式类似于c语言以#include<库名>的方式导入。

 #include <core.p4>
#include <v1model.p4> #include "include/headers.p4"
#include "include/custom_headers.p4"
#include "include/defines.p4"
#include "include/parsers.p4"
#include "include/actions.p4"
#include "include/port_counters.p4"
#include "include/port_meters.p4"
#include "include/checksums.p4"
#include "include/packet_io.p4"
#include "include/table0.p4"
#include "include/host_meter_table.p4"
#include "include/wcmp.p4" //------------------------------------------------------------------------------
// INGRESS PIPELINE
//------------------------------------------------------------------------------ control ingress(inout headers_t hdr,
inout local_metadata_t local_metadata,
inout standard_metadata_t standard_metadata) { apply {
port_counters_ingress.apply(hdr, standard_metadata);
port_meters_ingress.apply(hdr, standard_metadata);
packetio_ingress.apply(hdr, standard_metadata);
table0_control.apply(hdr, local_metadata, standard_metadata);
host_meter_control.apply(hdr, local_metadata, standard_metadata);
wcmp_control.apply(hdr, local_metadata, standard_metadata);
}
} //------------------------------------------------------------------------------
// EGRESS PIPELINE
//------------------------------------------------------------------------------ control egress(inout headers_t hdr,
inout local_metadata_t local_metadata,
inout standard_metadata_t standard_metadata) { apply {
port_counters_egress.apply(hdr, standard_metadata);
port_meters_egress.apply(hdr, standard_metadata);
packetio_egress.apply(hdr, standard_metadata);
}
} //------------------------------------------------------------------------------
// SWITCH INSTANTIATION
//------------------------------------------------------------------------------ V1Switch(parser_impl(),
verify_checksum_control(),
ingress(),
egress(),
compute_checksum_control(),
deparser()) main;

一个p4程序的main文件,最后的一部分就是整个框架组成,然后main作为程序的入口使用,总体很类似于c语言。p4也可以自定义框架。

P4语法(5) Package的更多相关文章

  1. Sublime P4语法高亮设置

    Github插件链接:p4-syntax-highlighter 首先安装Package Control. 进入Package界面,我的目录: /Users/wasdns/Library/Applic ...

  2. P4语法(2) Parser

    这里参考学习了: P4语言规范 P4台湾社群 Parser 关于parser 在P4程序中,有着大量的首部(header)和首部实例,但每次只有部分首部实例会对数据包进行操作,而parser会用于生成 ...

  3. P4语法(4)Control block

    Control block Control block之中用于放置设计好的Table和Action. 可以把control block认为是pipeline的一个模板,之前用的v1model中就是in ...

  4. P4语法(3)Table,Action

    Table table是p4的匹配——动作表,定义了匹配字段(key).动作(action)和一些其他相关属性. 其处理数据包的流程: Key construction.建立其匹配字段 Key loo ...

  5. P4语法(1)基础数据类型和Header

    文章学习自:P4语言编程详解 由于原文有一点的年份,所以也继续阅读了相关的最新规范. P4语言规范 基础数据类型 布尔型(bool) 运算符 描述 and 双目运算符,结果为布尔型 or 双目运算符, ...

  6. java包(package)

    为了更好地组织类,java提供了包机制,用于区别类名的命名空间. 这样在不同的命名空间就可以有相同命名的类. 1 把功能相似或相关的类或接口阻止在同一个包中,方便类的查找和使用. 2 如同文件夹一样, ...

  7. python3 package management 包管理 实例

    包是一种组织管理代码的方式,包里面存放的是模块 用于将模块包含在一起的文件夹就是包 包内包含__init__.py标志性文件 定义一个学生类,一个sayhello函数,一个打印语句 # p01.py ...

  8. 编译impala、拓展impala语法解析模块

    以前也编译过,但是每次编译都忘记怎么做,然后都得重新找需要下载的文件. 编译文件:buildall.sh 如果想只编译前端可以这样运行: buildall.sh -fe_only 编译时会去S3下载一 ...

  9. drools语法介绍

    这里没有翻译http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html上的内容 而是参考了网 ...

随机推荐

  1. Django实现支付宝支付(沙箱)

    1.安装SDK 点击右侧沙箱当面付接入指导,之后可以看到一个下载SDK的按钮,点击后,会有python的SDK下载链接,但还是属于公测中,也可以通过在cmd里输入以下代码来安装. pip instal ...

  2. redis集群步骤(windows环境)

    注:原文转自 https://blog.csdn.net/zsg88/article/details/73715947 ,仅用作为方便查阅 一 所需软件:Redis.Ruby语言运行环境.Redis的 ...

  3. sql for xml path 处理

    1.将下列结果集 做成 aa   语文,数学 bb    英语,语文 这种格式 使用 for xml  path  记得去重复 WITH cte AS(SELECT stu.studentname,c ...

  4. Redis事件

    Redis事件 Redis的ae(Redis用的事件模型库) ae.c Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与 ...

  5. PhpStorm中无法用post提交的解决方案

    这是一个简单的计算器,html页面: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  6. 【二】Spark 核心

    spark 核心 spark core RDD创建 >>> RDD转换 >>> RDD缓存 >>> RDD行动 >>> RDD输 ...

  7. 解决Stm32出现error: #20: identifier "GPIO_InitTypeDef" is undefined异常

    该错误是我在移植sd卡程序时出现的,错误如下: error:#20,查看错误,可以发现,这些变量都是系统定义过的,没有修改过.并且该变量也能成功跳转被找到.那么到底是什么原因呢?逛了一些帖子,尝试了好 ...

  8. 第三章:文件I/O

    本章开始讨论UNIX系统的文件I/O函数,包括打开文件.读文件.写文件等. UNIX系统中的大多数文件I/O只需要用到5个函数:open.read.write.lseek和close.它们每执行一次都 ...

  9. 《Java程序设计》实验三(敏捷开发与XP实践)20155214 实验报告

    <JAVA程序设计> 实验三(敏捷开发与XP实践) 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>< ...

  10. # 20155222卢梓杰 2016-2017-2 《Java程序设计》第2周学习总结

    20155222卢梓杰 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 数据类型 所占字节数 short整数 2 int整数 4 long整数 8 float ...