added 3 bmv2 examples: copy_to_cpu, meter, TLV_parsing
This commit is contained in:
87
examples/copy_to_cpu/p4src/copy_to_cpu.p4
Normal file
87
examples/copy_to_cpu/p4src/copy_to_cpu.p4
Normal file
@@ -0,0 +1,87 @@
|
||||
header_type ethernet_t {
|
||||
fields {
|
||||
dstAddr : 48;
|
||||
srcAddr : 48;
|
||||
etherType : 16;
|
||||
}
|
||||
}
|
||||
|
||||
header_type intrinsic_metadata_t {
|
||||
fields {
|
||||
mcast_grp : 4;
|
||||
egress_rid : 4;
|
||||
mcast_hash : 16;
|
||||
lf_field_list: 32;
|
||||
}
|
||||
}
|
||||
|
||||
header_type cpu_header_t {
|
||||
fields {
|
||||
device: 8;
|
||||
reason: 8;
|
||||
}
|
||||
}
|
||||
|
||||
header cpu_header_t cpu_header;
|
||||
|
||||
parser start {
|
||||
return select(current(0, 64)) {
|
||||
0 : parse_cpu_header;
|
||||
default: parse_ethernet;
|
||||
}
|
||||
}
|
||||
|
||||
header ethernet_t ethernet;
|
||||
metadata intrinsic_metadata_t intrinsic_metadata;
|
||||
|
||||
parser parse_ethernet {
|
||||
extract(ethernet);
|
||||
return ingress;
|
||||
}
|
||||
|
||||
parser parse_cpu_header {
|
||||
extract(cpu_header);
|
||||
return parse_ethernet;
|
||||
}
|
||||
|
||||
action _drop() {
|
||||
drop();
|
||||
}
|
||||
|
||||
action _nop() {
|
||||
}
|
||||
|
||||
#define CPU_MIRROR_SESSION_ID 250
|
||||
|
||||
field_list copy_to_cpu_fields {
|
||||
standard_metadata;
|
||||
}
|
||||
|
||||
action do_copy_to_cpu() {
|
||||
clone_ingress_pkt_to_egress(CPU_MIRROR_SESSION_ID, copy_to_cpu_fields);
|
||||
}
|
||||
|
||||
table copy_to_cpu {
|
||||
actions {do_copy_to_cpu;}
|
||||
size : 1;
|
||||
}
|
||||
|
||||
control ingress {
|
||||
apply(copy_to_cpu);
|
||||
}
|
||||
|
||||
action do_cpu_encap() {
|
||||
add_header(cpu_header);
|
||||
modify_field(cpu_header.device, 0);
|
||||
modify_field(cpu_header.reason, 0xab);
|
||||
}
|
||||
|
||||
table redirect {
|
||||
reads { standard_metadata.instance_type : exact; }
|
||||
actions { _drop; do_cpu_encap; }
|
||||
size : 16;
|
||||
}
|
||||
|
||||
control egress {
|
||||
apply(redirect);
|
||||
}
|
||||
Reference in New Issue
Block a user