Bump version of P4Runtime to 1.0.0rc3 and P4 tools

Change-Id: I3082b4bd772d692830bd5af8e326a0fd5fb2f167
diff --git a/apps/p4-tutorial/pipeconf/src/main/resources/mytunnel.json b/apps/p4-tutorial/pipeconf/src/main/resources/mytunnel.json
index 4c60e76..913e72e 100644
--- a/apps/p4-tutorial/pipeconf/src/main/resources/mytunnel.json
+++ b/apps/p4-tutorial/pipeconf/src/main/resources/mytunnel.json
@@ -35,6 +35,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -146,7 +147,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -345,7 +353,13 @@
       "name" : "c_ingress.l2_fwd_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "c_ingress.t_l2_fwd"
+      "binding" : "c_ingress.t_l2_fwd",
+      "source_info" : {
+        "filename" : "mytunnel.p4",
+        "line" : 189,
+        "column" : 50,
+        "source_fragment" : "l2_fwd_counter"
+      }
     }
   ],
   "register_arrays" : [],
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntry.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntry.java
index 5f68e40..6a848ac 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntry.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntry.java
@@ -34,10 +34,10 @@
 @Beta
 public final class PiMulticastGroupEntry implements PiPreEntry {
 
-    private final long groupId;
+    private final int groupId;
     private final Set<PiPreReplica> replicas;
 
-    private PiMulticastGroupEntry(long groupId, Set<PiPreReplica> replicas) {
+    private PiMulticastGroupEntry(int groupId, Set<PiPreReplica> replicas) {
         this.groupId = groupId;
         this.replicas = replicas;
     }
@@ -48,7 +48,7 @@
      *
      * @return group entry ID
      */
-    public long groupId() {
+    public int groupId() {
         return groupId;
     }
 
@@ -111,7 +111,7 @@
      */
     public static final class Builder {
 
-        private Long groupId;
+        private Integer groupId;
         private ImmutableSet.Builder<PiPreReplica> replicaSetBuilder = ImmutableSet.builder();
 
         private Builder() {
@@ -124,7 +124,7 @@
          * @param groupId group ID
          * @return this
          */
-        public Builder withGroupId(long groupId) {
+        public Builder withGroupId(int groupId) {
             this.groupId = groupId;
             return this;
         }
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPreReplica.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPreReplica.java
index ea7003d..b661d27 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPreReplica.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPreReplica.java
@@ -32,7 +32,7 @@
 public class PiPreReplica {
 
     private final PortNumber egressPort;
-    private final long instanceId;
+    private final int instanceId;
 
     /**
      * Returns a new PRE packet replica for the given egress port and instance
@@ -41,7 +41,7 @@
      * @param egressPort egress port
      * @param instanceId instance ID
      */
-    public PiPreReplica(PortNumber egressPort, long instanceId) {
+    public PiPreReplica(PortNumber egressPort, int instanceId) {
         this.egressPort = checkNotNull(egressPort);
         this.instanceId = instanceId;
     }
@@ -60,7 +60,7 @@
      *
      * @return instance ID
      */
-    public long instanceId() {
+    public int instanceId() {
         return instanceId;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryTest.java
index 7c060ef..049a902 100644
--- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryTest.java
+++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryTest.java
@@ -28,10 +28,10 @@
  * Tests for {@link PiMulticastGroupEntry}.
  */
 public class PiMulticastGroupEntryTest {
-    private final long groupId1 = 1;
-    private final long groupId2 = 2;
+    private final int groupId1 = 1;
+    private final int groupId2 = 2;
 
-    private final long instanceId1 = 1;
+    private final int instanceId1 = 1;
 
     private final PortNumber port1 = PortNumber.portNumber(1);
     private final PortNumber port2 = PortNumber.portNumber(2);
diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiPreReplicaTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiPreReplicaTest.java
index 85ea36e..ef6e7d8 100644
--- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiPreReplicaTest.java
+++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiPreReplicaTest.java
@@ -28,8 +28,8 @@
  */
 public class PiPreReplicaTest {
 
-    private final long instanceId1 = 1;
-    private final long instanceId2 = 2;
+    private final int instanceId1 = 1;
+    private final int instanceId2 = 2;
     private final PortNumber port1 = PortNumber.portNumber(1);
     private final PortNumber port2 = PortNumber.portNumber(2);
 
diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
index 5769494..2e428be 100644
--- a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
+++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
@@ -40,6 +40,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding_0", 5, false]
       ]
     },
@@ -178,7 +179,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -485,13 +493,25 @@
       "name" : "ingress.table0_control.table0_counter",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "ingress.table0_control.table0"
+      "binding" : "ingress.table0_control.table0",
+      "source_info" : {
+        "filename" : "include/table0.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "table0_counter"
+      }
     },
     {
       "name" : "ingress.wcmp_control.wcmp_table_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "ingress.wcmp_control.wcmp_table"
+      "binding" : "ingress.wcmp_control.wcmp_table",
+      "source_info" : {
+        "filename" : "include/wcmp.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "wcmp_table_counter"
+      }
     },
     {
       "name" : "egress.port_counters_egress.egress_port_counter",
@@ -1338,6 +1358,12 @@
         {
           "name" : "ingress.wcmp_control.wcmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/wcmp.p4",
+            "line" : 28,
+            "column" : 55,
+            "source_fragment" : "wcmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json
index 13a1d41..f83c2ea 100644
--- a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json
+++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json
@@ -40,6 +40,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding_0", 5, false]
       ]
     },
@@ -388,7 +389,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -970,43 +978,85 @@
       "name" : "ingress.table0_control.table0_counter",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "ingress.table0_control.table0"
+      "binding" : "ingress.table0_control.table0",
+      "source_info" : {
+        "filename" : "include/table0.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "table0_counter"
+      }
     },
     {
       "name" : "egress.process_set_source_sink.counter_set_source",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "egress.process_set_source_sink.tb_set_source"
+      "binding" : "egress.process_set_source_sink.tb_set_source",
+      "source_info" : {
+        "filename" : "include/int_source.p4",
+        "line" : 90,
+        "column" : 50,
+        "source_fragment" : "counter_set_source"
+      }
     },
     {
       "name" : "egress.process_set_source_sink.counter_set_sink",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "egress.process_set_source_sink.tb_set_sink"
+      "binding" : "egress.process_set_source_sink.tb_set_sink",
+      "source_info" : {
+        "filename" : "include/int_source.p4",
+        "line" : 91,
+        "column" : 50,
+        "source_fragment" : "counter_set_sink"
+      }
     },
     {
       "name" : "egress.process_int_source.counter_int_source",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "egress.process_int_source.tb_int_source"
+      "binding" : "egress.process_int_source.tb_int_source",
+      "source_info" : {
+        "filename" : "include/int_source.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "counter_int_source"
+      }
     },
     {
       "name" : "egress.process_int_transit.counter_int_insert",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "egress.process_int_transit.tb_int_insert"
+      "binding" : "egress.process_int_transit.tb_int_insert",
+      "source_info" : {
+        "filename" : "include/int_transit.p4",
+        "line" : 25,
+        "column" : 50,
+        "source_fragment" : "counter_int_insert"
+      }
     },
     {
       "name" : "egress.process_int_transit.counter_int_inst_0003",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "egress.process_int_transit.tb_int_inst_0003"
+      "binding" : "egress.process_int_transit.tb_int_inst_0003",
+      "source_info" : {
+        "filename" : "include/int_transit.p4",
+        "line" : 26,
+        "column" : 50,
+        "source_fragment" : "counter_int_inst_0003"
+      }
     },
     {
       "name" : "egress.process_int_transit.counter_int_inst_0407",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "egress.process_int_transit.tb_int_inst_0407"
+      "binding" : "egress.process_int_transit.tb_int_inst_0407",
+      "source_info" : {
+        "filename" : "include/int_transit.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "counter_int_inst_0407"
+      }
     },
     {
       "name" : "egress.port_counters_egress.egress_port_counter",
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
index c7d78e8..b20a1ff 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
@@ -56,6 +56,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -345,6 +346,8 @@
         ["switch_id", 32, false],
         ["new_words", 8, false],
         ["new_bytes", 16, false],
+        ["ig_tstamp", 32, false],
+        ["eg_tstamp", 32, false],
         ["_padding_1", 5, false]
       ]
     }
@@ -614,7 +617,14 @@
       "elements" : []
     }
   ],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -1529,85 +1539,169 @@
       "name" : "FabricIngress.spgw_ingress.ue_counter",
       "id" : 0,
       "is_direct" : true,
-      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup"
+      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 51,
+        "column" : 50,
+        "source_fragment" : "ue_counter"
+      }
     },
     {
       "name" : "FabricIngress.process_set_source_sink.counter_set_source",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "FabricIngress.process_set_source_sink.tb_set_source"
+      "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+      "source_info" : {
+        "filename" : "include/int/int_main.p4",
+        "line" : 39,
+        "column" : 50,
+        "source_fragment" : "counter_set_source"
+      }
     },
     {
       "name" : "FabricIngress.process_set_source_sink.counter_set_sink",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "FabricIngress.process_set_source_sink.tb_set_sink"
+      "binding" : "FabricIngress.process_set_source_sink.tb_set_sink",
+      "source_info" : {
+        "filename" : "include/int/int_main.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "counter_set_sink"
+      }
     },
     {
       "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.ingress_port_vlan"
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.fwd_classifier_counter",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.fwd_classifier"
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 96,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.bridging_counter",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.bridging"
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.mpls_counter",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.mpls"
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 57,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v4_counter",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v4"
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 80,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.acl_counter",
       "id" : 8,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.acl"
+      "binding" : "FabricIngress.forwarding.acl",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 107,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v6_counter",
       "id" : 9,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v6"
+      "binding" : "FabricIngress.forwarding.routing_v6",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 171,
+        "column" : 50,
+        "source_fragment" : "routing_v6_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.vlan_meta_counter",
       "id" : 10,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.vlan_meta"
+      "binding" : "FabricIngress.next.vlan_meta",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "vlan_meta_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
       "id" : 11,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.simple"
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 82,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
       "id" : 12,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.hashed"
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 146,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
       "id" : 13,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.multicast"
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 199,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
@@ -1637,13 +1731,25 @@
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
       "id" : 16,
       "is_direct" : true,
-      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source"
+      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+      "source_info" : {
+        "filename" : "include/int/int_source.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "counter_int_source"
+      }
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
       "id" : 17,
       "is_direct" : true,
-      "binding" : "FabricEgress.egress_next.egress_vlan"
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 250,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
     }
   ],
   "register_arrays" : [],
@@ -2278,7 +2384,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 91,
+            "line" : 99,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -2942,7 +3048,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3018,7 +3124,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3133,7 +3239,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3209,7 +3315,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3501,7 +3607,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3577,7 +3683,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3692,7 +3798,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3768,7 +3874,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3886,7 +3992,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 50,
             "source_fragment" : "hdr.gtpu_ipv4"
           }
@@ -3901,7 +4007,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 65,
             "source_fragment" : "hdr.gtpu_udp"
           }
@@ -4192,7 +4298,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 121,
+            "line" : 129,
             "column" : 36,
             "source_fragment" : "2w1; ..."
           }
@@ -4278,7 +4384,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 122,
+            "line" : 130,
             "column" : 38,
             "source_fragment" : "2w2; ..."
           }
@@ -4304,7 +4410,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 128,
             "column" : 37,
             "source_fragment" : "2w0; ..."
           }
@@ -4475,7 +4581,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 111,
+            "line" : 119,
             "column" : 31,
             "source_fragment" : "7; ..."
           }
@@ -4501,7 +4607,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4984,7 +5090,13 @@
               "type" : "hexstr",
               "value" : "0x1"
             }
-          ]
+          ],
+          "source_info" : {
+            "filename" : "include/int/int_main.p4",
+            "line" : 85,
+            "column" : 12,
+            "source_fragment" : "clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID)"
+          }
         }
       ]
     },
@@ -5131,7 +5243,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 103,
+            "line" : 111,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -5287,7 +5399,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 116,
+            "line" : 124,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -5306,7 +5418,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 100,
+            "line" : 108,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -5740,7 +5852,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 131,
+            "line" : 139,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -6158,7 +6270,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 127,
+            "line" : 135,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -12188,7 +12300,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -12416,7 +12528,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 100,
+            "line" : 108,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -12602,7 +12714,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 137,
+            "line" : 145,
             "column" : 31,
             "source_fragment" : "0; ..."
           }
@@ -12697,7 +12809,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 141,
+            "line" : 149,
             "column" : 21,
             "source_fragment" : "1; ..."
           }
@@ -13300,7 +13412,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 374,
+            "line" : 376,
             "column" : 12,
             "source_fragment" : "return"
           }
@@ -13349,7 +13461,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 382,
+            "line" : 384,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
           }
@@ -13398,7 +13510,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 379,
+            "line" : 381,
             "column" : 8,
             "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
           }
@@ -13447,7 +13559,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 385,
+            "line" : 387,
             "column" : 12,
             "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
           }
@@ -13496,7 +13608,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 388,
+            "line" : 390,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words"
           }
@@ -14952,6 +15064,12 @@
         {
           "name" : "FabricIngress.next.ecmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 145,
+            "column" : 55,
+            "source_fragment" : "ecmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
@@ -15578,7 +15696,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -15885,7 +16003,7 @@
           "id" : 59,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 284,
+            "line" : 286,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0003"
           },
@@ -15899,7 +16017,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -15933,6 +16051,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 310,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15946,6 +16070,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 311,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15959,6 +16089,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 312,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15972,6 +16108,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 313,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15985,6 +16127,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 314,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15998,6 +16146,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 315,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16011,6 +16165,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 316,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16024,6 +16184,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 317,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16037,6 +16203,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 318,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16050,6 +16222,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 319,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16063,6 +16241,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 320,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16076,6 +16260,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 321,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16089,6 +16279,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 322,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16102,6 +16298,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 323,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16115,6 +16317,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 324,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16128,6 +16336,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 325,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16147,7 +16361,7 @@
           "id" : 60,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 328,
+            "line" : 330,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0407"
           },
@@ -16161,7 +16375,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -16195,6 +16409,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 354,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16208,6 +16428,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 355,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16221,6 +16447,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 356,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16234,6 +16466,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 357,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16247,6 +16485,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 358,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16260,6 +16504,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 359,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16273,6 +16523,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 360,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16286,6 +16542,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 361,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16299,6 +16561,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 362,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16312,6 +16580,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 363,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16325,6 +16599,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 364,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16338,6 +16618,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 365,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16351,6 +16637,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 366,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16364,6 +16656,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 367,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16377,6 +16675,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 368,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16390,6 +16694,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 369,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -16964,7 +17274,7 @@
           "id" : 32,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 373,
+            "line" : 375,
             "column" : 12,
             "source_fragment" : "fmeta.int_meta.transit == false"
           },
@@ -17021,7 +17331,7 @@
           "id" : 34,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 381,
+            "line" : 383,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -17044,7 +17354,7 @@
           "id" : 35,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 384,
+            "line" : 386,
             "column" : 12,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -17067,7 +17377,7 @@
           "id" : 36,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 387,
+            "line" : 389,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.isValid()"
           },
@@ -17151,6 +17461,12 @@
     {
       "name" : "cksum",
       "id" : 0,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 28,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc",
@@ -17169,6 +17485,12 @@
     {
       "name" : "cksum_0",
       "id" : 1,
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 237,
+        "column" : 8,
+        "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+      },
       "target" : ["gtpu_ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_0",
@@ -17187,6 +17509,12 @@
     {
       "name" : "cksum_1",
       "id" : 2,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 57,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_1",
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
index 293212f..4f390ee 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
@@ -50,6 +50,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -283,6 +284,8 @@
         ["switch_id", 32, false],
         ["new_words", 8, false],
         ["new_bytes", 16, false],
+        ["ig_tstamp", 32, false],
+        ["eg_tstamp", 32, false],
         ["_padding_0", 5, false]
       ]
     }
@@ -469,7 +472,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -1016,67 +1026,133 @@
       "name" : "FabricIngress.process_set_source_sink.counter_set_source",
       "id" : 0,
       "is_direct" : true,
-      "binding" : "FabricIngress.process_set_source_sink.tb_set_source"
+      "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+      "source_info" : {
+        "filename" : "include/int/int_main.p4",
+        "line" : 39,
+        "column" : 50,
+        "source_fragment" : "counter_set_source"
+      }
     },
     {
       "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.ingress_port_vlan"
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.fwd_classifier_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.fwd_classifier"
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 96,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.bridging_counter",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.bridging"
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.mpls_counter",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.mpls"
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 57,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v4_counter",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v4"
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 80,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.acl_counter",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.acl"
+      "binding" : "FabricIngress.forwarding.acl",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 107,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.vlan_meta_counter",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.vlan_meta"
+      "binding" : "FabricIngress.next.vlan_meta",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "vlan_meta_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
       "id" : 8,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.simple"
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 82,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
       "id" : 9,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.hashed"
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 146,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
       "id" : 10,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.multicast"
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 199,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
@@ -1106,13 +1182,25 @@
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
       "id" : 13,
       "is_direct" : true,
-      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source"
+      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+      "source_info" : {
+        "filename" : "include/int/int_source.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "counter_int_source"
+      }
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
       "id" : 14,
       "is_direct" : true,
-      "binding" : "FabricEgress.egress_next.egress_vlan"
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 250,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
     }
   ],
   "register_arrays" : [],
@@ -1470,7 +1558,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 91,
+            "line" : 99,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -2103,7 +2191,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2179,7 +2267,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2294,7 +2382,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2370,7 +2458,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2662,7 +2750,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2738,7 +2826,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2853,7 +2941,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2929,7 +3017,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3145,7 +3233,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 111,
+            "line" : 119,
             "column" : 31,
             "source_fragment" : "7; ..."
           }
@@ -3171,7 +3259,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3743,7 +3831,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 131,
+            "line" : 139,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -4161,7 +4249,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 127,
+            "line" : 135,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -10280,7 +10368,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 374,
+            "line" : 376,
             "column" : 12,
             "source_fragment" : "return"
           }
@@ -10329,7 +10417,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 382,
+            "line" : 384,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
           }
@@ -10378,7 +10466,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 379,
+            "line" : 381,
             "column" : 8,
             "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
           }
@@ -10427,7 +10515,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 385,
+            "line" : 387,
             "column" : 12,
             "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
           }
@@ -10476,7 +10564,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 388,
+            "line" : 390,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words"
           }
@@ -11370,6 +11458,12 @@
         {
           "name" : "FabricIngress.next.ecmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 145,
+            "column" : 55,
+            "source_fragment" : "ecmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
@@ -11743,7 +11837,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -12027,7 +12121,7 @@
           "id" : 36,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 284,
+            "line" : 286,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0003"
           },
@@ -12041,7 +12135,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -12075,6 +12169,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 310,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12088,6 +12188,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 311,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12101,6 +12207,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 312,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12114,6 +12226,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 313,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12127,6 +12245,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 314,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12140,6 +12264,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 315,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12153,6 +12283,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 316,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12166,6 +12302,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 317,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12179,6 +12321,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 318,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12192,6 +12340,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 319,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12205,6 +12359,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 320,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12218,6 +12378,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 321,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12231,6 +12397,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 322,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12244,6 +12416,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 323,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12257,6 +12435,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 324,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12270,6 +12454,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 325,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12289,7 +12479,7 @@
           "id" : 37,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 328,
+            "line" : 330,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0407"
           },
@@ -12303,7 +12493,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -12337,6 +12527,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 354,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12350,6 +12546,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 355,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12363,6 +12565,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 356,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12376,6 +12584,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 357,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12389,6 +12603,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 358,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12402,6 +12622,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 359,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12415,6 +12641,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 360,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12428,6 +12660,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 361,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12441,6 +12679,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 362,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12454,6 +12698,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 363,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12467,6 +12717,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 364,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12480,6 +12736,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 365,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12493,6 +12755,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 366,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12506,6 +12774,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 367,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12519,6 +12793,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 368,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -12532,6 +12812,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 369,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -13004,7 +13290,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 373,
+            "line" : 375,
             "column" : 12,
             "source_fragment" : "fmeta.int_meta.transit == false"
           },
@@ -13061,7 +13347,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 381,
+            "line" : 383,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -13084,7 +13370,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 384,
+            "line" : 386,
             "column" : 12,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -13107,7 +13393,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 387,
+            "line" : 389,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.isValid()"
           },
@@ -13132,6 +13418,12 @@
     {
       "name" : "cksum",
       "id" : 0,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 28,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc",
@@ -13150,6 +13442,12 @@
     {
       "name" : "cksum_0",
       "id" : 1,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 57,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_0",
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
index 97da4eb..a4cce10 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
@@ -55,6 +55,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -315,6 +316,8 @@
         ["switch_id", 32, false],
         ["new_words", 8, false],
         ["new_bytes", 16, false],
+        ["ig_tstamp", 32, false],
+        ["eg_tstamp", 32, false],
         ["_padding_1", 5, false]
       ]
     }
@@ -543,7 +546,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -1284,73 +1294,145 @@
       "name" : "FabricIngress.spgw_ingress.ue_counter",
       "id" : 0,
       "is_direct" : true,
-      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup"
+      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 51,
+        "column" : 50,
+        "source_fragment" : "ue_counter"
+      }
     },
     {
       "name" : "FabricIngress.process_set_source_sink.counter_set_source",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "FabricIngress.process_set_source_sink.tb_set_source"
+      "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+      "source_info" : {
+        "filename" : "include/int/int_main.p4",
+        "line" : 39,
+        "column" : 50,
+        "source_fragment" : "counter_set_source"
+      }
     },
     {
       "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.ingress_port_vlan"
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.fwd_classifier_counter",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.fwd_classifier"
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 96,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.bridging_counter",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.bridging"
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.mpls_counter",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.mpls"
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 57,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v4_counter",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v4"
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 80,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.acl_counter",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.acl"
+      "binding" : "FabricIngress.forwarding.acl",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 107,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.vlan_meta_counter",
       "id" : 8,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.vlan_meta"
+      "binding" : "FabricIngress.next.vlan_meta",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "vlan_meta_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
       "id" : 9,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.simple"
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 82,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
       "id" : 10,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.hashed"
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 146,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
       "id" : 11,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.multicast"
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 199,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
@@ -1380,13 +1462,25 @@
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
       "id" : 14,
       "is_direct" : true,
-      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source"
+      "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+      "source_info" : {
+        "filename" : "include/int/int_source.p4",
+        "line" : 27,
+        "column" : 50,
+        "source_fragment" : "counter_int_source"
+      }
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
       "id" : 15,
       "is_direct" : true,
-      "binding" : "FabricEgress.egress_next.egress_vlan"
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 250,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
     }
   ],
   "register_arrays" : [],
@@ -1973,7 +2067,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 91,
+            "line" : 99,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -2606,7 +2700,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2682,7 +2776,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2797,7 +2891,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2873,7 +2967,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3165,7 +3259,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3241,7 +3335,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3356,7 +3450,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3432,7 +3526,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3550,7 +3644,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 50,
             "source_fragment" : "hdr.gtpu_ipv4"
           }
@@ -3565,7 +3659,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 65,
             "source_fragment" : "hdr.gtpu_udp"
           }
@@ -3856,7 +3950,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 121,
+            "line" : 129,
             "column" : 36,
             "source_fragment" : "2w1; ..."
           }
@@ -3942,7 +4036,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 122,
+            "line" : 130,
             "column" : 38,
             "source_fragment" : "2w2; ..."
           }
@@ -3968,7 +4062,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 128,
             "column" : 37,
             "source_fragment" : "2w0; ..."
           }
@@ -4139,7 +4233,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 111,
+            "line" : 119,
             "column" : 31,
             "source_fragment" : "7; ..."
           }
@@ -4165,7 +4259,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4720,7 +4814,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 103,
+            "line" : 111,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -4876,7 +4970,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 116,
+            "line" : 124,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -4895,7 +4989,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 100,
+            "line" : 108,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -5329,7 +5423,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 131,
+            "line" : 139,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -5747,7 +5841,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 127,
+            "line" : 135,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -11866,7 +11960,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 374,
+            "line" : 376,
             "column" : 12,
             "source_fragment" : "return"
           }
@@ -11915,7 +12009,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 382,
+            "line" : 384,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
           }
@@ -11964,7 +12058,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 379,
+            "line" : 381,
             "column" : 8,
             "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
           }
@@ -12013,7 +12107,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 385,
+            "line" : 387,
             "column" : 12,
             "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
           }
@@ -12062,7 +12156,7 @@
           ],
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 388,
+            "line" : 390,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words"
           }
@@ -13398,6 +13492,12 @@
         {
           "name" : "FabricIngress.next.ecmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 145,
+            "column" : 55,
+            "source_fragment" : "ecmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
@@ -13942,7 +14042,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -14249,7 +14349,7 @@
           "id" : 55,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 284,
+            "line" : 286,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0003"
           },
@@ -14263,7 +14363,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -14297,6 +14397,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 310,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14310,6 +14416,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 311,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14323,6 +14435,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 312,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14336,6 +14454,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 313,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14349,6 +14473,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 314,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14362,6 +14492,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 315,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14375,6 +14511,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 316,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14388,6 +14530,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 317,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14401,6 +14549,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 318,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14414,6 +14568,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 319,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14427,6 +14587,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 320,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14440,6 +14606,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 321,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14453,6 +14625,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 322,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14466,6 +14644,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 323,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14479,6 +14663,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 324,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14492,6 +14682,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 325,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14511,7 +14707,7 @@
           "id" : 56,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 328,
+            "line" : 330,
             "column" : 10,
             "source_fragment" : "tb_int_inst_0407"
           },
@@ -14525,7 +14721,7 @@
           ],
           "match_type" : "exact",
           "type" : "simple",
-          "max_size" : 16,
+          "max_size" : 1024,
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -14559,6 +14755,12 @@
           },
           "entries" : [
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 354,
+                "column" : 12,
+                "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14572,6 +14774,12 @@
               "priority" : 1
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 355,
+                "column" : 12,
+                "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14585,6 +14793,12 @@
               "priority" : 2
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 356,
+                "column" : 12,
+                "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14598,6 +14812,12 @@
               "priority" : 3
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 357,
+                "column" : 12,
+                "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14611,6 +14831,12 @@
               "priority" : 4
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 358,
+                "column" : 12,
+                "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14624,6 +14850,12 @@
               "priority" : 5
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 359,
+                "column" : 12,
+                "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14637,6 +14869,12 @@
               "priority" : 6
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 360,
+                "column" : 12,
+                "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14650,6 +14888,12 @@
               "priority" : 7
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 361,
+                "column" : 12,
+                "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14663,6 +14907,12 @@
               "priority" : 8
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 362,
+                "column" : 12,
+                "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14676,6 +14926,12 @@
               "priority" : 9
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 363,
+                "column" : 12,
+                "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14689,6 +14945,12 @@
               "priority" : 10
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 364,
+                "column" : 12,
+                "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14702,6 +14964,12 @@
               "priority" : 11
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 365,
+                "column" : 12,
+                "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14715,6 +14983,12 @@
               "priority" : 12
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 366,
+                "column" : 12,
+                "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14728,6 +15002,12 @@
               "priority" : 13
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 367,
+                "column" : 12,
+                "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14741,6 +15021,12 @@
               "priority" : 14
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 368,
+                "column" : 12,
+                "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -14754,6 +15040,12 @@
               "priority" : 15
             },
             {
+              "source_info" : {
+                "filename" : "include/int/int_transit.p4",
+                "line" : 369,
+                "column" : 12,
+                "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+              },
               "match_key" : [
                 {
                   "match_type" : "exact",
@@ -15252,7 +15544,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 373,
+            "line" : 375,
             "column" : 12,
             "source_fragment" : "fmeta.int_meta.transit == false"
           },
@@ -15309,7 +15601,7 @@
           "id" : 31,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 381,
+            "line" : 383,
             "column" : 12,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -15332,7 +15624,7 @@
           "id" : 32,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 384,
+            "line" : 386,
             "column" : 12,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -15355,7 +15647,7 @@
           "id" : 33,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
-            "line" : 387,
+            "line" : 389,
             "column" : 12,
             "source_fragment" : "hdr.intl4_shim.isValid()"
           },
@@ -15380,6 +15672,12 @@
     {
       "name" : "cksum",
       "id" : 0,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 28,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc",
@@ -15398,6 +15696,12 @@
     {
       "name" : "cksum_0",
       "id" : 1,
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 237,
+        "column" : 8,
+        "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+      },
       "target" : ["gtpu_ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_0",
@@ -15416,6 +15720,12 @@
     {
       "name" : "cksum_1",
       "id" : 2,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 57,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_1",
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
index 2d97498..a3db0a8 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
@@ -53,6 +53,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -331,7 +332,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -943,67 +951,133 @@
       "name" : "FabricIngress.spgw_ingress.ue_counter",
       "id" : 0,
       "is_direct" : true,
-      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup"
+      "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 51,
+        "column" : 50,
+        "source_fragment" : "ue_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.ingress_port_vlan"
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.fwd_classifier_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.fwd_classifier"
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 96,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.bridging_counter",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.bridging"
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.mpls_counter",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.mpls"
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 57,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v4_counter",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v4"
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 80,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.acl_counter",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.acl"
+      "binding" : "FabricIngress.forwarding.acl",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 107,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.vlan_meta_counter",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.vlan_meta"
+      "binding" : "FabricIngress.next.vlan_meta",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "vlan_meta_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
       "id" : 8,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.simple"
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 82,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
       "id" : 9,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.hashed"
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 146,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
       "id" : 10,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.multicast"
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 199,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
@@ -1033,7 +1107,13 @@
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
       "id" : 13,
       "is_direct" : true,
-      "binding" : "FabricEgress.egress_next.egress_vlan"
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 250,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
     }
   ],
   "register_arrays" : [],
@@ -1578,7 +1658,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 91,
+            "line" : 99,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -2211,7 +2291,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2287,7 +2367,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2402,7 +2482,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2478,7 +2558,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2770,7 +2850,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2846,7 +2926,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2961,7 +3041,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3037,7 +3117,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -3155,7 +3235,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 50,
             "source_fragment" : "hdr.gtpu_ipv4"
           }
@@ -3170,7 +3250,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 54,
+            "line" : 55,
             "column" : 65,
             "source_fragment" : "hdr.gtpu_udp"
           }
@@ -3461,7 +3541,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 121,
+            "line" : 129,
             "column" : 36,
             "source_fragment" : "2w1; ..."
           }
@@ -3547,7 +3627,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 122,
+            "line" : 130,
             "column" : 38,
             "source_fragment" : "2w2; ..."
           }
@@ -3573,7 +3653,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 128,
             "column" : 37,
             "source_fragment" : "2w0; ..."
           }
@@ -3744,7 +3824,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 111,
+            "line" : 119,
             "column" : 31,
             "source_fragment" : "7; ..."
           }
@@ -3770,7 +3850,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4301,7 +4381,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 103,
+            "line" : 111,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -4457,7 +4537,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 116,
+            "line" : 124,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -4476,7 +4556,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 100,
+            "line" : 108,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -6255,6 +6335,12 @@
         {
           "name" : "FabricIngress.next.ecmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 145,
+            "column" : 55,
+            "source_fragment" : "ecmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
@@ -6799,7 +6885,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -7221,6 +7307,12 @@
     {
       "name" : "cksum",
       "id" : 0,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 28,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc",
@@ -7239,6 +7331,12 @@
     {
       "name" : "cksum_0",
       "id" : 1,
+      "source_info" : {
+        "filename" : "include/spgw.p4",
+        "line" : 237,
+        "column" : 8,
+        "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+      },
       "target" : ["gtpu_ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_0",
@@ -7257,6 +7355,12 @@
     {
       "name" : "cksum_1",
       "id" : 2,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 57,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_1",
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
index 0623d6c..6a4bdb1 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -47,6 +47,7 @@
         ["egress_rid", 16, false],
         ["checksum_error", 1, false],
         ["recirculate_flag", 32, false],
+        ["parser_error", 32, false],
         ["_padding", 5, false]
       ]
     },
@@ -256,7 +257,14 @@
   "header_unions" : [],
   "header_union_stacks" : [],
   "field_lists" : [],
-  "errors" : [],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6]
+  ],
   "enums" : [],
   "parsers" : [
     {
@@ -687,61 +695,121 @@
       "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
       "id" : 0,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.ingress_port_vlan"
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
     },
     {
       "name" : "FabricIngress.filtering.fwd_classifier_counter",
       "id" : 1,
       "is_direct" : true,
-      "binding" : "FabricIngress.filtering.fwd_classifier"
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "include/control/filtering.p4",
+        "line" : 96,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.bridging_counter",
       "id" : 2,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.bridging"
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 34,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.mpls_counter",
       "id" : 3,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.mpls"
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 57,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.routing_v4_counter",
       "id" : 4,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.routing_v4"
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 80,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
     },
     {
       "name" : "FabricIngress.forwarding.acl_counter",
       "id" : 5,
       "is_direct" : true,
-      "binding" : "FabricIngress.forwarding.acl"
+      "binding" : "FabricIngress.forwarding.acl",
+      "source_info" : {
+        "filename" : "include/control/forwarding.p4",
+        "line" : 107,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.vlan_meta_counter",
       "id" : 6,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.vlan_meta"
+      "binding" : "FabricIngress.next.vlan_meta",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 58,
+        "column" : 50,
+        "source_fragment" : "vlan_meta_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
       "id" : 7,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.simple"
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 82,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
       "id" : 8,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.hashed"
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 146,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
       "id" : 9,
       "is_direct" : true,
-      "binding" : "FabricIngress.next.multicast"
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 199,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
@@ -771,7 +839,13 @@
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
       "id" : 12,
       "is_direct" : true,
-      "binding" : "FabricEgress.egress_next.egress_vlan"
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "include/control/next.p4",
+        "line" : 250,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
     }
   ],
   "register_arrays" : [],
@@ -1087,7 +1161,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 91,
+            "line" : 99,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -1720,7 +1794,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -1796,7 +1870,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -1911,7 +1985,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -1987,7 +2061,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2279,7 +2353,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2355,7 +2429,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2470,7 +2544,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 92,
+            "line" : 100,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -2546,7 +2620,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 115,
+            "line" : 123,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -2762,7 +2836,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 111,
+            "line" : 119,
             "column" : 31,
             "source_fragment" : "7; ..."
           }
@@ -2788,7 +2862,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 94,
+            "line" : 102,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4239,6 +4313,12 @@
         {
           "name" : "FabricIngress.next.ecmp_selector",
           "id" : 0,
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 145,
+            "column" : 55,
+            "source_fragment" : "ecmp_selector"
+          },
           "max_size" : 64,
           "selector" : {
             "algo" : "crc16",
@@ -4612,7 +4692,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -4985,6 +5065,12 @@
     {
       "name" : "cksum",
       "id" : 0,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 28,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc",
@@ -5003,6 +5089,12 @@
     {
       "name" : "cksum_0",
       "id" : 1,
+      "source_info" : {
+        "filename" : "include/checksum.p4",
+        "line" : 57,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+      },
       "target" : ["ipv4", "hdr_checksum"],
       "type" : "generic",
       "calculation" : "calc_0",
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ClientKey.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ClientKey.java
index ee5e2a4..cc4bed0 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ClientKey.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ClientKey.java
@@ -22,7 +22,7 @@
 import java.util.Objects;
 
 /**
- * Key the uniquely identifies a P4Runtime client.
+ * Key that uniquely identifies a P4Runtime client.
  */
 final class ClientKey {
 
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DistributedElectionIdGenerator.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DistributedElectionIdGenerator.java
index ecfe35d..75c068e 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DistributedElectionIdGenerator.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/DistributedElectionIdGenerator.java
@@ -38,6 +38,7 @@
 
     private final Logger log = getLogger(this.getClass());
 
+    // FIXME: counter map use long, but P4Runtime accepts 128bit election IDs
     private AtomicCounterMap<DeviceId> electionIds;
 
     /**
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MulticastGroupEntryCodec.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MulticastGroupEntryCodec.java
index 0be1ae8..f2ececb 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MulticastGroupEntryCodec.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MulticastGroupEntryCodec.java
@@ -22,6 +22,8 @@
 import p4.v1.P4RuntimeOuterClass.MulticastGroupEntry;
 import p4.v1.P4RuntimeOuterClass.Replica;
 
+import static java.lang.String.format;
+
 /**
  * A coded of {@link PiMulticastGroupEntry} to P4Runtime MulticastGroupEntry
  * messages, and vice versa.
@@ -38,16 +40,26 @@
      *
      * @param piEntry PiMulticastGroupEntry
      * @return P4Runtime MulticastGroupEntry message
+     * @throws EncodeException if the PiMulticastGroupEntry cannot be encoded.
      */
-    static MulticastGroupEntry encode(PiMulticastGroupEntry piEntry) {
+    static MulticastGroupEntry encode(PiMulticastGroupEntry piEntry) throws EncodeException {
         final MulticastGroupEntry.Builder msgBuilder = MulticastGroupEntry.newBuilder();
         msgBuilder.setMulticastGroupId(piEntry.groupId());
-        piEntry.replicas().stream()
-                .map(r -> Replica.newBuilder()
-                        .setEgressPort(r.egressPort().toLong())
-                        .setInstance(r.instanceId())
-                        .build())
-                .forEach(msgBuilder::addReplicas);
+        for (PiPreReplica replica : piEntry.replicas()) {
+            final int p4PortId;
+            try {
+                p4PortId = Math.toIntExact(replica.egressPort().toLong());
+            } catch (ArithmeticException e) {
+                throw new EncodeException(format(
+                        "Cannot cast 64bit port value '%s' to 32bit",
+                        replica.egressPort()));
+            }
+            msgBuilder.addReplicas(
+                    Replica.newBuilder()
+                            .setEgressPort(p4PortId)
+                            .setInstance(replica.instanceId())
+                            .build());
+        }
         return msgBuilder.build();
     }
 
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
index 54d284d..c291db4 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
@@ -1053,7 +1053,15 @@
             WriteOperationType opType) {
 
         final List<Update> updateMsgs = entries.stream()
-                .map(MulticastGroupEntryCodec::encode)
+                .map(piEntry -> {
+                    try {
+                        return MulticastGroupEntryCodec.encode(piEntry);
+                    } catch (EncodeException e) {
+                        log.warn("Unable to encode PiMulticastGroupEntry: {}", e.getMessage());
+                        return null;
+                    }
+                })
+                .filter(Objects::nonNull)
                 .map(mcMsg -> PacketReplicationEngineEntry.newBuilder()
                         .setMulticastGroupEntry(mcMsg)
                         .build())
@@ -1117,13 +1125,22 @@
                               WriteOperationType opType,
                               String entryType) {
         // True if all entities were successfully written.
-        return writeAndReturnSuccessEntities(updates, writeEntities, opType,
-                                             entryType).size() == writeEntities.size();
+        return writeAndReturnSuccessEntities(updates, writeEntities, opType, entryType)
+                .size() == writeEntities.size();
     }
 
     private <T> List<T> writeAndReturnSuccessEntities(
             List<Update> updates, List<T> writeEntities,
             WriteOperationType opType, String entryType) {
+        if (updates.isEmpty()) {
+            return Collections.emptyList();
+        }
+        if (updates.size() != writeEntities.size()) {
+            log.error("Cannot perform {} operation, provided {} " +
+                              "update messages for {} {} - BUG?",
+                      opType, updates.size(), writeEntities.size(), entryType);
+            return Collections.emptyList();
+        }
         try {
             //noinspection ResultOfMethodCallIgnored
             blockingStub.write(writeRequest(updates));
diff --git a/tools/build/bazel/p4lang_workspace.bzl b/tools/build/bazel/p4lang_workspace.bzl
index d4d966c..bc054fe 100644
--- a/tools/build/bazel/p4lang_workspace.bzl
+++ b/tools/build/bazel/p4lang_workspace.bzl
@@ -1,10 +1,10 @@
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
-P4RUNTIME_COMMIT = "028552d98b774301c51be0fe5bc97c9e95716759"
-PI_COMMIT = "36ca74fae69c8d0a142f8bfd2487bee72505cf48"
+P4RUNTIME_COMMIT = "a6f81ac53c6b56d75a9603690794196d67c5dc07"
+PI_COMMIT = "539e4624f16aac39f8890a6dfb11c65040e735ad"
 
-P4RUNTIME_SHA = "f335573ea971c21a1a298954039a27881b7337a03f4523321b6458eb0558644a"
-PI_SHA = "767476cf9232dc39f0115d1ffc38f9b81acec74da078c048f278804f325bf77e"
+P4RUNTIME_SHA = "28b79868bcfd61058cdd3f77a7a021a1add19154fa6717bf921a64cece32caf3"
+PI_SHA = "a16024972c15e6d35466996bbb748e4b7bef819c1c93f05a0f2228062736c35a"
 
 def generate_p4lang():
     http_archive(
diff --git a/tools/dev/mininet/bmv2.py b/tools/dev/mininet/bmv2.py
index 296d672..eafb482 100644
--- a/tools/dev/mininet/bmv2.py
+++ b/tools/dev/mininet/bmv2.py
@@ -17,7 +17,7 @@
 VALGRIND_PREFIX = 'valgrind --leak-check=yes'
 SWITCH_START_TIMEOUT = 5  # seconds
 BMV2_LOG_LINES = 5
-BMV2_DEFAULT_DEVICE_ID = 0
+BMV2_DEFAULT_DEVICE_ID = 1
 
 
 def parseBoolean(value):
diff --git a/tools/dev/p4vm/install-p4-tools.sh b/tools/dev/p4vm/install-p4-tools.sh
index 4f9582a..e3ccdcd 100755
--- a/tools/dev/p4vm/install-p4-tools.sh
+++ b/tools/dev/p4vm/install-p4-tools.sh
@@ -21,9 +21,9 @@
 BUILD_DIR=~/p4tools
 # in case BMV2_COMMIT value is updated, the same variable in
 # protocols/bmv2/thrift-api/BUCK file should also be updated
-BMV2_COMMIT="13370aaf9329fcb369a3ea3989722eb5f61c07f3"
-PI_COMMIT="7e94b025bac6db63bc8534e5dd21a008984e38bc"
-P4C_COMMIT="2d089af757212a057c6690998861ef67439305f4"
+BMV2_COMMIT="ae87b4d4523488ac935133b4aef437796ad1bbd1"
+PI_COMMIT="539e4624f16aac39f8890a6dfb11c65040e735ad"
+P4C_COMMIT="380830f6c26135d1d65e1312e3ba2da628c18145"
 PROTOBUF_COMMIT="tags/v3.2.0"
 GRPC_COMMIT="tags/v1.3.2"
 LIBYANG_COMMIT="v0.14-r1"
@@ -32,7 +32,7 @@
 NUM_CORES=`grep -c ^processor /proc/cpuinfo`
 
 # If false, build tools without debug features to improve throughput of BMv2 and
-# reduce CPU/memory footprint.
+# reduce CPU/memory footprint. Default is true.
 DEBUG_FLAGS=${DEBUG_FLAGS:-true}
 
 # Execute up to the given step (first argument), or all if not defined.
@@ -274,12 +274,8 @@
 
     ./autogen.sh
     # FIXME: re-enable --with-sysrepo when gNMI support becomes more stable
-    # ./configure --with-proto --with-sysrepo 'CXXFLAGS=-O0 -g'
-    if [ "${DEBUG_FLAGS}" = true ] ; then
-        ./configure --with-proto "CXXFLAGS=-O0 -g"
-    else
-        ./configure --with-proto
-    fi
+    # ./configure --with-proto --with-sysrepo
+    ./configure --with-proto --without-internal-rpc --without-cli
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
@@ -293,9 +289,9 @@
 
     ./autogen.sh
     if [ "${DEBUG_FLAGS}" = true ] ; then
-        ./configure --with-pi --disable-elogger --without-nanomsg "CXXFLAGS=-O0 -g"
+        ./configure --with-pi --disable-elogger --without-nanomsg
     else
-        ./configure --with-pi --disable-logging-macros --disable-elogger --without-nanomsg
+        ./configure --with-pi --disable-elogger --without-nanomsg --disable-logging-macros
     fi
     make -j${NUM_CORES}
     sudo make install
@@ -304,14 +300,9 @@
     # Simple_switch_grpc target
     cd targets/simple_switch_grpc
     ./autogen.sh
-
-    if [ "${DEBUG_FLAGS}" = true ] ; then
-        ./configure --with-thrift "CXXFLAGS=-O0 -g"
-    else
-        ./configure --with-thrift
-    fi
+    ./configure --with-thrift
     # FIXME: re-enable --with-sysrepo when gNMI support becomes more stable
-    # ./configure --with-sysrepo --with-thrift 'CXXFLAGS=-O0 -g'
+    # ./configure --with-sysrepo --with-thrift
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
@@ -329,7 +320,7 @@
 
     mkdir -p build
     cd build
-    cmake ..
+    cmake .. -DENABLE_EBPF=OFF
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
diff --git a/tools/dev/p4vm/root-bootstrap.sh b/tools/dev/p4vm/root-bootstrap.sh
index cac34b7..cf90ea2 100755
--- a/tools/dev/p4vm/root-bootstrap.sh
+++ b/tools/dev/p4vm/root-bootstrap.sh
@@ -4,7 +4,7 @@
 VM_TYPE=${1:-dev}
 
 BAZEL_VER="0.15.2"
-BAZEL_DEB="bazel_${BAZEL_VER}-linux-x86_64.deb"
+BAZEL_SH="bazel-${BAZEL_VER}-installer-linux-x86_64.sh"
 # Create user sdn
 useradd -m -d /home/sdn -s /bin/bash sdn
 echo "sdn:rocks" | chpasswd
@@ -28,10 +28,8 @@
 
 DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
 
-wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VER}/${BAZEL_DEB}
 echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
 apt-get -y --no-install-recommends install \
-    ./${BAZEL_DEB} \
     avahi-daemon \
     bridge-utils \
     git \
@@ -59,12 +57,16 @@
 
 DEBIAN_FRONTEND=noninteractive apt-get -yq install wireshark
 
-rm -f ${BAZEL_DEB}
+# Install Bazel
+wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VER}/${BAZEL_SH}
+chmod +x ${BAZEL_SH}
+./${BAZEL_SH}
+rm -f ${BAZEL_SH}
 
+# Install pip and some python deps (others are defined in install-p4-tools.sh)
 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
 python2.7 get-pip.py --force-reinstall
 rm -f get-pip.py
-
 pip install ipaddress
 
 tee -a /etc/ssh/sshd_config <<EOF