/*
 * 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 {
    SubIntId_t ingress_id;
    SubIntId_t source_id;
    SubIntId_t target_id;
    SubIntId_t aclport_id;
    NextHopId_t nexthop_id;
    SubIntId_t outport_id;
    SubIntId_t bridge_id;
    SubIntId_t bridge_src;
    SubIntId_t bridge_trg;
    SubIntId_t meter_id;
    bit<32> meter_res;
    @field_list(1)
    bit<4> hash_id;
    ethertype_t ethertype;
    switch_vrf_t vrf;
    bit<16> polka_next;
    bit<2>  dropping;
    bit<1>  punting;
    bit<1>  natted;
    bit<2>  need_recir;
    bit<1>  need_clone;
    bit<16> clone_session;
    bit<3>  mpls_op_type;
    bit<3>  srv_op_type;
    bit<3>  amt_type;
    bit<3>  gtp_type;
    bit<16> vlan_size;
    bit<1>  sgt_remove;
    bit<1>  polka_remove;
    bit<1>  nsh_remove;
    bit<1>  mpls0_remove;
    bit<1>  mpls1_remove;
    bit<1>  pppoe_ctrl_valid;
    bit<1>  pppoe_data_valid;
    bit<1>  sgt_valid;
    bit<1>  polka_valid;
    bit<1>  nsh_valid;
    bit<1>  mpls0_valid;
    bit<1>  mpls1_valid;
    bit<1>  llc_valid;
    bit<1>  arp_valid;
    bit<1>  ipv4_valid;
    bit<1>  ipv6_valid;
    bit<1>  layer3_frag;
    layer4_port_t  layer4_srcprt;
    layer4_port_t  layer4_dstprt;
    bit<16> sec_grp_id;
    bit<16> layer4_length;
}

#endif // _INGRESS_METADATA_P4_
