control Egress(
/* User */
inout my_egress_headers_t hdr,
inout my_egress_metadata_t meta,
/* Intrinsic */
in egress_intrinsic_metadata_t eg_intr_md,
in egress_intrinsic_metadata_from_parser_t eg_prsr_md,
inout egress_intrinsic_metadata_for_deparser_t eg_dprsr_md,
inout egress_intrinsic_metadata_for_output_port_t eg_oport_md)
{
action add_egs_mac_ts(bit<8> offset){
eg_oport_md.update_delay_on_tx = 1;
hdr.ptp_metadata.setValid();
hdr.ptp_metadata.udp_cksum_byte_offset = 0;
hdr.ptp_metadata.cf_byte_offset = offset;
hdr.ptp_metadata.updated_cf = 0;
}
table timestamp_eg_t {
key = {
}
actions = {
add_egs_mac_ts;
NoAction;
}
//default_action = add_egs_mac_ts(42); //Eth+IP+UDP = 14+20+8 = 42
default_action = add_egs_mac_ts(14); //Eth+IP+UDP = 14+20+8 = 42
size = 1;
}
apply{
hdr.ts_egress.setValid();
hdr.ts_egress.ts3 = (bit<24>)eg_intr_md.enq_tstamp;
hdr.ts_egress.ts4 = (bit<24>)eg_intr_md.deq_timedelta;
hdr.ts_egress.ts5 = eg_prsr_md.global_tstamp;
timestamp_eg_t.apply();
hdr.ethernet.etherType = 0xABCD;
}
}