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_