Added tor.p4 to p4src
Change-Id: I8c3a02dee76cbe45e0f9a4f7ca1f93a6f1d8a016
diff --git a/tools/test/p4src/tor/headers.p4 b/tools/test/p4src/tor/headers.p4
new file mode 100644
index 0000000..7284a3f
--- /dev/null
+++ b/tools/test/p4src/tor/headers.p4
@@ -0,0 +1,145 @@
+// Copyright (c) 2017, Google Inc.
+//
+// Common header definitions.
+// Note: This code has not been tested and is expected to contain bugs.
+
+#ifndef P4_SPEC_HEADERS_P4_
+#define P4_SPEC_HEADERS_P4_
+
+//------------------------------------------------------------------------------
+// Field type definitions
+//------------------------------------------------------------------------------
+
+typedef bit<48> EthernetAddress;
+typedef bit<32> IPv4Address;
+typedef bit<128> IPv6Address;
+typedef bit<9> PortNum;
+
+//------------------------------------------------------------------------------
+// Protocol header definitions
+//------------------------------------------------------------------------------
+
+header ethernet_t {
+ EthernetAddress dst_addr;
+ EthernetAddress src_addr;
+ bit<16> ether_type;
+}
+
+header ipv4_base_t {
+ bit<4> version;
+ bit<4> ihl;
+ bit<8> diffserv;
+ bit<16> total_len;
+ bit<16> identification;
+ bit<3> flags;
+ bit<13> frag_offset;
+ bit<8> ttl;
+ bit<8> protocol;
+ bit<16> hdr_checksum;
+ IPv4Address src_addr;
+ IPv4Address dst_addr;
+}
+
+// Fixed ipv6 header
+header ipv6_base_t {
+ bit<4> version;
+ bit<8> traffic_class;
+ bit<20> flow_label;
+ bit<16> payload_length;
+ bit<8> next_header;
+ bit<8> hop_limit;
+ IPv6Address src_addr;
+ IPv6Address dst_addr;
+}
+
+header udp_t {
+ bit<16> src_port;
+ bit<16> dst_port;
+ bit<16> hdr_length;
+ bit<16> checksum;
+}
+
+header tcp_t {
+ 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<16> window;
+ bit<16> checksum;
+ bit<16> urgent_ptr;
+}
+
+// Same for both ip v4 and v6
+header icmp_header_t {
+ bit<8> icmp_type;
+ bit<8> code;
+ bit<16> checksum;
+}
+
+header vlan_tag_t {
+ bit<3> pcp;
+ bit cfi;
+ bit<12> vid;
+ bit<16> ether_type;
+}
+
+header arp_t {
+ bit<16> hw_type;
+ bit<16> proto_type;
+ bit<8> hw_addr_len;
+ bit<8> proto_addr_len;
+ bit<16> opcode;
+ bit<48> sender_hw_addr;
+ bit<32> sender_proto_addr;
+ bit<48> target_hw_addr;
+ bit<32> target_proto_addr;
+}
+
+//------------------------------------------------------------------------------
+// Controller header definitions
+//------------------------------------------------------------------------------
+
+@controller_header("packet_in")
+header packet_in_header_t {
+ // TODO(samarabdi) Change once we move from 9 to 32 bits
+ @proto_tag(1) bit<9> ingress_physical_port;
+ @proto_tag(4) bit<7> padding1;
+ @proto_tag(2) bit<32> ingress_logical_port;
+ // The initial intended egress port decided for the packet by the pipeline.
+ // This is standard metadata.egress_spec at the time the punt-rule was hit.
+ // TODO(samarabdi) Change once we move from 9 to 32 bits
+ @proto_tag(3) bit<9> target_egress_port;
+ @proto_tag(5) bit<7> padding2;
+}
+
+@not_extracted_in_egress
+@controller_header("packet_out")
+header packet_out_header_t {
+ // TODO(samarabdi) Change once we move from 9 to 32 bits
+ @proto_tag(1) bit<9> egress_physical_port;
+ @proto_tag(2) bit<1> submit_to_ingress;
+ @proto_tag(3) bit<6> padding;
+}
+
+//------------------------------------------------------------------------------
+// Metadata definition
+//------------------------------------------------------------------------------
+
+// Local meta-data for each packet being processed.
+// TODO(samarabdi): Evaluate if this should be role-based.
+struct local_metadata_t {
+ bit<32> vrf_id;
+ bit<8> class_id; // Dst traffic class ID (IPSP)
+ bit<5> cpu_cos_queue_id;
+ bit<1> skip_egress;
+ // TODO(samarabdi) Change once we move from 9 to 32 bits
+ bit<9> egress_spec_at_punt_match;
+ bit<2> color;
+ bit<16> l4_src_port;
+ bit<16> l4_dst_port;
+ bit<8> icmp_code;
+}
+#endif // P4_SPEC_HEADERS_P4_