TNSM_Latency_Prediction / code / parser / example / headers.p4
headers.p4
Raw
/*  Define all the headers the program will recognize             */
/*  The actual sets of headers processed by each gress can differ */


header common_metadata_t{
    bit<32>      ts1;
    egressSpec_t output_port;
    bit<7>       _pad;
    bit<8>       switch_id;
    bit<8>       insert_word_c;
    bit<8>       added_int_metadata;
}

/*header ptp_metadata_t {
    bit<8>  udp_cksum_byte_offset;
    //1) Eth+IPv4+UDP = 42 bytes
    //2) Eth+MPLS+IPv4+UDP = 48 bytes
    //3) Eth+MPLS+IPv4+UDP+I_S+I_M = 64 bytes
    //4) Eth+MPLS+IPv4+UDP+I_S+I_M = 64 bytes
    bit<8>  cf_byte_offset;
    bit<48> updated_cf;
}*/

/* Standard ethernet header */
header ethernet_h {
    bit<48> dstAddr;
    bit<48> srcAddr;
    bit<16> etherType;
}//14 bytes

header mpls_h {
    mpls_label_t label_id;
    bit<3>       exp;
    bit<1>       bos;
    bit<8>       ttl;
}// 4 bytes

header ipv4_h {
    bit<4>    version;
    bit<4>    ihl;
    bit<6>    dscp;
    bit<2>    ecn;
    bit<16>   totalLen;
    bit<16>   identification;
    bit<3>    flags;
    bit<13>   fragOffset;
    bit<8>    ttl;
    bit<8>    protocol;
    bit<16>   hdrChecksum;
    ip4Addr_t srcAddr;
    ip4Addr_t dstAddr;
}//20 bytes

header tcp_h {
    bit<16> srcPort;
    bit<16> dstPort;
    bit<32> seqNo;
    bit<32> ackNo;
    bit<4>  dataOffset;
    bit<4>  res;
    bit<8>  flags;
    bit<16> window;
    bit<16> checksum;
    bit<16> urgentPtr;
}//20 bytes

header udp_h {
    bit<16> srcPort;
    bit<16> dstPort;
    bit<16> len;
    bit<16> checksum;
}//8 bytes

/* INT shim header for TCP/UDP */
header int_shim_h {
    bit<4>  _type;
    bit<2>  npt;
    bit<1>  res1;
    bit<1>  res2;
    bit<8>  len;
    bit<16> npt_field; // npt=0 -> , npt=1 -> orignal UDP port, npt=2 ->IP proto
}//4 bytes

/* INT-MD Metadata header v2.1*/
header int_meta_h {
    bit<4> ver;
    bit<1> d;
    bit<1> e;
    bit<1> m;
    bit<12> rsvd1;
    bit<5> hop_metadata_len;
    bit<8> remaining_hop_cnt;
    bit<4> instruction_mask_0003; // check instructions from bit 0 to bit 3
    bit<4> instruction_mask_0407; // check instructions from bit 4 to bit 7
    bit<4> instruction_mask_0811; // check instructions from bit 8 to bit 11
    bit<4> instruction_mask_1215; // check instructions from bit 12 to bit 15
    bit<16> domain_sp_id;
    bit<16> ds_inst;
    bit<16> ds_flags;
}// 12 bytes

header int_metadata_stack_h {
    bit<64> data;
}

header int_switch_id_h {
    bit<32> switch_id;
}// 4 bytes

/*header int_ingress_port_h {
    bit<16> pad;
    bit<16> ingress_port;
}*/

header int_timestamp_ig_h {
    bit<32> igs;
}// 6 bytes

header int_timestamp_eg_h {
    bit<64> egs;
}// 6 bytes

// Telemetry Report Group Header (2.0)
header int_report_group_h {
    bit<4> ver;
    bit<6> hw_id;
    bit<22> seqNo;
    bit<32> node_id;
}//8 bytes

// Individual Report Header (2.0)
header int_report_indiv_h {
    bit<4> rep_type;
    bit<4> in_type;
    // rep_len determines presence of multiple reports
    // corresponding to multiple data plane packets.
    // Shall be compared with UDP len.
    bit<8> rep_len;
    bit<8> md_len;
    bit<1> d;
    bit<1> q;
    bit<1> f;
    bit<1> i;
    bit<4> rsvd;
}//4 bytes

// Individual Report Main Contents for RepType 1 (INT)
// Not used
header int_indiv_main_h {
    bit<16> rep_md;
    bit<16> domain_sp_id;
    bit<16> ds_md;
    bit<16> dom_md_st;
}//8 bytes

// Individual Report Inner Contents for InType 1 (TLV)
//Not used
header int_indiv_inner_h {
    bit<4> tlv_type;
    bit<4> rsvd;
    bit<8> tlv_len;
    bit<16> tlv_temp;
}//4 bytes



struct my_ingress_headers_t {
    common_metadata_t     common_metadata;
    ptp_metadata_t        ptp_metadata;
    ethernet_h            ethernet;
    mpls_h                mpls;
    ipv4_h                ipv4;
    tcp_h                 tcp;
    udp_h                 udp;
    int_shim_h            int_shim;
    int_meta_h            int_meta;
    int_switch_id_h       int_switch_id;
    int_timestamp_ig_h    int_timestamp_ig;
    int_metadata_stack_h  int_metadata_stack2;
    int_metadata_stack_h  int_metadata_stack1;
}

struct my_egress_headers_t {
    common_metadata_t     common_metadata;
    ptp_metadata_t        ptp_metadata;
    ethernet_h            report_ethernet;
    ipv4_h                report_ipv4;
    udp_h                 report_udp;
    int_report_group_h    int_grp_report;
    int_report_indiv_h    int_ind_report;
    ethernet_h            ethernet; // 14
    mpls_h                mpls; // 4
    ipv4_h                ipv4; // 20
    tcp_h                 tcp;
    udp_h                 udp; // 8
    int_shim_h            int_shim; // 4
    int_meta_h            int_meta; // 12
    int_metadata_stack_h  int_metadata_stack2; // 4
    int_metadata_stack_h  int_metadata_stack1; // 4
    int_timestamp_ig_h    int_timestamp_ig; // 4
    //int_timestamp_eg_h    int_timestamp_eg; // 8
}