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. scrapy基础

    scrapy Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy ...

  2. jQuery 实现下载进度条

    //ajax异步上传 $.ajax({ url: "${pageContext.request.contextPath }/upload", type: "POST&qu ...

  3. hadoop docker集群搭建

    获取镜像 #本机内 docker pull ubuntu:16.04 编排镜像 启动一个容器 #本机内 docker run -i -t --name master ubuntu:16.04 在容器内 ...

  4. 字符编码——python学习

    python学习—字符编码 例如汉字“中” 十进制:20013 二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六进 ...

  5. Go实现发送解析GET与POST请求

    参考链接: https://www.jb51.net/article/115693.htm https://www.jb51.net/article/60900.htm https://www.cnb ...

  6. 收藏Linux命令

    http://www.cnblogs.com/laov/p/3541414.html#zhiling 1.压缩文件夹 http://www.cnblogs.com/eoiioe/archive/200 ...

  7. GD32F450 200M时USB不稳定

    使用GD32F450的demo修改usb驱动,发现120M和168M时正常,200M时很不稳定.怀疑USB时钟分频有问题,一查果然是,记录如下: 200M是库函数主时钟分频代码如下 static vo ...

  8. 20155230 2016-2017-2《Java程序设计》课程总结

    学号 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业01:我所期望的师生关系 预备作业02:成功经验与C语调查 预备作业03:虚拟机安装及Linu ...

  9. 2016-2017-2 20155329 实验四 Android 开发

    2016-2017-2 20155329 实验四 Android 开发 ## 任务一:Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI ...

  10. 2017-2018-1 20155330《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155330<信息安全技术>实验二--Windows口令破解 姓名:朱玥 学号:20155330 班级:201553 日期:2017.10.24 实验环境 系统 ...