/* * Copyright 2019-present GEANT RARE project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed On an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _INGRESS_METADATA_P4_ #define _INGRESS_METADATA_P4_ /* * User defined metadata type */ struct ingress_metadata_t { port_metadata_t port_md; #ifdef NEED_PKTLEN bit<16> pktlen; #endif #ifdef NEED_REPLICA bit<16> clone_session; #endif NextHopId_t nexthop_id; SubIntPad_t _padding1; SubIntId_t target_id; SubIntPad_t _padding2; SubIntId_t source_id; SubIntId_t ingress_id; SubIntId_t aclport_id; #ifdef HAVE_BRIDGE switch_vrf_t bridge_id; SubIntId_t bridge_src; SubIntId_t bridge_trg; #endif SubIntId_t output_id; ethertype_t ethertype; switch_vrf_t vrf; #ifdef HAVE_POLKA bit<16> polka_next; #endif #ifdef HAVE_MPLS label_t mpls_encap_egress_label; label_t mpls_encap_svc_label; #endif #ifdef HAVE_SRV6 ipv6_addr_t srv_target; #endif bit <3> mpls_op_type; bit <3> srv_op_type; bit <1> srv_remove; bit <1> saw_rsvp; bit <1> bier_remove; bit <1> polka_remove; bit <1> nsh_remove; bit <1> mpls0_remove; bit <1> mpls1_remove; #ifdef NEED_REPLICA SubIntId_t rpf_iface; #endif #ifdef HAVE_INQOS SubIntId_t inqos_id; bit <8> inqos_res; #endif #ifdef HAVE_OUTQOS SubIntId_t outqos_id; bit <8> outqos_res; #endif #ifdef HAVE_FLOWSPEC SubIntId_t flowspec_id; bit <8> flowspec_res; #endif #ifdef HAVE_PPPOE bit<1> pppoe_ctrl_valid; bit<1> pppoe_data_valid; #endif #ifdef HAVE_MPLS bit <1> mpls0_valid; bit <1> mpls1_valid; #endif #ifdef HAVE_POLKA bit <1> polka_valid; #endif #ifdef HAVE_NSH bit <1> nsh_valid; #endif #ifdef HAVE_SGT bit <1> sgt_valid; #endif #ifdef HAVE_GTP bit<3> gtp_type; #endif bit <1> arp_valid; bit <1> ipv4_valid; bit <1> ipv6_valid; #ifdef HAVE_FRAG bit <3> layer3_frag; #endif layer4_port_t layer4_srcprt; layer4_port_t layer4_dstprt; #ifdef HAVE_SGT sec_grp_t sec_grp_id; #endif bit <1> srv_encap_l3vpn_valid; bit <1> mpls_encap_rawip_valid; bit <1> mpls_encap_l3vpn_valid; bit <1> mpls_encap_l2vpn_valid; bit <3> mpls_encap_decap_sap_type; // service access point type #ifdef HAVE_NAT bit<1> natted_ipv4tcp; bit<1> natted_ipv4udp; bit<1> natted_ipv6tcp; bit<1> natted_ipv6udp; checksum_t checksum_tcp_tmp; checksum_t checksum_udp_tmp; #endif l4_lookup_t l4_lookup; ethertype_t always_zero; // hack } #endif // _INGRESS_METADATA_P4_