博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4语法(5) Package
阅读量:5894 次
发布时间:2019-06-19

本文共 2849 字,大约阅读时间需要 9 分钟。

Package

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

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

v1model的package

1 package V1Switch(Parser p,2                 VerifyChecksum vr3                 Ingress ig,4                 Egress eg,5                 ComputeChecksum ck,6                 Deparser dep7                 )

 

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

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

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

1 #include 
2 #include
3 4 #include "include/headers.p4" 5 #include "include/custom_headers.p4" 6 #include "include/defines.p4" 7 #include "include/parsers.p4" 8 #include "include/actions.p4" 9 #include "include/port_counters.p4"10 #include "include/port_meters.p4"11 #include "include/checksums.p4"12 #include "include/packet_io.p4"13 #include "include/table0.p4"14 #include "include/host_meter_table.p4"15 #include "include/wcmp.p4"16 17 //------------------------------------------------------------------------------18 // INGRESS PIPELINE19 //------------------------------------------------------------------------------20 21 control ingress(inout headers_t hdr,22 inout local_metadata_t local_metadata,23 inout standard_metadata_t standard_metadata) {24 25 apply {26 port_counters_ingress.apply(hdr, standard_metadata);27 port_meters_ingress.apply(hdr, standard_metadata);28 packetio_ingress.apply(hdr, standard_metadata);29 table0_control.apply(hdr, local_metadata, standard_metadata);30 host_meter_control.apply(hdr, local_metadata, standard_metadata);31 wcmp_control.apply(hdr, local_metadata, standard_metadata);32 }33 }34 35 //------------------------------------------------------------------------------36 // EGRESS PIPELINE37 //------------------------------------------------------------------------------38 39 control egress(inout headers_t hdr,40 inout local_metadata_t local_metadata,41 inout standard_metadata_t standard_metadata) {42 43 apply {44 port_counters_egress.apply(hdr, standard_metadata);45 port_meters_egress.apply(hdr, standard_metadata);46 packetio_egress.apply(hdr, standard_metadata);47 }48 }49 50 //------------------------------------------------------------------------------51 // SWITCH INSTANTIATION52 //------------------------------------------------------------------------------53 54 V1Switch(parser_impl(),55 verify_checksum_control(),56 ingress(),57 egress(),58 compute_checksum_control(),59 deparser()) main;

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

转载于:https://www.cnblogs.com/pullself/p/10574220.html

你可能感兴趣的文章
Linux下Nginx编译安装
查看>>
c++ 深浅拷贝(传统写法 现代写法)
查看>>
java之猜数字游戏
查看>>
链接器下——链接器实战
查看>>
java互联网架构师课程资料分享
查看>>
干货分享微服务spring-cloud(2.概览)
查看>>
ThinkPHP源码学习 redirect函数 URL重定向
查看>>
浏览器与服务端协商缓存
查看>>
nginx-tomcat负载均衡redis-session共享,静态资源分离
查看>>
【安全牛学习笔记】tcpdump抓包实战
查看>>
【安全牛学习笔记】DNS信息收集
查看>>
阿里云参与两大国家工程实验室获批,人工智能继续深入工业制造
查看>>
计算数IP据报的校验和
查看>>
【干货分享】流程DEMO-资产请购单
查看>>
Linux学习总结(三十六)lamp之配置防盗链
查看>>
实现基于LNMP的电子商务网站
查看>>
7.28布局
查看>>
MariaDB基于MHA和Galera Cluster实现高可用
查看>>
xhell 优化
查看>>
项目管理工具Maven1
查看>>