/* * Copyright 2022-present Nehal Baganal * * 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. */ enum bit<16> ether_type_t { IPV4 = 0x0800, ARP = 0x0806, TPID = 0x8100, IPV6 = 0x86DD, MPLS = 0x8847 } enum bit<8> ip_proto_t { TCP = 6, ICMP = 1, UDP = 17 } header ethernet_h { bit<48> dstAddr; bit<48> srcAddr; bit<16> etherType; } header ipv4_h { bit<4> version; bit<4> ihl; bit<6> diffserv; bit<2> ECN; bit<16> total_len; bit<16> identification; bit<3> flags; bit<13> frag_offset; bit<8> ttl; bit<8> protocol; bit<16> hdr_checksum; bit<32> src_addr; bit<32> dst_addr; } header tcp_h { bit<16> src_port; bit<16> dst_port; bit<32> seq_no; bit<32> ack_no; bit<4> data_offset; bit<4> res; // bit<8> flags; bit<1> CWR; bit<1> ECE; bit<1> URG; bit<1> ACK; bit<1> PSH; bit<1> RST; bit<1> SYN; bit<1> FIN; bit<16> window; bit<16> checksum; bit<16> urgent_ptr; } header tcp_opt_h { bit<32> data; } typedef tcp_opt_h[10] tcp_opt_t; header udp_h { bit<16> src_port; bit<16> dst_port; bit<16> len; bit<16> checksum; } header icmp_h { bit<16> type_code; bit<16> checksum; } header my_tstamp_t { bit<8> drop_flag; //To make the header byte size //bit<1> ECE_flag; //To indicate that payload has ECE timestamp //bit<1> CWR_flag; //To indicate that payload has CWR timestamp bit<16> drop_tstamp_high; bit<32> drop_tstamp_low; } struct headers_t { ethernet_h ethernet; ipv4_h ipv4; icmp_h icmp; tcp_h tcp; tcp_opt_h[10] tcp_opt; udp_h udp; my_tstamp_t my_tstamp; } header bridged_metadata_t { bit<48> ingress_tstamp; bit<8> ingress_port; bit<4> drop_counter_result; bit<4> dummy; bit<13> temp_frag_offset; bit<3> dummy1; } struct my_metadata_t { bridged_metadata_t bridged_metadata; }