Fix bugs from fabric.p4

 - Incorrect selector for hashed table
 - Incorrect counter type for port counter

Change-Id: I04af95bfbb17b9ca407313b3b3bfdfa9efbf1fa4
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index e0ebbe8..c76fc65 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -103,8 +103,8 @@
     table hashed {
         key = {
             fabric_metadata.next_id: exact;
-            hdr.ethernet.dst_addr: selector;
-            hdr.ethernet.src_addr: selector;
+            hdr.ipv4.dst_addr: selector;
+            hdr.ipv4.src_addr: selector;
             fabric_metadata.ip_proto: selector;
             fabric_metadata.l4_src_port: selector;
             fabric_metadata.l4_dst_port: selector;
diff --git a/pipelines/fabric/src/main/resources/include/control/port_counter.p4 b/pipelines/fabric/src/main/resources/include/control/port_counter.p4
index 80ec64f..3e9ea00 100644
--- a/pipelines/fabric/src/main/resources/include/control/port_counter.p4
+++ b/pipelines/fabric/src/main/resources/include/control/port_counter.p4
@@ -20,8 +20,8 @@
 #include "../header.p4"
 
 control PortCountersControl(inout parsed_headers_t hdr, inout fabric_metadata_t fabric_metadata, inout standard_metadata_t standard_metadata) {
-    counter(MAX_PORTS, CounterType.packets) egress_port_counter;
-    counter(MAX_PORTS, CounterType.packets) ingress_port_counter;
+    counter(MAX_PORTS, CounterType.packets_and_bytes) egress_port_counter;
+    counter(MAX_PORTS, CounterType.packets_and_bytes) ingress_port_counter;
 
     apply {
         if (standard_metadata.egress_spec < MAX_PORTS) {
diff --git a/pipelines/fabric/src/main/resources/include/define.p4 b/pipelines/fabric/src/main/resources/include/define.p4
index 163c2ab..eb61f91 100644
--- a/pipelines/fabric/src/main/resources/include/define.p4
+++ b/pipelines/fabric/src/main/resources/include/define.p4
@@ -36,8 +36,15 @@
 const bit<16> ETHERTYPE_IPV6 = 0x86dd;
 const bit<16> ETHERTYPE_ARP  = 0x0806;
 
-const bit<4> IP_VERSION_4 = 4;
-const bit<4> IP_VERSION_6 = 6;
+#ifndef IP_VER_LENGTH
+#define IP_VER_LENGTH 4
+#endif
+#ifndef IP_VERSION_4
+#define IP_VERSION_4 4
+#endif
+#ifndef IP_VERSION_6
+#define IP_VERSION_6 6
+#endif
 
 const bit<8> PROTO_ICMP = 1;
 const bit<8> PROTO_TCP = 6;
diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4
index f4b3252..8b03da1 100644
--- a/pipelines/fabric/src/main/resources/include/parser.p4
+++ b/pipelines/fabric/src/main/resources/include/parser.p4
@@ -70,7 +70,7 @@
         // There is only one MPLS label for this fabric.
         // Assume header after MPLS header is IP/IPv6
         // Lookup first 4 bits for version
-        transition select(packet.lookahead<bit<4>>()) {
+        transition select(packet.lookahead<bit<IP_VER_LENGTH>>()) {
             //The packet should be either IPv4 or IPv6.
             IP_VERSION_4: parse_ipv4;
 #ifdef WITH_IPV6
@@ -162,7 +162,7 @@
 }
 
 control FabricDeparser(packet_out packet, in parsed_headers_t hdr) {
-    apply{
+    apply {
         packet.emit(hdr.packet_in);
         packet.emit(hdr.ethernet);
         packet.emit(hdr.vlan_tag);