| #ifndef __PACKET_IO__ |
| #define __PACKET_IO__ |
| #include "headers.p4" |
| #include "parser.p4" |
| |
| action _packet_out() { |
| modify_field(EGR_PORT_FIELD, packet_out_hdr.egress_port); |
| remove_header(packet_out_hdr); |
| } |
| |
| table ingress_pkt { |
| actions { |
| _packet_out; |
| } |
| default_action: _packet_out(); |
| } |
| |
| control ingress_pkt_io { |
| if (valid(packet_out_hdr)) { |
| apply(ingress_pkt); |
| } |
| } |
| |
| action add_packet_in_hdr() { |
| add_header(packet_in_hdr); |
| modify_field(packet_in_hdr.ingress_port, IGR_PORT_FIELD); |
| } |
| |
| table egress_pkt { |
| actions { |
| add_packet_in_hdr; |
| } |
| default_action: add_packet_in_hdr(); |
| } |
| |
| control egress_pkt_io { |
| #ifdef __TOFINO_BUILD__ |
| if (ig_intr_md_for_tm.copy_to_cpu == 1) { |
| #else |
| if (IGR_PORT_FIELD == CPU_PORT) { |
| #endif |
| apply(egress_pkt); |
| } |
| } |
| |
| #endif |