p4-hlir/test源码 stateful.p4 control_flow_opt.p4
stateful.p4
#include "includes/headers.p4"
#include "includes/parser.p4"
action hop(ttl, egress_spec) {
add_to_field(ttl, -1);
modify_field(standard_metadata.egress_spec, egress_spec, 0xFFFFFFFF);
}
action hop_ipv4(egress_spec) {
hop(ipv4.ttl, egress_spec);
}
/* This should not be necessary if drop is allowed in table action specs */
action drop_pkt() {
drop();
}
table ipv4_routing {
reads {
ipv4.dstAddr : lpm;
}
actions {
drop_pkt;
hop_ipv4;
}
}
action act() {
count(cnt1, 10);
}
table table_2 {
reads {
ipv4.dstAddr : lpm;
}
actions {
act;
}
}
counter cnt1 {
type : packets;
static : table_2;
instance_count : 32;
}
register reg1 {
width : 20;
static : ipv4_routing;
instance_count : 100;
attributes : saturating, signed;
}
register reg2 {
layout : ipv4_t;
direct : ipv4_routing;
}
control ingress {
apply(ipv4_routing);
apply(table_2);
}
control egress {
}
control_flow_opt.p4
#include "includes/headers.p4"
#include "includes/parser.p4"
action hop(ttl, egress_spec) {
add_to_field(ttl, -1);
modify_field(standard_metadata.egress_spec, egress_spec, 0xFFFFFFFF);
}
action hop_ipv4(egress_spec) {
hop(ipv4.ttl, egress_spec);
}
/* This should not be necessary if drop is allowed in table action specs */
action drop_pkt() {
drop();
}
table ipv4_routing {
reads {
ipv4.dstAddr : lpm;
}
actions {
drop_pkt;
hop_ipv4;
}
}
action act() {
count(cnt1, 10);
}
action lala() {
}
table table_2 {
reads {
ipv4.dstAddr : lpm;
}
actions {
act;
}
}
table table_3 {
reads {
ipv4.dstAddr : lpm;
}
actions {
lala;
}
}
counter cnt1 {
type : packets;
static : table_2;
instance_count : 32;
}
register reg1 {
width : 20;
static : ipv4_routing;
instance_count : 100;
attributes : saturating, signed;
}
register reg2 {
layout : ipv4_t;
direct : ipv4_routing;
}
control ingress {
if (valid(ipv4)) {
apply(ipv4_routing);
if (valid(ipv4)) {
apply(table_3);
}
}
if (valid(ipv6)) {
apply(table_2);
}
}
control egress {
}
headers.p4
header_type ethernet_t {
fields {
dstAddr : 48;
srcAddr : 48;
etherType : 16;
}
}
header_type vlan_tag_t {
fields {
pcp : 3;
cfi : 1;
vid : 12;
etherType : 16;
}
}
header_type ipv4_t {
fields {
version : 4;
ihl : 4;
diffserv : 8;
totalLen : 16;
identification : 16;
flags : 3;
fragOffset : 13;
ttl : 8;
protocol : 8;
hdrChecksum : 16;
srcAddr : 32;
dstAddr: 32;
}
}
header_type ipv6_t {
fields {
version : 4;
trafficClass : 8;
flowLabel : 20;
payloadLen : 16;
nextHdr : 8;
hopLimit : 8;
srcAddr : 128;
dstAddr : 128;
}
}
header_type icmp_t {
fields {
hdr_type : 8;
code : 8;
hdrChecksum : 16;
}
}
header_type icmpv6_t {
fields {
hdr_type : 8;
code : 8;
hdrChecksum : 16;
}
}
header_type tcp_t {
fields {
srcPort : 16;
dstPort : 16;
seqNo : 32;
ackNo : 32;
dataOffset : 4;
res : 3;
ecn : 3;
ctrl : 6;
window : 16;
checksum : 16;
urgentPtr : 16;
}
}
header_type udp_t {
fields {
srcPort : 16;
dstPort : 16;
hdr_length : 16;
checksum : 16;
}
}
header_type routing_metadata_t {
fields {
drop : 1;
}
}
parser.p4
metadata routing_metadata_t routing_metadata;
parser start {
set_metadata(routing_metadata.drop, 0);
return parse_ethernet;
}
#define ETHERTYPE_VLAN 0x8100, 0x9100, 0x9200, 0x9300
#define ETHERTYPE_IPV4 0x0800
#define ETHERTYPE_IPV6 0x86dd
#define ETHERTYPE_ARP 0x0806
#define ETHERTYPE_RARP 0x8035
header ethernet_t ethernet;
parser parse_ethernet {
extract(ethernet);
return select(latest.etherType) {
ETHERTYPE_VLAN : parse_vlan;
ETHERTYPE_IPV4 : parse_ipv4;
ETHERTYPE_IPV6 : parse_ipv6;
}
}
#define VLAN_DEPTH 4
header vlan_tag_t vlan_tag_[VLAN_DEPTH];
parser parse_vlan {
extract(vlan_tag_[next]);
return select(latest.etherType) {
ETHERTYPE_VLAN : parse_vlan;
ETHERTYPE_IPV4 : parse_ipv4;
ETHERTYPE_IPV6 : parse_ipv6;
}
}
#define IP_PROTOCOLS_ICMP 1
#define IP_PROTOCOLS_TCP 6
#define IP_PROTOCOLS_UDP 17
#define IP_PROTOCOLS_ICMPV6 58
header ipv4_t ipv4;
parser parse_ipv4 {
extract(ipv4);
return select(latest.fragOffset, latest.protocol) {
IP_PROTOCOLS_ICMP : parse_icmp;
IP_PROTOCOLS_TCP : parse_tcp;
IP_PROTOCOLS_UDP : parse_udp;
}
}
header ipv6_t ipv6;
parser parse_ipv6 {
extract(ipv6);
return select(latest.nextHdr) {
IP_PROTOCOLS_ICMPV6 : parse_icmpv6;
IP_PROTOCOLS_TCP : parse_tcp;
IP_PROTOCOLS_UDP : parse_udp;
}
}
header icmp_t icmp;
parser parse_icmp {
extract(icmp);
return ingress;
}
header icmpv6_t icmpv6;
parser parse_icmpv6 {
extract(icmpv6);
return ingress;
}
header tcp_t tcp;
parser parse_tcp {
extract(tcp);
return ingress;
}
header udp_t udp;
parser parse_udp {
extract(udp);
return ingress;
}
2016/12/2
p4-hlir/test源码 stateful.p4 control_flow_opt.p4的更多相关文章
- maven 下载 源码和javadoc 命令
摘要:我们在写代码时候,往往是想查看一下源码,看看源码的一些细节内容.一般情况下,在IDE(如eclipse)中近仅仅只需按住ctrl+ 点击对应的方法即可进入对应的源码部分.但是有些时候很多依赖项并 ...
- android源码的目录结构
android源码的目录结构 [以下网络摘抄] |-- Makefile ! l/ a5 n% S% @- `0 d# z# a$ P4 V3 o7 R|-- bionic ...
- JS魔法堂:剖析源码理解Promises/A规范
一.前言 Promises/A是由CommonJS组织制定的异步模式编程规范,有不少库已根据该规范及后来经改进的Promises/A+规范提供了实现 如Q, Bluebird, when, rsvp. ...
- AndFix热修复 —— 实战与源码解析
当你的应用发布后第二天却发现一个重要的bug要修复,头疼的同时你可能想着赶紧修复重新打个包发布出去,让用户收到自动更新重新下载.但是万事皆有可能,万一隔一天又发现一个急需修复的bug呢?难道再次发布打 ...
- socket_server源码剖析、python作用域、IO多路复用
本节内容: 课前准备知识: 函数嵌套函数的使用方法: 我们在使用函数嵌套函数的时候,是学习装饰器的时候,出现过,由一个函数返回值是一个函数体情况. 我们在使用函数嵌套函数的时候,最好也这么写. def ...
- JQuery源码分析(七)
了解jQuery对DOM进行遍历背后的工作机制,这样可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能. 关于jQuery对象的包装 var $aaron = $("aar ...
- Hadoop源码的编译过程详细解读(各版本)
说在前面的话 重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令. 如果出现缺少了某个文件的情况,则要先清理maven(使用命 ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- 关于源码编译每次提示有错误 要make update-api
最近编译newline的版本的时候..同事修改了andoid默认输入法为百度.这是系统自动提供的API,所以每次编译会提示 此时在编译源码生成SDK的过程中会出现这个问题:************** ...
随机推荐
- Circle(codevs 3134)
题目描述 Description 在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次.在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法 输入描述 ...
- Fresco 源码分析(一) DraweeView-DraweeHierarchy-DraweeController(MVC) DraweeHierachy+DraweeController的分析
4.1.5.2 模型层DraweeHierachy继承体系以及各个类的作用 DraweeHierachy (I) --| SettableDraweeHierarchy (I) ------| Gen ...
- 三星笔记本预装WIN8_降级WIN7方法
相信很多人在近两年购买笔记本都会遇到这样的问题.预装系统是windows 8用着不习惯想换系统的请往下看.换windows 7 windows XP 设备方法相同 WIN8降级WIN7是要重新分区的 ...
- HDU 4513 吉哥系列故事——完美队形II manacher
吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希 ...
- Hark的数据结构与算法练习之地精(侏儒)排序
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...
- WebScarab使用说明
安装说明:软件是基于java开发的,所以安装前,要求你的机器已经安装了Java运行环境 软件说明:一个用来分析使用HTTP和HTTPS协议的应用程序框架,可以用来学习HTTP协议我更多的是用来 ...
- C. Graph and String
二分图染色 b点跟除自身外所有的点连接,共n-1个,首先把连接n-1个的点全部设为b点,其它点任意一点设为a,与a相连的都是a点,剩余为c点.最后验证是否成立. 验证条件为,所有连接的点之间的差值的绝 ...
- JVM的GC理论详解
GC的概念 GC:Garbage Collection 垃圾收集.这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出) ...
- SPOJ371 Boxes(最小费用最大流)
把球当作水. #include<cstdio> #include<cstring> #include<queue> #include<algorithm> ...
- HDU2824 The Euler function(欧拉函数)
题目求φ(a)+φ(a+1)+...+φ(b-1)+φ(b). 用欧拉筛选法O(n)计算出n以内的φ值,存个前缀和即可. φ(p)=p-1(p是质数),小于这个质数且与其互质的个数就是p-1: φ(p ...