[SDFAB-102] Backport changes required for policies to fabric.p4 (Redirect)

Change-Id: I357c908d31abad9c3f8d74723d937ea948e54808
diff --git a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
index 520b557..e73d624 100644
--- a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
+++ b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
@@ -48,6 +48,8 @@
             PiMatchFieldId.of("ipv6_dst");
     public static final PiMatchFieldId HDR_L4_DPORT =
             PiMatchFieldId.of("l4_dport");
+    public static final PiMatchFieldId HDR_PORT_TYPE =
+            PiMatchFieldId.of("port_type");
     public static final PiMatchFieldId HDR_PPPOE_CODE =
             PiMatchFieldId.of("pppoe_code");
     public static final PiMatchFieldId HDR_IPV6_SRC =
@@ -122,8 +124,6 @@
             PiTableId.of("FabricIngress.filtering.fwd_classifier");
     public static final PiTableId FABRIC_INGRESS_NEXT_XCONNECT =
             PiTableId.of("FabricIngress.next.xconnect");
-    public static final PiTableId FABRIC_INGRESS_NEXT_NEXT_VLAN =
-            PiTableId.of("FabricIngress.next.next_vlan");
     public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE =
             PiTableId.of("FabricIngress.next.simple");
     public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST =
@@ -138,10 +138,12 @@
             PiTableId.of("FabricIngress.forwarding.routing_v4");
     public static final PiTableId FABRIC_INGRESS_ACL_ACL =
             PiTableId.of("FabricIngress.acl.acl");
+    public static final PiTableId FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS =
+            PiTableId.of("FabricIngress.pre_next.next_mpls");
     public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN =
             PiTableId.of("FabricIngress.filtering.ingress_port_vlan");
-    public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_CP =
-            PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_cp");
+    public static final PiTableId FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN =
+            PiTableId.of("FabricIngress.pre_next.next_vlan");
     public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_TERM_V4 =
             PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_term_v4");
     public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_TERM_V6 =
@@ -156,6 +158,8 @@
             PiTableId.of("FabricEgress.egress_next.egress_vlan");
     public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK =
             PiTableId.of("FabricIngress.process_set_source_sink.tb_set_sink");
+    public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_CP =
+            PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_cp");
     public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT =
             PiTableId.of("FabricEgress.process_int_main.process_int_report.tb_generate_report");
     public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE =
@@ -188,6 +192,8 @@
     // Direct Counter IDs
     public static final PiCounterId FABRIC_INGRESS_NEXT_MULTICAST_COUNTER =
             PiCounterId.of("FabricIngress.next.multicast_counter");
+    public static final PiCounterId FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS_COUNTER =
+            PiCounterId.of("FabricIngress.pre_next.next_mpls_counter");
     public static final PiCounterId FABRIC_INGRESS_NEXT_SIMPLE_COUNTER =
             PiCounterId.of("FabricIngress.next.simple_counter");
     public static final PiCounterId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER_COUNTER =
@@ -208,17 +214,21 @@
             PiCounterId.of("FabricIngress.acl.acl_counter");
     public static final PiCounterId FABRIC_INGRESS_NEXT_XCONNECT_COUNTER =
             PiCounterId.of("FabricIngress.next.xconnect_counter");
-    public static final PiCounterId FABRIC_INGRESS_NEXT_NEXT_VLAN_COUNTER =
-            PiCounterId.of("FabricIngress.next.next_vlan_counter");
     public static final PiCounterId FABRIC_INGRESS_FORWARDING_ROUTING_V6_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.routing_v6_counter");
     public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER =
             PiCounterId.of("FabricIngress.filtering.ingress_port_vlan_counter");
     public static final PiCounterId FABRIC_INGRESS_FORWARDING_MPLS_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.mpls_counter");
+    public static final PiCounterId FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN_COUNTER =
+            PiCounterId.of("FabricIngress.pre_next.next_vlan_counter");
     // Action IDs
     public static final PiActionId FABRIC_INGRESS_NEXT_SET_NEXT_ID_XCONNECT =
             PiActionId.of("FabricIngress.next.set_next_id_xconnect");
+    public static final PiActionId FABRIC_INGRESS_PRE_NEXT_SET_VLAN =
+            PiActionId.of("FabricIngress.pre_next.set_vlan");
+    public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR =
+            PiActionId.of("FabricIngress.spgw.load_tunnel_far");
     public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4 =
             PiActionId.of("FabricIngress.forwarding.nop_routing_v4");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_BESTEFF =
@@ -231,8 +241,6 @@
             PiActionId.of("FabricIngress.forwarding.set_next_id_bridging");
     public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP =
             PiActionId.of("FabricEgress.process_int_main.process_int_source.int_source_dscp");
-    public static final PiActionId FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN =
-            PiActionId.of("FabricIngress.next.set_double_vlan");
     public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA =
             PiActionId.of("FabricEgress.process_int_main.process_int_transit.init_metadata");
     public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_DBUF_FAR =
@@ -247,10 +255,8 @@
             PiActionId.of("FabricIngress.bng_ingress.downstream.drop");
     public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_NORMAL_FAR =
             PiActionId.of("FabricIngress.spgw.load_normal_far");
-    public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN =
-            PiActionId.of("FabricIngress.next.set_vlan");
-    public static final PiActionId FABRIC_INGRESS_ACL_NOP_ACL =
-            PiActionId.of("FabricIngress.acl.nop_acl");
+    public static final PiActionId FABRIC_INGRESS_PRE_NEXT_SET_DOUBLE_VLAN =
+            PiActionId.of("FabricIngress.pre_next.set_double_vlan");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_SET_LINE =
             PiActionId.of("FabricIngress.bng_ingress.set_line");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_DISABLED =
@@ -281,8 +287,6 @@
             PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next");
     public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V6 =
             PiActionId.of("FabricEgress.bng_egress.downstream.encap_v6");
-    public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_SIMPLE =
-            PiActionId.of("FabricIngress.next.mpls_routing_simple");
     public static final PiActionId FABRIC_INGRESS_ACL_PUNT_TO_CPU =
             PiActionId.of("FabricIngress.acl.punt_to_cpu");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_PRIO =
@@ -295,8 +299,8 @@
             PiActionId.of("FabricEgress.egress_next.pop_vlan");
     public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK =
             PiActionId.of("FabricIngress.process_set_source_sink.int_set_sink");
-    public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_HASHED =
-            PiActionId.of("FabricIngress.next.mpls_routing_hashed");
+    public static final PiActionId FABRIC_INGRESS_ACL_NOP_ACL =
+            PiActionId.of("FabricIngress.acl.nop_acl");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_ENABLED_V6 =
             PiActionId.of("FabricIngress.bng_ingress.upstream.term_enabled_v6");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_ENABLED_V4 =
@@ -308,8 +312,8 @@
             PiActionId.of("FabricIngress.next.output_simple");
     public static final PiActionId FABRIC_INGRESS_FILTERING_DENY =
             PiActionId.of("FabricIngress.filtering.deny");
-    public static final PiActionId FABRIC_INGRESS_SPGW_LOAD_TUNNEL_FAR =
-            PiActionId.of("FabricIngress.spgw.load_tunnel_far");
+    public static final PiActionId FABRIC_INGRESS_PRE_NEXT_SET_MPLS_LABEL =
+            PiActionId.of("FabricIngress.pre_next.set_mpls_label");
     public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_SET_SESSION =
             PiActionId.of("FabricIngress.bng_ingress.downstream.set_session");
     public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP_ID =
@@ -335,6 +339,8 @@
     public static final PiActionParamId SMAC = PiActionParamId.of("smac");
     public static final PiActionParamId CLONE_ID =
             PiActionParamId.of("clone_id");
+    public static final PiActionParamId PORT_TYPE =
+            PiActionParamId.of("port_type");
     public static final PiActionParamId FAR_ID = PiActionParamId.of("far_id");
     public static final PiActionParamId VLAN_ID = PiActionParamId.of("vlan_id");
     public static final PiActionParamId TUNNEL_SRC_ADDR =
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java
new file mode 100644
index 0000000..f55a825
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/Constants.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2021-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.pipelines.fabric.impl.behaviour;
+
+/**
+ * Constant values.
+ */
+public final class Constants {
+
+    // Used with is_infra_port metadata
+    public static final byte[] ONE = new byte[]{1};
+    public static final byte[] ZERO = new byte[]{0};
+
+    public static final long PORT_TYPE_MASK = 0x3;
+    public static final byte PORT_TYPE_EDGE = 0x1;
+    public static final byte PORT_TYPE_INFRA = 0x2;
+    public static final byte PORT_TYPE_INTERNAL = 0x3;
+
+    // Forwarding types from P4 program (not exposed in P4Info).
+    public static final byte FWD_MPLS = 1;
+    public static final byte FWD_IPV4_ROUTING = 2;
+    public static final byte FWD_IPV6_ROUTING = 4;
+
+    public static final short ETH_TYPE_EXACT_MASK = (short) 0xFFFF;
+
+    public static final int DEFAULT_VLAN = 4094;
+    public static final int DEFAULT_PW_TRANSPORT_VLAN = 4090;
+
+    // hide default constructor
+    private Constants() {
+    }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java
index fbb709a..93605e2 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java
@@ -81,9 +81,9 @@
 
     public boolean supportDoubleVlanTerm() {
         if (pipeconf.pipelineModel()
-                .table(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN).isPresent()) {
-            return pipeconf.pipelineModel().table(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
-                    .get().action(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+                .table(FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN).isPresent()) {
+            return pipeconf.pipelineModel().table(FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN)
+                    .get().action(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_DOUBLE_VLAN)
                     .isPresent();
         }
         return false;
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
index 4ed412d..1a7b2ba 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
@@ -68,18 +68,17 @@
     public static final byte[] ZERO = new byte[]{0};
 
     // Group tables by control block.
-    private static final Set<PiTableId> FILTERING_CTRL_TBLS = ImmutableSet.of(
-            FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
-            FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER);
     private static final Set<PiTableId> FORWARDING_CTRL_TBLS = ImmutableSet.of(
             FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
             FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
             FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6,
             FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING);
+    private static final Set<PiTableId> PRE_NEXT_CTRL_TBLS  = ImmutableSet.of(
+            FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS,
+            FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN);
     private static final Set<PiTableId> ACL_CTRL_TBLS = ImmutableSet.of(
             FabricConstants.FABRIC_INGRESS_ACL_ACL);
     private static final Set<PiTableId> NEXT_CTRL_TBLS = ImmutableSet.of(
-            FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN,
             FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE,
             FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
             FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT);
@@ -166,10 +165,10 @@
     @Override
     public PiAction mapTreatment(TrafficTreatment treatment, PiTableId piTableId)
             throws PiInterpreterException {
-        if (FILTERING_CTRL_TBLS.contains(piTableId)) {
-            return treatmentInterpreter.mapFilteringTreatment(treatment, piTableId);
-        } else if (FORWARDING_CTRL_TBLS.contains(piTableId)) {
+        if (FORWARDING_CTRL_TBLS.contains(piTableId)) {
             return treatmentInterpreter.mapForwardingTreatment(treatment, piTableId);
+        } else if (PRE_NEXT_CTRL_TBLS.contains(piTableId)) {
+            return treatmentInterpreter.mapPreNextTreatment(treatment, piTableId);
         } else if (ACL_CTRL_TBLS.contains(piTableId)) {
             return treatmentInterpreter.mapAclTreatment(treatment, piTableId);
         } else if (NEXT_CTRL_TBLS.contains(piTableId)) {
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
index fe2d490..bdf3eaf 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
@@ -41,13 +41,14 @@
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_DST;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_SRC;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_LABEL;
-import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_PUSH;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_PUSH;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.instruction;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2InstructionOrFail;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instructions;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.treatmentException;
 
 /**
  * Treatment translation logic.
@@ -57,8 +58,6 @@
     private final FabricCapabilities capabilities;
     private static final ImmutableMap<PiTableId, PiActionId> NOP_ACTIONS =
             ImmutableMap.<PiTableId, PiActionId>builder()
-                    .put(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
-                         FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
                     .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
                          FabricConstants.FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4)
                     .put(FabricConstants.FABRIC_INGRESS_ACL_ACL,
@@ -72,34 +71,10 @@
         this.capabilities = capabilities;
     }
 
-    static PiAction mapFilteringTreatment(TrafficTreatment treatment, PiTableId tableId)
-            throws PiInterpreterException {
-
-        if (!tableId.equals(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)) {
-            // Mapping for other tables of the filtering block must be handled
-            // in the pipeliner.
-            tableException(tableId);
-        }
-
-        // VLAN_POP action is equivalent to the permit action (VLANs pop is done anyway)
-        if (isFilteringNoAction(treatment) || isFilteringPopAction(treatment)) {
-            // Permit action if table is ingress_port_vlan;
-            return nop(tableId);
-        }
-
-        final ModVlanIdInstruction setVlanInst = (ModVlanIdInstruction) l2InstructionOrFail(
-                treatment, VLAN_ID, tableId);
-        return PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
-                .withParameter(new PiActionParam(
-                        FabricConstants.VLAN_ID, setVlanInst.vlanId().toShort()))
-                .build();
-    }
-
 
     static PiAction mapForwardingTreatment(TrafficTreatment treatment, PiTableId tableId)
             throws PiInterpreterException {
-        if (isForwardingNoAction(treatment)) {
+        if (isNoAction(treatment)) {
             return nop(tableId);
         }
         treatmentException(
@@ -108,35 +83,58 @@
         return null;
     }
 
-    PiAction mapNextTreatment(TrafficTreatment treatment, PiTableId tableId)
+    PiAction mapPreNextTreatment(TrafficTreatment treatment, PiTableId tableId)
             throws PiInterpreterException {
-        if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN) {
+        if (tableId == FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS) {
+            return mapNextMplsTreatment(treatment, tableId);
+        } else if (tableId == FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN) {
             return mapNextVlanTreatment(treatment, tableId);
-        } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_HASHED) {
-            return mapNextHashedOrSimpleTreatment(treatment, tableId, false);
-        } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE) {
-            return mapNextHashedOrSimpleTreatment(treatment, tableId, true);
-        } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT) {
-            return mapNextXconnect(treatment, tableId);
         }
         throw new PiInterpreterException(format(
                 "Treatment mapping not supported for table '%s'", tableId));
     }
 
+    PiAction mapNextTreatment(TrafficTreatment treatment, PiTableId tableId)
+            throws PiInterpreterException {
+        if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_HASHED) {
+            return mapNextHashedOrSimpleTreatment(treatment, tableId, false);
+        } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE) {
+           return mapNextHashedOrSimpleTreatment(treatment, tableId, true);
+        } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT) {
+           return mapNextXconnect(treatment, tableId);
+        }
+        throw new PiInterpreterException(format(
+                "Treatment mapping not supported for table '%s'", tableId));
+    }
+
+    private static PiAction mapNextMplsTreatment(TrafficTreatment treatment, PiTableId tableId)
+            throws PiInterpreterException {
+        final ModMplsLabelInstruction mplsLabel = (ModMplsLabelInstruction) l2Instruction(
+                treatment, MPLS_LABEL);
+        if (mplsLabel != null) {
+            return PiAction.builder()
+                    .withParameter(new PiActionParam(FabricConstants.LABEL, mplsLabel.label().toInt()))
+                    .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_MPLS_LABEL)
+                    .build();
+        }
+        throw new PiInterpreterException("There is no MPLS instruction");
+    }
+
     private PiAction mapNextVlanTreatment(TrafficTreatment treatment, PiTableId tableId)
             throws PiInterpreterException {
         final List<ModVlanIdInstruction> modVlanIdInst = l2InstructionsOrFail(treatment, VLAN_ID, tableId)
                 .stream().map(i -> (ModVlanIdInstruction) i).collect(Collectors.toList());
         if (modVlanIdInst.size() == 1) {
-            return PiAction.builder().withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
+            return PiAction.builder().withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_VLAN)
                     .withParameter(new PiActionParam(
                             FabricConstants.VLAN_ID,
                             modVlanIdInst.get(0).vlanId().toShort()))
                     .build();
         }
+        // next_vlan has been moved to pre_next
         if (modVlanIdInst.size() == 2 && capabilities.supportDoubleVlanTerm()) {
             return PiAction.builder()
-                    .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+                    .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_DOUBLE_VLAN)
                     .withParameter(new PiActionParam(
                             FabricConstants.INNER_VLAN_ID,
                             modVlanIdInst.get(0).vlanId().toShort()))
@@ -151,20 +149,15 @@
     private static PiAction mapNextHashedOrSimpleTreatment(
             TrafficTreatment treatment, PiTableId tableId, boolean simple)
             throws PiInterpreterException {
-        // Provide mapping for output_hashed, routing_hashed, and
-        // mpls_routing_hashed. multicast_hashed can only be invoked with
-        // PiAction, hence no mapping. outPort required for all actions. Presence
-        // of other instructions will determine which action to map to.
+        // Provide mapping for output_hashed and routing_hashed; multicast_hashed
+        // can only be invoked with PiAction, hence no mapping. outPort required for
+        // all actions. Presence of other instructions will determine which action to map to.
         final PortNumber outPort = ((OutputInstruction) instructionOrFail(
                 treatment, OUTPUT, tableId)).port();
         final ModEtherInstruction ethDst = (ModEtherInstruction) l2Instruction(
                 treatment, ETH_DST);
         final ModEtherInstruction ethSrc = (ModEtherInstruction) l2Instruction(
                 treatment, ETH_SRC);
-        final Instruction mplsPush = l2Instruction(
-                treatment, MPLS_PUSH);
-        final ModMplsLabelInstruction mplsLabel = (ModMplsLabelInstruction) l2Instruction(
-                treatment, MPLS_LABEL);
 
         final PiAction.Builder actionBuilder = PiAction.builder()
                 .withParameter(new PiActionParam(FabricConstants.PORT_NUM, outPort.toLong()));
@@ -174,20 +167,11 @@
                     FabricConstants.SMAC, ethSrc.mac().toBytes()));
             actionBuilder.withParameter(new PiActionParam(
                     FabricConstants.DMAC, ethDst.mac().toBytes()));
-            if (mplsLabel != null) {
-                // mpls_routing_hashed
-                return actionBuilder
-                        .withParameter(new PiActionParam(FabricConstants.LABEL, mplsLabel.label().toInt()))
-                        .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_SIMPLE
-                                        : FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_HASHED)
-                        .build();
-            } else {
-                // routing_hashed
-                return actionBuilder
-                        .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE
-                                        : FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
-                        .build();
-            }
+            // routing_hashed
+            return actionBuilder
+                    .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE
+                                : FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+                    .build();
         } else {
             // output_hashed
             return actionBuilder
@@ -214,7 +198,7 @@
         if (isDrop(treatment)) {
                 return drop(tableId);
         }
-        if (isForwardingNoAction(treatment)) {
+        if (isNoAction(treatment)) {
                 return nop(tableId);
         }
         treatmentException(
@@ -256,15 +240,8 @@
         return PiAction.builder().withId(FabricConstants.FABRIC_INGRESS_ACL_DROP).build();
     }
 
-    // NOTE: we use clearDeferred to signal when there are no more ports associated to a given vlan
-    private static boolean isFilteringNoAction(TrafficTreatment treatment) {
-        return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) ||
-                (treatment.allInstructions().isEmpty()) ||
-                (treatment.allInstructions().size() == 1 && treatment.writeMetadata() != null);
-    }
-
     // NOTE: clearDeferred is used by the routing application to implement ACL drop and route black-holing
-    private static boolean isForwardingNoAction(TrafficTreatment treatment) {
+    private static boolean isNoAction(TrafficTreatment treatment) {
         return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) ||
                 (treatment.allInstructions().isEmpty() && !treatment.clearedDeferred()) ||
                 (treatment.allInstructions().size() == 1 && treatment.writeMetadata() != null);
@@ -274,21 +251,6 @@
         return treatment.allInstructions().isEmpty() && treatment.clearedDeferred();
     }
 
-    private static boolean isFilteringPopAction(TrafficTreatment treatment) {
-        return l2Instruction(treatment, VLAN_POP) != null;
-    }
-
-    private static Instruction l2InstructionOrFail(
-            TrafficTreatment treatment,
-            L2ModificationInstruction.L2SubType subType, PiTableId tableId)
-            throws PiInterpreterException {
-        final Instruction inst = l2Instruction(treatment, subType);
-        if (inst == null) {
-            treatmentException(tableId, treatment, format("missing %s instruction", subType));
-        }
-        return inst;
-    }
-
     private static List<L2ModificationInstruction> l2InstructionsOrFail(
             TrafficTreatment treatment,
             L2ModificationInstruction.L2SubType subType, PiTableId tableId)
@@ -309,16 +271,4 @@
         }
         return inst;
     }
-
-    private static void tableException(PiTableId tableId)
-            throws PiInterpreterException {
-        throw new PiInterpreterException(format("Table '%s' not supported", tableId));
-    }
-
-    private static void treatmentException(
-            PiTableId tableId, TrafficTreatment treatment, String explanation)
-            throws PiInterpreterException {
-        throw new PiInterpreterException(format(
-                "Invalid treatment for table '%s', %s: %s", tableId, explanation, treatment));
-    }
 }
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java
index 655f88d..4496f19 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java
@@ -25,6 +25,8 @@
 import org.onosproject.net.flow.instructions.L2ModificationInstruction;
 import org.onosproject.net.flowobjective.DefaultNextTreatment;
 import org.onosproject.net.flowobjective.NextTreatment;
+import org.onosproject.net.pi.model.PiPipelineInterpreter;
+import org.onosproject.net.pi.model.PiTableId;
 
 import java.util.Collection;
 import java.util.List;
@@ -62,11 +64,10 @@
                             format("%s criterion cannot be null", type));
     }
 
-    public static Instructions.OutputInstruction instruction(TrafficTreatment treatment, Instruction.Type type) {
+    public static Instruction instruction(TrafficTreatment treatment, Instruction.Type type) {
         return treatment.allInstructions()
                 .stream()
                 .filter(inst -> inst.type() == type)
-                .map(inst -> (Instructions.OutputInstruction) inst)
                 .findFirst().orElse(null);
     }
 
@@ -79,6 +80,17 @@
                 .findFirst().orElse(null);
     }
 
+    public static Instruction l2InstructionOrFail(
+            TrafficTreatment treatment,
+            L2ModificationInstruction.L2SubType subType, PiTableId tableId)
+            throws PiPipelineInterpreter.PiInterpreterException {
+        final Instruction inst = l2Instruction(treatment, subType);
+        if (inst == null) {
+            treatmentException(tableId, treatment, format("missing %s instruction", subType));
+        }
+        return inst;
+    }
+
     public static List<L2ModificationInstruction> l2Instructions(
             TrafficTreatment treatment, L2ModificationInstruction.L2SubType subType) {
         return treatment.allInstructions().stream()
@@ -89,7 +101,7 @@
     }
 
     public static Instructions.OutputInstruction outputInstruction(TrafficTreatment treatment) {
-        return instruction(treatment, Instruction.Type.OUTPUT);
+        return (Instructions.OutputInstruction) instruction(treatment, Instruction.Type.OUTPUT);
     }
 
     public static PortNumber outputPort(TrafficTreatment treatment) {
@@ -104,4 +116,11 @@
         }
         return null;
     }
+
+    public static void treatmentException(
+            PiTableId tableId, TrafficTreatment treatment, String explanation)
+            throws PiPipelineInterpreter.PiInterpreterException {
+        throw new PiPipelineInterpreter.PiInterpreterException(format(
+                "Invalid treatment for table '%s', %s: %s", tableId, explanation, treatment));
+    }
 }
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java
index 744cd9d..3105e66 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java
@@ -80,7 +80,8 @@
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricInterpreter.ONE;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricInterpreter.ZERO;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort;
-import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.FilteringObjectiveTranslator.FWD_IPV4_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV4_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INTERNAL;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -368,6 +369,7 @@
                         .withId(vlanValid ? FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT
                                 : FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
                         .withParameter(new PiActionParam(FabricConstants.VLAN_ID, vlanId))
+                        .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, PORT_TYPE_INTERNAL))
                         .build())
                 .build();
         return DefaultFlowRule.builder()
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java
index 39d100e..bfdcc2b 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java
@@ -33,10 +33,12 @@
 import org.onosproject.net.flow.criteria.PortCriterion;
 import org.onosproject.net.flow.criteria.VlanIdCriterion;
 import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
 import org.onosproject.net.flowobjective.FilteringObjective;
 import org.onosproject.net.flowobjective.Objective;
 import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.pi.model.PiTableId;
 import org.onosproject.net.pi.runtime.PiAction;
 import org.onosproject.net.pi.runtime.PiActionParam;
 import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
@@ -49,7 +51,23 @@
 import static java.lang.String.format;
 import static org.onosproject.net.flow.criteria.Criterion.Type.INNER_VLAN_VID;
 import static org.onosproject.net.flow.criteria.Criterion.Type.VLAN_VID;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP;
+import static org.onosproject.net.pi.model.PiPipelineInterpreter.PiInterpreterException;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_VLAN;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_PW_TRANSPORT_VLAN;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ETH_TYPE_EXACT_MASK;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_MPLS;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV4_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV6_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ONE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ZERO;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2InstructionOrFail;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterion;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction;
+
 
 /**
  * ObjectiveTranslator implementation for FilteringObjective.
@@ -57,16 +75,6 @@
 class FilteringObjectiveTranslator
         extends AbstractObjectiveTranslator<FilteringObjective> {
 
-    // Forwarding types from fabric.p4.
-    static final byte FWD_MPLS = 1;
-    static final byte FWD_IPV4_ROUTING = 2;
-    static final byte FWD_IPV6_ROUTING = 3;
-
-    private static final byte[] ONE = new byte[]{1};
-    private static final byte[] ZERO = new byte[]{0};
-
-    private static final short ETH_TYPE_EXACT_MASK = (short) 0xFFFF;
-
     private static final PiAction DENY = PiAction.builder()
             .withId(FabricConstants.FABRIC_INGRESS_FILTERING_DENY)
             .build();
@@ -168,7 +176,7 @@
 
     private boolean isDoubleTagged(FilteringObjective obj) {
         return obj.meta() != null &&
-                FabricUtils.l2Instruction(obj.meta(), L2ModificationInstruction.L2SubType.VLAN_POP) != null &&
+                FabricUtils.l2Instruction(obj.meta(), L2SubType.VLAN_POP) != null &&
                 FabricUtils.criterion(obj.conditions(), VLAN_VID) != null &&
                 FabricUtils.criterion(obj.conditions(), INNER_VLAN_VID) != null;
     }
@@ -206,18 +214,66 @@
             selector.add(innerVlanCriterion);
         }
 
-        final TrafficTreatment treatment;
+        final TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder();
         if (obj.type().equals(FilteringObjective.Type.DENY)) {
-            treatment = DefaultTrafficTreatment.builder()
-                    .piTableAction(DENY)
-                    .build();
+            treatmentBuilder.piTableAction(DENY);
         } else {
-            treatment = obj.meta() == null
-                    ? DefaultTrafficTreatment.emptyTreatment() : obj.meta();
+            byte portType = PORT_TYPE_EDGE;
+            if (!innerVlanValid && outerVlanValid &&
+                    outerVlanCriterion.vlanId().toShort() == DEFAULT_PW_TRANSPORT_VLAN) {
+                portType = PORT_TYPE_INFRA;
+            } else if (obj.meta() != null) {
+                ModVlanIdInstruction modVlanIdInstruction = (ModVlanIdInstruction) l2Instruction(obj.meta(), VLAN_ID);
+                if (modVlanIdInstruction != null && modVlanIdInstruction.vlanId().toShort() == DEFAULT_VLAN) {
+                    portType = PORT_TYPE_INFRA;
+                }
+            }
+            try {
+                treatmentBuilder.piTableAction(mapFilteringTreatment(obj.meta(),
+                        FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN, portType));
+            } catch (PiInterpreterException ex) {
+                throw new FabricPipelinerException(format("Unable to map treatment for table '%s': %s",
+                        FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
+                        ex.getMessage()), ObjectiveError.UNSUPPORTED);
+            }
         }
         resultBuilder.addFlowRule(flowRule(
                 obj, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
-                selector.build(), treatment));
+                selector.build(), treatmentBuilder.build()));
+    }
+
+    private PiAction mapFilteringTreatment(TrafficTreatment treatment, PiTableId tableId, byte portType)
+            throws PiInterpreterException {
+        if (treatment == null) {
+            treatment = DefaultTrafficTreatment.emptyTreatment();
+        }
+        // VLAN_POP action is equivalent to the permit action (VLANs pop is done anyway)
+        if (isFilteringNoAction(treatment) || isFilteringPopAction(treatment)) {
+            // Permit action if table is ingress_port_vlan;
+            return PiAction.builder()
+                    .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
+                    .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, portType))
+                    .build();
+        }
+
+        final ModVlanIdInstruction setVlanInst = (ModVlanIdInstruction) l2InstructionOrFail(
+                treatment, VLAN_ID, tableId);
+        return PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
+                .withParameter(new PiActionParam(FabricConstants.VLAN_ID, setVlanInst.vlanId().toShort()))
+                .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, portType))
+                .build();
+    }
+
+    // NOTE: we use clearDeferred to signal when there are no more ports associated to a given vlan
+    private static boolean isFilteringNoAction(TrafficTreatment treatment) {
+        return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) ||
+                (treatment.allInstructions().isEmpty()) ||
+                (treatment.allInstructions().size() == 1 && treatment.writeMetadata() != null);
+    }
+
+    private boolean isFilteringPopAction(TrafficTreatment treatment) {
+        return l2Instruction(treatment, VLAN_POP) != null;
     }
 
     private void fwdClassifierRules(
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java
index 0ab5beb..d527228 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java
@@ -32,7 +32,9 @@
 import org.onosproject.net.flow.criteria.Criterion;
 import org.onosproject.net.flow.criteria.EthCriterion;
 import org.onosproject.net.flow.criteria.IPCriterion;
+import org.onosproject.net.flow.criteria.MetadataCriterion;
 import org.onosproject.net.flow.criteria.MplsCriterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
 import org.onosproject.net.flow.criteria.VlanIdCriterion;
 import org.onosproject.net.flowobjective.ForwardingObjective;
 import org.onosproject.net.flowobjective.Objective;
@@ -59,6 +61,9 @@
 import static org.onosproject.net.group.DefaultGroupBucket.createCloneGroupBucket;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterionNotNull;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_MASK;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA;
 
 
 /**
@@ -103,6 +108,8 @@
                  FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6)
             .put(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
                  FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
+            .put(FabricConstants.FABRIC_INGRESS_ACL_ACL,
+                 FabricConstants.FABRIC_INGRESS_ACL_SET_NEXT_ID_ACL)
             .build();
 
     ForwardingObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) {
@@ -290,8 +297,22 @@
                 return;
             }
         }
+        TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder(obj.selector());
+        // Meta are used to signal the port type which can be edge or infra
+        if (obj.meta() != null && obj.meta().getCriterion(Criterion.Type.METADATA) != null) {
+            long portType = ((MetadataCriterion) obj.meta().getCriterion(Criterion.Type.METADATA)).metadata();
+            if (portType == PORT_TYPE_EDGE || portType == PORT_TYPE_INFRA) {
+                selectorBuilder.matchPi(PiCriterion.builder()
+                        .matchTernary(FabricConstants.HDR_PORT_TYPE, portType, PORT_TYPE_MASK)
+                        .build());
+            } else {
+                throw new FabricPipelinerException(format("Port type '%s' is not allowed for table '%s'",
+                        portType, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN),
+                        ObjectiveError.UNSUPPORTED);
+            }
+        }
         resultBuilder.addFlowRule(flowRule(
-                obj, FabricConstants.FABRIC_INGRESS_ACL_ACL, obj.selector()));
+                obj, FabricConstants.FABRIC_INGRESS_ACL_ACL, selectorBuilder.build()));
     }
 
     private DefaultGroupDescription createCloneGroup(
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java
index 8ecffb2..47b7ef6 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java
@@ -17,6 +17,7 @@
 package org.onosproject.pipelines.fabric.impl.behaviour.pipeliner;
 
 import com.google.common.collect.Lists;
+import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
@@ -28,6 +29,7 @@
 import org.onosproject.net.flow.criteria.PiCriterion;
 import org.onosproject.net.flow.criteria.VlanIdCriterion;
 import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
 import org.onosproject.net.flowobjective.DefaultNextTreatment;
 import org.onosproject.net.flowobjective.NextObjective;
@@ -57,6 +59,7 @@
 import java.util.stream.Collectors;
 
 import static java.lang.String.format;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_LABEL;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID;
 import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP;
 import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterion;
@@ -103,13 +106,55 @@
         }
 
         if (!isGroupModifyOp(obj)) {
-            // Generate next VLAN rules.
+            // Generate next MPLS and VLAN rules.
+            nextMpls(obj, resultBuilder);
             nextVlan(obj, resultBuilder);
         }
 
         return resultBuilder.build();
     }
 
+    private void nextMpls(NextObjective obj,
+                          ObjectiveTranslation.Builder resultBuilder)
+            throws FabricPipelinerException {
+        // Next objective can contain only one mpls push and one mpls label
+        // instruction. Pipeliner does not support other configurations.
+
+        final List<List<ModMplsLabelInstruction>> mplsInstructions = defaultNextTreatments(
+                obj.nextTreatments(), false).stream()
+                .map(defaultNextTreatment -> l2Instructions(defaultNextTreatment.treatment(), MPLS_LABEL)
+                        .stream().map(v -> (ModMplsLabelInstruction) v)
+                        .collect(Collectors.toList()))
+                .filter(l -> !l.isEmpty())
+                .collect(Collectors.toList());
+
+        if (mplsInstructions.isEmpty()) {
+            // No need to apply next mpls table
+            return;
+        }
+
+        // We expect one mpls label for each treatment and the label has to be the same
+        final Set<MplsLabel> mplsLabels = mplsInstructions.stream()
+                .flatMap(Collection::stream)
+                .map(ModMplsLabelInstruction::label)
+                .collect(Collectors.toSet());
+        if (obj.nextTreatments().size() != mplsInstructions.size() ||
+                mplsLabels.size() != 1) {
+            throw new FabricPipelinerException(
+                    "Inconsistent MPLS_LABEL instructions, cannot process " +
+                            "next_mpls rule. It is required that all " +
+                            "treatments have the same MPLS_LABEL instructions.");
+        }
+        final TrafficSelector selector = nextIdSelector(obj.id());
+        final TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+                .setMpls(mplsLabels.iterator().next())
+                .build();
+
+        resultBuilder.addFlowRule(flowRule(
+                obj, FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS,
+                selector, treatment));
+    }
+
     private void nextVlan(NextObjective obj,
                           ObjectiveTranslation.Builder resultBuilder)
             throws FabricPipelinerException {
@@ -169,7 +214,7 @@
         final TrafficTreatment treatment = treatmentBuilder.build();
 
         resultBuilder.addFlowRule(flowRule(
-                obj, FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN,
+                obj, FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN,
                 selector, treatment));
     }
 
@@ -258,7 +303,7 @@
             if (obj.meta() != null && obj.meta().getCriterion(Criterion.Type.VLAN_VID) != null) {
                 egressVlan(outPort, obj, popVlanInst, resultBuilder);
             } else {
-                log.warn("NextObjective {} is trying to program {} without {} information",
+                log.debug("NextObjective {} is trying to program {} without {} information",
                         obj, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN,
                         obj.meta() == null ? "metadata" : "vlanId");
             }
diff --git a/pipelines/fabric/impl/src/main/resources/fabric.p4 b/pipelines/fabric/impl/src/main/resources/fabric.p4
index ad3857d..0b336b5 100644
--- a/pipelines/fabric/impl/src/main/resources/fabric.p4
+++ b/pipelines/fabric/impl/src/main/resources/fabric.p4
@@ -20,6 +20,7 @@
 #include "include/size.p4"
 #include "include/control/filtering.p4"
 #include "include/control/forwarding.p4"
+#include "include/control/pre_next.p4"
 #include "include/control/acl.p4"
 #include "include/control/next.p4"
 #include "include/control/packetio.p4"
@@ -50,6 +51,7 @@
     PacketIoIngress() pkt_io_ingress;
     Filtering() filtering;
     Forwarding() forwarding;
+    PreNext() pre_next;
     Acl() acl;
     Next() next;
 #ifdef WITH_PORT_COUNTER
@@ -69,6 +71,9 @@
         if (fabric_metadata.skip_forwarding == _FALSE) {
             forwarding.apply(hdr, fabric_metadata, standard_metadata);
         }
+        if (fabric_metadata.skip_next == _FALSE) {
+            pre_next.apply(hdr, fabric_metadata);
+        }
         acl.apply(hdr, fabric_metadata, standard_metadata);
         if (fabric_metadata.skip_next == _FALSE) {
             next.apply(hdr, fabric_metadata, standard_metadata);
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4
index 34ef4d1..ae86e3b 100644
--- a/pipelines/fabric/impl/src/main/resources/include/control/acl.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4
@@ -77,6 +77,7 @@
             hdr.icmp.icmp_code              : ternary @name("icmp_code"); // 8
             l4_sport                        : ternary @name("l4_sport");  // 16
             l4_dport                        : ternary @name("l4_dport");  // 16
+            fabric_metadata.port_type       : ternary @name("port_type"); // 2
         }
 
         actions = {
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4 b/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4
index a8fae49..a96b522 100644
--- a/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4
@@ -35,17 +35,19 @@
         // Do ACL table in case we want to punt to cpu.
         fabric_metadata.skip_forwarding = _TRUE;
         fabric_metadata.skip_next = _TRUE;
+        fabric_metadata.port_type = PORT_TYPE_UNKNOWN;
         ingress_port_vlan_counter.count();
     }
 
-    action permit() {
+    action permit(port_type_t port_type) {
         // Allow packet as is.
+        fabric_metadata.port_type = port_type;
         ingress_port_vlan_counter.count();
     }
 
-    action permit_with_internal_vlan(vlan_id_t vlan_id) {
+    action permit_with_internal_vlan(vlan_id_t vlan_id, port_type_t port_type) {
         fabric_metadata.vlan_id = vlan_id;
-        permit();
+        permit(port_type);
     }
 
     // FIXME: remove the use of ternary match on inner VLAN.
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/next.p4 b/pipelines/fabric/impl/src/main/resources/include/control/next.p4
index 11437b1..fca2e61 100644
--- a/pipelines/fabric/impl/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/control/next.p4
@@ -42,63 +42,12 @@
     }
 
     @hidden
-    action set_mpls_label(mpls_label_t label) {
-        fabric_metadata.mpls_label = label;
-    }
-
-    @hidden
     action routing(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac) {
         rewrite_smac(smac);
         rewrite_dmac(dmac);
         output(port_num);
     }
 
-    @hidden
-    action mpls_routing(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
-                        mpls_label_t label) {
-        set_mpls_label(label);
-        routing(port_num, smac, dmac);
-    }
-
-    /*
-     * Next VLAN table.
-     * Modify VLAN ID based on next ID.
-     */
-    direct_counter(CounterType.packets_and_bytes) next_vlan_counter;
-
-    action set_vlan(vlan_id_t vlan_id) {
-        fabric_metadata.vlan_id = vlan_id;
-        next_vlan_counter.count();
-    }
-
-#ifdef WITH_DOUBLE_VLAN_TERMINATION
-    action set_double_vlan(vlan_id_t outer_vlan_id, vlan_id_t inner_vlan_id) {
-        set_vlan(outer_vlan_id);
-        fabric_metadata.push_double_vlan = _TRUE;
-        fabric_metadata.inner_vlan_id = inner_vlan_id;
-#ifdef WITH_BNG
-        fabric_metadata.bng.s_tag = outer_vlan_id;
-        fabric_metadata.bng.c_tag = inner_vlan_id;
-#endif // WITH_BNG
-    }
-#endif // WITH_DOUBLE_VLAN_TERMINATION
-
-    table next_vlan {
-        key = {
-            fabric_metadata.next_id: exact @name("next_id");
-        }
-        actions = {
-            set_vlan;
-#ifdef WITH_DOUBLE_VLAN_TERMINATION
-            set_double_vlan;
-#endif // WITH_DOUBLE_VLAN_TERMINATION
-            @defaultonly nop;
-        }
-        const default_action = nop();
-        counters = next_vlan_counter;
-        size = NEXT_VLAN_TABLE_SIZE;
-    }
-
 #ifdef WITH_XCONNECT
     /*
      * Cross-connect table.
@@ -149,12 +98,6 @@
         simple_counter.count();
     }
 
-    action mpls_routing_simple(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
-                               mpls_label_t label) {
-        mpls_routing(port_num, smac, dmac, label);
-        simple_counter.count();
-    }
-
     table simple {
         key = {
             fabric_metadata.next_id: exact @name("next_id");
@@ -162,7 +105,6 @@
         actions = {
             output_simple;
             routing_simple;
-            mpls_routing_simple;
             @defaultonly nop;
         }
         const default_action = nop();
@@ -193,12 +135,6 @@
         hashed_counter.count();
     }
 
-    action mpls_routing_hashed(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
-                               mpls_label_t label) {
-        mpls_routing(port_num, smac, dmac, label);
-        hashed_counter.count();
-    }
-
     table hashed {
         key = {
             fabric_metadata.next_id: exact @name("next_id");
@@ -211,7 +147,6 @@
         actions = {
             output_hashed;
             routing_hashed;
-            mpls_routing_hashed;
             @defaultonly nop;
         }
         implementation = hashed_selector;
@@ -258,7 +193,6 @@
         hashed.apply();
 #endif // WITH_HASHED_NEXT
         multicast.apply();
-        next_vlan.apply();
     }
 }
 
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/pre_next.p4 b/pipelines/fabric/impl/src/main/resources/include/control/pre_next.p4
new file mode 100644
index 0000000..9d4c5b6
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/pre_next.p4
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "../header.p4"
+
+control PreNext(inout parsed_headers_t hdr,
+                inout fabric_metadata_t fabric_metadata) {
+    /*
+     * Next MPLS table.
+     * Set the MPLS label based on the next ID.
+     */
+
+    direct_counter(CounterType.packets_and_bytes) next_mpls_counter;
+
+    action set_mpls_label(mpls_label_t label) {
+        fabric_metadata.mpls_label = label;
+        next_mpls_counter.count();
+    }
+
+    table next_mpls {
+        key = {
+            fabric_metadata.next_id: exact @name("next_id");
+        }
+        actions = {
+            set_mpls_label;
+            @defaultonly nop;
+        }
+        const default_action = nop();
+        counters = next_mpls_counter;
+        size = NEXT_MPLS_TABLE_SIZE;
+    }
+
+    /*
+     * Next VLAN table.
+     * Modify VLAN ID based on next ID.
+     */
+
+    direct_counter(CounterType.packets_and_bytes) next_vlan_counter;
+
+    action set_vlan(vlan_id_t vlan_id) {
+        fabric_metadata.vlan_id = vlan_id;
+        next_vlan_counter.count();
+    }
+
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+    action set_double_vlan(vlan_id_t outer_vlan_id, vlan_id_t inner_vlan_id) {
+        set_vlan(outer_vlan_id);
+        fabric_metadata.push_double_vlan = _TRUE;
+        fabric_metadata.inner_vlan_id = inner_vlan_id;
+#ifdef WITH_BNG
+        fabric_metadata.bng.s_tag = outer_vlan_id;
+        fabric_metadata.bng.c_tag = inner_vlan_id;
+#endif // WITH_BNG
+    }
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+
+    table next_vlan {
+        key = {
+            fabric_metadata.next_id: exact @name("next_id");
+        }
+        actions = {
+            set_vlan;
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+            set_double_vlan;
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+            @defaultonly nop;
+        }
+        const default_action = nop();
+        counters = next_vlan_counter;
+        size = NEXT_VLAN_TABLE_SIZE;
+    }
+
+    apply {
+        next_mpls.apply();
+        next_vlan.apply();
+    }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/define.p4 b/pipelines/fabric/impl/src/main/resources/include/define.p4
index 4a30837..36a5ec7 100644
--- a/pipelines/fabric/impl/src/main/resources/include/define.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/define.p4
@@ -112,6 +112,18 @@
 const spgw_interface_t SPGW_IFACE_CORE = 8w2;
 const spgw_interface_t SPGW_IFACE_FROM_DBUF = 8w3;
 
+// PORT types. Set by the control plane using the actions
+// of the filtering.ingress_port_vlan table.
+typedef bit<2> port_type_t;
+// Default value. Set by deny action.
+const port_type_t PORT_TYPE_UNKNOWN = 0x0;
+// Host-facing port on a leaf switch.
+const port_type_t PORT_TYPE_EDGE = 0x1;
+// Switch-facing port on a leaf or spine switch.
+const port_type_t PORT_TYPE_INFRA = 0x2;
+// ASIC-internal port such as the recirculation one (used for INT or UE-to-UE).
+const port_type_t PORT_TYPE_INTERNAL = 0x3;
+
 const bit<16> ETHERTYPE_QINQ = 0x88A8;
 const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100;
 const bit<16> ETHERTYPE_VLAN = 0x8100;
diff --git a/pipelines/fabric/impl/src/main/resources/include/header.p4 b/pipelines/fabric/impl/src/main/resources/include/header.p4
index 6b47a60..b76ea01 100644
--- a/pipelines/fabric/impl/src/main/resources/include/header.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/header.p4
@@ -210,6 +210,7 @@
 #ifdef WITH_INT
     int_metadata_t int_meta;
 #endif // WITH_INT
+    port_type_t   port_type;
 }
 
 struct parsed_headers_t {
diff --git a/pipelines/fabric/impl/src/main/resources/include/size.p4 b/pipelines/fabric/impl/src/main/resources/include/size.p4
index 2883094..caa8c14 100644
--- a/pipelines/fabric/impl/src/main/resources/include/size.p4
+++ b/pipelines/fabric/impl/src/main/resources/include/size.p4
@@ -17,6 +17,7 @@
 #define ROUTING_V6_TABLE_SIZE 1024
 #define ACL_TABLE_SIZE 1024
 #define XCONNECT_NEXT_TABLE_SIZE 1024
+#define NEXT_MPLS_TABLE_SIZE 1024
 #define NEXT_VLAN_TABLE_SIZE 1024
 #define SIMPLE_NEXT_TABLE_SIZE 1024
 #define HASHED_NEXT_TABLE_SIZE 1024
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
index 7ca7062..3d2d9bb 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
@@ -47,7 +47,8 @@
         ["userMetadata._bng_ds_meter_result24", 32, false],
         ["userMetadata._bng_s_tag25", 12, false],
         ["userMetadata._bng_c_tag26", 12, false],
-        ["_padding_0", 1, false]
+        ["userMetadata._port_type27", 2, false],
+        ["_padding_0", 7, false]
       ]
     },
     {
@@ -1978,7 +1979,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -2008,9 +2009,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 8,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 9,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 10,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -2020,44 +2045,32 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 9,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 10,
+      "id" : 11,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 11,
+      "id" : 12,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 12,
+      "id" : 13,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -2069,7 +2082,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 13,
+      "id" : 14,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -2081,7 +2094,7 @@
     },
     {
       "name" : "FabricEgress.bng_egress.downstream.c_line_tx",
-      "id" : 14,
+      "id" : 15,
       "source_info" : {
         "filename" : "include/bng.p4",
         "line" : 267,
@@ -2093,12 +2106,12 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 15,
+      "id" : 16,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -2280,9 +2293,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu",
+      "name" : "nop",
       "id" : 8,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu",
+      "id" : 9,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -2345,7 +2364,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
-      "id" : 9,
+      "id" : 10,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2386,7 +2405,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4",
-      "id" : 10,
+      "id" : 11,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2403,7 +2422,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -2446,7 +2465,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.set_session",
-      "id" : 11,
+      "id" : 12,
       "runtime_data" : [
         {
           "name" : "pppoe_session_id",
@@ -2515,7 +2534,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.drop",
-      "id" : 12,
+      "id" : 13,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2575,19 +2594,19 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
-      "id" : 13,
-      "runtime_data" : [],
-      "primitives" : []
-    },
-    {
-      "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
       "id" : 14,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.bng_ingress.set_line",
+      "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
       "id" : 15,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.bng_ingress.set_line",
+      "id" : 16,
       "runtime_data" : [
         {
           "name" : "line_id",
@@ -2618,7 +2637,7 @@
     },
     {
       "name" : "FabricIngress.filtering.deny",
-      "id" : 16,
+      "id" : 17,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2678,22 +2697,70 @@
             "column" : 34,
             "source_fragment" : "= true; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type27"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 17,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 18,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type27"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 18,
+      "id" : 19,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -2711,16 +2778,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 32,
             "source_fragment" : "= vlan_id; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type27"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 19,
+      "id" : 20,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -2742,7 +2828,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -2751,7 +2837,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 20,
+      "id" : 21,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2782,7 +2868,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 21,
+      "id" : 22,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2832,7 +2918,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 22,
+      "id" : 23,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2863,13 +2949,196 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 23,
+      "id" : 24,
       "runtime_data" : [],
       "primitives" : []
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 25,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._mpls_label8"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 35,
+            "source_fragment" : "= label; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 26,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_double_vlan",
+      "id" : 27,
+      "runtime_data" : [
+        {
+          "name" : "outer_vlan_id",
+          "bitwidth" : 12
+        },
+        {
+          "name" : "inner_vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._push_double_vlan4"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 64,
+            "column" : 41,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._inner_vlan_id5"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 65,
+            "column" : 38,
+            "source_fragment" : "= inner_vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._bng_s_tag25"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 67,
+            "column" : 34,
+            "source_fragment" : "= outer_vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._bng_c_tag26"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 68,
+            "column" : 34,
+            "source_fragment" : "= inner_vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 24,
+      "id" : 28,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2900,7 +3169,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 25,
+      "id" : 29,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2955,7 +3224,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 26,
+      "id" : 30,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -2986,7 +3255,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 27,
+      "id" : 31,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3037,165 +3306,13 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 28,
+      "id" : 32,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 29,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_double_vlan",
-      "id" : 30,
-      "runtime_data" : [
-        {
-          "name" : "outer_vlan_id",
-          "bitwidth" : 12
-        },
-        {
-          "name" : "inner_vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._push_double_vlan4"]
-            },
-            {
-              "type" : "expression",
-              "value" : {
-                "type" : "expression",
-                "value" : {
-                  "op" : "b2d",
-                  "left" : null,
-                  "right" : {
-                    "type" : "bool",
-                    "value" : true
-                  }
-                }
-              }
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 77,
-            "column" : 41,
-            "source_fragment" : "= true; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._inner_vlan_id5"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 78,
-            "column" : 38,
-            "source_fragment" : "= inner_vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._bng_s_tag25"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 80,
-            "column" : 34,
-            "source_fragment" : "= outer_vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._bng_c_tag26"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 81,
-            "column" : 34,
-            "source_fragment" : "= inner_vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_hashed",
-      "id" : 31,
+      "id" : 33,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -3226,7 +3343,7 @@
     },
     {
       "name" : "FabricIngress.next.routing_hashed",
-      "id" : 32,
+      "id" : 34,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -3302,108 +3419,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
-      "id" : 33,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label8"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "src_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.set_mcast_group_id",
-      "id" : 34,
+      "id" : 35,
       "runtime_data" : [
         {
           "name" : "group_id",
@@ -3425,7 +3442,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -3454,7 +3471,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -3463,7 +3480,7 @@
     },
     {
       "name" : "packetio25",
-      "id" : 35,
+      "id" : 36,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3542,8 +3559,8 @@
       ]
     },
     {
-      "name" : "filtering111",
-      "id" : 36,
+      "name" : "filtering113",
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3560,7 +3577,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -3579,7 +3596,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -3598,7 +3615,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -3606,8 +3623,8 @@
       ]
     },
     {
-      "name" : "filtering117",
-      "id" : 37,
+      "name" : "filtering119",
+      "id" : 38,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3624,7 +3641,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 117,
+            "line" : 119,
             "column" : 42,
             "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
           }
@@ -3643,7 +3660,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 118,
+            "line" : 120,
             "column" : 43,
             "source_fragment" : "= hdr.inner_vlan_tag.pri; ..."
           }
@@ -3662,7 +3679,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 119,
+            "line" : 121,
             "column" : 43,
             "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..."
           }
@@ -3670,8 +3687,8 @@
       ]
     },
     {
-      "name" : "filtering127",
-      "id" : 38,
+      "name" : "filtering129",
+      "id" : 39,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3688,7 +3705,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -3696,8 +3713,8 @@
       ]
     },
     {
-      "name" : "acl101",
-      "id" : 39,
+      "name" : "acl102",
+      "id" : 40,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3714,7 +3731,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -3733,7 +3750,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -3741,8 +3758,8 @@
       ]
     },
     {
-      "name" : "acl104",
-      "id" : 40,
+      "name" : "acl105",
+      "id" : 41,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3759,7 +3776,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -3778,7 +3795,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -3786,8 +3803,8 @@
       ]
     },
     {
-      "name" : "acl97",
-      "id" : 41,
+      "name" : "acl98",
+      "id" : 42,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3804,7 +3821,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -3823,7 +3840,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -3842,7 +3859,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -3850,8 +3867,8 @@
       ]
     },
     {
-      "name" : "acl112",
-      "id" : 42,
+      "name" : "acl113",
+      "id" : 43,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3868,7 +3885,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -3887,7 +3904,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -3895,8 +3912,8 @@
       ]
     },
     {
-      "name" : "acl115",
-      "id" : 43,
+      "name" : "acl116",
+      "id" : 44,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3913,7 +3930,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -3932,7 +3949,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -3940,8 +3957,8 @@
       ]
     },
     {
-      "name" : "acl108",
-      "id" : 44,
+      "name" : "acl109",
+      "id" : 45,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3958,7 +3975,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -3977,7 +3994,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -3996,7 +4013,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -4005,7 +4022,7 @@
     },
     {
       "name" : "acl27",
-      "id" : 45,
+      "id" : 46,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4107,7 +4124,7 @@
     },
     {
       "name" : "port_counter31",
-      "id" : 46,
+      "id" : 47,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4165,7 +4182,7 @@
     },
     {
       "name" : "port_counter34",
-      "id" : 47,
+      "id" : 48,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4223,7 +4240,7 @@
     },
     {
       "name" : "bng126",
-      "id" : 48,
+      "id" : 49,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4259,7 +4276,7 @@
     },
     {
       "name" : "bng342",
-      "id" : 49,
+      "id" : 50,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4308,7 +4325,7 @@
     },
     {
       "name" : "bng131",
-      "id" : 50,
+      "id" : 51,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4334,7 +4351,7 @@
     },
     {
       "name" : "bng238",
-      "id" : 51,
+      "id" : 52,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4364,7 +4381,7 @@
     },
     {
       "name" : "bng241",
-      "id" : 52,
+      "id" : 53,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4394,7 +4411,7 @@
     },
     {
       "name" : "FabricEgress.bng_egress.downstream.encap_v4",
-      "id" : 53,
+      "id" : 54,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4411,7 +4428,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 124,
+            "line" : 136,
             "column" : 33,
             "source_fragment" : "0x8864; ..."
           }
@@ -4582,7 +4599,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 126,
+            "line" : 138,
             "column" : 35,
             "source_fragment" : "0x0021; ..."
           }
@@ -4591,7 +4608,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_mpls_if_present",
-      "id" : 54,
+      "id" : 55,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4604,7 +4621,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -4623,7 +4640,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..."
           }
@@ -4632,7 +4649,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.set_mpls",
-      "id" : 55,
+      "id" : 56,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4645,7 +4662,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -4664,7 +4681,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -4683,7 +4700,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -4702,7 +4719,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -4721,7 +4738,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -4740,7 +4757,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -4749,7 +4766,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_outer_vlan",
-      "id" : 56,
+      "id" : 57,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4762,7 +4779,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -4781,7 +4798,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -4800,7 +4817,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -4819,7 +4836,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -4838,7 +4855,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -4847,7 +4864,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_inner_vlan",
-      "id" : 57,
+      "id" : 58,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4860,7 +4877,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 300,
+            "line" : 234,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.setValid()"
           }
@@ -4879,7 +4896,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 235,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..."
           }
@@ -4898,7 +4915,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 302,
+            "line" : 236,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..."
           }
@@ -4917,7 +4934,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 303,
+            "line" : 237,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..."
           }
@@ -4936,7 +4953,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -4955,7 +4972,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -4964,7 +4981,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_vlan",
-      "id" : 58,
+      "id" : 59,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4977,7 +4994,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -4996,7 +5013,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -5015,7 +5032,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -5034,7 +5051,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -5053,7 +5070,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -5062,7 +5079,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_vlan",
-      "id" : 59,
+      "id" : 60,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5075,7 +5092,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -5084,7 +5101,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.drop",
-      "id" : 60,
+      "id" : 61,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5097,7 +5114,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -5106,7 +5123,7 @@
     },
     {
       "name" : "packetio41",
-      "id" : 61,
+      "id" : 62,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5123,7 +5140,7 @@
     },
     {
       "name" : "packetio44",
-      "id" : 62,
+      "id" : 63,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5173,8 +5190,8 @@
       ]
     },
     {
-      "name" : "next349",
-      "id" : 63,
+      "name" : "next283",
+      "id" : 64,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5187,7 +5204,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -5195,8 +5212,8 @@
       ]
     },
     {
-      "name" : "next365",
-      "id" : 64,
+      "name" : "next299",
+      "id" : 65,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5209,7 +5226,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 299,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           }
@@ -5217,8 +5234,8 @@
       ]
     },
     {
-      "name" : "next376",
-      "id" : 65,
+      "name" : "next310",
+      "id" : 66,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5231,7 +5248,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -5239,8 +5256,8 @@
       ]
     },
     {
-      "name" : "next375",
-      "id" : 66,
+      "name" : "next309",
+      "id" : 67,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5280,7 +5297,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -5288,8 +5305,8 @@
       ]
     },
     {
-      "name" : "next380",
-      "id" : 67,
+      "name" : "next314",
+      "id" : 68,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5302,7 +5319,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -5310,8 +5327,8 @@
       ]
     },
     {
-      "name" : "next379",
-      "id" : 68,
+      "name" : "next313",
+      "id" : 69,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5351,7 +5368,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -5365,7 +5382,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -5387,25 +5404,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [35],
+          "action_ids" : [36],
           "actions" : ["packetio25"],
           "base_default_next" : "node_4",
           "next_tables" : {
             "packetio25" : "node_4"
           },
           "default_entry" : {
-            "action_id" : 35,
+            "action_id" : 36,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -5416,25 +5433,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [36],
-          "actions" : ["filtering111"],
+          "action_ids" : [37],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_6",
           "next_tables" : {
-            "filtering111" : "node_6"
+            "filtering113" : "node_6"
           },
           "default_entry" : {
-            "action_id" : 36,
+            "action_id" : 37,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering117",
+          "name" : "tbl_filtering119",
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 117,
+            "line" : 119,
             "column" : 42,
             "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
           },
@@ -5445,25 +5462,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [37],
-          "actions" : ["filtering117"],
+          "action_ids" : [38],
+          "actions" : ["filtering119"],
           "base_default_next" : "node_8",
           "next_tables" : {
-            "filtering117" : "node_8"
+            "filtering119" : "node_8"
           },
           "default_entry" : {
-            "action_id" : 37,
+            "action_id" : 38,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 3,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -5474,14 +5491,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [38],
-          "actions" : ["filtering127"],
+          "action_ids" : [39],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
-            "action_id" : 38,
+            "action_id" : 39,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5492,7 +5509,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -5528,7 +5545,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [16, 17, 18],
+          "action_ids" : [17, 18, 19],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -5537,7 +5554,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 16,
+            "action_id" : 17,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5548,7 +5565,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -5584,14 +5601,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [19],
+          "action_ids" : [20],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_12",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_12"
           },
           "default_entry" : {
-            "action_id" : 19,
+            "action_id" : 20,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -5626,12 +5643,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [20, 2],
+          "action_ids" : [21, 2],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_19",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_19",
+            "nop" : "node_19"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -5663,12 +5680,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [21, 3],
+          "action_ids" : [22, 3],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_19",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_19",
+            "nop" : "node_19"
           },
           "default_entry" : {
             "action_id" : 3,
@@ -5700,13 +5717,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [22, 23, 4],
+          "action_ids" : [23, 24, 4],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_19",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_19",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_19",
+            "nop" : "node_19"
           },
           "default_entry" : {
             "action_id" : 4,
@@ -5716,9 +5733,84 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 9,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id13"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [25, 5],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 5,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 10,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id13"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [26, 27, 6],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "FabricIngress.pre_next.set_double_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 6,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 11,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -5731,25 +5823,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [45],
+          "action_ids" : [46],
           "actions" : ["acl27"],
-          "base_default_next" : "node_20",
+          "base_default_next" : "node_23",
           "next_tables" : {
-            "acl27" : "node_20"
+            "acl27" : "node_23"
           },
           "default_entry" : {
-            "action_id" : 45,
+            "action_id" : 46,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 10,
+          "name" : "tbl_acl98",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -5760,25 +5852,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [41],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_22",
+          "action_ids" : [42],
+          "actions" : ["acl98"],
+          "base_default_next" : "node_25",
           "next_tables" : {
-            "acl97" : "node_22"
+            "acl98" : "node_25"
           },
           "default_entry" : {
-            "action_id" : 41,
+            "action_id" : 42,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 11,
+          "name" : "tbl_acl102",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -5789,25 +5881,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [39],
-          "actions" : ["acl101"],
+          "action_ids" : [40],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 39,
+            "action_id" : 40,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 12,
+          "name" : "tbl_acl105",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -5818,25 +5910,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [40],
-          "actions" : ["acl104"],
+          "action_ids" : [41],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 40,
+            "action_id" : 41,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 13,
+          "name" : "tbl_acl109",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -5847,25 +5939,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [44],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_28",
+          "action_ids" : [45],
+          "actions" : ["acl109"],
+          "base_default_next" : "node_31",
           "next_tables" : {
-            "acl108" : "node_28"
+            "acl109" : "node_31"
           },
           "default_entry" : {
-            "action_id" : 44,
+            "action_id" : 45,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 14,
+          "name" : "tbl_acl113",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -5876,25 +5968,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [42],
-          "actions" : ["acl112"],
+          "action_ids" : [43],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 42,
+            "action_id" : 43,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 15,
+          "name" : "tbl_acl116",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -5905,14 +5997,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [43],
-          "actions" : ["acl115"],
+          "action_ids" : [44],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 43,
+            "action_id" : 44,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5920,7 +6012,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 16,
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -5999,6 +6091,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata._port_type27"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -6007,18 +6105,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [24, 25, 26, 27, 28],
+          "action_ids" : [28, 29, 30, 31, 32],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_33",
+          "base_default_next" : "node_36",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_33",
-            "FabricIngress.acl.punt_to_cpu" : "node_33",
-            "FabricIngress.acl.set_clone_session_id" : "node_33",
-            "FabricIngress.acl.drop" : "node_33",
-            "FabricIngress.acl.nop_acl" : "node_33"
+            "FabricIngress.acl.set_next_id_acl" : "node_36",
+            "FabricIngress.acl.punt_to_cpu" : "node_36",
+            "FabricIngress.acl.set_clone_session_id" : "node_36",
+            "FabricIngress.acl.drop" : "node_36",
+            "FabricIngress.acl.nop_acl" : "node_36"
           },
           "default_entry" : {
-            "action_id" : 28,
+            "action_id" : 32,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6026,10 +6124,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 17,
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -6048,22 +6146,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [31, 32, 33, 6],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [33, 34, 7],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 18,
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -6081,53 +6178,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [34, 7],
+          "action_ids" : [35, 8],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_39",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_39",
+            "nop" : "node_39"
           },
           "default_entry" : {
-            "action_id" : 7,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 19,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata._next_id13"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [29, 30, 5],
-          "actions" : ["FabricIngress.next.set_vlan", "FabricIngress.next.set_double_vlan", "nop"],
-          "base_default_next" : "node_37",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_37",
-            "FabricIngress.next.set_double_vlan" : "node_37",
-            "nop" : "node_37"
-          },
-          "default_entry" : {
-            "action_id" : 5,
+            "action_id" : 8,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6135,7 +6194,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 20,
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -6149,14 +6208,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [46],
+          "action_ids" : [47],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_39",
+          "base_default_next" : "node_41",
           "next_tables" : {
-            "port_counter31" : "node_39"
+            "port_counter31" : "node_41"
           },
           "default_entry" : {
-            "action_id" : 46,
+            "action_id" : 47,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6164,7 +6223,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 21,
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -6178,14 +6237,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [47],
+          "action_ids" : [48],
           "actions" : ["port_counter34"],
           "base_default_next" : "FabricIngress.bng_ingress.t_line_map",
           "next_tables" : {
             "port_counter34" : "FabricIngress.bng_ingress.t_line_map"
           },
           "default_entry" : {
-            "action_id" : 47,
+            "action_id" : 48,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6193,7 +6252,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.t_line_map",
-          "id" : 22,
+          "id" : 23,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 323,
@@ -6220,14 +6279,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15],
+          "action_ids" : [16],
           "actions" : ["FabricIngress.bng_ingress.set_line"],
-          "base_default_next" : "node_42",
+          "base_default_next" : "node_44",
           "next_tables" : {
-            "FabricIngress.bng_ingress.set_line" : "node_42"
+            "FabricIngress.bng_ingress.set_line" : "node_44"
           },
           "default_entry" : {
-            "action_id" : 15,
+            "action_id" : 16,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -6235,7 +6294,7 @@
         },
         {
           "name" : "tbl_bng342",
-          "id" : 23,
+          "id" : 24,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 342,
@@ -6249,14 +6308,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [49],
+          "action_ids" : [50],
           "actions" : ["bng342"],
           "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
           "next_tables" : {
             "bng342" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp"
           },
           "default_entry" : {
-            "action_id" : 49,
+            "action_id" : 50,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6264,7 +6323,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
-          "id" : 24,
+          "id" : 25,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 51,
@@ -6291,12 +6350,12 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [8, 0],
+          "action_ids" : [9, 0],
           "actions" : ["FabricIngress.bng_ingress.upstream.punt_to_cpu", "nop"],
           "base_default_next" : null,
           "next_tables" : {
             "__HIT__" : "tbl_bng126",
-            "__MISS__" : "node_46"
+            "__MISS__" : "node_48"
           },
           "default_entry" : {
             "action_id" : 0,
@@ -6307,7 +6366,7 @@
         },
         {
           "name" : "tbl_bng126",
-          "id" : 25,
+          "id" : 26,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 126,
@@ -6321,14 +6380,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [48],
+          "action_ids" : [49],
           "actions" : ["bng126"],
-          "base_default_next" : "node_46",
+          "base_default_next" : "node_48",
           "next_tables" : {
-            "bng126" : "node_46"
+            "bng126" : "node_48"
           },
           "default_entry" : {
-            "action_id" : 48,
+            "action_id" : 49,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6336,7 +6395,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
-          "id" : 26,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 87,
@@ -6369,7 +6428,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [10, 9],
+          "action_ids" : [11, 10],
           "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"],
           "base_default_next" : null,
           "next_tables" : {
@@ -6377,7 +6436,7 @@
             "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null
           },
           "default_entry" : {
-            "action_id" : 9,
+            "action_id" : 10,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6385,7 +6444,7 @@
         },
         {
           "name" : "tbl_bng131",
-          "id" : 27,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 131,
@@ -6399,14 +6458,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [50],
+          "action_ids" : [51],
           "actions" : ["bng131"],
           "base_default_next" : null,
           "next_tables" : {
             "bng131" : null
           },
           "default_entry" : {
-            "action_id" : 50,
+            "action_id" : 51,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6414,7 +6473,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map",
-          "id" : 28,
+          "id" : 29,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 169,
@@ -6435,12 +6494,12 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [1, 11, 12],
+          "action_ids" : [1, 12, 13],
           "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"],
           "base_default_next" : null,
           "next_tables" : {
             "__MISS__" : null,
-            "__HIT__" : "node_51"
+            "__HIT__" : "node_53"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -6451,7 +6510,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
-          "id" : 29,
+          "id" : 30,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 194,
@@ -6490,7 +6549,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [13, 14],
+          "action_ids" : [14, 15],
           "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
           "base_default_next" : null,
           "next_tables" : {
@@ -6498,7 +6557,7 @@
             "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng241"
           },
           "default_entry" : {
-            "action_id" : 14,
+            "action_id" : 15,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6506,7 +6565,7 @@
         },
         {
           "name" : "tbl_bng238",
-          "id" : 30,
+          "id" : 31,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 238,
@@ -6520,14 +6579,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [51],
+          "action_ids" : [52],
           "actions" : ["bng238"],
           "base_default_next" : null,
           "next_tables" : {
             "bng238" : null
           },
           "default_entry" : {
-            "action_id" : 51,
+            "action_id" : 52,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6535,7 +6594,7 @@
         },
         {
           "name" : "tbl_bng241",
-          "id" : 31,
+          "id" : 32,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 241,
@@ -6549,14 +6608,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [52],
+          "action_ids" : [53],
           "actions" : ["bng241"],
           "base_default_next" : null,
           "next_tables" : {
             "bng241" : null
           },
           "default_entry" : {
-            "action_id" : 52,
+            "action_id" : 53,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -6569,7 +6628,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -6630,7 +6689,7 @@
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -6645,7 +6704,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_6"
         },
         {
@@ -6653,7 +6712,7 @@
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 116,
+            "line" : 118,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.isValid()"
           },
@@ -6668,7 +6727,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering117",
+          "true_next" : "tbl_filtering119",
           "false_next" : "node_8"
         },
         {
@@ -6676,7 +6735,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -6698,7 +6757,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -6706,7 +6765,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -6729,7 +6788,7 @@
             }
           },
           "true_next" : "node_13",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_19"
         },
         {
           "name" : "node_13",
@@ -6807,14 +6866,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_19"
+        },
+        {
+          "name" : "node_19",
+          "id" : 8,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._skip_next11"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_20",
-          "id" : 8,
+          "name" : "node_23",
+          "id" : 9,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -6846,15 +6935,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_26"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_29"
         },
         {
-          "name" : "node_22",
-          "id" : 9,
+          "name" : "node_25",
+          "id" : 10,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -6869,15 +6958,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_24"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_27"
         },
         {
-          "name" : "node_24",
-          "id" : 10,
+          "name" : "node_27",
+          "id" : 11,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -6892,15 +6981,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_26",
-          "id" : 11,
+          "name" : "node_29",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -6915,15 +7004,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_28",
-          "id" : 12,
+          "name" : "node_31",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -6938,15 +7027,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_30"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_33"
         },
         {
-          "name" : "node_30",
-          "id" : 13,
+          "name" : "node_33",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -6961,15 +7050,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_33",
-          "id" : 14,
+          "name" : "node_36",
+          "id" : 15,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -6995,8 +7084,8 @@
           "false_next" : "FabricIngress.bng_ingress.t_line_map"
         },
         {
-          "name" : "node_37",
-          "id" : 15,
+          "name" : "node_39",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -7018,11 +7107,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_39"
+          "false_next" : "node_41"
         },
         {
-          "name" : "node_39",
-          "id" : 16,
+          "name" : "node_41",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -7047,8 +7136,8 @@
           "false_next" : "FabricIngress.bng_ingress.t_line_map"
         },
         {
-          "name" : "node_42",
-          "id" : 17,
+          "name" : "node_44",
+          "id" : 18,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 341,
@@ -7070,8 +7159,8 @@
           "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map"
         },
         {
-          "name" : "node_46",
-          "id" : 18,
+          "name" : "node_48",
+          "id" : 19,
           "expression" : {
             "type" : "expression",
             "value" : {
@@ -7091,11 +7180,11 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_47"
+          "true_next" : "node_49"
         },
         {
-          "name" : "node_47",
-          "id" : 19,
+          "name" : "node_49",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 128,
@@ -7117,8 +7206,8 @@
           "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4"
         },
         {
-          "name" : "node_51",
-          "id" : 20,
+          "name" : "node_53",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 235,
@@ -7146,15 +7235,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_57",
+      "init_table" : "node_59",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 32,
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -7168,14 +7257,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [61],
+          "action_ids" : [62],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_59",
+          "base_default_next" : "node_61",
           "next_tables" : {
-            "packetio41" : "node_59"
+            "packetio41" : "node_61"
           },
           "default_entry" : {
-            "action_id" : 61,
+            "action_id" : 62,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7183,7 +7272,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 33,
+          "id" : 34,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -7197,25 +7286,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [62],
+          "action_ids" : [63],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_61",
+          "base_default_next" : "node_63",
           "next_tables" : {
-            "packetio44" : "node_61"
+            "packetio44" : "node_63"
           },
           "default_entry" : {
-            "action_id" : 62,
+            "action_id" : 63,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 34,
+          "name" : "tbl_next283",
+          "id" : 35,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -7226,14 +7315,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [63],
-          "actions" : ["next349"],
-          "base_default_next" : "node_63",
+          "action_ids" : [64],
+          "actions" : ["next283"],
+          "base_default_next" : "node_65",
           "next_tables" : {
-            "next349" : "node_63"
+            "next283" : "node_65"
           },
           "default_entry" : {
-            "action_id" : 63,
+            "action_id" : 64,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7241,10 +7330,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 35,
+          "id" : 36,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -7255,14 +7344,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [54],
+          "action_ids" : [55],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
-          "base_default_next" : "node_67",
+          "base_default_next" : "node_69",
           "next_tables" : {
-            "FabricEgress.egress_next.pop_mpls_if_present" : "node_67"
+            "FabricEgress.egress_next.pop_mpls_if_present" : "node_69"
           },
           "default_entry" : {
-            "action_id" : 54,
+            "action_id" : 55,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7270,10 +7359,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 36,
+          "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -7284,14 +7373,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [55],
+          "action_ids" : [56],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
-          "base_default_next" : "node_67",
+          "base_default_next" : "node_69",
           "next_tables" : {
-            "FabricEgress.egress_next.set_mpls" : "node_67"
+            "FabricEgress.egress_next.set_mpls" : "node_69"
           },
           "default_entry" : {
-            "action_id" : 55,
+            "action_id" : 56,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7299,10 +7388,10 @@
         },
         {
           "name" : "tbl_egress_next_push_outer_vlan",
-          "id" : 37,
+          "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 361,
+            "line" : 295,
             "column" : 12,
             "source_fragment" : "push_outer_vlan()"
           },
@@ -7313,14 +7402,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [56],
+          "action_ids" : [57],
           "actions" : ["FabricEgress.egress_next.push_outer_vlan"],
           "base_default_next" : "tbl_egress_next_push_inner_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.push_outer_vlan" : "tbl_egress_next_push_inner_vlan"
           },
           "default_entry" : {
-            "action_id" : 56,
+            "action_id" : 57,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7328,10 +7417,10 @@
         },
         {
           "name" : "tbl_egress_next_push_inner_vlan",
-          "id" : 38,
+          "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 362,
+            "line" : 296,
             "column" : 12,
             "source_fragment" : "push_inner_vlan()"
           },
@@ -7342,25 +7431,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [57],
+          "action_ids" : [58],
           "actions" : ["FabricEgress.egress_next.push_inner_vlan"],
-          "base_default_next" : "node_72",
+          "base_default_next" : "node_74",
           "next_tables" : {
-            "FabricEgress.egress_next.push_inner_vlan" : "node_72"
+            "FabricEgress.egress_next.push_inner_vlan" : "node_74"
           },
           "default_entry" : {
-            "action_id" : 57,
+            "action_id" : 58,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next365",
-          "id" : 39,
+          "name" : "tbl_next299",
+          "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 299,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           },
@@ -7371,14 +7460,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [64],
-          "actions" : ["next365"],
+          "action_ids" : [65],
+          "actions" : ["next299"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
-            "next365" : "FabricEgress.egress_next.egress_vlan"
+            "next299" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 64,
+            "action_id" : 65,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7386,10 +7475,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 40,
+          "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -7413,27 +7502,27 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [58, 59, 60],
+          "action_ids" : [59, 60, 61],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_72",
+          "base_default_next" : "node_74",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_72",
-            "FabricEgress.egress_next.pop_vlan" : "node_72",
-            "FabricEgress.egress_next.drop" : "node_72"
+            "FabricEgress.egress_next.push_vlan" : "node_74",
+            "FabricEgress.egress_next.pop_vlan" : "node_74",
+            "FabricEgress.egress_next.drop" : "node_74"
           },
           "default_entry" : {
-            "action_id" : 60,
+            "action_id" : 61,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 41,
+          "name" : "tbl_next309",
+          "id" : 42,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -7444,25 +7533,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [66],
-          "actions" : ["next375"],
-          "base_default_next" : "node_74",
+          "action_ids" : [67],
+          "actions" : ["next309"],
+          "base_default_next" : "node_76",
           "next_tables" : {
-            "next375" : "node_74"
+            "next309" : "node_76"
           },
           "default_entry" : {
-            "action_id" : 66,
+            "action_id" : 67,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 42,
+          "name" : "tbl_next310",
+          "id" : 43,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -7473,25 +7562,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [65],
-          "actions" : ["next376"],
-          "base_default_next" : "node_80",
+          "action_ids" : [66],
+          "actions" : ["next310"],
+          "base_default_next" : "node_82",
           "next_tables" : {
-            "next376" : "node_80"
+            "next310" : "node_82"
           },
           "default_entry" : {
-            "action_id" : 65,
+            "action_id" : 66,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 43,
+          "name" : "tbl_next313",
+          "id" : 44,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -7502,25 +7591,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [68],
-          "actions" : ["next379"],
-          "base_default_next" : "node_78",
+          "action_ids" : [69],
+          "actions" : ["next313"],
+          "base_default_next" : "node_80",
           "next_tables" : {
-            "next379" : "node_78"
+            "next313" : "node_80"
           },
           "default_entry" : {
-            "action_id" : 68,
+            "action_id" : 69,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 44,
+          "name" : "tbl_next314",
+          "id" : 45,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -7531,14 +7620,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [67],
-          "actions" : ["next380"],
-          "base_default_next" : "node_80",
+          "action_ids" : [68],
+          "actions" : ["next314"],
+          "base_default_next" : "node_82",
           "next_tables" : {
-            "next380" : "node_80"
+            "next314" : "node_82"
           },
           "default_entry" : {
-            "action_id" : 67,
+            "action_id" : 68,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7546,7 +7635,7 @@
         },
         {
           "name" : "tbl_bng_egress_downstream_encap_v4",
-          "id" : 45,
+          "id" : 46,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 297,
@@ -7560,14 +7649,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [53],
+          "action_ids" : [54],
           "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"],
           "base_default_next" : null,
           "next_tables" : {
             "FabricEgress.bng_egress.downstream.encap_v4" : null
           },
           "default_entry" : {
-            "action_id" : 53,
+            "action_id" : 54,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7577,11 +7666,11 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_57",
-          "id" : 21,
+          "name" : "node_59",
+          "id" : 22,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 103,
+            "line" : 108,
             "column" : 33,
             "source_fragment" : "fabric_metadata"
           },
@@ -7597,11 +7686,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_59"
+          "false_next" : "node_61"
         },
         {
-          "name" : "node_59",
-          "id" : 22,
+          "name" : "node_61",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -7623,14 +7712,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_61"
+          "false_next" : "node_63"
         },
         {
-          "name" : "node_61",
-          "id" : 23,
+          "name" : "node_63",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -7665,15 +7754,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_63"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_65"
         },
         {
-          "name" : "node_63",
-          "id" : 24,
+          "name" : "node_65",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -7691,15 +7780,15 @@
               }
             }
           },
-          "true_next" : "node_64",
+          "true_next" : "node_66",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_64",
-          "id" : 25,
+          "name" : "node_66",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -7715,14 +7804,14 @@
             }
           },
           "true_next" : "tbl_egress_next_pop_mpls_if_present",
-          "false_next" : "node_67"
+          "false_next" : "node_69"
         },
         {
-          "name" : "node_67",
-          "id" : 26,
+          "name" : "node_69",
+          "id" : 27,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 104,
+            "line" : 109,
             "column" : 31,
             "source_fragment" : "fabric_metadata"
           },
@@ -7738,14 +7827,14 @@
             }
           },
           "true_next" : "tbl_egress_next_push_outer_vlan",
-          "false_next" : "tbl_next365"
+          "false_next" : "tbl_next299"
         },
         {
-          "name" : "node_72",
-          "id" : 27,
+          "name" : "node_74",
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -7760,15 +7849,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_76"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_78"
         },
         {
-          "name" : "node_74",
-          "id" : 28,
+          "name" : "node_76",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -7786,15 +7875,15 @@
               }
             }
           },
-          "true_next" : "tbl_next376",
-          "false_next" : "node_80"
+          "true_next" : "tbl_next310",
+          "false_next" : "node_82"
         },
         {
-          "name" : "node_76",
-          "id" : 29,
+          "name" : "node_78",
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -7829,15 +7918,15 @@
               }
             }
           },
-          "true_next" : "tbl_next379",
-          "false_next" : "node_80"
+          "true_next" : "tbl_next313",
+          "false_next" : "node_82"
         },
         {
-          "name" : "node_78",
-          "id" : 30,
+          "name" : "node_80",
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -7855,12 +7944,12 @@
               }
             }
           },
-          "true_next" : "tbl_next380",
-          "false_next" : "node_80"
+          "true_next" : "tbl_next314",
+          "false_next" : "node_82"
         },
         {
-          "name" : "node_80",
-          "id" : 31,
+          "name" : "node_82",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 358,
@@ -7882,11 +7971,11 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_81"
+          "true_next" : "node_83"
         },
         {
-          "name" : "node_81",
-          "id" : 32,
+          "name" : "node_83",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 296,
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt
index 6124129..29aa49f 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt
@@ -315,6 +315,57 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 26738842
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -391,6 +442,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -412,33 +469,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 17655305
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 47960972
     name: "FabricIngress.next.hashed"
     alias: "hashed"
@@ -456,9 +486,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -611,6 +638,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -623,6 +655,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -681,6 +718,47 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
+    id: 26738842
+    name: "FabricIngress.pre_next.set_double_vlan"
+    alias: "set_double_vlan"
+  }
+  params {
+    id: 1
+    name: "outer_vlan_id"
+    bitwidth: 12
+  }
+  params {
+    id: 2
+    name: "inner_vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -726,35 +804,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
-    id: 17655305
-    name: "FabricIngress.next.set_double_vlan"
-    alias: "set_double_vlan"
-  }
-  params {
-    id: 1
-    name: "outer_vlan_id"
-    bitwidth: 12
-  }
-  params {
-    id: 2
-    name: "inner_vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 27301117
     name: "FabricIngress.next.output_hashed"
     alias: "output_hashed"
@@ -789,33 +838,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -988,6 +1010,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -999,17 +1043,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 322798228
     name: "FabricIngress.next.hashed_counter"
     alias: "hashed_counter"
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
index 0d7722d..ecd8abc 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
@@ -74,7 +74,7 @@
         ["userMetadata._int_meta_new_bytes47", 16, false],
         ["userMetadata._int_meta_ig_tstamp48", 32, false],
         ["userMetadata._int_meta_eg_tstamp49", 32, false],
-        ["_padding_0", 2, false]
+        ["userMetadata._port_type50", 2, false]
       ]
     },
     {
@@ -2674,7 +2674,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -2716,9 +2716,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 11,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 12,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 13,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -2728,68 +2752,56 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 12,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.xconnect_counter",
-      "id" : 13,
+      "id" : 14,
       "is_direct" : true,
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 107,
+        "line" : 56,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
     },
     {
       "name" : "FabricIngress.next.simple_counter",
-      "id" : 14,
+      "id" : 15,
       "is_direct" : true,
       "binding" : "FabricIngress.next.simple",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 140,
+        "line" : 89,
         "column" : 50,
         "source_fragment" : "simple_counter"
       }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 15,
+      "id" : 16,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 16,
+      "id" : 17,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 17,
+      "id" : 18,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -2801,7 +2813,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 18,
+      "id" : 19,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -2813,7 +2825,7 @@
     },
     {
       "name" : "FabricIngress.spgw.pdr_counter",
-      "id" : 19,
+      "id" : 20,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 108,
@@ -2825,7 +2837,7 @@
     },
     {
       "name" : "FabricEgress.bng_egress.downstream.c_line_tx",
-      "id" : 20,
+      "id" : 21,
       "source_info" : {
         "filename" : "include/bng.p4",
         "line" : 267,
@@ -2837,7 +2849,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
-      "id" : 21,
+      "id" : 22,
       "is_direct" : true,
       "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
       "source_info" : {
@@ -2849,19 +2861,19 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 22,
+      "id" : 23,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
     },
     {
       "name" : "FabricEgress.spgw.pdr_counter",
-      "id" : 23,
+      "id" : 24,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 295,
@@ -3139,7 +3151,7 @@
       "primitives" : []
     },
     {
-      "name" : "NoAction",
+      "name" : "nop",
       "id" : 13,
       "runtime_data" : [],
       "primitives" : []
@@ -3151,9 +3163,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "name" : "NoAction",
       "id" : 15,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "id" : 16,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -3188,7 +3206,7 @@
     },
     {
       "name" : "FabricIngress.process_set_source_sink.int_set_sink",
-      "id" : 16,
+      "id" : 17,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3224,7 +3242,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu",
-      "id" : 17,
+      "id" : 18,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3288,47 +3306,6 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
-      "id" : 18,
-      "runtime_data" : [],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._bng_type36"]
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x00"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/../header.p4",
-            "line" : 163,
-            "column" : 36,
-            "source_fragment" : "2w0x0; ..."
-          }
-        },
-        {
-          "op" : "mark_to_drop",
-          "parameters" : [
-            {
-              "type" : "header",
-              "value" : "standard_metadata"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/bng.p4",
-            "line" : 77,
-            "column" : 8,
-            "source_fragment" : "mark_to_drop(smeta)"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
       "id" : 19,
       "runtime_data" : [],
       "primitives" : [
@@ -3369,7 +3346,7 @@
       ]
     },
     {
-      "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4",
+      "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
       "id" : 20,
       "runtime_data" : [],
       "primitives" : [
@@ -3378,6 +3355,47 @@
           "parameters" : [
             {
               "type" : "field",
+              "value" : ["scalars", "userMetadata._bng_type36"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../header.p4",
+            "line" : 163,
+            "column" : 36,
+            "source_fragment" : "2w0x0; ..."
+          }
+        },
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/bng.p4",
+            "line" : 77,
+            "column" : 8,
+            "source_fragment" : "mark_to_drop(smeta)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4",
+      "id" : 21,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
               "value" : ["eth_type", "value"]
             },
             {
@@ -3387,7 +3405,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3430,7 +3448,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v6",
-      "id" : 21,
+      "id" : 22,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3447,7 +3465,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 121,
+            "line" : 133,
             "column" : 31,
             "source_fragment" : "0x86dd; ..."
           }
@@ -3490,7 +3508,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.set_session",
-      "id" : 22,
+      "id" : 23,
       "runtime_data" : [
         {
           "name" : "pppoe_session_id",
@@ -3559,7 +3577,7 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.drop",
-      "id" : 23,
+      "id" : 24,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3619,18 +3637,12 @@
     },
     {
       "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
-      "id" : 24,
-      "runtime_data" : [],
-      "primitives" : []
-    },
-    {
-      "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
       "id" : 25,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
+      "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
       "id" : 26,
       "runtime_data" : [],
       "primitives" : []
@@ -3642,8 +3654,14 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.bng_ingress.set_line",
+      "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
       "id" : 28,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.bng_ingress.set_line",
+      "id" : 29,
       "runtime_data" : [
         {
           "name" : "line_id",
@@ -3674,7 +3692,7 @@
     },
     {
       "name" : "FabricIngress.filtering.deny",
-      "id" : 29,
+      "id" : 30,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3734,22 +3752,70 @@
             "column" : 34,
             "source_fragment" : "= true; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type50"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 30,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 31,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type50"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 31,
+      "id" : 32,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -3767,16 +3833,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 32,
             "source_fragment" : "= vlan_id; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type50"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 32,
+      "id" : 33,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -3798,7 +3883,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -3807,7 +3892,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 33,
+      "id" : 34,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -3838,7 +3923,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 34,
+      "id" : 35,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -3888,7 +3973,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 35,
+      "id" : 36,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -3919,13 +4004,13 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 36,
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : []
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v6",
-      "id" : 37,
+      "id" : 38,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -3955,8 +4040,191 @@
       ]
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 39,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._mpls_label8"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 35,
+            "source_fragment" : "= label; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 40,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_double_vlan",
+      "id" : 41,
+      "runtime_data" : [
+        {
+          "name" : "outer_vlan_id",
+          "bitwidth" : 12
+        },
+        {
+          "name" : "inner_vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._push_double_vlan4"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 64,
+            "column" : 41,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._inner_vlan_id5"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 65,
+            "column" : 38,
+            "source_fragment" : "= inner_vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._bng_s_tag40"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 67,
+            "column" : 34,
+            "source_fragment" : "= outer_vlan_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._bng_c_tag41"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 68,
+            "column" : 34,
+            "source_fragment" : "= inner_vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 38,
+      "id" : 42,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -3987,7 +4255,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 39,
+      "id" : 43,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4042,7 +4310,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 40,
+      "id" : 44,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -4073,7 +4341,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 41,
+      "id" : 45,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4124,226 +4392,12 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 42,
+      "id" : 46,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 43,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_double_vlan",
-      "id" : 44,
-      "runtime_data" : [
-        {
-          "name" : "outer_vlan_id",
-          "bitwidth" : 12
-        },
-        {
-          "name" : "inner_vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._push_double_vlan4"]
-            },
-            {
-              "type" : "expression",
-              "value" : {
-                "type" : "expression",
-                "value" : {
-                  "op" : "b2d",
-                  "left" : null,
-                  "right" : {
-                    "type" : "bool",
-                    "value" : true
-                  }
-                }
-              }
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 77,
-            "column" : 41,
-            "source_fragment" : "= true; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._inner_vlan_id5"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 78,
-            "column" : 38,
-            "source_fragment" : "= inner_vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._bng_s_tag40"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 80,
-            "column" : 34,
-            "source_fragment" : "= outer_vlan_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._bng_c_tag41"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 81,
-            "column" : 34,
-            "source_fragment" : "= inner_vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_xconnect",
-      "id" : 45,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_next_id_xconnect",
-      "id" : 46,
-      "runtime_data" : [
-        {
-          "name" : "next_id",
-          "bitwidth" : 32
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._next_id13"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 115,
-            "column" : 32,
-            "source_fragment" : "= next_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.output_simple",
       "id" : 47,
       "runtime_data" : [
         {
@@ -4374,20 +4428,12 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.routing_simple",
+      "name" : "FabricIngress.next.set_next_id_xconnect",
       "id" : 48,
       "runtime_data" : [
         {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
+          "name" : "next_id",
+          "bitwidth" : 32
         }
       ],
       "primitives" : [
@@ -4396,39 +4442,32 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["ethernet", "src_addr"]
+              "value" : ["scalars", "userMetadata._next_id13"]
             },
             {
               "type" : "runtime_data",
-              "value" : 1
+              "value" : 0
             }
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+            "line" : 64,
+            "column" : 32,
+            "source_fragment" : "= next_id; ..."
           }
-        },
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_simple",
+      "id" : 49,
+      "runtime_data" : [
         {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
         {
           "op" : "assign",
           "parameters" : [
@@ -4451,8 +4490,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_simple",
-      "id" : 49,
+      "name" : "FabricIngress.next.routing_simple",
+      "id" : 50,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -4465,10 +4504,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -4477,25 +4512,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label8"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -4552,7 +4568,7 @@
     },
     {
       "name" : "FabricIngress.next.output_hashed",
-      "id" : 50,
+      "id" : 51,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -4583,83 +4599,6 @@
     },
     {
       "name" : "FabricIngress.next.routing_hashed",
-      "id" : 51,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "src_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
       "id" : 52,
       "runtime_data" : [
         {
@@ -4673,10 +4612,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -4685,25 +4620,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label8"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -4782,7 +4698,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -4811,7 +4727,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -4837,7 +4753,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5056,7 +4972,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5260,7 +5176,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5479,7 +5395,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5664,7 +5580,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5883,7 +5799,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -6087,7 +6003,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -6306,7 +6222,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -7938,7 +7854,7 @@
       ]
     },
     {
-      "name" : "filtering111",
+      "name" : "filtering113",
       "id" : 74,
       "runtime_data" : [],
       "primitives" : [
@@ -7956,7 +7872,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -7975,7 +7891,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -7994,7 +7910,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -8002,7 +7918,7 @@
       ]
     },
     {
-      "name" : "filtering117",
+      "name" : "filtering119",
       "id" : 75,
       "runtime_data" : [],
       "primitives" : [
@@ -8020,7 +7936,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 117,
+            "line" : 119,
             "column" : 42,
             "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
           }
@@ -8039,7 +7955,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 118,
+            "line" : 120,
             "column" : 43,
             "source_fragment" : "= hdr.inner_vlan_tag.pri; ..."
           }
@@ -8058,7 +7974,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 119,
+            "line" : 121,
             "column" : 43,
             "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..."
           }
@@ -8066,7 +7982,7 @@
       ]
     },
     {
-      "name" : "filtering127",
+      "name" : "filtering129",
       "id" : 76,
       "runtime_data" : [],
       "primitives" : [
@@ -8084,7 +8000,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -8092,7 +8008,7 @@
       ]
     },
     {
-      "name" : "acl101",
+      "name" : "acl102",
       "id" : 77,
       "runtime_data" : [],
       "primitives" : [
@@ -8110,7 +8026,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -8129,7 +8045,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -8137,7 +8053,7 @@
       ]
     },
     {
-      "name" : "acl104",
+      "name" : "acl105",
       "id" : 78,
       "runtime_data" : [],
       "primitives" : [
@@ -8155,7 +8071,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -8174,7 +8090,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -8182,7 +8098,7 @@
       ]
     },
     {
-      "name" : "acl97",
+      "name" : "acl98",
       "id" : 79,
       "runtime_data" : [],
       "primitives" : [
@@ -8200,7 +8116,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -8219,7 +8135,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -8238,7 +8154,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -8246,7 +8162,7 @@
       ]
     },
     {
-      "name" : "acl112",
+      "name" : "acl113",
       "id" : 80,
       "runtime_data" : [],
       "primitives" : [
@@ -8264,7 +8180,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -8283,7 +8199,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -8291,7 +8207,7 @@
       ]
     },
     {
-      "name" : "acl115",
+      "name" : "acl116",
       "id" : 81,
       "runtime_data" : [],
       "primitives" : [
@@ -8309,7 +8225,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -8328,7 +8244,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -8336,7 +8252,7 @@
       ]
     },
     {
-      "name" : "acl108",
+      "name" : "acl109",
       "id" : 82,
       "runtime_data" : [],
       "primitives" : [
@@ -8354,7 +8270,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -8373,7 +8289,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -8392,7 +8308,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -9008,7 +8924,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 124,
+            "line" : 136,
             "column" : 33,
             "source_fragment" : "0x8864; ..."
           }
@@ -9179,7 +9095,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 126,
+            "line" : 138,
             "column" : 35,
             "source_fragment" : "0x0021; ..."
           }
@@ -9205,7 +9121,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 124,
+            "line" : 136,
             "column" : 33,
             "source_fragment" : "0x8864; ..."
           }
@@ -9376,7 +9292,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 127,
+            "line" : 139,
             "column" : 35,
             "source_fragment" : "0x0057; ..."
           }
@@ -9453,7 +9369,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 157,
+            "line" : 169,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -9871,7 +9787,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 153,
+            "line" : 165,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -15916,7 +15832,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -16144,7 +16060,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 132,
+            "line" : 144,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -16330,7 +16246,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 163,
+            "line" : 175,
             "column" : 31,
             "source_fragment" : "0; ..."
           }
@@ -16425,7 +16341,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 167,
+            "line" : 179,
             "column" : 21,
             "source_fragment" : "1; ..."
           }
@@ -16861,7 +16777,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -16880,7 +16796,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..."
           }
@@ -16902,7 +16818,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -16921,7 +16837,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -16940,7 +16856,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -16959,7 +16875,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -16978,7 +16894,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -16997,7 +16913,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -17019,7 +16935,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -17038,7 +16954,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -17057,7 +16973,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -17076,7 +16992,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -17095,7 +17011,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -17117,7 +17033,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 300,
+            "line" : 234,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.setValid()"
           }
@@ -17136,7 +17052,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 235,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..."
           }
@@ -17155,7 +17071,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 302,
+            "line" : 236,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..."
           }
@@ -17174,7 +17090,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 303,
+            "line" : 237,
             "column" : 8,
             "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..."
           }
@@ -17193,7 +17109,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -17212,7 +17128,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -17234,7 +17150,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -17253,7 +17169,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -17272,7 +17188,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -17291,7 +17207,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -17310,7 +17226,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -17332,7 +17248,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -17354,7 +17270,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -17414,7 +17330,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 135,
+            "line" : 147,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -17570,7 +17486,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 148,
+            "line" : 160,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -17589,7 +17505,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 132,
+            "line" : 144,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -18022,7 +17938,7 @@
       ]
     },
     {
-      "name" : "next349",
+      "name" : "next283",
       "id" : 150,
       "runtime_data" : [],
       "primitives" : [
@@ -18036,7 +17952,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -18044,7 +17960,7 @@
       ]
     },
     {
-      "name" : "next365",
+      "name" : "next299",
       "id" : 151,
       "runtime_data" : [],
       "primitives" : [
@@ -18058,7 +17974,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 299,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           }
@@ -18066,7 +17982,7 @@
       ]
     },
     {
-      "name" : "next376",
+      "name" : "next310",
       "id" : 152,
       "runtime_data" : [],
       "primitives" : [
@@ -18080,7 +17996,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -18088,7 +18004,7 @@
       ]
     },
     {
-      "name" : "next375",
+      "name" : "next309",
       "id" : 153,
       "runtime_data" : [],
       "primitives" : [
@@ -18129,7 +18045,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -18137,7 +18053,7 @@
       ]
     },
     {
-      "name" : "next380",
+      "name" : "next314",
       "id" : 154,
       "runtime_data" : [],
       "primitives" : [
@@ -18151,7 +18067,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -18159,7 +18075,7 @@
       ]
     },
     {
-      "name" : "next379",
+      "name" : "next313",
       "id" : 155,
       "runtime_data" : [],
       "primitives" : [
@@ -18200,7 +18116,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -18208,7 +18124,7 @@
       ]
     },
     {
-      "name" : "next385",
+      "name" : "next319",
       "id" : 156,
       "runtime_data" : [],
       "primitives" : [
@@ -18222,7 +18138,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 385,
+            "line" : 319,
             "column" : 45,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -18230,7 +18146,7 @@
       ]
     },
     {
-      "name" : "next384",
+      "name" : "next318",
       "id" : 157,
       "runtime_data" : [],
       "primitives" : [
@@ -18271,7 +18187,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 384,
+            "line" : 318,
             "column" : 16,
             "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1"
           }
@@ -18573,7 +18489,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -18814,7 +18730,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [65, 67, 14],
+          "action_ids" : [65, 67, 15],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -18823,7 +18739,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 14,
+            "action_id" : 15,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -18852,7 +18768,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [64, 66, 13],
+          "action_ids" : [64, 66, 14],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -18861,7 +18777,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 13,
+            "action_id" : 14,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -19098,11 +19014,11 @@
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -19114,10 +19030,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [74],
-          "actions" : ["filtering111"],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_18",
           "next_tables" : {
-            "filtering111" : "node_18"
+            "filtering113" : "node_18"
           },
           "default_entry" : {
             "action_id" : 74,
@@ -19127,11 +19043,11 @@
           }
         },
         {
-          "name" : "tbl_filtering117",
+          "name" : "tbl_filtering119",
           "id" : 10,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 117,
+            "line" : 119,
             "column" : 42,
             "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
           },
@@ -19143,10 +19059,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [75],
-          "actions" : ["filtering117"],
+          "actions" : ["filtering119"],
           "base_default_next" : "node_20",
           "next_tables" : {
-            "filtering117" : "node_20"
+            "filtering119" : "node_20"
           },
           "default_entry" : {
             "action_id" : 75,
@@ -19156,11 +19072,11 @@
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -19172,10 +19088,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [76],
-          "actions" : ["filtering127"],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
             "action_id" : 76,
@@ -19189,7 +19105,7 @@
           "id" : 12,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -19225,7 +19141,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [29, 30, 31],
+          "action_ids" : [30, 31, 32],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -19234,7 +19150,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 29,
+            "action_id" : 30,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -19245,7 +19161,7 @@
           "id" : 13,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -19281,14 +19197,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [32],
+          "action_ids" : [33],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_24",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_24"
           },
           "default_entry" : {
-            "action_id" : 32,
+            "action_id" : 33,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -19323,12 +19239,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [33, 4],
+          "action_ids" : [34, 4],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_33",
+            "nop" : "node_33"
           },
           "default_entry" : {
             "action_id" : 4,
@@ -19360,12 +19276,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [34, 5],
+          "action_ids" : [35, 5],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_33",
+            "nop" : "node_33"
           },
           "default_entry" : {
             "action_id" : 5,
@@ -19397,13 +19313,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [35, 36, 6],
+          "action_ids" : [36, 37, 6],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_33",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_33",
+            "nop" : "node_33"
           },
           "default_entry" : {
             "action_id" : 6,
@@ -19435,12 +19351,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [37, 7],
+          "action_ids" : [38, 7],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v6" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v6" : "node_33",
+            "nop" : "node_33"
           },
           "default_entry" : {
             "action_id" : 7,
@@ -19450,9 +19366,84 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 18,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id13"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [39, 8],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 8,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 19,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id13"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [40, 41, 9],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "FabricIngress.pre_next.set_double_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "FabricIngress.pre_next.set_double_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 9,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 20,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -19467,9 +19458,9 @@
           "direct_meters" : null,
           "action_ids" : [83],
           "actions" : ["acl27"],
-          "base_default_next" : "node_34",
+          "base_default_next" : "node_37",
           "next_tables" : {
-            "acl27" : "node_34"
+            "acl27" : "node_37"
           },
           "default_entry" : {
             "action_id" : 83,
@@ -19479,11 +19470,11 @@
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 19,
+          "name" : "tbl_acl98",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -19495,10 +19486,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [79],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_36",
+          "actions" : ["acl98"],
+          "base_default_next" : "node_39",
           "next_tables" : {
-            "acl97" : "node_36"
+            "acl98" : "node_39"
           },
           "default_entry" : {
             "action_id" : 79,
@@ -19508,11 +19499,11 @@
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 20,
+          "name" : "tbl_acl102",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -19524,10 +19515,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [77],
-          "actions" : ["acl101"],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
             "action_id" : 77,
@@ -19537,11 +19528,11 @@
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 21,
+          "name" : "tbl_acl105",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -19553,10 +19544,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [78],
-          "actions" : ["acl104"],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
             "action_id" : 78,
@@ -19566,11 +19557,11 @@
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 22,
+          "name" : "tbl_acl109",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -19582,10 +19573,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [82],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_42",
+          "actions" : ["acl109"],
+          "base_default_next" : "node_45",
           "next_tables" : {
-            "acl108" : "node_42"
+            "acl109" : "node_45"
           },
           "default_entry" : {
             "action_id" : 82,
@@ -19595,11 +19586,11 @@
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 23,
+          "name" : "tbl_acl113",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -19611,10 +19602,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [80],
-          "actions" : ["acl112"],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
             "action_id" : 80,
@@ -19624,11 +19615,11 @@
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 24,
+          "name" : "tbl_acl116",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -19640,10 +19631,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [81],
-          "actions" : ["acl115"],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
             "action_id" : 81,
@@ -19654,7 +19645,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 25,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -19733,6 +19724,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata._port_type50"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -19741,18 +19738,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [38, 39, 40, 41, 42],
+          "action_ids" : [42, 43, 44, 45, 46],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_47",
+          "base_default_next" : "node_50",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_47",
-            "FabricIngress.acl.punt_to_cpu" : "node_47",
-            "FabricIngress.acl.set_clone_session_id" : "node_47",
-            "FabricIngress.acl.drop" : "node_47",
-            "FabricIngress.acl.nop_acl" : "node_47"
+            "FabricIngress.acl.set_next_id_acl" : "node_50",
+            "FabricIngress.acl.punt_to_cpu" : "node_50",
+            "FabricIngress.acl.set_clone_session_id" : "node_50",
+            "FabricIngress.acl.drop" : "node_50",
+            "FabricIngress.acl.nop_acl" : "node_50"
           },
           "default_entry" : {
-            "action_id" : 42,
+            "action_id" : 46,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -19760,10 +19757,10 @@
         },
         {
           "name" : "FabricIngress.next.xconnect",
-          "id" : 26,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 119,
+            "line" : 68,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -19787,7 +19784,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [45, 46, 9],
+          "action_ids" : [47, 48, 10],
           "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
           "base_default_next" : "FabricIngress.next.simple",
           "next_tables" : {
@@ -19796,7 +19793,7 @@
             "nop" : "FabricIngress.next.simple"
           },
           "default_entry" : {
-            "action_id" : 9,
+            "action_id" : 10,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -19804,10 +19801,10 @@
         },
         {
           "name" : "FabricIngress.next.simple",
-          "id" : 27,
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 158,
+            "line" : 101,
             "column" : 10,
             "source_fragment" : "simple"
           },
@@ -19825,17 +19822,16 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [47, 48, 49, 10],
-          "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.routing_simple", "FabricIngress.next.mpls_routing_simple", "nop"],
+          "action_ids" : [49, 50, 11],
+          "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.routing_simple", "nop"],
           "base_default_next" : "FabricIngress.next.hashed",
           "next_tables" : {
             "FabricIngress.next.output_simple" : "FabricIngress.next.hashed",
             "FabricIngress.next.routing_simple" : "FabricIngress.next.hashed",
-            "FabricIngress.next.mpls_routing_simple" : "FabricIngress.next.hashed",
             "nop" : "FabricIngress.next.hashed"
           },
           "default_entry" : {
-            "action_id" : 10,
+            "action_id" : 11,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -19843,10 +19839,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 28,
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -19865,22 +19861,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [50, 51, 52, 11],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [51, 52, 12],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 29,
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -19898,53 +19893,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [53, 12],
+          "action_ids" : [53, 13],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_55",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_55",
+            "nop" : "node_55"
           },
           "default_entry" : {
-            "action_id" : 12,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 30,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata._next_id13"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [43, 44, 8],
-          "actions" : ["FabricIngress.next.set_vlan", "FabricIngress.next.set_double_vlan", "nop"],
-          "base_default_next" : "node_53",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_53",
-            "FabricIngress.next.set_double_vlan" : "node_53",
-            "nop" : "node_53"
-          },
-          "default_entry" : {
-            "action_id" : 8,
+            "action_id" : 13,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -19952,7 +19909,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 31,
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -19968,9 +19925,9 @@
           "direct_meters" : null,
           "action_ids" : [84],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_55",
+          "base_default_next" : "node_57",
           "next_tables" : {
-            "port_counter31" : "node_55"
+            "port_counter31" : "node_57"
           },
           "default_entry" : {
             "action_id" : 84,
@@ -19981,7 +19938,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 32,
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -20010,7 +19967,7 @@
         },
         {
           "name" : "FabricIngress.process_set_source_sink.tb_set_source",
-          "id" : 33,
+          "id" : 34,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 46,
@@ -20031,7 +19988,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15, 0],
+          "action_ids" : [16, 0],
           "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
           "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_sink",
           "next_tables" : {
@@ -20047,7 +20004,7 @@
         },
         {
           "name" : "FabricIngress.process_set_source_sink.tb_set_sink",
-          "id" : 34,
+          "id" : 35,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 67,
@@ -20068,12 +20025,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [16, 1],
+          "action_ids" : [17, 1],
           "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "nop"],
-          "base_default_next" : "node_59",
+          "base_default_next" : "node_61",
           "next_tables" : {
-            "FabricIngress.process_set_source_sink.int_set_sink" : "node_59",
-            "nop" : "node_59"
+            "FabricIngress.process_set_source_sink.int_set_sink" : "node_61",
+            "nop" : "node_61"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -20084,7 +20041,7 @@
         },
         {
           "name" : "tbl_int_main89",
-          "id" : 35,
+          "id" : 36,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 89,
@@ -20113,7 +20070,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.t_line_map",
-          "id" : 36,
+          "id" : 37,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 323,
@@ -20140,14 +20097,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [28],
+          "action_ids" : [29],
           "actions" : ["FabricIngress.bng_ingress.set_line"],
-          "base_default_next" : "node_62",
+          "base_default_next" : "node_64",
           "next_tables" : {
-            "FabricIngress.bng_ingress.set_line" : "node_62"
+            "FabricIngress.bng_ingress.set_line" : "node_64"
           },
           "default_entry" : {
-            "action_id" : 28,
+            "action_id" : 29,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -20155,7 +20112,7 @@
         },
         {
           "name" : "tbl_bng342",
-          "id" : 37,
+          "id" : 38,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 342,
@@ -20184,7 +20141,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
-          "id" : 38,
+          "id" : 39,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 51,
@@ -20211,12 +20168,12 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [17, 2],
+          "action_ids" : [18, 2],
           "actions" : ["FabricIngress.bng_ingress.upstream.punt_to_cpu", "nop"],
           "base_default_next" : null,
           "next_tables" : {
             "__HIT__" : "tbl_bng126",
-            "__MISS__" : "node_66"
+            "__MISS__" : "node_68"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -20227,7 +20184,7 @@
         },
         {
           "name" : "tbl_bng126",
-          "id" : 39,
+          "id" : 40,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 126,
@@ -20243,9 +20200,9 @@
           "direct_meters" : null,
           "action_ids" : [87],
           "actions" : ["bng126"],
-          "base_default_next" : "node_66",
+          "base_default_next" : "node_68",
           "next_tables" : {
-            "bng126" : "node_66"
+            "bng126" : "node_68"
           },
           "default_entry" : {
             "action_id" : 87,
@@ -20256,7 +20213,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
-          "id" : 40,
+          "id" : 41,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 87,
@@ -20289,7 +20246,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [20, 18],
+          "action_ids" : [21, 19],
           "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"],
           "base_default_next" : null,
           "next_tables" : {
@@ -20297,7 +20254,7 @@
             "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null
           },
           "default_entry" : {
-            "action_id" : 18,
+            "action_id" : 19,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -20305,7 +20262,7 @@
         },
         {
           "name" : "tbl_bng131",
-          "id" : 41,
+          "id" : 42,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 131,
@@ -20334,7 +20291,7 @@
         },
         {
           "name" : "tbl_bng112",
-          "id" : 42,
+          "id" : 43,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 112,
@@ -20363,7 +20320,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6",
-          "id" : 43,
+          "id" : 44,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 109,
@@ -20396,7 +20353,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [21, 19],
+          "action_ids" : [22, 20],
           "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v6", "FabricIngress.bng_ingress.upstream.term_disabled"],
           "base_default_next" : null,
           "next_tables" : {
@@ -20404,7 +20361,7 @@
             "FabricIngress.bng_ingress.upstream.term_enabled_v6" : null
           },
           "default_entry" : {
-            "action_id" : 19,
+            "action_id" : 20,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -20412,7 +20369,7 @@
         },
         {
           "name" : "tbl_bng139",
-          "id" : 44,
+          "id" : 45,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 139,
@@ -20441,7 +20398,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map",
-          "id" : 45,
+          "id" : 46,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 169,
@@ -20462,12 +20419,12 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [3, 22, 23],
+          "action_ids" : [3, 23, 24],
           "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"],
           "base_default_next" : null,
           "next_tables" : {
             "__MISS__" : null,
-            "__HIT__" : "node_75"
+            "__HIT__" : "node_77"
           },
           "default_entry" : {
             "action_id" : 3,
@@ -20478,7 +20435,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
-          "id" : 46,
+          "id" : 47,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 194,
@@ -20517,7 +20474,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [24, 26],
+          "action_ids" : [25, 27],
           "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
           "base_default_next" : null,
           "next_tables" : {
@@ -20525,7 +20482,7 @@
             "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng241"
           },
           "default_entry" : {
-            "action_id" : 26,
+            "action_id" : 27,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -20533,7 +20490,7 @@
         },
         {
           "name" : "tbl_bng238",
-          "id" : 47,
+          "id" : 48,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 238,
@@ -20562,7 +20519,7 @@
         },
         {
           "name" : "tbl_bng241",
-          "id" : 48,
+          "id" : 49,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 241,
@@ -20591,7 +20548,7 @@
         },
         {
           "name" : "FabricIngress.bng_ingress.downstream.t_qos_v6",
-          "id" : 49,
+          "id" : 50,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 210,
@@ -20624,7 +20581,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [25, 27],
+          "action_ids" : [26, 28],
           "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
           "base_default_next" : null,
           "next_tables" : {
@@ -20632,7 +20589,7 @@
             "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_bng253"
           },
           "default_entry" : {
-            "action_id" : 27,
+            "action_id" : 28,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -20640,7 +20597,7 @@
         },
         {
           "name" : "tbl_bng250",
-          "id" : 50,
+          "id" : 51,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 250,
@@ -20669,7 +20626,7 @@
         },
         {
           "name" : "tbl_bng253",
-          "id" : 51,
+          "id" : 52,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 253,
@@ -20703,7 +20660,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -20839,7 +20796,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 68,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -20862,7 +20819,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -20877,7 +20834,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_18"
         },
         {
@@ -20885,7 +20842,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 116,
+            "line" : 118,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.isValid()"
           },
@@ -20900,7 +20857,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering117",
+          "true_next" : "tbl_filtering119",
           "false_next" : "node_20"
         },
         {
@@ -20908,7 +20865,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -20930,7 +20887,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -20938,7 +20895,7 @@
           "id" : 8,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -20961,7 +20918,7 @@
             }
           },
           "true_next" : "node_25",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_33"
         },
         {
           "name" : "node_25",
@@ -21065,14 +21022,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v6",
+          "false_next" : "node_33"
+        },
+        {
+          "name" : "node_33",
+          "id" : 13,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._skip_next11"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_34",
-          "id" : 13,
+          "name" : "node_37",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -21104,15 +21091,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_40"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_43"
         },
         {
-          "name" : "node_36",
-          "id" : 14,
+          "name" : "node_39",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -21127,15 +21114,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_38"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_41"
         },
         {
-          "name" : "node_38",
-          "id" : 15,
+          "name" : "node_41",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -21150,15 +21137,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_40",
-          "id" : 16,
+          "name" : "node_43",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -21173,15 +21160,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_42",
-          "id" : 17,
+          "name" : "node_45",
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -21196,15 +21183,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_44"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_47"
         },
         {
-          "name" : "node_44",
-          "id" : 18,
+          "name" : "node_47",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -21219,15 +21206,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_47",
-          "id" : 19,
+          "name" : "node_50",
+          "id" : 20,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -21253,8 +21240,8 @@
           "false_next" : "FabricIngress.bng_ingress.t_line_map"
         },
         {
-          "name" : "node_53",
-          "id" : 20,
+          "name" : "node_55",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -21276,11 +21263,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_55"
+          "false_next" : "node_57"
         },
         {
-          "name" : "node_55",
-          "id" : 21,
+          "name" : "node_57",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -21305,11 +21292,11 @@
           "false_next" : "FabricIngress.process_set_source_sink.tb_set_source"
         },
         {
-          "name" : "node_59",
-          "id" : 22,
+          "name" : "node_61",
+          "id" : 23,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 81,
+            "line" : 86,
             "column" : 47,
             "source_fragment" : "fabric_metadata"
           },
@@ -21328,8 +21315,8 @@
           "false_next" : "FabricIngress.bng_ingress.t_line_map"
         },
         {
-          "name" : "node_62",
-          "id" : 23,
+          "name" : "node_64",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 341,
@@ -21351,8 +21338,8 @@
           "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map"
         },
         {
-          "name" : "node_66",
-          "id" : 24,
+          "name" : "node_68",
+          "id" : 25,
           "expression" : {
             "type" : "expression",
             "value" : {
@@ -21372,11 +21359,11 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_67"
+          "true_next" : "node_69"
         },
         {
-          "name" : "node_67",
-          "id" : 25,
+          "name" : "node_69",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 128,
@@ -21395,11 +21382,11 @@
             }
           },
           "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
-          "false_next" : "node_70"
+          "false_next" : "node_72"
         },
         {
-          "name" : "node_70",
-          "id" : 26,
+          "name" : "node_72",
+          "id" : 27,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 136,
@@ -21421,8 +21408,8 @@
           "true_next" : "tbl_bng112"
         },
         {
-          "name" : "node_75",
-          "id" : 27,
+          "name" : "node_77",
+          "id" : 28,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 235,
@@ -21441,11 +21428,11 @@
             }
           },
           "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
-          "false_next" : "node_79"
+          "false_next" : "node_81"
         },
         {
-          "name" : "node_79",
-          "id" : 28,
+          "name" : "node_81",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 247,
@@ -21473,15 +21460,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_85",
+      "init_table" : "node_87",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 52,
+          "id" : 53,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -21497,9 +21484,9 @@
           "direct_meters" : null,
           "action_ids" : [148],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_87",
+          "base_default_next" : "node_89",
           "next_tables" : {
-            "packetio41" : "node_87"
+            "packetio41" : "node_89"
           },
           "default_entry" : {
             "action_id" : 148,
@@ -21510,7 +21497,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 53,
+          "id" : 54,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -21526,9 +21513,9 @@
           "direct_meters" : null,
           "action_ids" : [149],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_89",
+          "base_default_next" : "node_91",
           "next_tables" : {
-            "packetio44" : "node_89"
+            "packetio44" : "node_91"
           },
           "default_entry" : {
             "action_id" : 149,
@@ -21538,11 +21525,11 @@
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 54,
+          "name" : "tbl_next283",
+          "id" : 55,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -21554,10 +21541,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [150],
-          "actions" : ["next349"],
-          "base_default_next" : "node_91",
+          "actions" : ["next283"],
+          "base_default_next" : "node_93",
           "next_tables" : {
-            "next349" : "node_91"
+            "next283" : "node_93"
           },
           "default_entry" : {
             "action_id" : 150,
@@ -21568,10 +21555,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 55,
+          "id" : 56,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -21584,9 +21571,9 @@
           "direct_meters" : null,
           "action_ids" : [140],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
-          "base_default_next" : "node_95",
+          "base_default_next" : "node_97",
           "next_tables" : {
-            "FabricEgress.egress_next.pop_mpls_if_present" : "node_95"
+            "FabricEgress.egress_next.pop_mpls_if_present" : "node_97"
           },
           "default_entry" : {
             "action_id" : 140,
@@ -21597,10 +21584,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 56,
+          "id" : 57,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -21613,9 +21600,9 @@
           "direct_meters" : null,
           "action_ids" : [141],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
-          "base_default_next" : "node_95",
+          "base_default_next" : "node_97",
           "next_tables" : {
-            "FabricEgress.egress_next.set_mpls" : "node_95"
+            "FabricEgress.egress_next.set_mpls" : "node_97"
           },
           "default_entry" : {
             "action_id" : 141,
@@ -21626,10 +21613,10 @@
         },
         {
           "name" : "tbl_egress_next_push_outer_vlan",
-          "id" : 57,
+          "id" : 58,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 361,
+            "line" : 295,
             "column" : 12,
             "source_fragment" : "push_outer_vlan()"
           },
@@ -21655,10 +21642,10 @@
         },
         {
           "name" : "tbl_egress_next_push_inner_vlan",
-          "id" : 58,
+          "id" : 59,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 362,
+            "line" : 296,
             "column" : 12,
             "source_fragment" : "push_inner_vlan()"
           },
@@ -21671,9 +21658,9 @@
           "direct_meters" : null,
           "action_ids" : [143],
           "actions" : ["FabricEgress.egress_next.push_inner_vlan"],
-          "base_default_next" : "node_100",
+          "base_default_next" : "node_102",
           "next_tables" : {
-            "FabricEgress.egress_next.push_inner_vlan" : "node_100"
+            "FabricEgress.egress_next.push_inner_vlan" : "node_102"
           },
           "default_entry" : {
             "action_id" : 143,
@@ -21683,11 +21670,11 @@
           }
         },
         {
-          "name" : "tbl_next365",
-          "id" : 59,
+          "name" : "tbl_next299",
+          "id" : 60,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 299,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           },
@@ -21699,10 +21686,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [151],
-          "actions" : ["next365"],
+          "actions" : ["next299"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
-            "next365" : "FabricEgress.egress_next.egress_vlan"
+            "next299" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
             "action_id" : 151,
@@ -21713,10 +21700,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 60,
+          "id" : 61,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -21742,11 +21729,11 @@
           "direct_meters" : null,
           "action_ids" : [144, 145, 146],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_100",
+          "base_default_next" : "node_102",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_100",
-            "FabricEgress.egress_next.pop_vlan" : "node_100",
-            "FabricEgress.egress_next.drop" : "node_100"
+            "FabricEgress.egress_next.push_vlan" : "node_102",
+            "FabricEgress.egress_next.pop_vlan" : "node_102",
+            "FabricEgress.egress_next.drop" : "node_102"
           },
           "default_entry" : {
             "action_id" : 146,
@@ -21756,11 +21743,11 @@
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 61,
+          "name" : "tbl_next309",
+          "id" : 62,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -21772,10 +21759,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [153],
-          "actions" : ["next375"],
-          "base_default_next" : "node_102",
+          "actions" : ["next309"],
+          "base_default_next" : "node_104",
           "next_tables" : {
-            "next375" : "node_102"
+            "next309" : "node_104"
           },
           "default_entry" : {
             "action_id" : 153,
@@ -21785,11 +21772,11 @@
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 62,
+          "name" : "tbl_next310",
+          "id" : 63,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -21801,10 +21788,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [152],
-          "actions" : ["next376"],
-          "base_default_next" : "node_112",
+          "actions" : ["next310"],
+          "base_default_next" : "node_114",
           "next_tables" : {
-            "next376" : "node_112"
+            "next310" : "node_114"
           },
           "default_entry" : {
             "action_id" : 152,
@@ -21814,11 +21801,11 @@
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 63,
+          "name" : "tbl_next313",
+          "id" : 64,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -21830,10 +21817,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [155],
-          "actions" : ["next379"],
-          "base_default_next" : "node_106",
+          "actions" : ["next313"],
+          "base_default_next" : "node_108",
           "next_tables" : {
-            "next379" : "node_106"
+            "next313" : "node_108"
           },
           "default_entry" : {
             "action_id" : 155,
@@ -21843,11 +21830,11 @@
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 64,
+          "name" : "tbl_next314",
+          "id" : 65,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -21859,10 +21846,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [154],
-          "actions" : ["next380"],
-          "base_default_next" : "node_112",
+          "actions" : ["next314"],
+          "base_default_next" : "node_114",
           "next_tables" : {
-            "next380" : "node_112"
+            "next314" : "node_114"
           },
           "default_entry" : {
             "action_id" : 154,
@@ -21872,11 +21859,11 @@
           }
         },
         {
-          "name" : "tbl_next384",
-          "id" : 65,
+          "name" : "tbl_next318",
+          "id" : 66,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 384,
+            "line" : 318,
             "column" : 35,
             "source_fragment" : "="
           },
@@ -21888,10 +21875,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [157],
-          "actions" : ["next384"],
-          "base_default_next" : "node_110",
+          "actions" : ["next318"],
+          "base_default_next" : "node_112",
           "next_tables" : {
-            "next384" : "node_110"
+            "next318" : "node_112"
           },
           "default_entry" : {
             "action_id" : 157,
@@ -21901,11 +21888,11 @@
           }
         },
         {
-          "name" : "tbl_next385",
-          "id" : 66,
+          "name" : "tbl_next319",
+          "id" : 67,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 385,
+            "line" : 319,
             "column" : 45,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -21917,10 +21904,10 @@
           "support_timeout" : false,
           "direct_meters" : null,
           "action_ids" : [156],
-          "actions" : ["next385"],
-          "base_default_next" : "node_112",
+          "actions" : ["next319"],
+          "base_default_next" : "node_114",
           "next_tables" : {
-            "next385" : "node_112"
+            "next319" : "node_114"
           },
           "default_entry" : {
             "action_id" : 156,
@@ -21931,7 +21918,7 @@
         },
         {
           "name" : "tbl_spgw_gtpu_encap",
-          "id" : 67,
+          "id" : 68,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 339,
@@ -21947,9 +21934,9 @@
           "direct_meters" : null,
           "action_ids" : [147],
           "actions" : ["FabricEgress.spgw.gtpu_encap"],
-          "base_default_next" : "node_115",
+          "base_default_next" : "node_117",
           "next_tables" : {
-            "FabricEgress.spgw.gtpu_encap" : "node_115"
+            "FabricEgress.spgw.gtpu_encap" : "node_117"
           },
           "default_entry" : {
             "action_id" : 147,
@@ -21960,7 +21947,7 @@
         },
         {
           "name" : "tbl_spgw342",
-          "id" : 68,
+          "id" : 69,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 342,
@@ -21976,9 +21963,9 @@
           "direct_meters" : null,
           "action_ids" : [158],
           "actions" : ["spgw342"],
-          "base_default_next" : "node_117",
+          "base_default_next" : "node_119",
           "next_tables" : {
-            "spgw342" : "node_117"
+            "spgw342" : "node_119"
           },
           "default_entry" : {
             "action_id" : 158,
@@ -21989,7 +21976,7 @@
         },
         {
           "name" : "tbl_bng_egress_downstream_encap_v4",
-          "id" : 69,
+          "id" : 70,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 297,
@@ -22005,9 +21992,9 @@
           "direct_meters" : null,
           "action_ids" : [101],
           "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"],
-          "base_default_next" : "node_122",
+          "base_default_next" : "node_124",
           "next_tables" : {
-            "FabricEgress.bng_egress.downstream.encap_v4" : "node_122"
+            "FabricEgress.bng_egress.downstream.encap_v4" : "node_124"
           },
           "default_entry" : {
             "action_id" : 101,
@@ -22018,7 +22005,7 @@
         },
         {
           "name" : "tbl_bng_egress_downstream_encap_v6",
-          "id" : 70,
+          "id" : 71,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 302,
@@ -22034,9 +22021,9 @@
           "direct_meters" : null,
           "action_ids" : [102],
           "actions" : ["FabricEgress.bng_egress.downstream.encap_v6"],
-          "base_default_next" : "node_122",
+          "base_default_next" : "node_124",
           "next_tables" : {
-            "FabricEgress.bng_egress.downstream.encap_v6" : "node_122"
+            "FabricEgress.bng_egress.downstream.encap_v6" : "node_124"
           },
           "default_entry" : {
             "action_id" : 102,
@@ -22047,7 +22034,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "id" : 71,
+          "id" : 72,
           "source_info" : {
             "filename" : "include/int/int_source.p4",
             "line" : 66,
@@ -22088,10 +22075,10 @@
           "direct_meters" : null,
           "action_ids" : [103, 96],
           "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
-          "base_default_next" : "node_125",
+          "base_default_next" : "node_127",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_125",
-            "nop" : "node_125"
+            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_127",
+            "nop" : "node_127"
           },
           "default_entry" : {
             "action_id" : 96,
@@ -22102,7 +22089,7 @@
         },
         {
           "name" : "tbl_act",
-          "id" : 72,
+          "id" : 73,
           "key" : [],
           "match_type" : "exact",
           "type" : "simple",
@@ -22125,7 +22112,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
-          "id" : 73,
+          "id" : 74,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 315,
@@ -22148,10 +22135,10 @@
           "direct_meters" : null,
           "action_ids" : [104, 97],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"],
-          "base_default_next" : "node_128",
+          "base_default_next" : "node_130",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_128",
-            "nop" : "node_128"
+            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_130",
+            "nop" : "node_130"
           },
           "default_entry" : {
             "action_id" : 97,
@@ -22162,7 +22149,7 @@
         },
         {
           "name" : "tbl_int_transit420",
-          "id" : 74,
+          "id" : 75,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 420,
@@ -22178,9 +22165,9 @@
           "direct_meters" : null,
           "action_ids" : [160],
           "actions" : ["int_transit420"],
-          "base_default_next" : "node_130",
+          "base_default_next" : "node_132",
           "next_tables" : {
-            "int_transit420" : "node_130"
+            "int_transit420" : "node_132"
           },
           "default_entry" : {
             "action_id" : 160,
@@ -22191,7 +22178,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
-          "id" : 75,
+          "id" : 76,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 331,
@@ -22549,7 +22536,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
-          "id" : 76,
+          "id" : 77,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 375,
@@ -22907,7 +22894,7 @@
         },
         {
           "name" : "tbl_int_transit425",
-          "id" : 77,
+          "id" : 78,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 425,
@@ -22923,9 +22910,9 @@
           "direct_meters" : null,
           "action_ids" : [162],
           "actions" : ["int_transit425"],
-          "base_default_next" : "node_134",
+          "base_default_next" : "node_136",
           "next_tables" : {
-            "int_transit425" : "node_134"
+            "int_transit425" : "node_136"
           },
           "default_entry" : {
             "action_id" : 162,
@@ -22936,7 +22923,7 @@
         },
         {
           "name" : "tbl_int_transit428",
-          "id" : 78,
+          "id" : 79,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 428,
@@ -22952,9 +22939,9 @@
           "direct_meters" : null,
           "action_ids" : [161],
           "actions" : ["int_transit428"],
-          "base_default_next" : "node_136",
+          "base_default_next" : "node_138",
           "next_tables" : {
-            "int_transit428" : "node_136"
+            "int_transit428" : "node_138"
           },
           "default_entry" : {
             "action_id" : 161,
@@ -22965,7 +22952,7 @@
         },
         {
           "name" : "tbl_int_transit431",
-          "id" : 79,
+          "id" : 80,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 431,
@@ -22981,9 +22968,9 @@
           "direct_meters" : null,
           "action_ids" : [163],
           "actions" : ["int_transit431"],
-          "base_default_next" : "node_138",
+          "base_default_next" : "node_140",
           "next_tables" : {
-            "int_transit431" : "node_138"
+            "int_transit431" : "node_140"
           },
           "default_entry" : {
             "action_id" : 163,
@@ -22994,7 +22981,7 @@
         },
         {
           "name" : "tbl_int_transit434",
-          "id" : 80,
+          "id" : 81,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 434,
@@ -23010,9 +22997,9 @@
           "direct_meters" : null,
           "action_ids" : [164],
           "actions" : ["int_transit434"],
-          "base_default_next" : "node_140",
+          "base_default_next" : "node_142",
           "next_tables" : {
-            "int_transit434" : "node_140"
+            "int_transit434" : "node_142"
           },
           "default_entry" : {
             "action_id" : 164,
@@ -23023,7 +23010,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report",
-          "id" : 81,
+          "id" : 82,
           "source_info" : {
             "filename" : "include/int/int_report.p4",
             "line" : 87,
@@ -23039,10 +23026,10 @@
           "direct_meters" : null,
           "action_ids" : [137, 98],
           "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"],
-          "base_default_next" : "node_142",
+          "base_default_next" : "node_144",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_142",
-            "nop" : "node_142"
+            "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_144",
+            "nop" : "node_144"
           },
           "default_entry" : {
             "action_id" : 98,
@@ -23053,7 +23040,7 @@
         },
         {
           "name" : "tbl_process_int_main_process_int_sink_restore_header",
-          "id" : 82,
+          "id" : 83,
           "source_info" : {
             "filename" : "include/int/int_sink.p4",
             "line" : 53,
@@ -23082,7 +23069,7 @@
         },
         {
           "name" : "tbl_process_int_main_process_int_sink_int_sink",
-          "id" : 83,
+          "id" : 84,
           "source_info" : {
             "filename" : "include/int/int_sink.p4",
             "line" : 54,
@@ -23113,11 +23100,11 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_85",
-          "id" : 29,
+          "name" : "node_87",
+          "id" : 30,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 103,
+            "line" : 108,
             "column" : 33,
             "source_fragment" : "fabric_metadata"
           },
@@ -23133,11 +23120,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_87"
+          "false_next" : "node_89"
         },
         {
-          "name" : "node_87",
-          "id" : 30,
+          "name" : "node_89",
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -23159,14 +23146,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_89"
+          "false_next" : "node_91"
         },
         {
-          "name" : "node_89",
-          "id" : 31,
+          "name" : "node_91",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -23201,15 +23188,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_91"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_93"
         },
         {
-          "name" : "node_91",
-          "id" : 32,
+          "name" : "node_93",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -23227,15 +23214,15 @@
               }
             }
           },
-          "true_next" : "node_92",
+          "true_next" : "node_94",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_92",
-          "id" : 33,
+          "name" : "node_94",
+          "id" : 34,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -23251,14 +23238,14 @@
             }
           },
           "true_next" : "tbl_egress_next_pop_mpls_if_present",
-          "false_next" : "node_95"
+          "false_next" : "node_97"
         },
         {
-          "name" : "node_95",
-          "id" : 34,
+          "name" : "node_97",
+          "id" : 35,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 104,
+            "line" : 109,
             "column" : 31,
             "source_fragment" : "fabric_metadata"
           },
@@ -23274,14 +23261,14 @@
             }
           },
           "true_next" : "tbl_egress_next_push_outer_vlan",
-          "false_next" : "tbl_next365"
+          "false_next" : "tbl_next299"
         },
         {
-          "name" : "node_100",
-          "id" : 35,
+          "name" : "node_102",
+          "id" : 36,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -23296,15 +23283,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_104"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_106"
         },
         {
-          "name" : "node_102",
-          "id" : 36,
+          "name" : "node_104",
+          "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -23322,15 +23309,15 @@
               }
             }
           },
-          "true_next" : "tbl_next376",
-          "false_next" : "node_112"
+          "true_next" : "tbl_next310",
+          "false_next" : "node_114"
         },
         {
-          "name" : "node_104",
-          "id" : 37,
+          "name" : "node_106",
+          "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -23365,15 +23352,15 @@
               }
             }
           },
-          "true_next" : "tbl_next379",
-          "false_next" : "node_108"
+          "true_next" : "tbl_next313",
+          "false_next" : "node_110"
         },
         {
-          "name" : "node_106",
-          "id" : 38,
+          "name" : "node_108",
+          "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -23391,15 +23378,15 @@
               }
             }
           },
-          "true_next" : "tbl_next380",
-          "false_next" : "node_112"
+          "true_next" : "tbl_next314",
+          "false_next" : "node_114"
         },
         {
-          "name" : "node_108",
-          "id" : 39,
+          "name" : "node_110",
+          "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 383,
+            "line" : 317,
             "column" : 21,
             "source_fragment" : "hdr.ipv6.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -23434,15 +23421,15 @@
               }
             }
           },
-          "true_next" : "tbl_next384",
-          "false_next" : "node_112"
+          "true_next" : "tbl_next318",
+          "false_next" : "node_114"
         },
         {
-          "name" : "node_110",
-          "id" : 40,
+          "name" : "node_112",
+          "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 385,
+            "line" : 319,
             "column" : 20,
             "source_fragment" : "hdr.ipv6.hop_limit == 0"
           },
@@ -23460,12 +23447,12 @@
               }
             }
           },
-          "true_next" : "tbl_next385",
-          "false_next" : "node_112"
+          "true_next" : "tbl_next319",
+          "false_next" : "node_114"
         },
         {
-          "name" : "node_112",
-          "id" : 41,
+          "name" : "node_114",
+          "id" : 42,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 337,
@@ -23490,15 +23477,15 @@
               }
             }
           },
-          "true_next" : "node_113",
-          "false_next" : "node_117"
+          "true_next" : "node_115",
+          "false_next" : "node_119"
         },
         {
-          "name" : "node_113",
-          "id" : 42,
+          "name" : "node_115",
+          "id" : 43,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 106,
+            "line" : 111,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -23514,11 +23501,11 @@
             }
           },
           "true_next" : "tbl_spgw_gtpu_encap",
-          "false_next" : "node_115"
+          "false_next" : "node_117"
         },
         {
-          "name" : "node_115",
-          "id" : 43,
+          "name" : "node_117",
+          "id" : 44,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 341,
@@ -23544,11 +23531,11 @@
             }
           },
           "true_next" : "tbl_spgw342",
-          "false_next" : "node_117"
+          "false_next" : "node_119"
         },
         {
-          "name" : "node_117",
-          "id" : 44,
+          "name" : "node_119",
+          "id" : 45,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 358,
@@ -23569,12 +23556,12 @@
               }
             }
           },
-          "true_next" : "node_118",
-          "false_next" : "node_122"
+          "true_next" : "node_120",
+          "false_next" : "node_124"
         },
         {
-          "name" : "node_118",
-          "id" : 45,
+          "name" : "node_120",
+          "id" : 46,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 296,
@@ -23593,11 +23580,11 @@
             }
           },
           "true_next" : "tbl_bng_egress_downstream_encap_v4",
-          "false_next" : "node_120"
+          "false_next" : "node_122"
         },
         {
-          "name" : "node_120",
-          "id" : 46,
+          "name" : "node_122",
+          "id" : 47,
           "source_info" : {
             "filename" : "include/bng.p4",
             "line" : 301,
@@ -23616,11 +23603,11 @@
             }
           },
           "true_next" : "tbl_bng_egress_downstream_encap_v6",
-          "false_next" : "node_122"
+          "false_next" : "node_124"
         },
         {
-          "name" : "node_122",
-          "id" : 47,
+          "name" : "node_124",
+          "id" : 48,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 102,
@@ -23696,14 +23683,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_123"
+          "true_next" : "node_125"
         },
         {
-          "name" : "node_123",
-          "id" : 48,
+          "name" : "node_125",
+          "id" : 49,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 112,
+            "line" : 117,
             "column" : 36,
             "source_fragment" : "fabric_metadata"
           },
@@ -23719,11 +23706,11 @@
             }
           },
           "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "false_next" : "node_125"
+          "false_next" : "node_127"
         },
         {
-          "name" : "node_125",
-          "id" : 49,
+          "name" : "node_127",
+          "id" : 50,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 110,
@@ -23745,8 +23732,8 @@
           "true_next" : "tbl_act"
         },
         {
-          "name" : "node_128",
-          "id" : 50,
+          "name" : "node_130",
+          "id" : 51,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 419,
@@ -23772,11 +23759,11 @@
             }
           },
           "true_next" : "tbl_int_transit420",
-          "false_next" : "node_130"
+          "false_next" : "node_132"
         },
         {
-          "name" : "node_130",
-          "id" : 51,
+          "name" : "node_132",
+          "id" : 52,
           "expression" : {
             "type" : "expression",
             "value" : {
@@ -23796,11 +23783,11 @@
             }
           },
           "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
-          "false_next" : "node_140"
+          "false_next" : "node_142"
         },
         {
-          "name" : "node_134",
-          "id" : 52,
+          "name" : "node_136",
+          "id" : 53,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 427,
@@ -23819,11 +23806,11 @@
             }
           },
           "true_next" : "tbl_int_transit428",
-          "false_next" : "node_136"
+          "false_next" : "node_138"
         },
         {
-          "name" : "node_136",
-          "id" : 53,
+          "name" : "node_138",
+          "id" : 54,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 430,
@@ -23842,11 +23829,11 @@
             }
           },
           "true_next" : "tbl_int_transit431",
-          "false_next" : "node_138"
+          "false_next" : "node_140"
         },
         {
-          "name" : "node_138",
-          "id" : 54,
+          "name" : "node_140",
+          "id" : 55,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 433,
@@ -23865,11 +23852,11 @@
             }
           },
           "true_next" : "tbl_int_transit434",
-          "false_next" : "node_140"
+          "false_next" : "node_142"
         },
         {
-          "name" : "node_140",
-          "id" : 55,
+          "name" : "node_142",
+          "id" : 56,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 115,
@@ -23891,14 +23878,14 @@
             }
           },
           "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report",
-          "false_next" : "node_142"
+          "false_next" : "node_144"
         },
         {
-          "name" : "node_142",
-          "id" : 56,
+          "name" : "node_144",
+          "id" : 57,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 112,
+            "line" : 117,
             "column" : 36,
             "source_fragment" : "fabric_metadata"
           },
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
index 8003c09..ce00771 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
@@ -455,6 +455,57 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 26738842
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -531,6 +582,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -552,33 +609,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 17655305
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 48735793
     name: "FabricIngress.next.xconnect"
     alias: "xconnect"
@@ -629,9 +659,6 @@
     id: 31887425
   }
   action_refs {
-    id: 26875580
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -659,9 +686,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -1033,6 +1057,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -1045,6 +1074,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -1115,6 +1149,47 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
+    id: 26738842
+    name: "FabricIngress.pre_next.set_double_vlan"
+    alias: "set_double_vlan"
+  }
+  params {
+    id: 1
+    name: "outer_vlan_id"
+    bitwidth: 12
+  }
+  params {
+    id: 2
+    name: "inner_vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -1160,35 +1235,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
-    id: 17655305
-    name: "FabricIngress.next.set_double_vlan"
-    alias: "set_double_vlan"
-  }
-  params {
-    id: 1
-    name: "outer_vlan_id"
-    bitwidth: 12
-  }
-  params {
-    id: 2
-    name: "inner_vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 24640974
     name: "FabricIngress.next.output_xconnect"
     alias: "output_xconnect"
@@ -1247,33 +1293,6 @@
 }
 actions {
   preamble {
-    id: 26875580
-    name: "FabricIngress.next.mpls_routing_simple"
-    alias: "mpls_routing_simple"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 27301117
     name: "FabricIngress.next.output_hashed"
     alias: "output_hashed"
@@ -1308,33 +1327,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -1799,6 +1791,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -1810,17 +1824,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 321989420
     name: "FabricIngress.next.xconnect_counter"
     alias: "xconnect_counter"
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
index e7bf0cf..c2a9589 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
@@ -46,7 +46,8 @@
         ["userMetadata._int_meta_new_bytes22", 16, false],
         ["userMetadata._int_meta_ig_tstamp23", 32, false],
         ["userMetadata._int_meta_eg_tstamp24", 32, false],
-        ["_padding_0", 3, false]
+        ["userMetadata._port_type25", 2, false],
+        ["_padding_0", 1, false]
       ]
     },
     {
@@ -2122,7 +2123,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -2152,9 +2153,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 5,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 6,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 7,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -2164,56 +2189,44 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 6,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.xconnect_counter",
-      "id" : 7,
+      "id" : 8,
       "is_direct" : true,
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 107,
+        "line" : 56,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 8,
+      "id" : 9,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 9,
+      "id" : 10,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 10,
+      "id" : 11,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -2225,7 +2238,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 11,
+      "id" : 12,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -2237,7 +2250,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
-      "id" : 12,
+      "id" : 13,
       "is_direct" : true,
       "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
       "source_info" : {
@@ -2249,12 +2262,12 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 13,
+      "id" : 14,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -2436,9 +2449,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "name" : "nop",
       "id" : 8,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "id" : 9,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -2473,7 +2492,7 @@
     },
     {
       "name" : "FabricIngress.filtering.deny",
-      "id" : 9,
+      "id" : 10,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2533,22 +2552,70 @@
             "column" : 34,
             "source_fragment" : "= true; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type25"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 10,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 11,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type25"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 11,
+      "id" : 12,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -2566,16 +2633,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 32,
             "source_fragment" : "= vlan_id; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type25"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 12,
+      "id" : 13,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -2597,7 +2683,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -2606,7 +2692,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 13,
+      "id" : 14,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2637,7 +2723,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 14,
+      "id" : 15,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2687,7 +2773,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 15,
+      "id" : 16,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2718,13 +2804,75 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 16,
+      "id" : 17,
       "runtime_data" : [],
       "primitives" : []
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 18,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._mpls_label4"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 35,
+            "source_fragment" : "= label; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 19,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 17,
+      "id" : 20,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2755,7 +2903,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 18,
+      "id" : 21,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2810,7 +2958,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 19,
+      "id" : 22,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -2841,7 +2989,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 20,
+      "id" : 23,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2892,105 +3040,12 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 21,
+      "id" : 24,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 22,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_xconnect",
-      "id" : 23,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_next_id_xconnect",
-      "id" : 24,
-      "runtime_data" : [
-        {
-          "name" : "next_id",
-          "bitwidth" : 32
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._next_id9"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 115,
-            "column" : 32,
-            "source_fragment" : "= next_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.output_hashed",
       "id" : 25,
       "runtime_data" : [
         {
@@ -3021,20 +3076,12 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.routing_hashed",
+      "name" : "FabricIngress.next.set_next_id_xconnect",
       "id" : 26,
       "runtime_data" : [
         {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
+          "name" : "next_id",
+          "bitwidth" : 32
         }
       ],
       "primitives" : [
@@ -3043,39 +3090,32 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["ethernet", "src_addr"]
+              "value" : ["scalars", "userMetadata._next_id9"]
             },
             {
               "type" : "runtime_data",
-              "value" : 1
+              "value" : 0
             }
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+            "line" : 64,
+            "column" : 32,
+            "source_fragment" : "= next_id; ..."
           }
-        },
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_hashed",
+      "id" : 27,
+      "runtime_data" : [
         {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
         {
           "op" : "assign",
           "parameters" : [
@@ -3098,8 +3138,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
-      "id" : 27,
+      "name" : "FabricIngress.next.routing_hashed",
+      "id" : 28,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -3112,10 +3152,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -3124,25 +3160,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label4"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -3199,7 +3216,7 @@
     },
     {
       "name" : "FabricIngress.next.set_mcast_group_id",
-      "id" : 28,
+      "id" : 29,
       "runtime_data" : [
         {
           "name" : "group_id",
@@ -3221,7 +3238,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -3250,7 +3267,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -3259,7 +3276,7 @@
     },
     {
       "name" : "packetio25",
-      "id" : 29,
+      "id" : 30,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3338,8 +3355,8 @@
       ]
     },
     {
-      "name" : "filtering111",
-      "id" : 30,
+      "name" : "filtering113",
+      "id" : 31,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3356,7 +3373,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -3375,7 +3392,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -3394,7 +3411,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -3402,8 +3419,8 @@
       ]
     },
     {
-      "name" : "filtering127",
-      "id" : 31,
+      "name" : "filtering129",
+      "id" : 32,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3420,7 +3437,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -3428,8 +3445,8 @@
       ]
     },
     {
-      "name" : "acl101",
-      "id" : 32,
+      "name" : "acl102",
+      "id" : 33,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3446,7 +3463,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -3465,7 +3482,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -3473,8 +3490,8 @@
       ]
     },
     {
-      "name" : "acl104",
-      "id" : 33,
+      "name" : "acl105",
+      "id" : 34,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3491,7 +3508,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -3510,7 +3527,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -3518,8 +3535,8 @@
       ]
     },
     {
-      "name" : "acl97",
-      "id" : 34,
+      "name" : "acl98",
+      "id" : 35,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3536,7 +3553,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -3555,7 +3572,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -3574,7 +3591,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -3582,8 +3599,8 @@
       ]
     },
     {
-      "name" : "acl112",
-      "id" : 35,
+      "name" : "acl113",
+      "id" : 36,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3600,7 +3617,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -3619,7 +3636,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -3627,8 +3644,8 @@
       ]
     },
     {
-      "name" : "acl115",
-      "id" : 36,
+      "name" : "acl116",
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3645,7 +3662,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -3664,7 +3681,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -3672,8 +3689,8 @@
       ]
     },
     {
-      "name" : "acl108",
-      "id" : 37,
+      "name" : "acl109",
+      "id" : 38,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3690,7 +3707,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -3709,7 +3726,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -3728,7 +3745,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -3737,7 +3754,7 @@
     },
     {
       "name" : "acl27",
-      "id" : 38,
+      "id" : 39,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3839,7 +3856,7 @@
     },
     {
       "name" : "port_counter31",
-      "id" : 39,
+      "id" : 40,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3897,7 +3914,7 @@
     },
     {
       "name" : "port_counter34",
-      "id" : 40,
+      "id" : 41,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3955,18 +3972,12 @@
     },
     {
       "name" : "nop",
-      "id" : 41,
-      "runtime_data" : [],
-      "primitives" : []
-    },
-    {
-      "name" : "nop",
       "id" : 42,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "NoAction",
+      "name" : "nop",
       "id" : 43,
       "runtime_data" : [],
       "primitives" : []
@@ -3978,8 +3989,14 @@
       "primitives" : []
     },
     {
-      "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+      "name" : "NoAction",
       "id" : 45,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+      "id" : 46,
       "runtime_data" : [
         {
           "name" : "max_hop",
@@ -4047,7 +4064,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 157,
+            "line" : 169,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -4465,7 +4482,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 153,
+            "line" : 165,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -4474,7 +4491,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata",
-      "id" : 46,
+      "id" : 47,
       "runtime_data" : [
         {
           "name" : "switch_id",
@@ -4534,13 +4551,13 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0",
-      "id" : 47,
+      "id" : 48,
       "runtime_data" : [],
       "primitives" : []
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1",
-      "id" : 48,
+      "id" : 49,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4697,7 +4714,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2",
-      "id" : 49,
+      "id" : 50,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4822,7 +4839,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3",
-      "id" : 50,
+      "id" : 51,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5013,7 +5030,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4",
-      "id" : 51,
+      "id" : 52,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5183,7 +5200,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5",
-      "id" : 52,
+      "id" : 53,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5419,7 +5436,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6",
-      "id" : 53,
+      "id" : 54,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5623,7 +5640,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7",
-      "id" : 54,
+      "id" : 55,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5893,7 +5910,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8",
-      "id" : 55,
+      "id" : 56,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6018,7 +6035,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9",
-      "id" : 56,
+      "id" : 57,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6209,7 +6226,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10",
-      "id" : 57,
+      "id" : 58,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6368,7 +6385,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11",
-      "id" : 58,
+      "id" : 59,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6593,7 +6610,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12",
-      "id" : 59,
+      "id" : 60,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6797,7 +6814,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13",
-      "id" : 60,
+      "id" : 61,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7067,7 +7084,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14",
-      "id" : 61,
+      "id" : 62,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7305,7 +7322,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15",
-      "id" : 62,
+      "id" : 63,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7609,13 +7626,13 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0",
-      "id" : 63,
+      "id" : 64,
       "runtime_data" : [],
       "primitives" : []
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1",
-      "id" : 64,
+      "id" : 65,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7740,7 +7757,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2",
-      "id" : 65,
+      "id" : 66,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7884,7 +7901,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3",
-      "id" : 66,
+      "id" : 67,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8062,7 +8079,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4",
-      "id" : 67,
+      "id" : 68,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8210,7 +8227,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5",
-      "id" : 68,
+      "id" : 69,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8392,7 +8409,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6",
-      "id" : 69,
+      "id" : 70,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8593,7 +8610,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7",
-      "id" : 70,
+      "id" : 71,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8828,7 +8845,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8",
-      "id" : 71,
+      "id" : 72,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8953,7 +8970,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9",
-      "id" : 72,
+      "id" : 73,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9112,7 +9129,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10",
-      "id" : 73,
+      "id" : 74,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9290,7 +9307,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11",
-      "id" : 74,
+      "id" : 75,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9502,7 +9519,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12",
-      "id" : 75,
+      "id" : 76,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9684,7 +9701,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13",
-      "id" : 76,
+      "id" : 77,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9900,7 +9917,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14",
-      "id" : 77,
+      "id" : 78,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10135,7 +10152,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15",
-      "id" : 78,
+      "id" : 79,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10404,7 +10421,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_mpls_if_present",
-      "id" : 79,
+      "id" : 80,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10417,7 +10434,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -10436,7 +10453,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..."
           }
@@ -10445,7 +10462,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.set_mpls",
-      "id" : 80,
+      "id" : 81,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10458,7 +10475,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -10477,7 +10494,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -10496,7 +10513,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -10515,7 +10532,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -10534,7 +10551,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -10553,7 +10570,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -10562,7 +10579,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_vlan",
-      "id" : 81,
+      "id" : 82,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10575,7 +10592,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -10594,7 +10611,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -10613,7 +10630,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -10632,7 +10649,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -10651,7 +10668,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -10660,7 +10677,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_vlan",
-      "id" : 82,
+      "id" : 83,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10673,7 +10690,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -10682,7 +10699,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.drop",
-      "id" : 83,
+      "id" : 84,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10695,7 +10712,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -10704,7 +10721,7 @@
     },
     {
       "name" : "packetio41",
-      "id" : 84,
+      "id" : 85,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10721,7 +10738,7 @@
     },
     {
       "name" : "packetio44",
-      "id" : 85,
+      "id" : 86,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10771,29 +10788,7 @@
       ]
     },
     {
-      "name" : "next349",
-      "id" : 86,
-      "runtime_data" : [],
-      "primitives" : [
-        {
-          "op" : "mark_to_drop",
-          "parameters" : [
-            {
-              "type" : "header",
-              "value" : "standard_metadata"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 349,
-            "column" : 12,
-            "source_fragment" : "mark_to_drop(standard_metadata)"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "next376",
+      "name" : "next283",
       "id" : 87,
       "runtime_data" : [],
       "primitives" : [
@@ -10807,7 +10802,29 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 283,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_metadata)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next310",
+      "id" : 88,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -10815,8 +10832,8 @@
       ]
     },
     {
-      "name" : "next375",
-      "id" : 88,
+      "name" : "next309",
+      "id" : 89,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10856,7 +10873,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -10864,8 +10881,8 @@
       ]
     },
     {
-      "name" : "next380",
-      "id" : 89,
+      "name" : "next314",
+      "id" : 90,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10878,7 +10895,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -10886,8 +10903,8 @@
       ]
     },
     {
-      "name" : "next379",
-      "id" : 90,
+      "name" : "next313",
+      "id" : 91,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10927,7 +10944,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -10936,7 +10953,7 @@
     },
     {
       "name" : "act",
-      "id" : 91,
+      "id" : 92,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10966,7 +10983,7 @@
     },
     {
       "name" : "int_transit420",
-      "id" : 92,
+      "id" : 93,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11002,7 +11019,7 @@
     },
     {
       "name" : "int_transit428",
-      "id" : 93,
+      "id" : 94,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11051,7 +11068,7 @@
     },
     {
       "name" : "int_transit425",
-      "id" : 94,
+      "id" : 95,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11100,7 +11117,7 @@
     },
     {
       "name" : "int_transit431",
-      "id" : 95,
+      "id" : 96,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11149,7 +11166,7 @@
     },
     {
       "name" : "int_transit434",
-      "id" : 96,
+      "id" : 97,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11203,7 +11220,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -11225,25 +11242,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [29],
+          "action_ids" : [30],
           "actions" : ["packetio25"],
           "base_default_next" : "node_4",
           "next_tables" : {
             "packetio25" : "node_4"
           },
           "default_entry" : {
-            "action_id" : 29,
+            "action_id" : 30,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -11254,25 +11271,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [30],
-          "actions" : ["filtering111"],
+          "action_ids" : [31],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_6",
           "next_tables" : {
-            "filtering111" : "node_6"
+            "filtering113" : "node_6"
           },
           "default_entry" : {
-            "action_id" : 30,
+            "action_id" : 31,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -11283,14 +11300,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [31],
-          "actions" : ["filtering127"],
+          "action_ids" : [32],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
-            "action_id" : 31,
+            "action_id" : 32,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11301,7 +11318,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -11331,7 +11348,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [9, 10, 11],
+          "action_ids" : [10, 11, 12],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -11340,7 +11357,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 9,
+            "action_id" : 10,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11351,7 +11368,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -11387,14 +11404,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [12],
+          "action_ids" : [13],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_10",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 12,
+            "action_id" : 13,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -11429,12 +11446,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [13, 1],
+          "action_ids" : [14, 1],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -11466,12 +11483,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [14, 2],
+          "action_ids" : [15, 2],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -11503,13 +11520,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15, 16, 3],
+          "action_ids" : [16, 17, 3],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_17",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 3,
@@ -11519,9 +11536,83 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 8,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [18, 4],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 4,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 9,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [19, 5],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 5,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 10,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -11534,25 +11625,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [38],
+          "action_ids" : [39],
           "actions" : ["acl27"],
-          "base_default_next" : "node_18",
+          "base_default_next" : "node_21",
           "next_tables" : {
-            "acl27" : "node_18"
+            "acl27" : "node_21"
           },
           "default_entry" : {
-            "action_id" : 38,
+            "action_id" : 39,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 9,
+          "name" : "tbl_acl98",
+          "id" : 11,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -11563,25 +11654,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [34],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_20",
+          "action_ids" : [35],
+          "actions" : ["acl98"],
+          "base_default_next" : "node_23",
           "next_tables" : {
-            "acl97" : "node_20"
+            "acl98" : "node_23"
           },
           "default_entry" : {
-            "action_id" : 34,
+            "action_id" : 35,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 10,
+          "name" : "tbl_acl102",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -11592,25 +11683,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [32],
-          "actions" : ["acl101"],
+          "action_ids" : [33],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 32,
+            "action_id" : 33,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 11,
+          "name" : "tbl_acl105",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -11621,25 +11712,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [33],
-          "actions" : ["acl104"],
+          "action_ids" : [34],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 33,
+            "action_id" : 34,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 12,
+          "name" : "tbl_acl109",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -11650,25 +11741,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [37],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_26",
+          "action_ids" : [38],
+          "actions" : ["acl109"],
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "acl108" : "node_26"
+            "acl109" : "node_29"
           },
           "default_entry" : {
-            "action_id" : 37,
+            "action_id" : 38,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 13,
+          "name" : "tbl_acl113",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -11679,25 +11770,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [35],
-          "actions" : ["acl112"],
+          "action_ids" : [36],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 35,
+            "action_id" : 36,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 14,
+          "name" : "tbl_acl116",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -11708,14 +11799,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [36],
-          "actions" : ["acl115"],
+          "action_ids" : [37],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 36,
+            "action_id" : 37,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11723,7 +11814,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 15,
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -11802,6 +11893,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata._port_type25"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -11810,18 +11907,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [17, 18, 19, 20, 21],
+          "action_ids" : [20, 21, 22, 23, 24],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_31",
+          "base_default_next" : "node_34",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_31",
-            "FabricIngress.acl.punt_to_cpu" : "node_31",
-            "FabricIngress.acl.set_clone_session_id" : "node_31",
-            "FabricIngress.acl.drop" : "node_31",
-            "FabricIngress.acl.nop_acl" : "node_31"
+            "FabricIngress.acl.set_next_id_acl" : "node_34",
+            "FabricIngress.acl.punt_to_cpu" : "node_34",
+            "FabricIngress.acl.set_clone_session_id" : "node_34",
+            "FabricIngress.acl.drop" : "node_34",
+            "FabricIngress.acl.nop_acl" : "node_34"
           },
           "default_entry" : {
-            "action_id" : 21,
+            "action_id" : 24,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11829,10 +11926,10 @@
         },
         {
           "name" : "FabricIngress.next.xconnect",
-          "id" : 16,
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 119,
+            "line" : 68,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -11856,7 +11953,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [23, 24, 5],
+          "action_ids" : [25, 26, 6],
           "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
           "base_default_next" : "FabricIngress.next.hashed",
           "next_tables" : {
@@ -11865,7 +11962,7 @@
             "nop" : "FabricIngress.next.hashed"
           },
           "default_entry" : {
-            "action_id" : 5,
+            "action_id" : 6,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11873,10 +11970,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 17,
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -11895,22 +11992,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [25, 26, 27, 6],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [27, 28, 7],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 18,
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -11928,52 +12024,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [28, 7],
+          "action_ids" : [29, 8],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_38",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_38",
+            "nop" : "node_38"
           },
           "default_entry" : {
-            "action_id" : 7,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 19,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata._next_id9"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [22, 4],
-          "actions" : ["FabricIngress.next.set_vlan", "nop"],
-          "base_default_next" : "node_36",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_36",
-            "nop" : "node_36"
-          },
-          "default_entry" : {
-            "action_id" : 4,
+            "action_id" : 8,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -11981,7 +12040,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 20,
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -11995,14 +12054,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [39],
+          "action_ids" : [40],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_38",
+          "base_default_next" : "node_40",
           "next_tables" : {
-            "port_counter31" : "node_38"
+            "port_counter31" : "node_40"
           },
           "default_entry" : {
-            "action_id" : 39,
+            "action_id" : 40,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12010,7 +12069,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 21,
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -12024,14 +12083,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [40],
+          "action_ids" : [41],
           "actions" : ["port_counter34"],
           "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source",
           "next_tables" : {
             "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source"
           },
           "default_entry" : {
-            "action_id" : 40,
+            "action_id" : 41,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12039,7 +12098,7 @@
         },
         {
           "name" : "FabricIngress.process_set_source_sink.tb_set_source",
-          "id" : 22,
+          "id" : 23,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 46,
@@ -12060,7 +12119,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [8, 0],
+          "action_ids" : [9, 0],
           "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
           "base_default_next" : null,
           "next_tables" : {
@@ -12081,7 +12140,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -12142,7 +12201,7 @@
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -12157,7 +12216,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_6"
         },
         {
@@ -12165,7 +12224,7 @@
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -12187,7 +12246,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -12195,7 +12254,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -12218,7 +12277,7 @@
             }
           },
           "true_next" : "node_11",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_17"
         },
         {
           "name" : "node_11",
@@ -12296,14 +12355,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_17"
+        },
+        {
+          "name" : "node_17",
+          "id" : 7,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._skip_next7"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_18",
-          "id" : 7,
+          "name" : "node_21",
+          "id" : 8,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -12335,15 +12424,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_24"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_27"
         },
         {
-          "name" : "node_20",
-          "id" : 8,
+          "name" : "node_23",
+          "id" : 9,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -12358,15 +12447,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_22"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_25"
         },
         {
-          "name" : "node_22",
-          "id" : 9,
+          "name" : "node_25",
+          "id" : 10,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -12381,15 +12470,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_24",
-          "id" : 10,
+          "name" : "node_27",
+          "id" : 11,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -12404,15 +12493,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_26",
-          "id" : 11,
+          "name" : "node_29",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -12427,15 +12516,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_28"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_31"
         },
         {
-          "name" : "node_28",
-          "id" : 12,
+          "name" : "node_31",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -12450,15 +12539,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_31",
-          "id" : 13,
+          "name" : "node_34",
+          "id" : 14,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -12484,8 +12573,8 @@
           "true_next" : "FabricIngress.next.xconnect"
         },
         {
-          "name" : "node_36",
-          "id" : 14,
+          "name" : "node_38",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -12507,11 +12596,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_38"
+          "false_next" : "node_40"
         },
         {
-          "name" : "node_38",
-          "id" : 15,
+          "name" : "node_40",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -12542,15 +12631,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_43",
+      "init_table" : "node_45",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 23,
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -12564,14 +12653,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [84],
+          "action_ids" : [85],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_45",
+          "base_default_next" : "node_47",
           "next_tables" : {
-            "packetio41" : "node_45"
+            "packetio41" : "node_47"
           },
           "default_entry" : {
-            "action_id" : 84,
+            "action_id" : 85,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12579,7 +12668,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 24,
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -12593,25 +12682,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [85],
+          "action_ids" : [86],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_47",
+          "base_default_next" : "node_49",
           "next_tables" : {
-            "packetio44" : "node_47"
+            "packetio44" : "node_49"
           },
           "default_entry" : {
-            "action_id" : 85,
+            "action_id" : 86,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 25,
+          "name" : "tbl_next283",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -12622,14 +12711,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [86],
-          "actions" : ["next349"],
-          "base_default_next" : "node_49",
+          "action_ids" : [87],
+          "actions" : ["next283"],
+          "base_default_next" : "node_51",
           "next_tables" : {
-            "next349" : "node_49"
+            "next283" : "node_51"
           },
           "default_entry" : {
-            "action_id" : 86,
+            "action_id" : 87,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12637,10 +12726,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 26,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -12651,14 +12740,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [79],
+          "action_ids" : [80],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 79,
+            "action_id" : 80,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12666,10 +12755,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 27,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -12680,14 +12769,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [80],
+          "action_ids" : [81],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 80,
+            "action_id" : 81,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12695,10 +12784,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 28,
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -12722,27 +12811,27 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [81, 82, 83],
+          "action_ids" : [82, 83, 84],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_54",
+          "base_default_next" : "node_56",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_54",
-            "FabricEgress.egress_next.pop_vlan" : "node_54",
-            "FabricEgress.egress_next.drop" : "node_54"
+            "FabricEgress.egress_next.push_vlan" : "node_56",
+            "FabricEgress.egress_next.pop_vlan" : "node_56",
+            "FabricEgress.egress_next.drop" : "node_56"
           },
           "default_entry" : {
-            "action_id" : 83,
+            "action_id" : 84,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 29,
+          "name" : "tbl_next309",
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -12753,25 +12842,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [88],
-          "actions" : ["next375"],
-          "base_default_next" : "node_56",
+          "action_ids" : [89],
+          "actions" : ["next309"],
+          "base_default_next" : "node_58",
           "next_tables" : {
-            "next375" : "node_56"
+            "next309" : "node_58"
           },
           "default_entry" : {
-            "action_id" : 88,
+            "action_id" : 89,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 30,
+          "name" : "tbl_next310",
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -12782,25 +12871,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [87],
-          "actions" : ["next376"],
-          "base_default_next" : "node_62",
+          "action_ids" : [88],
+          "actions" : ["next310"],
+          "base_default_next" : "node_64",
           "next_tables" : {
-            "next376" : "node_62"
+            "next310" : "node_64"
           },
           "default_entry" : {
-            "action_id" : 87,
+            "action_id" : 88,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 31,
+          "name" : "tbl_next313",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -12811,25 +12900,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [90],
-          "actions" : ["next379"],
-          "base_default_next" : "node_60",
+          "action_ids" : [91],
+          "actions" : ["next313"],
+          "base_default_next" : "node_62",
           "next_tables" : {
-            "next379" : "node_60"
+            "next313" : "node_62"
           },
           "default_entry" : {
-            "action_id" : 90,
+            "action_id" : 91,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 32,
+          "name" : "tbl_next314",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -12840,14 +12929,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [89],
-          "actions" : ["next380"],
-          "base_default_next" : "node_62",
+          "action_ids" : [90],
+          "actions" : ["next314"],
+          "base_default_next" : "node_64",
           "next_tables" : {
-            "next380" : "node_62"
+            "next314" : "node_64"
           },
           "default_entry" : {
-            "action_id" : 89,
+            "action_id" : 90,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12855,7 +12944,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "id" : 33,
+          "id" : 34,
           "source_info" : {
             "filename" : "include/int/int_source.p4",
             "line" : 66,
@@ -12894,15 +12983,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [45, 41],
+          "action_ids" : [46, 42],
           "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
-          "base_default_next" : "node_65",
+          "base_default_next" : "node_67",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_65",
-            "nop" : "node_65"
+            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_67",
+            "nop" : "node_67"
           },
           "default_entry" : {
-            "action_id" : 41,
+            "action_id" : 42,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12910,7 +12999,7 @@
         },
         {
           "name" : "tbl_act",
-          "id" : 34,
+          "id" : 35,
           "key" : [],
           "match_type" : "exact",
           "type" : "simple",
@@ -12918,14 +13007,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [91],
+          "action_ids" : [92],
           "actions" : ["act"],
           "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
           "next_tables" : {
             "act" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
           },
           "default_entry" : {
-            "action_id" : 91,
+            "action_id" : 92,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12933,7 +13022,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
-          "id" : 35,
+          "id" : 36,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 315,
@@ -12954,15 +13043,15 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [46, 42],
+          "action_ids" : [47, 43],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"],
-          "base_default_next" : "node_68",
+          "base_default_next" : "node_70",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_68",
-            "nop" : "node_68"
+            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_70",
+            "nop" : "node_70"
           },
           "default_entry" : {
-            "action_id" : 42,
+            "action_id" : 43,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12970,7 +13059,7 @@
         },
         {
           "name" : "tbl_int_transit420",
-          "id" : 36,
+          "id" : 37,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 420,
@@ -12984,14 +13073,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [92],
+          "action_ids" : [93],
           "actions" : ["int_transit420"],
-          "base_default_next" : "node_70",
+          "base_default_next" : "node_72",
           "next_tables" : {
-            "int_transit420" : "node_70"
+            "int_transit420" : "node_72"
           },
           "default_entry" : {
-            "action_id" : 92,
+            "action_id" : 93,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -12999,7 +13088,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
-          "id" : 37,
+          "id" : 38,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 331,
@@ -13020,7 +13109,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 43],
+          "action_ids" : [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 44],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"],
           "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
           "next_tables" : {
@@ -13043,7 +13132,7 @@
             "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407"
           },
           "default_entry" : {
-            "action_id" : 43,
+            "action_id" : 44,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -13063,7 +13152,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 47,
+                "action_id" : 48,
                 "action_data" : []
               },
               "priority" : 1
@@ -13082,7 +13171,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 48,
+                "action_id" : 49,
                 "action_data" : []
               },
               "priority" : 2
@@ -13101,7 +13190,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 49,
+                "action_id" : 50,
                 "action_data" : []
               },
               "priority" : 3
@@ -13120,7 +13209,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 50,
+                "action_id" : 51,
                 "action_data" : []
               },
               "priority" : 4
@@ -13139,7 +13228,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 51,
+                "action_id" : 52,
                 "action_data" : []
               },
               "priority" : 5
@@ -13158,7 +13247,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 52,
+                "action_id" : 53,
                 "action_data" : []
               },
               "priority" : 6
@@ -13177,7 +13266,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 53,
+                "action_id" : 54,
                 "action_data" : []
               },
               "priority" : 7
@@ -13196,7 +13285,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 54,
+                "action_id" : 55,
                 "action_data" : []
               },
               "priority" : 8
@@ -13215,7 +13304,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 55,
+                "action_id" : 56,
                 "action_data" : []
               },
               "priority" : 9
@@ -13234,7 +13323,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 56,
+                "action_id" : 57,
                 "action_data" : []
               },
               "priority" : 10
@@ -13253,7 +13342,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 57,
+                "action_id" : 58,
                 "action_data" : []
               },
               "priority" : 11
@@ -13272,7 +13361,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 58,
+                "action_id" : 59,
                 "action_data" : []
               },
               "priority" : 12
@@ -13291,7 +13380,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 59,
+                "action_id" : 60,
                 "action_data" : []
               },
               "priority" : 13
@@ -13310,7 +13399,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 60,
+                "action_id" : 61,
                 "action_data" : []
               },
               "priority" : 14
@@ -13329,7 +13418,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 61,
+                "action_id" : 62,
                 "action_data" : []
               },
               "priority" : 15
@@ -13348,7 +13437,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 62,
+                "action_id" : 63,
                 "action_data" : []
               },
               "priority" : 16
@@ -13357,7 +13446,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
-          "id" : 38,
+          "id" : 39,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 375,
@@ -13378,7 +13467,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 44],
+          "action_ids" : [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 45],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"],
           "base_default_next" : "tbl_int_transit425",
           "next_tables" : {
@@ -13401,7 +13490,7 @@
             "NoAction" : "tbl_int_transit425"
           },
           "default_entry" : {
-            "action_id" : 44,
+            "action_id" : 45,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -13421,7 +13510,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 63,
+                "action_id" : 64,
                 "action_data" : []
               },
               "priority" : 1
@@ -13440,7 +13529,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 64,
+                "action_id" : 65,
                 "action_data" : []
               },
               "priority" : 2
@@ -13459,7 +13548,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 65,
+                "action_id" : 66,
                 "action_data" : []
               },
               "priority" : 3
@@ -13478,7 +13567,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 66,
+                "action_id" : 67,
                 "action_data" : []
               },
               "priority" : 4
@@ -13497,7 +13586,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 67,
+                "action_id" : 68,
                 "action_data" : []
               },
               "priority" : 5
@@ -13516,7 +13605,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 68,
+                "action_id" : 69,
                 "action_data" : []
               },
               "priority" : 6
@@ -13535,7 +13624,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 69,
+                "action_id" : 70,
                 "action_data" : []
               },
               "priority" : 7
@@ -13554,7 +13643,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 70,
+                "action_id" : 71,
                 "action_data" : []
               },
               "priority" : 8
@@ -13573,7 +13662,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 71,
+                "action_id" : 72,
                 "action_data" : []
               },
               "priority" : 9
@@ -13592,7 +13681,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 72,
+                "action_id" : 73,
                 "action_data" : []
               },
               "priority" : 10
@@ -13611,7 +13700,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 73,
+                "action_id" : 74,
                 "action_data" : []
               },
               "priority" : 11
@@ -13630,7 +13719,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 74,
+                "action_id" : 75,
                 "action_data" : []
               },
               "priority" : 12
@@ -13649,7 +13738,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 75,
+                "action_id" : 76,
                 "action_data" : []
               },
               "priority" : 13
@@ -13668,7 +13757,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 76,
+                "action_id" : 77,
                 "action_data" : []
               },
               "priority" : 14
@@ -13687,7 +13776,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 77,
+                "action_id" : 78,
                 "action_data" : []
               },
               "priority" : 15
@@ -13706,7 +13795,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 78,
+                "action_id" : 79,
                 "action_data" : []
               },
               "priority" : 16
@@ -13715,7 +13804,7 @@
         },
         {
           "name" : "tbl_int_transit425",
-          "id" : 39,
+          "id" : 40,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 425,
@@ -13729,14 +13818,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [94],
+          "action_ids" : [95],
           "actions" : ["int_transit425"],
-          "base_default_next" : "node_74",
+          "base_default_next" : "node_76",
           "next_tables" : {
-            "int_transit425" : "node_74"
+            "int_transit425" : "node_76"
           },
           "default_entry" : {
-            "action_id" : 94,
+            "action_id" : 95,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -13744,7 +13833,7 @@
         },
         {
           "name" : "tbl_int_transit428",
-          "id" : 40,
+          "id" : 41,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 428,
@@ -13758,14 +13847,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [93],
+          "action_ids" : [94],
           "actions" : ["int_transit428"],
-          "base_default_next" : "node_76",
+          "base_default_next" : "node_78",
           "next_tables" : {
-            "int_transit428" : "node_76"
+            "int_transit428" : "node_78"
           },
           "default_entry" : {
-            "action_id" : 93,
+            "action_id" : 94,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -13773,7 +13862,7 @@
         },
         {
           "name" : "tbl_int_transit431",
-          "id" : 41,
+          "id" : 42,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 431,
@@ -13787,14 +13876,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [95],
+          "action_ids" : [96],
           "actions" : ["int_transit431"],
-          "base_default_next" : "node_78",
+          "base_default_next" : "node_80",
           "next_tables" : {
-            "int_transit431" : "node_78"
+            "int_transit431" : "node_80"
           },
           "default_entry" : {
-            "action_id" : 95,
+            "action_id" : 96,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -13802,7 +13891,7 @@
         },
         {
           "name" : "tbl_int_transit434",
-          "id" : 42,
+          "id" : 43,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 434,
@@ -13816,14 +13905,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [96],
+          "action_ids" : [97],
           "actions" : ["int_transit434"],
           "base_default_next" : null,
           "next_tables" : {
             "int_transit434" : null
           },
           "default_entry" : {
-            "action_id" : 96,
+            "action_id" : 97,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -13833,11 +13922,11 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_43",
-          "id" : 16,
+          "name" : "node_45",
+          "id" : 17,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 103,
+            "line" : 108,
             "column" : 33,
             "source_fragment" : "fabric_metadata"
           },
@@ -13853,11 +13942,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_45"
+          "false_next" : "node_47"
         },
         {
-          "name" : "node_45",
-          "id" : 17,
+          "name" : "node_47",
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -13879,14 +13968,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_47"
+          "false_next" : "node_49"
         },
         {
-          "name" : "node_47",
-          "id" : 18,
+          "name" : "node_49",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -13921,15 +14010,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_49"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_51"
         },
         {
-          "name" : "node_49",
-          "id" : 19,
+          "name" : "node_51",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -13947,15 +14036,15 @@
               }
             }
           },
-          "true_next" : "node_50",
+          "true_next" : "node_52",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_50",
-          "id" : 20,
+          "name" : "node_52",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -13974,11 +14063,11 @@
           "false_next" : "FabricEgress.egress_next.egress_vlan"
         },
         {
-          "name" : "node_54",
-          "id" : 21,
+          "name" : "node_56",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -13993,15 +14082,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_58"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_60"
         },
         {
-          "name" : "node_56",
-          "id" : 22,
+          "name" : "node_58",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -14019,15 +14108,15 @@
               }
             }
           },
-          "true_next" : "tbl_next376",
-          "false_next" : "node_62"
+          "true_next" : "tbl_next310",
+          "false_next" : "node_64"
         },
         {
-          "name" : "node_58",
-          "id" : 23,
+          "name" : "node_60",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -14062,15 +14151,15 @@
               }
             }
           },
-          "true_next" : "tbl_next379",
-          "false_next" : "node_62"
+          "true_next" : "tbl_next313",
+          "false_next" : "node_64"
         },
         {
-          "name" : "node_60",
-          "id" : 24,
+          "name" : "node_62",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -14088,12 +14177,12 @@
               }
             }
           },
-          "true_next" : "tbl_next380",
-          "false_next" : "node_62"
+          "true_next" : "tbl_next314",
+          "false_next" : "node_64"
         },
         {
-          "name" : "node_62",
-          "id" : 25,
+          "name" : "node_64",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 102,
@@ -14169,14 +14258,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_63"
+          "true_next" : "node_65"
         },
         {
-          "name" : "node_63",
-          "id" : 26,
+          "name" : "node_65",
+          "id" : 27,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 112,
+            "line" : 117,
             "column" : 36,
             "source_fragment" : "fabric_metadata"
           },
@@ -14192,11 +14281,11 @@
             }
           },
           "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "false_next" : "node_65"
+          "false_next" : "node_67"
         },
         {
-          "name" : "node_65",
-          "id" : 27,
+          "name" : "node_67",
+          "id" : 28,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 110,
@@ -14218,8 +14307,8 @@
           "true_next" : "tbl_act"
         },
         {
-          "name" : "node_68",
-          "id" : 28,
+          "name" : "node_70",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 419,
@@ -14245,11 +14334,11 @@
             }
           },
           "true_next" : "tbl_int_transit420",
-          "false_next" : "node_70"
+          "false_next" : "node_72"
         },
         {
-          "name" : "node_70",
-          "id" : 29,
+          "name" : "node_72",
+          "id" : 30,
           "expression" : {
             "type" : "expression",
             "value" : {
@@ -14272,8 +14361,8 @@
           "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"
         },
         {
-          "name" : "node_74",
-          "id" : 30,
+          "name" : "node_76",
+          "id" : 31,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 427,
@@ -14292,11 +14381,11 @@
             }
           },
           "true_next" : "tbl_int_transit428",
-          "false_next" : "node_76"
+          "false_next" : "node_78"
         },
         {
-          "name" : "node_76",
-          "id" : 31,
+          "name" : "node_78",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 430,
@@ -14315,11 +14404,11 @@
             }
           },
           "true_next" : "tbl_int_transit431",
-          "false_next" : "node_78"
+          "false_next" : "node_80"
         },
         {
-          "name" : "node_78",
-          "id" : 32,
+          "name" : "node_80",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 433,
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
index f13b234..99558a2 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
@@ -180,6 +180,54 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -256,6 +304,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -277,30 +331,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 48735793
     name: "FabricIngress.next.xconnect"
     alias: "xconnect"
@@ -351,9 +381,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -512,6 +539,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -524,6 +556,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -582,6 +619,30 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -627,18 +688,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 24640974
     name: "FabricIngress.next.output_xconnect"
     alias: "output_xconnect"
@@ -697,33 +746,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -892,6 +914,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -903,17 +947,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 321989420
     name: "FabricIngress.next.xconnect_counter"
     alias: "xconnect_counter"
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
index c420605..d7e5f68 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
@@ -61,7 +61,8 @@
         ["userMetadata._int_meta_new_bytes37", 16, false],
         ["userMetadata._int_meta_ig_tstamp38", 32, false],
         ["userMetadata._int_meta_eg_tstamp39", 32, false],
-        ["_padding_0", 6, false]
+        ["userMetadata._port_type40", 2, false],
+        ["_padding_0", 4, false]
       ]
     },
     {
@@ -2184,7 +2185,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -2214,9 +2215,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 5,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 6,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 7,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -2226,56 +2251,44 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 6,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.xconnect_counter",
-      "id" : 7,
+      "id" : 8,
       "is_direct" : true,
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 107,
+        "line" : 56,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 8,
+      "id" : 9,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 9,
+      "id" : 10,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 10,
+      "id" : 11,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -2287,7 +2300,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 11,
+      "id" : 12,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -2299,7 +2312,7 @@
     },
     {
       "name" : "FabricIngress.spgw.pdr_counter",
-      "id" : 12,
+      "id" : 13,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 108,
@@ -2311,7 +2324,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
-      "id" : 13,
+      "id" : 14,
       "is_direct" : true,
       "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
       "source_info" : {
@@ -2323,19 +2336,19 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 14,
+      "id" : 15,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
     },
     {
       "name" : "FabricEgress.spgw.pdr_counter",
-      "id" : 15,
+      "id" : 16,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 295,
@@ -2583,7 +2596,7 @@
       "primitives" : []
     },
     {
-      "name" : "NoAction",
+      "name" : "nop",
       "id" : 8,
       "runtime_data" : [],
       "primitives" : []
@@ -2595,9 +2608,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "name" : "NoAction",
       "id" : 10,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.process_set_source_sink.int_set_source",
+      "id" : 11,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -2632,7 +2651,7 @@
     },
     {
       "name" : "FabricIngress.filtering.deny",
-      "id" : 11,
+      "id" : 12,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2692,22 +2711,70 @@
             "column" : 34,
             "source_fragment" : "= true; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type40"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 12,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 13,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type40"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 13,
+      "id" : 14,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -2725,16 +2792,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 32,
             "source_fragment" : "= vlan_id; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type40"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 14,
+      "id" : 15,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -2756,7 +2842,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -2765,7 +2851,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 15,
+      "id" : 16,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2796,7 +2882,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 16,
+      "id" : 17,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2846,7 +2932,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 17,
+      "id" : 18,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2877,13 +2963,75 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 18,
+      "id" : 19,
       "runtime_data" : [],
       "primitives" : []
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 20,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._mpls_label4"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 35,
+            "source_fragment" : "= label; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 21,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 19,
+      "id" : 22,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2914,7 +3062,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 20,
+      "id" : 23,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2969,7 +3117,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 21,
+      "id" : 24,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -3000,7 +3148,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 22,
+      "id" : 25,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3051,105 +3199,12 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 23,
+      "id" : 26,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 24,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_xconnect",
-      "id" : 25,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_next_id_xconnect",
-      "id" : 26,
-      "runtime_data" : [
-        {
-          "name" : "next_id",
-          "bitwidth" : 32
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._next_id9"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 115,
-            "column" : 32,
-            "source_fragment" : "= next_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.output_hashed",
       "id" : 27,
       "runtime_data" : [
         {
@@ -3180,20 +3235,12 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.routing_hashed",
+      "name" : "FabricIngress.next.set_next_id_xconnect",
       "id" : 28,
       "runtime_data" : [
         {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
+          "name" : "next_id",
+          "bitwidth" : 32
         }
       ],
       "primitives" : [
@@ -3202,39 +3249,32 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["ethernet", "src_addr"]
+              "value" : ["scalars", "userMetadata._next_id9"]
             },
             {
               "type" : "runtime_data",
-              "value" : 1
+              "value" : 0
             }
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+            "line" : 64,
+            "column" : 32,
+            "source_fragment" : "= next_id; ..."
           }
-        },
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_hashed",
+      "id" : 29,
+      "runtime_data" : [
         {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
         {
           "op" : "assign",
           "parameters" : [
@@ -3257,8 +3297,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
-      "id" : 29,
+      "name" : "FabricIngress.next.routing_hashed",
+      "id" : 30,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -3271,10 +3311,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -3283,25 +3319,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label4"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -3358,7 +3375,7 @@
     },
     {
       "name" : "FabricIngress.next.set_mcast_group_id",
-      "id" : 30,
+      "id" : 31,
       "runtime_data" : [
         {
           "name" : "group_id",
@@ -3380,7 +3397,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -3409,7 +3426,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -3418,7 +3435,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp",
-      "id" : 31,
+      "id" : 32,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3435,7 +3452,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3637,7 +3654,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp",
-      "id" : 32,
+      "id" : 33,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3654,7 +3671,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3841,7 +3858,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp",
-      "id" : 33,
+      "id" : 34,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3858,7 +3875,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4060,7 +4077,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown",
-      "id" : 34,
+      "id" : 35,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4077,7 +4094,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4245,7 +4262,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp",
-      "id" : 35,
+      "id" : 36,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4262,7 +4279,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4464,7 +4481,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp",
-      "id" : 36,
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4481,7 +4498,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4668,7 +4685,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp",
-      "id" : 37,
+      "id" : 38,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4685,7 +4702,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4887,7 +4904,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown",
-      "id" : 38,
+      "id" : 39,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4904,7 +4921,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -5072,7 +5089,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_iface",
-      "id" : 39,
+      "id" : 40,
       "runtime_data" : [
         {
           "name" : "src_iface",
@@ -5132,7 +5149,7 @@
     },
     {
       "name" : "FabricIngress.spgw.iface_miss",
-      "id" : 40,
+      "id" : 41,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -5187,103 +5204,6 @@
     },
     {
       "name" : "FabricIngress.spgw.load_pdr",
-      "id" : 41,
-      "runtime_data" : [
-        {
-          "name" : "ctr_id",
-          "bitwidth" : 32
-        },
-        {
-          "name" : "far_id",
-          "bitwidth" : 32
-        },
-        {
-          "name" : "needs_gtpu_decap",
-          "bitwidth" : 1
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_ctr_id24"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 150,
-            "column" : 30,
-            "source_fragment" : "= ctr_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_far_id25"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 151,
-            "column" : 30,
-            "source_fragment" : "= far_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"]
-            },
-            {
-              "type" : "expression",
-              "value" : {
-                "type" : "expression",
-                "value" : {
-                  "op" : "b2d",
-                  "left" : null,
-                  "right" : {
-                    "type" : "expression",
-                    "value" : {
-                      "op" : "!=",
-                      "left" : {
-                        "type" : "local",
-                        "value" : 2
-                      },
-                      "right" : {
-                        "type" : "hexstr",
-                        "value" : "0x00"
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 152,
-            "column" : 40,
-            "source_fragment" : "= (bool)needs_gtpu_decap; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.spgw.load_pdr",
       "id" : 42,
       "runtime_data" : [
         {
@@ -5380,7 +5300,7 @@
       ]
     },
     {
-      "name" : "FabricIngress.spgw.load_pdr_qos",
+      "name" : "FabricIngress.spgw.load_pdr",
       "id" : 43,
       "runtime_data" : [
         {
@@ -5394,10 +5314,6 @@
         {
           "name" : "needs_gtpu_decap",
           "bitwidth" : 1
-        },
-        {
-          "name" : "qid",
-          "bitwidth" : 5
         }
       ],
       "primitives" : [
@@ -5582,10 +5498,111 @@
       ]
     },
     {
-      "name" : "FabricIngress.spgw.load_normal_far",
+      "name" : "FabricIngress.spgw.load_pdr_qos",
       "id" : 45,
       "runtime_data" : [
         {
+          "name" : "ctr_id",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "far_id",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "needs_gtpu_decap",
+          "bitwidth" : 1
+        },
+        {
+          "name" : "qid",
+          "bitwidth" : 5
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_ctr_id24"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 150,
+            "column" : 30,
+            "source_fragment" : "= ctr_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_far_id25"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 151,
+            "column" : 30,
+            "source_fragment" : "= far_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "!=",
+                      "left" : {
+                        "type" : "local",
+                        "value" : 2
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 152,
+            "column" : 40,
+            "source_fragment" : "= (bool)needs_gtpu_decap; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.spgw.load_normal_far",
+      "id" : 46,
+      "runtime_data" : [
+        {
           "name" : "drop",
           "bitwidth" : 1
         },
@@ -5716,7 +5733,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_tunnel_far",
-      "id" : 46,
+      "id" : 47,
       "runtime_data" : [
         {
           "name" : "drop",
@@ -6046,7 +6063,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_dbuf_far",
-      "id" : 47,
+      "id" : 48,
       "runtime_data" : [
         {
           "name" : "drop",
@@ -6405,7 +6422,7 @@
     },
     {
       "name" : "packetio25",
-      "id" : 48,
+      "id" : 49,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6485,7 +6502,7 @@
     },
     {
       "name" : "spgw265",
-      "id" : 49,
+      "id" : 50,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6511,7 +6528,7 @@
     },
     {
       "name" : "spgw282",
-      "id" : 50,
+      "id" : 51,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6536,8 +6553,8 @@
       ]
     },
     {
-      "name" : "filtering111",
-      "id" : 51,
+      "name" : "filtering113",
+      "id" : 52,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6554,7 +6571,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -6573,7 +6590,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -6592,7 +6609,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -6600,8 +6617,8 @@
       ]
     },
     {
-      "name" : "filtering127",
-      "id" : 52,
+      "name" : "filtering129",
+      "id" : 53,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6618,7 +6635,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -6626,8 +6643,8 @@
       ]
     },
     {
-      "name" : "acl101",
-      "id" : 53,
+      "name" : "acl102",
+      "id" : 54,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6644,7 +6661,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -6663,7 +6680,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -6671,8 +6688,8 @@
       ]
     },
     {
-      "name" : "acl104",
-      "id" : 54,
+      "name" : "acl105",
+      "id" : 55,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6689,7 +6706,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -6708,7 +6725,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -6716,8 +6733,8 @@
       ]
     },
     {
-      "name" : "acl97",
-      "id" : 55,
+      "name" : "acl98",
+      "id" : 56,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6734,7 +6751,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -6753,7 +6770,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -6772,7 +6789,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -6780,8 +6797,8 @@
       ]
     },
     {
-      "name" : "acl112",
-      "id" : 56,
+      "name" : "acl113",
+      "id" : 57,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6798,7 +6815,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -6817,7 +6834,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -6825,8 +6842,8 @@
       ]
     },
     {
-      "name" : "acl115",
-      "id" : 57,
+      "name" : "acl116",
+      "id" : 58,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6843,7 +6860,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -6862,7 +6879,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -6870,8 +6887,8 @@
       ]
     },
     {
-      "name" : "acl108",
-      "id" : 58,
+      "name" : "acl109",
+      "id" : 59,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6888,7 +6905,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -6907,7 +6924,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -6926,7 +6943,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -6935,7 +6952,7 @@
     },
     {
       "name" : "acl27",
-      "id" : 59,
+      "id" : 60,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7037,7 +7054,7 @@
     },
     {
       "name" : "port_counter31",
-      "id" : 60,
+      "id" : 61,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7095,7 +7112,7 @@
     },
     {
       "name" : "port_counter34",
-      "id" : 61,
+      "id" : 62,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7153,18 +7170,12 @@
     },
     {
       "name" : "nop",
-      "id" : 62,
-      "runtime_data" : [],
-      "primitives" : []
-    },
-    {
-      "name" : "nop",
       "id" : 63,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "NoAction",
+      "name" : "nop",
       "id" : 64,
       "runtime_data" : [],
       "primitives" : []
@@ -7176,8 +7187,14 @@
       "primitives" : []
     },
     {
-      "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+      "name" : "NoAction",
       "id" : 66,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+      "id" : 67,
       "runtime_data" : [
         {
           "name" : "max_hop",
@@ -7245,7 +7262,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 157,
+            "line" : 169,
             "column" : 36,
             "source_fragment" : "4; ..."
           }
@@ -7663,7 +7680,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 153,
+            "line" : 165,
             "column" : 24,
             "source_fragment" : "0x1; ..."
           }
@@ -7672,7 +7689,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata",
-      "id" : 67,
+      "id" : 68,
       "runtime_data" : [
         {
           "name" : "switch_id",
@@ -7732,13 +7749,13 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0",
-      "id" : 68,
+      "id" : 69,
       "runtime_data" : [],
       "primitives" : []
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1",
-      "id" : 69,
+      "id" : 70,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7895,7 +7912,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2",
-      "id" : 70,
+      "id" : 71,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8020,7 +8037,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3",
-      "id" : 71,
+      "id" : 72,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8211,7 +8228,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4",
-      "id" : 72,
+      "id" : 73,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8381,7 +8398,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5",
-      "id" : 73,
+      "id" : 74,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8617,7 +8634,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6",
-      "id" : 74,
+      "id" : 75,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -8821,7 +8838,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7",
-      "id" : 75,
+      "id" : 76,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9091,7 +9108,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8",
-      "id" : 76,
+      "id" : 77,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9216,7 +9233,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9",
-      "id" : 77,
+      "id" : 78,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9407,7 +9424,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10",
-      "id" : 78,
+      "id" : 79,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9566,7 +9583,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11",
-      "id" : 79,
+      "id" : 80,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9791,7 +9808,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12",
-      "id" : 80,
+      "id" : 81,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -9995,7 +10012,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13",
-      "id" : 81,
+      "id" : 82,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10265,7 +10282,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14",
-      "id" : 82,
+      "id" : 83,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10503,7 +10520,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15",
-      "id" : 83,
+      "id" : 84,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10807,13 +10824,13 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0",
-      "id" : 84,
+      "id" : 85,
       "runtime_data" : [],
       "primitives" : []
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1",
-      "id" : 85,
+      "id" : 86,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -10938,7 +10955,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2",
-      "id" : 86,
+      "id" : 87,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11082,7 +11099,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3",
-      "id" : 87,
+      "id" : 88,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11260,7 +11277,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4",
-      "id" : 88,
+      "id" : 89,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11408,7 +11425,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5",
-      "id" : 89,
+      "id" : 90,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11590,7 +11607,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6",
-      "id" : 90,
+      "id" : 91,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -11791,7 +11808,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7",
-      "id" : 91,
+      "id" : 92,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12026,7 +12043,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8",
-      "id" : 92,
+      "id" : 93,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12151,7 +12168,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9",
-      "id" : 93,
+      "id" : 94,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12310,7 +12327,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10",
-      "id" : 94,
+      "id" : 95,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12488,7 +12505,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11",
-      "id" : 95,
+      "id" : 96,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12700,7 +12717,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12",
-      "id" : 96,
+      "id" : 97,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -12882,7 +12899,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13",
-      "id" : 97,
+      "id" : 98,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13098,7 +13115,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14",
-      "id" : 98,
+      "id" : 99,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13333,7 +13350,7 @@
     },
     {
       "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15",
-      "id" : 99,
+      "id" : 100,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13602,7 +13619,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_mpls_if_present",
-      "id" : 100,
+      "id" : 101,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13615,7 +13632,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -13634,7 +13651,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..."
           }
@@ -13643,7 +13660,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.set_mpls",
-      "id" : 101,
+      "id" : 102,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13656,7 +13673,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -13675,7 +13692,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -13694,7 +13711,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -13713,7 +13730,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -13732,7 +13749,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -13751,7 +13768,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -13760,7 +13777,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_vlan",
-      "id" : 102,
+      "id" : 103,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13773,7 +13790,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -13792,7 +13809,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -13811,7 +13828,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -13830,7 +13847,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -13849,7 +13866,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -13858,7 +13875,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_vlan",
-      "id" : 103,
+      "id" : 104,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13871,7 +13888,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -13880,7 +13897,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.drop",
-      "id" : 104,
+      "id" : 105,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13893,7 +13910,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -13902,7 +13919,7 @@
     },
     {
       "name" : "FabricEgress.spgw.gtpu_encap",
-      "id" : 105,
+      "id" : 106,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -13953,7 +13970,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 135,
+            "line" : 147,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -14109,7 +14126,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 148,
+            "line" : 160,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -14128,7 +14145,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 132,
+            "line" : 144,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -14494,7 +14511,7 @@
     },
     {
       "name" : "packetio41",
-      "id" : 106,
+      "id" : 107,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14511,7 +14528,7 @@
     },
     {
       "name" : "packetio44",
-      "id" : 107,
+      "id" : 108,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14561,29 +14578,7 @@
       ]
     },
     {
-      "name" : "next349",
-      "id" : 108,
-      "runtime_data" : [],
-      "primitives" : [
-        {
-          "op" : "mark_to_drop",
-          "parameters" : [
-            {
-              "type" : "header",
-              "value" : "standard_metadata"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 349,
-            "column" : 12,
-            "source_fragment" : "mark_to_drop(standard_metadata)"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "next376",
+      "name" : "next283",
       "id" : 109,
       "runtime_data" : [],
       "primitives" : [
@@ -14597,7 +14592,29 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 283,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_metadata)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next310",
+      "id" : 110,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -14605,8 +14622,8 @@
       ]
     },
     {
-      "name" : "next375",
-      "id" : 110,
+      "name" : "next309",
+      "id" : 111,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14646,7 +14663,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -14654,8 +14671,8 @@
       ]
     },
     {
-      "name" : "next380",
-      "id" : 111,
+      "name" : "next314",
+      "id" : 112,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14668,7 +14685,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -14676,8 +14693,8 @@
       ]
     },
     {
-      "name" : "next379",
-      "id" : 112,
+      "name" : "next313",
+      "id" : 113,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14717,7 +14734,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -14726,7 +14743,7 @@
     },
     {
       "name" : "spgw342",
-      "id" : 113,
+      "id" : 114,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14752,7 +14769,7 @@
     },
     {
       "name" : "act",
-      "id" : 114,
+      "id" : 115,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14782,7 +14799,7 @@
     },
     {
       "name" : "int_transit420",
-      "id" : 115,
+      "id" : 116,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14818,7 +14835,7 @@
     },
     {
       "name" : "int_transit428",
-      "id" : 116,
+      "id" : 117,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14867,7 +14884,7 @@
     },
     {
       "name" : "int_transit425",
-      "id" : 117,
+      "id" : 118,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14916,7 +14933,7 @@
     },
     {
       "name" : "int_transit431",
-      "id" : 118,
+      "id" : 119,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -14965,7 +14982,7 @@
     },
     {
       "name" : "int_transit434",
-      "id" : 119,
+      "id" : 120,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -15019,7 +15036,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -15041,14 +15058,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [48],
+          "action_ids" : [49],
           "actions" : ["packetio25"],
           "base_default_next" : "FabricIngress.spgw.interfaces",
           "next_tables" : {
             "packetio25" : "FabricIngress.spgw.interfaces"
           },
           "default_entry" : {
-            "action_id" : 48,
+            "action_id" : 49,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15083,7 +15100,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [39, 40],
+          "action_ids" : [40, 41],
           "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"],
           "base_default_next" : null,
           "next_tables" : {
@@ -15091,7 +15108,7 @@
             "__MISS__" : "node_16"
           },
           "default_entry" : {
-            "action_id" : 40,
+            "action_id" : 41,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15132,7 +15149,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [31, 32, 33, 34],
+          "action_ids" : [32, 33, 34, 35],
           "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"],
           "base_default_next" : "node_7",
           "next_tables" : {
@@ -15142,7 +15159,7 @@
             "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_7"
           },
           "default_entry" : {
-            "action_id" : 34,
+            "action_id" : 35,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15170,7 +15187,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 31,
+                "action_id" : 32,
                 "action_data" : []
               },
               "priority" : 1
@@ -15197,7 +15214,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 32,
+                "action_id" : 33,
                 "action_data" : []
               },
               "priority" : 2
@@ -15224,7 +15241,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 33,
+                "action_id" : 34,
                 "action_data" : []
               },
               "priority" : 3
@@ -15260,7 +15277,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [42, 44, 9],
+          "action_ids" : [43, 45, 10],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -15269,7 +15286,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 9,
+            "action_id" : 10,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -15298,7 +15315,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [41, 43, 8],
+          "action_ids" : [42, 44, 9],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -15307,7 +15324,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 8,
+            "action_id" : 9,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -15329,14 +15346,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [49],
+          "action_ids" : [50],
           "actions" : ["spgw265"],
           "base_default_next" : "node_12",
           "next_tables" : {
             "spgw265" : "node_12"
           },
           "default_entry" : {
-            "action_id" : 49,
+            "action_id" : 50,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15377,7 +15394,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [35, 36, 37, 38],
+          "action_ids" : [36, 37, 38, 39],
           "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"],
           "base_default_next" : "FabricIngress.spgw.fars",
           "next_tables" : {
@@ -15387,7 +15404,7 @@
             "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars"
           },
           "default_entry" : {
-            "action_id" : 38,
+            "action_id" : 39,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15415,7 +15432,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 35,
+                "action_id" : 36,
                 "action_data" : []
               },
               "priority" : 1
@@ -15442,7 +15459,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 36,
+                "action_id" : 37,
                 "action_data" : []
               },
               "priority" : 2
@@ -15469,7 +15486,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 37,
+                "action_id" : 38,
                 "action_data" : []
               },
               "priority" : 3
@@ -15499,7 +15516,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [45, 46, 47],
+          "action_ids" : [46, 47, 48],
           "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"],
           "base_default_next" : "tbl_spgw282",
           "next_tables" : {
@@ -15508,7 +15525,7 @@
             "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw282"
           },
           "default_entry" : {
-            "action_id" : 45,
+            "action_id" : 46,
             "action_const" : true,
             "action_data" : ["0x1", "0x0"],
             "action_entry_const" : true
@@ -15530,25 +15547,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [50],
+          "action_ids" : [51],
           "actions" : ["spgw282"],
           "base_default_next" : "node_16",
           "next_tables" : {
             "spgw282" : "node_16"
           },
           "default_entry" : {
-            "action_id" : 50,
+            "action_id" : 51,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -15559,25 +15576,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [51],
-          "actions" : ["filtering111"],
+          "action_ids" : [52],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_18",
           "next_tables" : {
-            "filtering111" : "node_18"
+            "filtering113" : "node_18"
           },
           "default_entry" : {
-            "action_id" : 51,
+            "action_id" : 52,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 10,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -15588,14 +15605,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [52],
-          "actions" : ["filtering127"],
+          "action_ids" : [53],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
-            "action_id" : 52,
+            "action_id" : 53,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15606,7 +15623,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -15636,7 +15653,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [11, 12, 13],
+          "action_ids" : [12, 13, 14],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -15645,7 +15662,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 11,
+            "action_id" : 12,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -15656,7 +15673,7 @@
           "id" : 12,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -15692,14 +15709,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [14],
+          "action_ids" : [15],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_22",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_22"
           },
           "default_entry" : {
-            "action_id" : 14,
+            "action_id" : 15,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -15734,12 +15751,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15, 1],
+          "action_ids" : [16, 1],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -15771,12 +15788,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [16, 2],
+          "action_ids" : [17, 2],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -15808,13 +15825,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [17, 18, 3],
+          "action_ids" : [18, 19, 3],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_29",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 3,
@@ -15824,9 +15841,83 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 16,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [20, 4],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 4,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 17,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [21, 5],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 5,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 18,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -15839,25 +15930,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [59],
+          "action_ids" : [60],
           "actions" : ["acl27"],
-          "base_default_next" : "node_30",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "acl27" : "node_30"
+            "acl27" : "node_33"
           },
           "default_entry" : {
-            "action_id" : 59,
+            "action_id" : 60,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 17,
+          "name" : "tbl_acl98",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -15868,25 +15959,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [55],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_32",
+          "action_ids" : [56],
+          "actions" : ["acl98"],
+          "base_default_next" : "node_35",
           "next_tables" : {
-            "acl97" : "node_32"
+            "acl98" : "node_35"
           },
           "default_entry" : {
-            "action_id" : 55,
+            "action_id" : 56,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 18,
+          "name" : "tbl_acl102",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -15897,25 +15988,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [53],
-          "actions" : ["acl101"],
+          "action_ids" : [54],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 53,
+            "action_id" : 54,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 19,
+          "name" : "tbl_acl105",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -15926,25 +16017,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [54],
-          "actions" : ["acl104"],
+          "action_ids" : [55],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 54,
+            "action_id" : 55,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 20,
+          "name" : "tbl_acl109",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -15955,25 +16046,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [58],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_38",
+          "action_ids" : [59],
+          "actions" : ["acl109"],
+          "base_default_next" : "node_41",
           "next_tables" : {
-            "acl108" : "node_38"
+            "acl109" : "node_41"
           },
           "default_entry" : {
-            "action_id" : 58,
+            "action_id" : 59,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 21,
+          "name" : "tbl_acl113",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -15984,25 +16075,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [56],
-          "actions" : ["acl112"],
+          "action_ids" : [57],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 56,
+            "action_id" : 57,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 22,
+          "name" : "tbl_acl116",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -16013,14 +16104,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [57],
-          "actions" : ["acl115"],
+          "action_ids" : [58],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 57,
+            "action_id" : 58,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16028,7 +16119,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 23,
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -16107,6 +16198,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata._port_type40"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -16115,18 +16212,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [19, 20, 21, 22, 23],
+          "action_ids" : [22, 23, 24, 25, 26],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_43",
+          "base_default_next" : "node_46",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_43",
-            "FabricIngress.acl.punt_to_cpu" : "node_43",
-            "FabricIngress.acl.set_clone_session_id" : "node_43",
-            "FabricIngress.acl.drop" : "node_43",
-            "FabricIngress.acl.nop_acl" : "node_43"
+            "FabricIngress.acl.set_next_id_acl" : "node_46",
+            "FabricIngress.acl.punt_to_cpu" : "node_46",
+            "FabricIngress.acl.set_clone_session_id" : "node_46",
+            "FabricIngress.acl.drop" : "node_46",
+            "FabricIngress.acl.nop_acl" : "node_46"
           },
           "default_entry" : {
-            "action_id" : 23,
+            "action_id" : 26,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16134,10 +16231,10 @@
         },
         {
           "name" : "FabricIngress.next.xconnect",
-          "id" : 24,
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 119,
+            "line" : 68,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -16161,7 +16258,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [25, 26, 5],
+          "action_ids" : [27, 28, 6],
           "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
           "base_default_next" : "FabricIngress.next.hashed",
           "next_tables" : {
@@ -16170,7 +16267,7 @@
             "nop" : "FabricIngress.next.hashed"
           },
           "default_entry" : {
-            "action_id" : 5,
+            "action_id" : 6,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16178,10 +16275,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 25,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -16200,22 +16297,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [27, 28, 29, 6],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [29, 30, 7],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 26,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -16233,52 +16329,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [30, 7],
+          "action_ids" : [31, 8],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_50",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_50",
+            "nop" : "node_50"
           },
           "default_entry" : {
-            "action_id" : 7,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 27,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata._next_id9"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [24, 4],
-          "actions" : ["FabricIngress.next.set_vlan", "nop"],
-          "base_default_next" : "node_48",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_48",
-            "nop" : "node_48"
-          },
-          "default_entry" : {
-            "action_id" : 4,
+            "action_id" : 8,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16286,7 +16345,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 28,
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -16300,14 +16359,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [60],
+          "action_ids" : [61],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_50",
+          "base_default_next" : "node_52",
           "next_tables" : {
-            "port_counter31" : "node_50"
+            "port_counter31" : "node_52"
           },
           "default_entry" : {
-            "action_id" : 60,
+            "action_id" : 61,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16315,7 +16374,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 29,
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -16329,14 +16388,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [61],
+          "action_ids" : [62],
           "actions" : ["port_counter34"],
           "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source",
           "next_tables" : {
             "port_counter34" : "FabricIngress.process_set_source_sink.tb_set_source"
           },
           "default_entry" : {
-            "action_id" : 61,
+            "action_id" : 62,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16344,7 +16403,7 @@
         },
         {
           "name" : "FabricIngress.process_set_source_sink.tb_set_source",
-          "id" : 30,
+          "id" : 31,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 46,
@@ -16365,7 +16424,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [10, 0],
+          "action_ids" : [11, 0],
           "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
           "base_default_next" : null,
           "next_tables" : {
@@ -16386,7 +16445,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -16522,7 +16581,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 68,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -16545,7 +16604,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -16560,7 +16619,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_18"
         },
         {
@@ -16568,7 +16627,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -16590,7 +16649,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -16598,7 +16657,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -16621,7 +16680,7 @@
             }
           },
           "true_next" : "node_23",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_29"
         },
         {
           "name" : "node_23",
@@ -16699,14 +16758,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_29"
+        },
+        {
+          "name" : "node_29",
+          "id" : 11,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._skip_next7"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_30",
-          "id" : 11,
+          "name" : "node_33",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -16738,15 +16827,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_36"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_39"
         },
         {
-          "name" : "node_32",
-          "id" : 12,
+          "name" : "node_35",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -16761,15 +16850,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_34"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_37"
         },
         {
-          "name" : "node_34",
-          "id" : 13,
+          "name" : "node_37",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -16784,15 +16873,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_36",
-          "id" : 14,
+          "name" : "node_39",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -16807,15 +16896,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_38",
-          "id" : 15,
+          "name" : "node_41",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -16830,15 +16919,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_40"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_43"
         },
         {
-          "name" : "node_40",
-          "id" : 16,
+          "name" : "node_43",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -16853,15 +16942,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_43",
-          "id" : 17,
+          "name" : "node_46",
+          "id" : 18,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -16887,8 +16976,8 @@
           "true_next" : "FabricIngress.next.xconnect"
         },
         {
-          "name" : "node_48",
-          "id" : 18,
+          "name" : "node_50",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -16910,11 +16999,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_50"
+          "false_next" : "node_52"
         },
         {
-          "name" : "node_50",
-          "id" : 19,
+          "name" : "node_52",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -16945,15 +17034,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_55",
+      "init_table" : "node_57",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 31,
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -16967,14 +17056,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [106],
+          "action_ids" : [107],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_57",
+          "base_default_next" : "node_59",
           "next_tables" : {
-            "packetio41" : "node_57"
+            "packetio41" : "node_59"
           },
           "default_entry" : {
-            "action_id" : 106,
+            "action_id" : 107,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -16982,7 +17071,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 32,
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -16996,25 +17085,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [107],
+          "action_ids" : [108],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_59",
+          "base_default_next" : "node_61",
           "next_tables" : {
-            "packetio44" : "node_59"
+            "packetio44" : "node_61"
           },
           "default_entry" : {
-            "action_id" : 107,
+            "action_id" : 108,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 33,
+          "name" : "tbl_next283",
+          "id" : 34,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -17025,14 +17114,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [108],
-          "actions" : ["next349"],
-          "base_default_next" : "node_61",
+          "action_ids" : [109],
+          "actions" : ["next283"],
+          "base_default_next" : "node_63",
           "next_tables" : {
-            "next349" : "node_61"
+            "next283" : "node_63"
           },
           "default_entry" : {
-            "action_id" : 108,
+            "action_id" : 109,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17040,10 +17129,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 34,
+          "id" : 35,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -17054,14 +17143,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [100],
+          "action_ids" : [101],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 100,
+            "action_id" : 101,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17069,10 +17158,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 35,
+          "id" : 36,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -17083,14 +17172,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [101],
+          "action_ids" : [102],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 101,
+            "action_id" : 102,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17098,10 +17187,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 36,
+          "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -17125,27 +17214,27 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [102, 103, 104],
+          "action_ids" : [103, 104, 105],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_66",
+          "base_default_next" : "node_68",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_66",
-            "FabricEgress.egress_next.pop_vlan" : "node_66",
-            "FabricEgress.egress_next.drop" : "node_66"
+            "FabricEgress.egress_next.push_vlan" : "node_68",
+            "FabricEgress.egress_next.pop_vlan" : "node_68",
+            "FabricEgress.egress_next.drop" : "node_68"
           },
           "default_entry" : {
-            "action_id" : 104,
+            "action_id" : 105,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 37,
+          "name" : "tbl_next309",
+          "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -17156,25 +17245,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [110],
-          "actions" : ["next375"],
-          "base_default_next" : "node_68",
+          "action_ids" : [111],
+          "actions" : ["next309"],
+          "base_default_next" : "node_70",
           "next_tables" : {
-            "next375" : "node_68"
+            "next309" : "node_70"
           },
           "default_entry" : {
-            "action_id" : 110,
+            "action_id" : 111,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 38,
+          "name" : "tbl_next310",
+          "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -17185,25 +17274,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [109],
-          "actions" : ["next376"],
-          "base_default_next" : "node_74",
+          "action_ids" : [110],
+          "actions" : ["next310"],
+          "base_default_next" : "node_76",
           "next_tables" : {
-            "next376" : "node_74"
+            "next310" : "node_76"
           },
           "default_entry" : {
-            "action_id" : 109,
+            "action_id" : 110,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 39,
+          "name" : "tbl_next313",
+          "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -17214,25 +17303,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [112],
-          "actions" : ["next379"],
-          "base_default_next" : "node_72",
+          "action_ids" : [113],
+          "actions" : ["next313"],
+          "base_default_next" : "node_74",
           "next_tables" : {
-            "next379" : "node_72"
+            "next313" : "node_74"
           },
           "default_entry" : {
-            "action_id" : 112,
+            "action_id" : 113,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 40,
+          "name" : "tbl_next314",
+          "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -17243,14 +17332,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [111],
-          "actions" : ["next380"],
-          "base_default_next" : "node_74",
+          "action_ids" : [112],
+          "actions" : ["next314"],
+          "base_default_next" : "node_76",
           "next_tables" : {
-            "next380" : "node_74"
+            "next314" : "node_76"
           },
           "default_entry" : {
-            "action_id" : 111,
+            "action_id" : 112,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17258,7 +17347,7 @@
         },
         {
           "name" : "tbl_spgw_gtpu_encap",
-          "id" : 41,
+          "id" : 42,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 339,
@@ -17272,14 +17361,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [105],
+          "action_ids" : [106],
           "actions" : ["FabricEgress.spgw.gtpu_encap"],
-          "base_default_next" : "node_77",
+          "base_default_next" : "node_79",
           "next_tables" : {
-            "FabricEgress.spgw.gtpu_encap" : "node_77"
+            "FabricEgress.spgw.gtpu_encap" : "node_79"
           },
           "default_entry" : {
-            "action_id" : 105,
+            "action_id" : 106,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17287,7 +17376,7 @@
         },
         {
           "name" : "tbl_spgw342",
-          "id" : 42,
+          "id" : 43,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 342,
@@ -17301,14 +17390,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [113],
+          "action_ids" : [114],
           "actions" : ["spgw342"],
-          "base_default_next" : "node_79",
+          "base_default_next" : "node_81",
           "next_tables" : {
-            "spgw342" : "node_79"
+            "spgw342" : "node_81"
           },
           "default_entry" : {
-            "action_id" : 113,
+            "action_id" : 114,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17316,7 +17405,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "id" : 43,
+          "id" : 44,
           "source_info" : {
             "filename" : "include/int/int_source.p4",
             "line" : 66,
@@ -17355,15 +17444,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [66, 62],
+          "action_ids" : [67, 63],
           "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
-          "base_default_next" : "node_82",
+          "base_default_next" : "node_84",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_82",
-            "nop" : "node_82"
+            "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_84",
+            "nop" : "node_84"
           },
           "default_entry" : {
-            "action_id" : 62,
+            "action_id" : 63,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17371,7 +17460,7 @@
         },
         {
           "name" : "tbl_act",
-          "id" : 44,
+          "id" : 45,
           "key" : [],
           "match_type" : "exact",
           "type" : "simple",
@@ -17379,14 +17468,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [114],
+          "action_ids" : [115],
           "actions" : ["act"],
           "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
           "next_tables" : {
             "act" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
           },
           "default_entry" : {
-            "action_id" : 114,
+            "action_id" : 115,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17394,7 +17483,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
-          "id" : 45,
+          "id" : 46,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 315,
@@ -17415,15 +17504,15 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [67, 63],
+          "action_ids" : [68, 64],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"],
-          "base_default_next" : "node_85",
+          "base_default_next" : "node_87",
           "next_tables" : {
-            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_85",
-            "nop" : "node_85"
+            "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_87",
+            "nop" : "node_87"
           },
           "default_entry" : {
-            "action_id" : 63,
+            "action_id" : 64,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17431,7 +17520,7 @@
         },
         {
           "name" : "tbl_int_transit420",
-          "id" : 46,
+          "id" : 47,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 420,
@@ -17445,14 +17534,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [115],
+          "action_ids" : [116],
           "actions" : ["int_transit420"],
-          "base_default_next" : "node_87",
+          "base_default_next" : "node_89",
           "next_tables" : {
-            "int_transit420" : "node_87"
+            "int_transit420" : "node_89"
           },
           "default_entry" : {
-            "action_id" : 115,
+            "action_id" : 116,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -17460,7 +17549,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
-          "id" : 47,
+          "id" : 48,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 331,
@@ -17481,7 +17570,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 64],
+          "action_ids" : [69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 65],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"],
           "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
           "next_tables" : {
@@ -17504,7 +17593,7 @@
             "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407"
           },
           "default_entry" : {
-            "action_id" : 64,
+            "action_id" : 65,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -17524,7 +17613,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 68,
+                "action_id" : 69,
                 "action_data" : []
               },
               "priority" : 1
@@ -17543,7 +17632,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 69,
+                "action_id" : 70,
                 "action_data" : []
               },
               "priority" : 2
@@ -17562,7 +17651,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 70,
+                "action_id" : 71,
                 "action_data" : []
               },
               "priority" : 3
@@ -17581,7 +17670,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 71,
+                "action_id" : 72,
                 "action_data" : []
               },
               "priority" : 4
@@ -17600,7 +17689,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 72,
+                "action_id" : 73,
                 "action_data" : []
               },
               "priority" : 5
@@ -17619,7 +17708,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 73,
+                "action_id" : 74,
                 "action_data" : []
               },
               "priority" : 6
@@ -17638,7 +17727,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 74,
+                "action_id" : 75,
                 "action_data" : []
               },
               "priority" : 7
@@ -17657,7 +17746,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 75,
+                "action_id" : 76,
                 "action_data" : []
               },
               "priority" : 8
@@ -17676,7 +17765,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 76,
+                "action_id" : 77,
                 "action_data" : []
               },
               "priority" : 9
@@ -17695,7 +17784,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 77,
+                "action_id" : 78,
                 "action_data" : []
               },
               "priority" : 10
@@ -17714,7 +17803,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 78,
+                "action_id" : 79,
                 "action_data" : []
               },
               "priority" : 11
@@ -17733,7 +17822,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 79,
+                "action_id" : 80,
                 "action_data" : []
               },
               "priority" : 12
@@ -17752,7 +17841,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 80,
+                "action_id" : 81,
                 "action_data" : []
               },
               "priority" : 13
@@ -17771,7 +17860,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 81,
+                "action_id" : 82,
                 "action_data" : []
               },
               "priority" : 14
@@ -17790,7 +17879,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 82,
+                "action_id" : 83,
                 "action_data" : []
               },
               "priority" : 15
@@ -17809,7 +17898,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 83,
+                "action_id" : 84,
                 "action_data" : []
               },
               "priority" : 16
@@ -17818,7 +17907,7 @@
         },
         {
           "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
-          "id" : 48,
+          "id" : 49,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 375,
@@ -17839,7 +17928,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 65],
+          "action_ids" : [85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 66],
           "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"],
           "base_default_next" : "tbl_int_transit425",
           "next_tables" : {
@@ -17862,7 +17951,7 @@
             "NoAction" : "tbl_int_transit425"
           },
           "default_entry" : {
-            "action_id" : 65,
+            "action_id" : 66,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -17882,7 +17971,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 84,
+                "action_id" : 85,
                 "action_data" : []
               },
               "priority" : 1
@@ -17901,7 +17990,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 85,
+                "action_id" : 86,
                 "action_data" : []
               },
               "priority" : 2
@@ -17920,7 +18009,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 86,
+                "action_id" : 87,
                 "action_data" : []
               },
               "priority" : 3
@@ -17939,7 +18028,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 87,
+                "action_id" : 88,
                 "action_data" : []
               },
               "priority" : 4
@@ -17958,7 +18047,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 88,
+                "action_id" : 89,
                 "action_data" : []
               },
               "priority" : 5
@@ -17977,7 +18066,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 89,
+                "action_id" : 90,
                 "action_data" : []
               },
               "priority" : 6
@@ -17996,7 +18085,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 90,
+                "action_id" : 91,
                 "action_data" : []
               },
               "priority" : 7
@@ -18015,7 +18104,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 91,
+                "action_id" : 92,
                 "action_data" : []
               },
               "priority" : 8
@@ -18034,7 +18123,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 92,
+                "action_id" : 93,
                 "action_data" : []
               },
               "priority" : 9
@@ -18053,7 +18142,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 93,
+                "action_id" : 94,
                 "action_data" : []
               },
               "priority" : 10
@@ -18072,7 +18161,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 94,
+                "action_id" : 95,
                 "action_data" : []
               },
               "priority" : 11
@@ -18091,7 +18180,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 95,
+                "action_id" : 96,
                 "action_data" : []
               },
               "priority" : 12
@@ -18110,7 +18199,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 96,
+                "action_id" : 97,
                 "action_data" : []
               },
               "priority" : 13
@@ -18129,7 +18218,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 97,
+                "action_id" : 98,
                 "action_data" : []
               },
               "priority" : 14
@@ -18148,7 +18237,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 98,
+                "action_id" : 99,
                 "action_data" : []
               },
               "priority" : 15
@@ -18167,7 +18256,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 99,
+                "action_id" : 100,
                 "action_data" : []
               },
               "priority" : 16
@@ -18176,7 +18265,7 @@
         },
         {
           "name" : "tbl_int_transit425",
-          "id" : 49,
+          "id" : 50,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 425,
@@ -18190,14 +18279,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [117],
+          "action_ids" : [118],
           "actions" : ["int_transit425"],
-          "base_default_next" : "node_91",
+          "base_default_next" : "node_93",
           "next_tables" : {
-            "int_transit425" : "node_91"
+            "int_transit425" : "node_93"
           },
           "default_entry" : {
-            "action_id" : 117,
+            "action_id" : 118,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -18205,7 +18294,7 @@
         },
         {
           "name" : "tbl_int_transit428",
-          "id" : 50,
+          "id" : 51,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 428,
@@ -18219,14 +18308,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [116],
+          "action_ids" : [117],
           "actions" : ["int_transit428"],
-          "base_default_next" : "node_93",
+          "base_default_next" : "node_95",
           "next_tables" : {
-            "int_transit428" : "node_93"
+            "int_transit428" : "node_95"
           },
           "default_entry" : {
-            "action_id" : 116,
+            "action_id" : 117,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -18234,7 +18323,7 @@
         },
         {
           "name" : "tbl_int_transit431",
-          "id" : 51,
+          "id" : 52,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 431,
@@ -18248,14 +18337,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [118],
+          "action_ids" : [119],
           "actions" : ["int_transit431"],
-          "base_default_next" : "node_95",
+          "base_default_next" : "node_97",
           "next_tables" : {
-            "int_transit431" : "node_95"
+            "int_transit431" : "node_97"
           },
           "default_entry" : {
-            "action_id" : 118,
+            "action_id" : 119,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -18263,7 +18352,7 @@
         },
         {
           "name" : "tbl_int_transit434",
-          "id" : 52,
+          "id" : 53,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 434,
@@ -18277,14 +18366,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [119],
+          "action_ids" : [120],
           "actions" : ["int_transit434"],
           "base_default_next" : null,
           "next_tables" : {
             "int_transit434" : null
           },
           "default_entry" : {
-            "action_id" : 119,
+            "action_id" : 120,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -18294,11 +18383,11 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_55",
-          "id" : 20,
+          "name" : "node_57",
+          "id" : 21,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 103,
+            "line" : 108,
             "column" : 33,
             "source_fragment" : "fabric_metadata"
           },
@@ -18314,11 +18403,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_57"
+          "false_next" : "node_59"
         },
         {
-          "name" : "node_57",
-          "id" : 21,
+          "name" : "node_59",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -18340,14 +18429,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_59"
+          "false_next" : "node_61"
         },
         {
-          "name" : "node_59",
-          "id" : 22,
+          "name" : "node_61",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -18382,15 +18471,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_61"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_63"
         },
         {
-          "name" : "node_61",
-          "id" : 23,
+          "name" : "node_63",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -18408,15 +18497,15 @@
               }
             }
           },
-          "true_next" : "node_62",
+          "true_next" : "node_64",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_62",
-          "id" : 24,
+          "name" : "node_64",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -18435,11 +18524,11 @@
           "false_next" : "FabricEgress.egress_next.egress_vlan"
         },
         {
-          "name" : "node_66",
-          "id" : 25,
+          "name" : "node_68",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -18454,15 +18543,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_70"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_72"
         },
         {
-          "name" : "node_68",
-          "id" : 26,
+          "name" : "node_70",
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -18480,15 +18569,15 @@
               }
             }
           },
-          "true_next" : "tbl_next376",
-          "false_next" : "node_74"
+          "true_next" : "tbl_next310",
+          "false_next" : "node_76"
         },
         {
-          "name" : "node_70",
-          "id" : 27,
+          "name" : "node_72",
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -18523,15 +18612,15 @@
               }
             }
           },
-          "true_next" : "tbl_next379",
-          "false_next" : "node_74"
+          "true_next" : "tbl_next313",
+          "false_next" : "node_76"
         },
         {
-          "name" : "node_72",
-          "id" : 28,
+          "name" : "node_74",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -18549,12 +18638,12 @@
               }
             }
           },
-          "true_next" : "tbl_next380",
-          "false_next" : "node_74"
+          "true_next" : "tbl_next314",
+          "false_next" : "node_76"
         },
         {
-          "name" : "node_74",
-          "id" : 29,
+          "name" : "node_76",
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 337,
@@ -18579,15 +18668,15 @@
               }
             }
           },
-          "true_next" : "node_75",
-          "false_next" : "node_79"
+          "true_next" : "node_77",
+          "false_next" : "node_81"
         },
         {
-          "name" : "node_75",
-          "id" : 30,
+          "name" : "node_77",
+          "id" : 31,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 106,
+            "line" : 111,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -18603,11 +18692,11 @@
             }
           },
           "true_next" : "tbl_spgw_gtpu_encap",
-          "false_next" : "node_77"
+          "false_next" : "node_79"
         },
         {
-          "name" : "node_77",
-          "id" : 31,
+          "name" : "node_79",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 341,
@@ -18633,11 +18722,11 @@
             }
           },
           "true_next" : "tbl_spgw342",
-          "false_next" : "node_79"
+          "false_next" : "node_81"
         },
         {
-          "name" : "node_79",
-          "id" : 32,
+          "name" : "node_81",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 102,
@@ -18713,14 +18802,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_80"
+          "true_next" : "node_82"
         },
         {
-          "name" : "node_80",
-          "id" : 33,
+          "name" : "node_82",
+          "id" : 34,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 112,
+            "line" : 117,
             "column" : 36,
             "source_fragment" : "fabric_metadata"
           },
@@ -18736,11 +18825,11 @@
             }
           },
           "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
-          "false_next" : "node_82"
+          "false_next" : "node_84"
         },
         {
-          "name" : "node_82",
-          "id" : 34,
+          "name" : "node_84",
+          "id" : 35,
           "source_info" : {
             "filename" : "include/int/int_main.p4",
             "line" : 110,
@@ -18762,8 +18851,8 @@
           "true_next" : "tbl_act"
         },
         {
-          "name" : "node_85",
-          "id" : 35,
+          "name" : "node_87",
+          "id" : 36,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 419,
@@ -18789,11 +18878,11 @@
             }
           },
           "true_next" : "tbl_int_transit420",
-          "false_next" : "node_87"
+          "false_next" : "node_89"
         },
         {
-          "name" : "node_87",
-          "id" : 36,
+          "name" : "node_89",
+          "id" : 37,
           "expression" : {
             "type" : "expression",
             "value" : {
@@ -18816,8 +18905,8 @@
           "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"
         },
         {
-          "name" : "node_91",
-          "id" : 37,
+          "name" : "node_93",
+          "id" : 38,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 427,
@@ -18836,11 +18925,11 @@
             }
           },
           "true_next" : "tbl_int_transit428",
-          "false_next" : "node_93"
+          "false_next" : "node_95"
         },
         {
-          "name" : "node_93",
-          "id" : 38,
+          "name" : "node_95",
+          "id" : 39,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 430,
@@ -18859,11 +18948,11 @@
             }
           },
           "true_next" : "tbl_int_transit431",
-          "false_next" : "node_95"
+          "false_next" : "node_97"
         },
         {
-          "name" : "node_95",
-          "id" : 39,
+          "name" : "node_97",
+          "id" : 40,
           "source_info" : {
             "filename" : "include/int/int_transit.p4",
             "line" : 433,
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
index 11adb09..778efbb 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
@@ -180,6 +180,54 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -256,6 +304,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -277,30 +331,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 48735793
     name: "FabricIngress.next.xconnect"
     alias: "xconnect"
@@ -351,9 +381,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -629,6 +656,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -641,6 +673,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -699,6 +736,30 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -744,18 +805,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 24640974
     name: "FabricIngress.next.output_xconnect"
     alias: "output_xconnect"
@@ -814,33 +863,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -1182,6 +1204,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -1193,17 +1237,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 321989420
     name: "FabricIngress.next.xconnect_counter"
     alias: "xconnect_counter"
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
index 0e33161..d639113 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
@@ -50,7 +50,9 @@
         ["userMetadata._spgw_notify_spgwc28", 1, false],
         ["userMetadata._spgw_needs_gtpu_encap29", 1, false],
         ["userMetadata._spgw_needs_gtpu_decap30", 1, false],
-        ["userMetadata._spgw_skip_egress_pdr_ctr31", 1, false]
+        ["userMetadata._spgw_skip_egress_pdr_ctr31", 1, false],
+        ["userMetadata._port_type32", 2, false],
+        ["_padding_0", 6, false]
       ]
     },
     {
@@ -1853,7 +1855,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -1883,9 +1885,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 4,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 5,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 6,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -1895,56 +1921,44 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 5,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.xconnect_counter",
-      "id" : 6,
+      "id" : 7,
       "is_direct" : true,
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 107,
+        "line" : 56,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 7,
+      "id" : 8,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 8,
+      "id" : 9,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 9,
+      "id" : 10,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -1956,7 +1970,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 10,
+      "id" : 11,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -1968,7 +1982,7 @@
     },
     {
       "name" : "FabricIngress.spgw.pdr_counter",
-      "id" : 11,
+      "id" : 12,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 108,
@@ -1980,19 +1994,19 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 12,
+      "id" : 13,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
     },
     {
       "name" : "FabricEgress.spgw.pdr_counter",
-      "id" : 13,
+      "id" : 14,
       "source_info" : {
         "filename" : "include/control/spgw.p4",
         "line" : 295,
@@ -2234,7 +2248,7 @@
       "primitives" : []
     },
     {
-      "name" : "NoAction",
+      "name" : "nop",
       "id" : 7,
       "runtime_data" : [],
       "primitives" : []
@@ -2246,9 +2260,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.filtering.deny",
+      "name" : "NoAction",
       "id" : 9,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.filtering.deny",
+      "id" : 10,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -2307,22 +2327,70 @@
             "column" : 34,
             "source_fragment" : "= true; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type32"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 10,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 11,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type32"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 11,
+      "id" : 12,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -2340,16 +2408,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 32,
             "source_fragment" : "= vlan_id; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._port_type32"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 34,
+            "source_fragment" : "= port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 12,
+      "id" : 13,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -2371,7 +2458,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -2380,7 +2467,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 13,
+      "id" : 14,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2411,7 +2498,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 14,
+      "id" : 15,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2461,7 +2548,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 15,
+      "id" : 16,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2492,13 +2579,75 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 16,
+      "id" : 17,
       "runtime_data" : [],
       "primitives" : []
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 18,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._mpls_label4"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 35,
+            "source_fragment" : "= label; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 19,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._vlan_id1"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 17,
+      "id" : 20,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2529,7 +2678,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 18,
+      "id" : 21,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2584,7 +2733,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 19,
+      "id" : 22,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -2615,7 +2764,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 20,
+      "id" : 23,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2666,105 +2815,12 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 21,
+      "id" : 24,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 22,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._vlan_id1"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 32,
-            "source_fragment" : "= vlan_id; ..."
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_xconnect",
-      "id" : 23,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_next_id_xconnect",
-      "id" : 24,
-      "runtime_data" : [
-        {
-          "name" : "next_id",
-          "bitwidth" : 32
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._next_id9"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 115,
-            "column" : 32,
-            "source_fragment" : "= next_id; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.output_hashed",
       "id" : 25,
       "runtime_data" : [
         {
@@ -2795,20 +2851,12 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.routing_hashed",
+      "name" : "FabricIngress.next.set_next_id_xconnect",
       "id" : 26,
       "runtime_data" : [
         {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
+          "name" : "next_id",
+          "bitwidth" : 32
         }
       ],
       "primitives" : [
@@ -2817,39 +2865,32 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["ethernet", "src_addr"]
+              "value" : ["scalars", "userMetadata._next_id9"]
             },
             {
               "type" : "runtime_data",
-              "value" : 1
+              "value" : 0
             }
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 36,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+            "line" : 64,
+            "column" : 32,
+            "source_fragment" : "= next_id; ..."
           }
-        },
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_hashed",
+      "id" : 27,
+      "runtime_data" : [
         {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
         {
           "op" : "assign",
           "parameters" : [
@@ -2872,8 +2913,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
-      "id" : 27,
+      "name" : "FabricIngress.next.routing_hashed",
+      "id" : 28,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -2886,10 +2927,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -2898,25 +2935,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata._mpls_label4"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 35,
-            "source_fragment" : "= label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -2973,7 +2991,7 @@
     },
     {
       "name" : "FabricIngress.next.set_mcast_group_id",
-      "id" : 28,
+      "id" : 29,
       "runtime_data" : [
         {
           "name" : "group_id",
@@ -2995,7 +3013,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -3024,7 +3042,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -3033,7 +3051,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp",
-      "id" : 29,
+      "id" : 30,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3050,7 +3068,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3252,7 +3270,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp",
-      "id" : 30,
+      "id" : 31,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3269,7 +3287,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3456,7 +3474,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp",
-      "id" : 31,
+      "id" : 32,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3473,7 +3491,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3675,7 +3693,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown",
-      "id" : 32,
+      "id" : 33,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3692,7 +3710,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -3860,7 +3878,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_tcp",
-      "id" : 33,
+      "id" : 34,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3877,7 +3895,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4079,7 +4097,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_udp",
-      "id" : 34,
+      "id" : 35,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4096,7 +4114,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4283,7 +4301,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_icmp",
-      "id" : 35,
+      "id" : 36,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4300,7 +4318,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4502,7 +4520,7 @@
     },
     {
       "name" : "FabricIngress.spgw.decap_gtpu.decap_inner_unknown",
-      "id" : 36,
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4519,7 +4537,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 120,
+            "line" : 132,
             "column" : 31,
             "source_fragment" : "0x0800; ..."
           }
@@ -4687,7 +4705,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_iface",
-      "id" : 37,
+      "id" : 38,
       "runtime_data" : [
         {
           "name" : "src_iface",
@@ -4747,7 +4765,7 @@
     },
     {
       "name" : "FabricIngress.spgw.iface_miss",
-      "id" : 38,
+      "id" : 39,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4802,103 +4820,6 @@
     },
     {
       "name" : "FabricIngress.spgw.load_pdr",
-      "id" : 39,
-      "runtime_data" : [
-        {
-          "name" : "ctr_id",
-          "bitwidth" : 32
-        },
-        {
-          "name" : "far_id",
-          "bitwidth" : 32
-        },
-        {
-          "name" : "needs_gtpu_decap",
-          "bitwidth" : 1
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_ctr_id24"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 150,
-            "column" : 30,
-            "source_fragment" : "= ctr_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_far_id25"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 1
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 151,
-            "column" : 30,
-            "source_fragment" : "= far_id; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"]
-            },
-            {
-              "type" : "expression",
-              "value" : {
-                "type" : "expression",
-                "value" : {
-                  "op" : "b2d",
-                  "left" : null,
-                  "right" : {
-                    "type" : "expression",
-                    "value" : {
-                      "op" : "!=",
-                      "left" : {
-                        "type" : "local",
-                        "value" : 2
-                      },
-                      "right" : {
-                        "type" : "hexstr",
-                        "value" : "0x00"
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/spgw.p4",
-            "line" : 152,
-            "column" : 40,
-            "source_fragment" : "= (bool)needs_gtpu_decap; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.spgw.load_pdr",
       "id" : 40,
       "runtime_data" : [
         {
@@ -4995,7 +4916,7 @@
       ]
     },
     {
-      "name" : "FabricIngress.spgw.load_pdr_qos",
+      "name" : "FabricIngress.spgw.load_pdr",
       "id" : 41,
       "runtime_data" : [
         {
@@ -5009,10 +4930,6 @@
         {
           "name" : "needs_gtpu_decap",
           "bitwidth" : 1
-        },
-        {
-          "name" : "qid",
-          "bitwidth" : 5
         }
       ],
       "primitives" : [
@@ -5197,10 +5114,111 @@
       ]
     },
     {
-      "name" : "FabricIngress.spgw.load_normal_far",
+      "name" : "FabricIngress.spgw.load_pdr_qos",
       "id" : 43,
       "runtime_data" : [
         {
+          "name" : "ctr_id",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "far_id",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "needs_gtpu_decap",
+          "bitwidth" : 1
+        },
+        {
+          "name" : "qid",
+          "bitwidth" : 5
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_ctr_id24"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 150,
+            "column" : 30,
+            "source_fragment" : "= ctr_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_far_id25"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 151,
+            "column" : 30,
+            "source_fragment" : "= far_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._spgw_needs_gtpu_decap30"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "!=",
+                      "left" : {
+                        "type" : "local",
+                        "value" : 2
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/spgw.p4",
+            "line" : 152,
+            "column" : 40,
+            "source_fragment" : "= (bool)needs_gtpu_decap; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.spgw.load_normal_far",
+      "id" : 44,
+      "runtime_data" : [
+        {
           "name" : "drop",
           "bitwidth" : 1
         },
@@ -5331,7 +5349,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_tunnel_far",
-      "id" : 44,
+      "id" : 45,
       "runtime_data" : [
         {
           "name" : "drop",
@@ -5661,7 +5679,7 @@
     },
     {
       "name" : "FabricIngress.spgw.load_dbuf_far",
-      "id" : 45,
+      "id" : 46,
       "runtime_data" : [
         {
           "name" : "drop",
@@ -6020,7 +6038,7 @@
     },
     {
       "name" : "packetio25",
-      "id" : 46,
+      "id" : 47,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6100,7 +6118,7 @@
     },
     {
       "name" : "spgw265",
-      "id" : 47,
+      "id" : 48,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6126,7 +6144,7 @@
     },
     {
       "name" : "spgw282",
-      "id" : 48,
+      "id" : 49,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6151,8 +6169,8 @@
       ]
     },
     {
-      "name" : "filtering111",
-      "id" : 49,
+      "name" : "filtering113",
+      "id" : 50,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6169,7 +6187,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -6188,7 +6206,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -6207,7 +6225,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -6215,8 +6233,8 @@
       ]
     },
     {
-      "name" : "filtering127",
-      "id" : 50,
+      "name" : "filtering129",
+      "id" : 51,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6233,7 +6251,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -6241,8 +6259,8 @@
       ]
     },
     {
-      "name" : "acl101",
-      "id" : 51,
+      "name" : "acl102",
+      "id" : 52,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6259,7 +6277,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -6278,7 +6296,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -6286,8 +6304,8 @@
       ]
     },
     {
-      "name" : "acl104",
-      "id" : 52,
+      "name" : "acl105",
+      "id" : 53,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6304,7 +6322,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -6323,7 +6341,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -6331,8 +6349,8 @@
       ]
     },
     {
-      "name" : "acl97",
-      "id" : 53,
+      "name" : "acl98",
+      "id" : 54,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6349,7 +6367,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -6368,7 +6386,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -6387,7 +6405,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -6395,8 +6413,8 @@
       ]
     },
     {
-      "name" : "acl112",
-      "id" : 54,
+      "name" : "acl113",
+      "id" : 55,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6413,7 +6431,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -6432,7 +6450,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -6440,8 +6458,8 @@
       ]
     },
     {
-      "name" : "acl115",
-      "id" : 55,
+      "name" : "acl116",
+      "id" : 56,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6458,7 +6476,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -6477,7 +6495,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -6485,8 +6503,8 @@
       ]
     },
     {
-      "name" : "acl108",
-      "id" : 56,
+      "name" : "acl109",
+      "id" : 57,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6503,7 +6521,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -6522,7 +6540,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -6541,7 +6559,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -6550,7 +6568,7 @@
     },
     {
       "name" : "acl27",
-      "id" : 57,
+      "id" : 58,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6652,7 +6670,7 @@
     },
     {
       "name" : "port_counter31",
-      "id" : 58,
+      "id" : 59,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6710,7 +6728,7 @@
     },
     {
       "name" : "port_counter34",
-      "id" : 59,
+      "id" : 60,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6768,7 +6786,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_mpls_if_present",
-      "id" : 60,
+      "id" : 61,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6781,7 +6799,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -6800,7 +6818,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type; ..."
           }
@@ -6809,7 +6827,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.set_mpls",
-      "id" : 61,
+      "id" : 62,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6822,7 +6840,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -6841,7 +6859,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -6860,7 +6878,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -6879,7 +6897,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -6898,7 +6916,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -6917,7 +6935,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -6926,7 +6944,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_vlan",
-      "id" : 62,
+      "id" : 63,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -6939,7 +6957,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -6958,7 +6976,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -6977,7 +6995,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -6996,7 +7014,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -7015,7 +7033,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -7024,7 +7042,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_vlan",
-      "id" : 63,
+      "id" : 64,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7037,7 +7055,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -7046,7 +7064,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.drop",
-      "id" : 64,
+      "id" : 65,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7059,7 +7077,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -7068,7 +7086,7 @@
     },
     {
       "name" : "FabricEgress.spgw.gtpu_encap",
-      "id" : 65,
+      "id" : 66,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7119,7 +7137,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 135,
+            "line" : 147,
             "column" : 28,
             "source_fragment" : "5; ..."
           }
@@ -7275,7 +7293,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 148,
+            "line" : 160,
             "column" : 32,
             "source_fragment" : "64; ..."
           }
@@ -7294,7 +7312,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 132,
+            "line" : 144,
             "column" : 25,
             "source_fragment" : "17; ..."
           }
@@ -7660,7 +7678,7 @@
     },
     {
       "name" : "packetio41",
-      "id" : 66,
+      "id" : 67,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7677,7 +7695,7 @@
     },
     {
       "name" : "packetio44",
-      "id" : 67,
+      "id" : 68,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7727,29 +7745,7 @@
       ]
     },
     {
-      "name" : "next349",
-      "id" : 68,
-      "runtime_data" : [],
-      "primitives" : [
-        {
-          "op" : "mark_to_drop",
-          "parameters" : [
-            {
-              "type" : "header",
-              "value" : "standard_metadata"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 349,
-            "column" : 12,
-            "source_fragment" : "mark_to_drop(standard_metadata)"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "next376",
+      "name" : "next283",
       "id" : 69,
       "runtime_data" : [],
       "primitives" : [
@@ -7763,7 +7759,29 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 283,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_metadata)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next310",
+      "id" : 70,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -7771,8 +7789,8 @@
       ]
     },
     {
-      "name" : "next375",
-      "id" : 70,
+      "name" : "next309",
+      "id" : 71,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7812,7 +7830,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -7820,8 +7838,8 @@
       ]
     },
     {
-      "name" : "next380",
-      "id" : 71,
+      "name" : "next314",
+      "id" : 72,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7834,7 +7852,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -7842,8 +7860,8 @@
       ]
     },
     {
-      "name" : "next379",
-      "id" : 72,
+      "name" : "next313",
+      "id" : 73,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7883,7 +7901,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -7892,7 +7910,7 @@
     },
     {
       "name" : "spgw342",
-      "id" : 73,
+      "id" : 74,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -7923,7 +7941,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -7945,14 +7963,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [46],
+          "action_ids" : [47],
           "actions" : ["packetio25"],
           "base_default_next" : "FabricIngress.spgw.interfaces",
           "next_tables" : {
             "packetio25" : "FabricIngress.spgw.interfaces"
           },
           "default_entry" : {
-            "action_id" : 46,
+            "action_id" : 47,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -7987,7 +8005,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [37, 38],
+          "action_ids" : [38, 39],
           "actions" : ["FabricIngress.spgw.load_iface", "FabricIngress.spgw.iface_miss"],
           "base_default_next" : null,
           "next_tables" : {
@@ -7995,7 +8013,7 @@
             "__MISS__" : "node_16"
           },
           "default_entry" : {
-            "action_id" : 38,
+            "action_id" : 39,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8036,7 +8054,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [29, 30, 31, 32],
+          "action_ids" : [30, 31, 32, 33],
           "actions" : ["FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_udp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown"],
           "base_default_next" : "node_7",
           "next_tables" : {
@@ -8046,7 +8064,7 @@
             "FabricIngress.spgw.decap_gtpu_from_dbuf.decap_inner_unknown" : "node_7"
           },
           "default_entry" : {
-            "action_id" : 32,
+            "action_id" : 33,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8074,7 +8092,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 29,
+                "action_id" : 30,
                 "action_data" : []
               },
               "priority" : 1
@@ -8101,7 +8119,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 30,
+                "action_id" : 31,
                 "action_data" : []
               },
               "priority" : 2
@@ -8128,7 +8146,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 31,
+                "action_id" : 32,
                 "action_data" : []
               },
               "priority" : 3
@@ -8164,7 +8182,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [40, 42, 8],
+          "action_ids" : [41, 43, 9],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -8173,7 +8191,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 8,
+            "action_id" : 9,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -8202,7 +8220,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [39, 41, 7],
+          "action_ids" : [40, 42, 8],
           "actions" : ["FabricIngress.spgw.load_pdr", "FabricIngress.spgw.load_pdr_qos", "NoAction"],
           "base_default_next" : "node_10",
           "next_tables" : {
@@ -8211,7 +8229,7 @@
             "NoAction" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 7,
+            "action_id" : 8,
             "action_const" : false,
             "action_data" : [],
             "action_entry_const" : false
@@ -8233,14 +8251,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [47],
+          "action_ids" : [48],
           "actions" : ["spgw265"],
           "base_default_next" : "node_12",
           "next_tables" : {
             "spgw265" : "node_12"
           },
           "default_entry" : {
-            "action_id" : 47,
+            "action_id" : 48,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8281,7 +8299,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [33, 34, 35, 36],
+          "action_ids" : [34, 35, 36, 37],
           "actions" : ["FabricIngress.spgw.decap_gtpu.decap_inner_tcp", "FabricIngress.spgw.decap_gtpu.decap_inner_udp", "FabricIngress.spgw.decap_gtpu.decap_inner_icmp", "FabricIngress.spgw.decap_gtpu.decap_inner_unknown"],
           "base_default_next" : "FabricIngress.spgw.fars",
           "next_tables" : {
@@ -8291,7 +8309,7 @@
             "FabricIngress.spgw.decap_gtpu.decap_inner_unknown" : "FabricIngress.spgw.fars"
           },
           "default_entry" : {
-            "action_id" : 36,
+            "action_id" : 37,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8319,7 +8337,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 33,
+                "action_id" : 34,
                 "action_data" : []
               },
               "priority" : 1
@@ -8346,7 +8364,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 34,
+                "action_id" : 35,
                 "action_data" : []
               },
               "priority" : 2
@@ -8373,7 +8391,7 @@
                 }
               ],
               "action_entry" : {
-                "action_id" : 35,
+                "action_id" : 36,
                 "action_data" : []
               },
               "priority" : 3
@@ -8403,7 +8421,7 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [43, 44, 45],
+          "action_ids" : [44, 45, 46],
           "actions" : ["FabricIngress.spgw.load_normal_far", "FabricIngress.spgw.load_tunnel_far", "FabricIngress.spgw.load_dbuf_far"],
           "base_default_next" : "tbl_spgw282",
           "next_tables" : {
@@ -8412,7 +8430,7 @@
             "FabricIngress.spgw.load_dbuf_far" : "tbl_spgw282"
           },
           "default_entry" : {
-            "action_id" : 43,
+            "action_id" : 44,
             "action_const" : true,
             "action_data" : ["0x1", "0x0"],
             "action_entry_const" : true
@@ -8434,25 +8452,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [48],
+          "action_ids" : [49],
           "actions" : ["spgw282"],
           "base_default_next" : "node_16",
           "next_tables" : {
             "spgw282" : "node_16"
           },
           "default_entry" : {
-            "action_id" : 48,
+            "action_id" : 49,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -8463,25 +8481,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [49],
-          "actions" : ["filtering111"],
+          "action_ids" : [50],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_18",
           "next_tables" : {
-            "filtering111" : "node_18"
+            "filtering113" : "node_18"
           },
           "default_entry" : {
-            "action_id" : 49,
+            "action_id" : 50,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 10,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -8492,14 +8510,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [50],
-          "actions" : ["filtering127"],
+          "action_ids" : [51],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
-            "action_id" : 50,
+            "action_id" : 51,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8510,7 +8528,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -8540,7 +8558,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [9, 10, 11],
+          "action_ids" : [10, 11, 12],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -8549,7 +8567,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 9,
+            "action_id" : 10,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8560,7 +8578,7 @@
           "id" : 12,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -8596,14 +8614,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [12],
+          "action_ids" : [13],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_22",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_22"
           },
           "default_entry" : {
-            "action_id" : 12,
+            "action_id" : 13,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -8638,12 +8656,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [13, 0],
+          "action_ids" : [14, 0],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 0,
@@ -8675,12 +8693,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [14, 1],
+          "action_ids" : [15, 1],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -8712,13 +8730,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15, 16, 2],
+          "action_ids" : [16, 17, 2],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_29",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_29",
+            "nop" : "node_29"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -8728,9 +8746,83 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 16,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [18, 3],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 3,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 17,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._next_id9"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [19, 4],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 4,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 18,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -8743,25 +8835,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [57],
+          "action_ids" : [58],
           "actions" : ["acl27"],
-          "base_default_next" : "node_30",
+          "base_default_next" : "node_33",
           "next_tables" : {
-            "acl27" : "node_30"
+            "acl27" : "node_33"
           },
           "default_entry" : {
-            "action_id" : 57,
+            "action_id" : 58,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 17,
+          "name" : "tbl_acl98",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -8772,25 +8864,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [53],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_32",
+          "action_ids" : [54],
+          "actions" : ["acl98"],
+          "base_default_next" : "node_35",
           "next_tables" : {
-            "acl97" : "node_32"
+            "acl98" : "node_35"
           },
           "default_entry" : {
-            "action_id" : 53,
+            "action_id" : 54,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 18,
+          "name" : "tbl_acl102",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -8801,25 +8893,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [51],
-          "actions" : ["acl101"],
+          "action_ids" : [52],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 51,
+            "action_id" : 52,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 19,
+          "name" : "tbl_acl105",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -8830,25 +8922,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [52],
-          "actions" : ["acl104"],
+          "action_ids" : [53],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 52,
+            "action_id" : 53,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 20,
+          "name" : "tbl_acl109",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -8859,25 +8951,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [56],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_38",
+          "action_ids" : [57],
+          "actions" : ["acl109"],
+          "base_default_next" : "node_41",
           "next_tables" : {
-            "acl108" : "node_38"
+            "acl109" : "node_41"
           },
           "default_entry" : {
-            "action_id" : 56,
+            "action_id" : 57,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 21,
+          "name" : "tbl_acl113",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -8888,25 +8980,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [54],
-          "actions" : ["acl112"],
+          "action_ids" : [55],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 54,
+            "action_id" : 55,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 22,
+          "name" : "tbl_acl116",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -8917,14 +9009,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [55],
-          "actions" : ["acl115"],
+          "action_ids" : [56],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 55,
+            "action_id" : 56,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -8932,7 +9024,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 23,
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -9011,6 +9103,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata._port_type32"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -9019,18 +9117,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [17, 18, 19, 20, 21],
+          "action_ids" : [20, 21, 22, 23, 24],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_43",
+          "base_default_next" : "node_46",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_43",
-            "FabricIngress.acl.punt_to_cpu" : "node_43",
-            "FabricIngress.acl.set_clone_session_id" : "node_43",
-            "FabricIngress.acl.drop" : "node_43",
-            "FabricIngress.acl.nop_acl" : "node_43"
+            "FabricIngress.acl.set_next_id_acl" : "node_46",
+            "FabricIngress.acl.punt_to_cpu" : "node_46",
+            "FabricIngress.acl.set_clone_session_id" : "node_46",
+            "FabricIngress.acl.drop" : "node_46",
+            "FabricIngress.acl.nop_acl" : "node_46"
           },
           "default_entry" : {
-            "action_id" : 21,
+            "action_id" : 24,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9038,10 +9136,10 @@
         },
         {
           "name" : "FabricIngress.next.xconnect",
-          "id" : 24,
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 119,
+            "line" : 68,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -9065,7 +9163,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [23, 24, 4],
+          "action_ids" : [25, 26, 5],
           "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
           "base_default_next" : "FabricIngress.next.hashed",
           "next_tables" : {
@@ -9074,7 +9172,7 @@
             "nop" : "FabricIngress.next.hashed"
           },
           "default_entry" : {
-            "action_id" : 4,
+            "action_id" : 5,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9082,10 +9180,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 25,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -9104,22 +9202,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [25, 26, 27, 5],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [27, 28, 6],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 26,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -9137,52 +9234,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [28, 6],
+          "action_ids" : [29, 7],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_50",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_50",
+            "nop" : "node_50"
           },
           "default_entry" : {
-            "action_id" : 6,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 27,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata._next_id9"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [22, 3],
-          "actions" : ["FabricIngress.next.set_vlan", "nop"],
-          "base_default_next" : "node_48",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_48",
-            "nop" : "node_48"
-          },
-          "default_entry" : {
-            "action_id" : 3,
+            "action_id" : 7,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9190,7 +9250,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 28,
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -9204,14 +9264,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [58],
+          "action_ids" : [59],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_50",
+          "base_default_next" : "node_52",
           "next_tables" : {
-            "port_counter31" : "node_50"
+            "port_counter31" : "node_52"
           },
           "default_entry" : {
-            "action_id" : 58,
+            "action_id" : 59,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9219,7 +9279,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 29,
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -9233,14 +9293,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [59],
+          "action_ids" : [60],
           "actions" : ["port_counter34"],
           "base_default_next" : null,
           "next_tables" : {
             "port_counter34" : null
           },
           "default_entry" : {
-            "action_id" : 59,
+            "action_id" : 60,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9253,7 +9313,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -9389,7 +9449,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 68,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -9412,7 +9472,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -9427,7 +9487,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_18"
         },
         {
@@ -9435,7 +9495,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -9457,7 +9517,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -9465,7 +9525,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -9488,7 +9548,7 @@
             }
           },
           "true_next" : "node_23",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_29"
         },
         {
           "name" : "node_23",
@@ -9566,14 +9626,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_29"
+        },
+        {
+          "name" : "node_29",
+          "id" : 11,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._skip_next7"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_30",
-          "id" : 11,
+          "name" : "node_33",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -9605,15 +9695,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_36"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_39"
         },
         {
-          "name" : "node_32",
-          "id" : 12,
+          "name" : "node_35",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -9628,15 +9718,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_34"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_37"
         },
         {
-          "name" : "node_34",
-          "id" : 13,
+          "name" : "node_37",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -9651,15 +9741,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_36",
-          "id" : 14,
+          "name" : "node_39",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -9674,15 +9764,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_38",
-          "id" : 15,
+          "name" : "node_41",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -9697,15 +9787,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_40"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_43"
         },
         {
-          "name" : "node_40",
-          "id" : 16,
+          "name" : "node_43",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -9720,15 +9810,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_43",
-          "id" : 17,
+          "name" : "node_46",
+          "id" : 18,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -9754,8 +9844,8 @@
           "true_next" : "FabricIngress.next.xconnect"
         },
         {
-          "name" : "node_48",
-          "id" : 18,
+          "name" : "node_50",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -9777,11 +9867,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_50"
+          "false_next" : "node_52"
         },
         {
-          "name" : "node_50",
-          "id" : 19,
+          "name" : "node_52",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -9812,15 +9902,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_54",
+      "init_table" : "node_56",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 30,
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -9834,14 +9924,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [66],
+          "action_ids" : [67],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_56",
+          "base_default_next" : "node_58",
           "next_tables" : {
-            "packetio41" : "node_56"
+            "packetio41" : "node_58"
           },
           "default_entry" : {
-            "action_id" : 66,
+            "action_id" : 67,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9849,7 +9939,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 31,
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -9863,25 +9953,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [67],
+          "action_ids" : [68],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_58",
+          "base_default_next" : "node_60",
           "next_tables" : {
-            "packetio44" : "node_58"
+            "packetio44" : "node_60"
           },
           "default_entry" : {
-            "action_id" : 67,
+            "action_id" : 68,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 32,
+          "name" : "tbl_next283",
+          "id" : 33,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -9892,14 +9982,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [68],
-          "actions" : ["next349"],
-          "base_default_next" : "node_60",
+          "action_ids" : [69],
+          "actions" : ["next283"],
+          "base_default_next" : "node_62",
           "next_tables" : {
-            "next349" : "node_60"
+            "next283" : "node_62"
           },
           "default_entry" : {
-            "action_id" : 68,
+            "action_id" : 69,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9907,10 +9997,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 33,
+          "id" : 34,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -9921,14 +10011,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [60],
+          "action_ids" : [61],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 60,
+            "action_id" : 61,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9936,10 +10026,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 34,
+          "id" : 35,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -9950,14 +10040,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [61],
+          "action_ids" : [62],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 61,
+            "action_id" : 62,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -9965,10 +10055,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 35,
+          "id" : 36,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -9992,27 +10082,27 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [62, 63, 64],
+          "action_ids" : [63, 64, 65],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_65",
+          "base_default_next" : "node_67",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_65",
-            "FabricEgress.egress_next.pop_vlan" : "node_65",
-            "FabricEgress.egress_next.drop" : "node_65"
+            "FabricEgress.egress_next.push_vlan" : "node_67",
+            "FabricEgress.egress_next.pop_vlan" : "node_67",
+            "FabricEgress.egress_next.drop" : "node_67"
           },
           "default_entry" : {
-            "action_id" : 64,
+            "action_id" : 65,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 36,
+          "name" : "tbl_next309",
+          "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -10023,25 +10113,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [70],
-          "actions" : ["next375"],
-          "base_default_next" : "node_67",
+          "action_ids" : [71],
+          "actions" : ["next309"],
+          "base_default_next" : "node_69",
           "next_tables" : {
-            "next375" : "node_67"
+            "next309" : "node_69"
           },
           "default_entry" : {
-            "action_id" : 70,
+            "action_id" : 71,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 37,
+          "name" : "tbl_next310",
+          "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -10052,25 +10142,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [69],
-          "actions" : ["next376"],
-          "base_default_next" : "node_73",
+          "action_ids" : [70],
+          "actions" : ["next310"],
+          "base_default_next" : "node_75",
           "next_tables" : {
-            "next376" : "node_73"
+            "next310" : "node_75"
           },
           "default_entry" : {
-            "action_id" : 69,
+            "action_id" : 70,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 38,
+          "name" : "tbl_next313",
+          "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -10081,25 +10171,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [72],
-          "actions" : ["next379"],
-          "base_default_next" : "node_71",
+          "action_ids" : [73],
+          "actions" : ["next313"],
+          "base_default_next" : "node_73",
           "next_tables" : {
-            "next379" : "node_71"
+            "next313" : "node_73"
           },
           "default_entry" : {
-            "action_id" : 72,
+            "action_id" : 73,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 39,
+          "name" : "tbl_next314",
+          "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -10110,14 +10200,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [71],
-          "actions" : ["next380"],
-          "base_default_next" : "node_73",
+          "action_ids" : [72],
+          "actions" : ["next314"],
+          "base_default_next" : "node_75",
           "next_tables" : {
-            "next380" : "node_73"
+            "next314" : "node_75"
           },
           "default_entry" : {
-            "action_id" : 71,
+            "action_id" : 72,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -10125,7 +10215,7 @@
         },
         {
           "name" : "tbl_spgw_gtpu_encap",
-          "id" : 40,
+          "id" : 41,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 339,
@@ -10139,14 +10229,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [65],
+          "action_ids" : [66],
           "actions" : ["FabricEgress.spgw.gtpu_encap"],
-          "base_default_next" : "node_76",
+          "base_default_next" : "node_78",
           "next_tables" : {
-            "FabricEgress.spgw.gtpu_encap" : "node_76"
+            "FabricEgress.spgw.gtpu_encap" : "node_78"
           },
           "default_entry" : {
-            "action_id" : 65,
+            "action_id" : 66,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -10154,7 +10244,7 @@
         },
         {
           "name" : "tbl_spgw342",
-          "id" : 41,
+          "id" : 42,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 342,
@@ -10168,14 +10258,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [73],
+          "action_ids" : [74],
           "actions" : ["spgw342"],
           "base_default_next" : null,
           "next_tables" : {
             "spgw342" : null
           },
           "default_entry" : {
-            "action_id" : 73,
+            "action_id" : 74,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -10185,11 +10275,11 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_54",
-          "id" : 20,
+          "name" : "node_56",
+          "id" : 21,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 103,
+            "line" : 108,
             "column" : 33,
             "source_fragment" : "fabric_metadata"
           },
@@ -10205,11 +10295,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_56"
+          "false_next" : "node_58"
         },
         {
-          "name" : "node_56",
-          "id" : 21,
+          "name" : "node_58",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -10231,14 +10321,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_58"
+          "false_next" : "node_60"
         },
         {
-          "name" : "node_58",
-          "id" : 22,
+          "name" : "node_60",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -10273,15 +10363,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_60"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_62"
         },
         {
-          "name" : "node_60",
-          "id" : 23,
+          "name" : "node_62",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -10299,15 +10389,15 @@
               }
             }
           },
-          "true_next" : "node_61",
+          "true_next" : "node_63",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_61",
-          "id" : 24,
+          "name" : "node_63",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -10326,11 +10416,11 @@
           "false_next" : "FabricEgress.egress_next.egress_vlan"
         },
         {
-          "name" : "node_65",
-          "id" : 25,
+          "name" : "node_67",
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -10345,15 +10435,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_69"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_71"
         },
         {
-          "name" : "node_67",
-          "id" : 26,
+          "name" : "node_69",
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -10371,15 +10461,15 @@
               }
             }
           },
-          "true_next" : "tbl_next376",
-          "false_next" : "node_73"
+          "true_next" : "tbl_next310",
+          "false_next" : "node_75"
         },
         {
-          "name" : "node_69",
-          "id" : 27,
+          "name" : "node_71",
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -10414,15 +10504,15 @@
               }
             }
           },
-          "true_next" : "tbl_next379",
-          "false_next" : "node_73"
+          "true_next" : "tbl_next313",
+          "false_next" : "node_75"
         },
         {
-          "name" : "node_71",
-          "id" : 28,
+          "name" : "node_73",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -10440,12 +10530,12 @@
               }
             }
           },
-          "true_next" : "tbl_next380",
-          "false_next" : "node_73"
+          "true_next" : "tbl_next314",
+          "false_next" : "node_75"
         },
         {
-          "name" : "node_73",
-          "id" : 29,
+          "name" : "node_75",
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 337,
@@ -10471,14 +10561,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "node_74"
+          "true_next" : "node_76"
         },
         {
-          "name" : "node_74",
-          "id" : 30,
+          "name" : "node_76",
+          "id" : 31,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 106,
+            "line" : 111,
             "column" : 24,
             "source_fragment" : "fabric_metadata"
           },
@@ -10494,11 +10584,11 @@
             }
           },
           "true_next" : "tbl_spgw_gtpu_encap",
-          "false_next" : "node_76"
+          "false_next" : "node_78"
         },
         {
-          "name" : "node_76",
-          "id" : 31,
+          "name" : "node_78",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/spgw.p4",
             "line" : 341,
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
index a5547a0..31906c7 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
@@ -156,6 +156,54 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -232,6 +280,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -253,30 +307,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 48735793
     name: "FabricIngress.next.xconnect"
     alias: "xconnect"
@@ -327,9 +357,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -533,6 +560,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -545,6 +577,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -603,6 +640,30 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -648,18 +709,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 24640974
     name: "FabricIngress.next.output_xconnect"
     alias: "output_xconnect"
@@ -718,33 +767,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -1036,6 +1058,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -1047,17 +1091,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 321989420
     name: "FabricIngress.next.xconnect_counter"
     alias: "xconnect_counter"
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
index f2edc55..3b0151c 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -36,7 +36,8 @@
         ["userMetadata.l4_dport", 16, false],
         ["userMetadata.ipv4_src_addr", 32, false],
         ["userMetadata.ipv4_dst_addr", 32, false],
-        ["_padding_0", 5, false]
+        ["userMetadata.port_type", 2, false],
+        ["_padding_0", 3, false]
       ]
     },
     {
@@ -1792,7 +1793,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 85,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -1822,9 +1823,33 @@
       }
     },
     {
-      "name" : "FabricIngress.acl.acl_counter",
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
       "id" : 4,
       "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 5,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "include/control/pre_next.p4",
+        "line" : 54,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 6,
+      "is_direct" : true,
       "binding" : "FabricIngress.acl.acl",
       "source_info" : {
         "filename" : "include/control/acl.p4",
@@ -1834,56 +1859,44 @@
       }
     },
     {
-      "name" : "FabricIngress.next.next_vlan_counter",
-      "id" : 5,
-      "is_direct" : true,
-      "binding" : "FabricIngress.next.next_vlan",
-      "source_info" : {
-        "filename" : "include/control/next.p4",
-        "line" : 67,
-        "column" : 50,
-        "source_fragment" : "next_vlan_counter"
-      }
-    },
-    {
       "name" : "FabricIngress.next.xconnect_counter",
-      "id" : 6,
+      "id" : 7,
       "is_direct" : true,
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 107,
+        "line" : 56,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
     },
     {
       "name" : "FabricIngress.next.hashed_counter",
-      "id" : 7,
+      "id" : 8,
       "is_direct" : true,
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 184,
+        "line" : 126,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
     },
     {
       "name" : "FabricIngress.next.multicast_counter",
-      "id" : 8,
+      "id" : 9,
       "is_direct" : true,
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 228,
+        "line" : 163,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
     },
     {
       "name" : "FabricIngress.port_counters_control.egress_port_counter",
-      "id" : 9,
+      "id" : 10,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 26,
@@ -1895,7 +1908,7 @@
     },
     {
       "name" : "FabricIngress.port_counters_control.ingress_port_counter",
-      "id" : 10,
+      "id" : 11,
       "source_info" : {
         "filename" : "include/control/port_counter.p4",
         "line" : 27,
@@ -1907,12 +1920,12 @@
     },
     {
       "name" : "FabricEgress.egress_next.egress_vlan_counter",
-      "id" : 11,
+      "id" : 12,
       "is_direct" : true,
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 314,
+        "line" : 248,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -2088,9 +2101,15 @@
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.filtering.deny",
+      "name" : "nop",
       "id" : 7,
       "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.filtering.deny",
+      "id" : 8,
+      "runtime_data" : [],
       "primitives" : [
         {
           "op" : "assign",
@@ -2149,22 +2168,70 @@
             "column" : 8,
             "source_fragment" : "fabric_metadata.skip_next = true"
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata.port_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 119,
+            "column" : 38,
+            "source_fragment" : "0x0; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.permit",
-      "id" : 8,
-      "runtime_data" : [],
-      "primitives" : []
+      "id" : 9,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata.port_type"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "fabric_metadata.port_type = port_type"
+          }
+        }
+      ]
     },
     {
       "name" : "FabricIngress.filtering.permit_with_internal_vlan",
-      "id" : 9,
+      "id" : 10,
       "runtime_data" : [
         {
           "name" : "vlan_id",
           "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
         }
       ],
       "primitives" : [
@@ -2182,16 +2249,35 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 47,
+            "line" : 49,
             "column" : 8,
             "source_fragment" : "fabric_metadata.vlan_id = vlan_id"
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata.port_type"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/filtering.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "fabric_metadata.port_type = port_type; ..."
+          }
         }
       ]
     },
     {
       "name" : "FabricIngress.filtering.set_forwarding_type",
-      "id" : 10,
+      "id" : 11,
       "runtime_data" : [
         {
           "name" : "fwd_type",
@@ -2213,7 +2299,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 88,
+            "line" : 90,
             "column" : 8,
             "source_fragment" : "fabric_metadata.fwd_type = fwd_type"
           }
@@ -2222,7 +2308,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_bridging",
-      "id" : 11,
+      "id" : 12,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2253,7 +2339,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.pop_mpls_and_next",
-      "id" : 12,
+      "id" : 13,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2303,7 +2389,7 @@
     },
     {
       "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
-      "id" : 13,
+      "id" : 14,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2334,13 +2420,75 @@
     },
     {
       "name" : "FabricIngress.forwarding.nop_routing_v4",
-      "id" : 14,
+      "id" : 15,
       "runtime_data" : [],
       "primitives" : []
     },
     {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 16,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata.mpls_label"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 32,
+            "column" : 8,
+            "source_fragment" : "fabric_metadata.mpls_label = label"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 17,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata.vlan_id"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 57,
+            "column" : 8,
+            "source_fragment" : "fabric_metadata.vlan_id = vlan_id"
+          }
+        }
+      ]
+    },
+    {
       "name" : "FabricIngress.acl.set_next_id_acl",
-      "id" : 15,
+      "id" : 18,
       "runtime_data" : [
         {
           "name" : "next_id",
@@ -2371,7 +2519,7 @@
     },
     {
       "name" : "FabricIngress.acl.punt_to_cpu",
-      "id" : 16,
+      "id" : 19,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2426,7 +2574,7 @@
     },
     {
       "name" : "FabricIngress.acl.set_clone_session_id",
-      "id" : 17,
+      "id" : 20,
       "runtime_data" : [
         {
           "name" : "clone_id",
@@ -2457,7 +2605,7 @@
     },
     {
       "name" : "FabricIngress.acl.drop",
-      "id" : 18,
+      "id" : 21,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2508,105 +2656,12 @@
     },
     {
       "name" : "FabricIngress.acl.nop_acl",
-      "id" : 19,
+      "id" : 22,
       "runtime_data" : [],
       "primitives" : []
     },
     {
-      "name" : "FabricIngress.next.set_vlan",
-      "id" : 20,
-      "runtime_data" : [
-        {
-          "name" : "vlan_id",
-          "bitwidth" : 12
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata.vlan_id"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 70,
-            "column" : 8,
-            "source_fragment" : "fabric_metadata.vlan_id = vlan_id"
-          }
-        }
-      ]
-    },
-    {
       "name" : "FabricIngress.next.output_xconnect",
-      "id" : 21,
-      "runtime_data" : [
-        {
-          "name" : "port_num",
-          "bitwidth" : 9
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["standard_metadata", "egress_spec"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 31,
-            "column" : 5,
-            "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.set_next_id_xconnect",
-      "id" : 22,
-      "runtime_data" : [
-        {
-          "name" : "next_id",
-          "bitwidth" : 32
-        }
-      ],
-      "primitives" : [
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["scalars", "userMetadata.next_id"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 0
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 115,
-            "column" : 8,
-            "source_fragment" : "fabric_metadata.next_id = next_id"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "FabricIngress.next.output_hashed",
       "id" : 23,
       "runtime_data" : [
         {
@@ -2637,20 +2692,12 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.routing_hashed",
+      "name" : "FabricIngress.next.set_next_id_xconnect",
       "id" : 24,
       "runtime_data" : [
         {
-          "name" : "port_num",
-          "bitwidth" : 9
-        },
-        {
-          "name" : "smac",
-          "bitwidth" : 48
-        },
-        {
-          "name" : "dmac",
-          "bitwidth" : 48
+          "name" : "next_id",
+          "bitwidth" : 32
         }
       ],
       "primitives" : [
@@ -2659,39 +2706,32 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["ethernet", "src_addr"]
+              "value" : ["scalars", "userMetadata.next_id"]
             },
             {
               "type" : "runtime_data",
-              "value" : 1
+              "value" : 0
             }
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 36,
+            "line" : 64,
             "column" : 8,
-            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+            "source_fragment" : "fabric_metadata.next_id = next_id"
           }
-        },
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_hashed",
+      "id" : 25,
+      "runtime_data" : [
         {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
-              "value" : ["ethernet", "dst_addr"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 2
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 41,
-            "column" : 8,
-            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
-          }
-        },
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
         {
           "op" : "assign",
           "parameters" : [
@@ -2714,8 +2754,8 @@
       ]
     },
     {
-      "name" : "FabricIngress.next.mpls_routing_hashed",
-      "id" : 25,
+      "name" : "FabricIngress.next.routing_hashed",
+      "id" : 26,
       "runtime_data" : [
         {
           "name" : "port_num",
@@ -2728,10 +2768,6 @@
         {
           "name" : "dmac",
           "bitwidth" : 48
-        },
-        {
-          "name" : "label",
-          "bitwidth" : 20
         }
       ],
       "primitives" : [
@@ -2740,25 +2776,6 @@
           "parameters" : [
             {
               "type" : "field",
-              "value" : ["scalars", "userMetadata.mpls_label"]
-            },
-            {
-              "type" : "runtime_data",
-              "value" : 3
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 46,
-            "column" : 8,
-            "source_fragment" : "fabric_metadata.mpls_label = label; ..."
-          }
-        },
-        {
-          "op" : "assign",
-          "parameters" : [
-            {
-              "type" : "field",
               "value" : ["ethernet", "src_addr"]
             },
             {
@@ -2815,7 +2832,7 @@
     },
     {
       "name" : "FabricIngress.next.set_mcast_group_id",
-      "id" : 26,
+      "id" : 27,
       "runtime_data" : [
         {
           "name" : "group_id",
@@ -2837,7 +2854,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 231,
+            "line" : 166,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -2866,7 +2883,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 232,
+            "line" : 167,
             "column" : 8,
             "source_fragment" : "fabric_metadata.is_multicast = true"
           }
@@ -2875,7 +2892,7 @@
     },
     {
       "name" : "packetio25",
-      "id" : 27,
+      "id" : 28,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2954,8 +2971,8 @@
       ]
     },
     {
-      "name" : "filtering111",
-      "id" : 28,
+      "name" : "filtering113",
+      "id" : 29,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -2972,7 +2989,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_id = hdr.vlan_tag.vlan_id"
           }
@@ -2991,7 +3008,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 112,
+            "line" : 114,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_pri = hdr.vlan_tag.pri"
           }
@@ -3010,7 +3027,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_cfi = hdr.vlan_tag.cfi"
           }
@@ -3018,8 +3035,8 @@
       ]
     },
     {
-      "name" : "filtering127",
-      "id" : 29,
+      "name" : "filtering129",
+      "id" : 30,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3036,7 +3053,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_ttl = DEFAULT_MPLS_TTL + 1"
           }
@@ -3044,8 +3061,8 @@
       ]
     },
     {
-      "name" : "acl101",
-      "id" : 30,
+      "name" : "acl102",
+      "id" : 31,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3062,7 +3079,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_tcp.sport"
           }
@@ -3081,7 +3098,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 102,
+            "line" : 103,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_tcp.dport"
           }
@@ -3089,8 +3106,8 @@
       ]
     },
     {
-      "name" : "acl104",
-      "id" : 31,
+      "name" : "acl105",
+      "id" : 32,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3107,7 +3124,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.inner_udp.sport"
           }
@@ -3126,7 +3143,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 105,
+            "line" : 106,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.inner_udp.dport"
           }
@@ -3134,8 +3151,8 @@
       ]
     },
     {
-      "name" : "acl97",
-      "id" : 32,
+      "name" : "acl98",
+      "id" : 33,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3152,7 +3169,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.inner_ipv4.src_addr"
           }
@@ -3171,7 +3188,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 98,
+            "line" : 99,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.inner_ipv4.dst_addr"
           }
@@ -3190,7 +3207,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.inner_ipv4.protocol"
           }
@@ -3198,8 +3215,8 @@
       ]
     },
     {
-      "name" : "acl112",
-      "id" : 33,
+      "name" : "acl113",
+      "id" : 34,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3216,7 +3233,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.tcp.sport"
           }
@@ -3235,7 +3252,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 113,
+            "line" : 114,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.tcp.dport"
           }
@@ -3243,8 +3260,8 @@
       ]
     },
     {
-      "name" : "acl115",
-      "id" : 34,
+      "name" : "acl116",
+      "id" : 35,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3261,7 +3278,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 16,
             "source_fragment" : "l4_sport = hdr.udp.sport"
           }
@@ -3280,7 +3297,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 116,
+            "line" : 117,
             "column" : 16,
             "source_fragment" : "l4_dport = hdr.udp.dport"
           }
@@ -3288,8 +3305,8 @@
       ]
     },
     {
-      "name" : "acl108",
-      "id" : 35,
+      "name" : "acl109",
+      "id" : 36,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3306,7 +3323,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 12,
             "source_fragment" : "ipv4_src = hdr.ipv4.src_addr"
           }
@@ -3325,7 +3342,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 109,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "ipv4_dst = hdr.ipv4.dst_addr"
           }
@@ -3344,7 +3361,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 110,
+            "line" : 111,
             "column" : 12,
             "source_fragment" : "ip_proto = hdr.ipv4.protocol"
           }
@@ -3353,7 +3370,7 @@
     },
     {
       "name" : "acl27",
-      "id" : 36,
+      "id" : 37,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3455,7 +3472,7 @@
     },
     {
       "name" : "port_counter31",
-      "id" : 37,
+      "id" : 38,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3513,7 +3530,7 @@
     },
     {
       "name" : "port_counter34",
-      "id" : 38,
+      "id" : 39,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3571,7 +3588,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_mpls_if_present",
-      "id" : 39,
+      "id" : 40,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3584,7 +3601,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 270,
+            "line" : 204,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -3603,7 +3620,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 272,
+            "line" : 206,
             "column" : 8,
             "source_fragment" : "hdr.eth_type.value = fabric_metadata.ip_eth_type"
           }
@@ -3612,7 +3629,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.set_mpls",
-      "id" : 40,
+      "id" : 41,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3625,7 +3642,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 277,
+            "line" : 211,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -3644,7 +3661,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 278,
+            "line" : 212,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label"
           }
@@ -3663,7 +3680,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 279,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -3682,7 +3699,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -3701,7 +3718,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 215,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl"
           }
@@ -3720,7 +3737,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 118,
+            "line" : 130,
             "column" : 31,
             "source_fragment" : "0x8847; ..."
           }
@@ -3729,7 +3746,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.push_vlan",
-      "id" : 41,
+      "id" : 42,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3742,7 +3759,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 289,
+            "line" : 223,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -3761,7 +3778,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 290,
+            "line" : 224,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi"
           }
@@ -3780,7 +3797,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 291,
+            "line" : 225,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri"
           }
@@ -3799,7 +3816,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/../define.p4",
-            "line" : 117,
+            "line" : 129,
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
@@ -3818,7 +3835,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 293,
+            "line" : 227,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id"
           }
@@ -3827,7 +3844,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.pop_vlan",
-      "id" : 42,
+      "id" : 43,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3840,7 +3857,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 256,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -3849,7 +3866,7 @@
     },
     {
       "name" : "FabricEgress.egress_next.drop",
-      "id" : 43,
+      "id" : 44,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3862,7 +3879,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 327,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -3871,7 +3888,7 @@
     },
     {
       "name" : "packetio41",
-      "id" : 44,
+      "id" : 45,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3888,7 +3905,7 @@
     },
     {
       "name" : "packetio44",
-      "id" : 45,
+      "id" : 46,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -3938,29 +3955,7 @@
       ]
     },
     {
-      "name" : "next349",
-      "id" : 46,
-      "runtime_data" : [],
-      "primitives" : [
-        {
-          "op" : "mark_to_drop",
-          "parameters" : [
-            {
-              "type" : "header",
-              "value" : "standard_metadata"
-            }
-          ],
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 349,
-            "column" : 12,
-            "source_fragment" : "mark_to_drop(standard_metadata)"
-          }
-        }
-      ]
-    },
-    {
-      "name" : "next376",
+      "name" : "next283",
       "id" : 47,
       "runtime_data" : [],
       "primitives" : [
@@ -3974,7 +3969,29 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 283,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_metadata)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next310",
+      "id" : 48,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/next.p4",
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -3982,8 +3999,8 @@
       ]
     },
     {
-      "name" : "next375",
-      "id" : 48,
+      "name" : "next309",
+      "id" : 49,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4023,7 +4040,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -4031,8 +4048,8 @@
       ]
     },
     {
-      "name" : "next380",
-      "id" : 49,
+      "name" : "next314",
+      "id" : 50,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4045,7 +4062,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4053,8 +4070,8 @@
       ]
     },
     {
-      "name" : "next379",
-      "id" : 50,
+      "name" : "next313",
+      "id" : 51,
       "runtime_data" : [],
       "primitives" : [
         {
@@ -4094,7 +4111,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -4108,7 +4125,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 46,
+        "line" : 47,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -4130,25 +4147,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [27],
+          "action_ids" : [28],
           "actions" : ["packetio25"],
           "base_default_next" : "node_4",
           "next_tables" : {
             "packetio25" : "node_4"
           },
           "default_entry" : {
-            "action_id" : 27,
+            "action_id" : 28,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering111",
+          "name" : "tbl_filtering113",
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 111,
+            "line" : 113,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           },
@@ -4159,25 +4176,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [28],
-          "actions" : ["filtering111"],
+          "action_ids" : [29],
+          "actions" : ["filtering113"],
           "base_default_next" : "node_6",
           "next_tables" : {
-            "filtering111" : "node_6"
+            "filtering113" : "node_6"
           },
           "default_entry" : {
-            "action_id" : 28,
+            "action_id" : 29,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_filtering127",
+          "name" : "tbl_filtering129",
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 127,
+            "line" : 129,
             "column" : 37,
             "source_fragment" : "="
           },
@@ -4188,14 +4205,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [29],
-          "actions" : ["filtering127"],
+          "action_ids" : [30],
+          "actions" : ["filtering129"],
           "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
           "next_tables" : {
-            "filtering127" : "FabricIngress.filtering.ingress_port_vlan"
+            "filtering129" : "FabricIngress.filtering.ingress_port_vlan"
           },
           "default_entry" : {
-            "action_id" : 29,
+            "action_id" : 30,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4206,7 +4223,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 53,
+            "line" : 55,
             "column" : 10,
             "source_fragment" : "ingress_port_vlan"
           },
@@ -4236,7 +4253,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [7, 8, 9],
+          "action_ids" : [8, 9, 10],
           "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
           "base_default_next" : "FabricIngress.filtering.fwd_classifier",
           "next_tables" : {
@@ -4245,7 +4262,7 @@
             "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
           },
           "default_entry" : {
-            "action_id" : 7,
+            "action_id" : 8,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4256,7 +4273,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 92,
+            "line" : 94,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -4292,14 +4309,14 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [10],
+          "action_ids" : [11],
           "actions" : ["FabricIngress.filtering.set_forwarding_type"],
           "base_default_next" : "node_10",
           "next_tables" : {
             "FabricIngress.filtering.set_forwarding_type" : "node_10"
           },
           "default_entry" : {
-            "action_id" : 10,
+            "action_id" : 11,
             "action_const" : true,
             "action_data" : ["0x0"],
             "action_entry_const" : true
@@ -4334,12 +4351,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [11, 0],
+          "action_ids" : [12, 0],
           "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_bridging" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 0,
@@ -4371,12 +4388,12 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [12, 1],
+          "action_ids" : [13, 1],
           "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.pop_mpls_and_next" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 1,
@@ -4408,13 +4425,13 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [13, 14, 2],
+          "action_ids" : [14, 15, 2],
           "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
-          "base_default_next" : "tbl_acl27",
+          "base_default_next" : "node_17",
           "next_tables" : {
-            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_acl27",
-            "FabricIngress.forwarding.nop_routing_v4" : "tbl_acl27",
-            "nop" : "tbl_acl27"
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "node_17",
+            "FabricIngress.forwarding.nop_routing_v4" : "node_17",
+            "nop" : "node_17"
           },
           "default_entry" : {
             "action_id" : 2,
@@ -4424,9 +4441,83 @@
           }
         },
         {
-          "name" : "tbl_acl27",
+          "name" : "FabricIngress.pre_next.next_mpls",
           "id" : 8,
           "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 36,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata.next_id"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [16, 3],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 3,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 9,
+          "source_info" : {
+            "filename" : "include/control/pre_next.p4",
+            "line" : 73,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata.next_id"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [17, 4],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "nop"],
+          "base_default_next" : "tbl_acl27",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "tbl_acl27",
+            "nop" : "tbl_acl27"
+          },
+          "default_entry" : {
+            "action_id" : 4,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_acl27",
+          "id" : 10,
+          "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 27,
             "column" : 4,
@@ -4439,25 +4530,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [36],
+          "action_ids" : [37],
           "actions" : ["acl27"],
-          "base_default_next" : "node_18",
+          "base_default_next" : "node_21",
           "next_tables" : {
-            "acl27" : "node_18"
+            "acl27" : "node_21"
           },
           "default_entry" : {
-            "action_id" : 36,
+            "action_id" : 37,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl97",
-          "id" : 9,
+          "name" : "tbl_acl98",
+          "id" : 11,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 97,
+            "line" : 98,
             "column" : 21,
             "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
           },
@@ -4468,25 +4559,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [32],
-          "actions" : ["acl97"],
-          "base_default_next" : "node_20",
+          "action_ids" : [33],
+          "actions" : ["acl98"],
+          "base_default_next" : "node_23",
           "next_tables" : {
-            "acl97" : "node_20"
+            "acl98" : "node_23"
           },
           "default_entry" : {
-            "action_id" : 32,
+            "action_id" : 33,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl101",
-          "id" : 10,
+          "name" : "tbl_acl102",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 101,
+            "line" : 102,
             "column" : 25,
             "source_fragment" : "= hdr.inner_tcp.sport; ..."
           },
@@ -4497,25 +4588,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [30],
-          "actions" : ["acl101"],
+          "action_ids" : [31],
+          "actions" : ["acl102"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl101" : "FabricIngress.acl.acl"
+            "acl102" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 30,
+            "action_id" : 31,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl104",
-          "id" : 11,
+          "name" : "tbl_acl105",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 104,
+            "line" : 105,
             "column" : 25,
             "source_fragment" : "= hdr.inner_udp.sport; ..."
           },
@@ -4526,25 +4617,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [31],
-          "actions" : ["acl104"],
+          "action_ids" : [32],
+          "actions" : ["acl105"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl104" : "FabricIngress.acl.acl"
+            "acl105" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 31,
+            "action_id" : 32,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl108",
-          "id" : 12,
+          "name" : "tbl_acl109",
+          "id" : 14,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 108,
+            "line" : 109,
             "column" : 21,
             "source_fragment" : "= hdr.ipv4.src_addr; ..."
           },
@@ -4555,25 +4646,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [35],
-          "actions" : ["acl108"],
-          "base_default_next" : "node_26",
+          "action_ids" : [36],
+          "actions" : ["acl109"],
+          "base_default_next" : "node_29",
           "next_tables" : {
-            "acl108" : "node_26"
+            "acl109" : "node_29"
           },
           "default_entry" : {
-            "action_id" : 35,
+            "action_id" : 36,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl112",
-          "id" : 13,
+          "name" : "tbl_acl113",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 112,
+            "line" : 113,
             "column" : 25,
             "source_fragment" : "= hdr.tcp.sport; ..."
           },
@@ -4584,25 +4675,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [33],
-          "actions" : ["acl112"],
+          "action_ids" : [34],
+          "actions" : ["acl113"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl112" : "FabricIngress.acl.acl"
+            "acl113" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 33,
+            "action_id" : 34,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_acl115",
-          "id" : 14,
+          "name" : "tbl_acl116",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 115,
+            "line" : 116,
             "column" : 25,
             "source_fragment" : "= hdr.udp.sport; ..."
           },
@@ -4613,14 +4704,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [34],
-          "actions" : ["acl115"],
+          "action_ids" : [35],
+          "actions" : ["acl116"],
           "base_default_next" : "FabricIngress.acl.acl",
           "next_tables" : {
-            "acl115" : "FabricIngress.acl.acl"
+            "acl116" : "FabricIngress.acl.acl"
           },
           "default_entry" : {
-            "action_id" : 34,
+            "action_id" : 35,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4628,7 +4719,7 @@
         },
         {
           "name" : "FabricIngress.acl.acl",
-          "id" : 15,
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/acl.p4",
             "line" : 66,
@@ -4707,6 +4798,12 @@
               "name" : "l4_dport",
               "target" : ["scalars", "acl_l4_dport"],
               "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "port_type",
+              "target" : ["scalars", "userMetadata.port_type"],
+              "mask" : null
             }
           ],
           "match_type" : "ternary",
@@ -4715,18 +4812,18 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [15, 16, 17, 18, 19],
+          "action_ids" : [18, 19, 20, 21, 22],
           "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
-          "base_default_next" : "node_31",
+          "base_default_next" : "node_34",
           "next_tables" : {
-            "FabricIngress.acl.set_next_id_acl" : "node_31",
-            "FabricIngress.acl.punt_to_cpu" : "node_31",
-            "FabricIngress.acl.set_clone_session_id" : "node_31",
-            "FabricIngress.acl.drop" : "node_31",
-            "FabricIngress.acl.nop_acl" : "node_31"
+            "FabricIngress.acl.set_next_id_acl" : "node_34",
+            "FabricIngress.acl.punt_to_cpu" : "node_34",
+            "FabricIngress.acl.set_clone_session_id" : "node_34",
+            "FabricIngress.acl.drop" : "node_34",
+            "FabricIngress.acl.nop_acl" : "node_34"
           },
           "default_entry" : {
-            "action_id" : 19,
+            "action_id" : 22,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4734,10 +4831,10 @@
         },
         {
           "name" : "FabricIngress.next.xconnect",
-          "id" : 16,
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 119,
+            "line" : 68,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -4761,7 +4858,7 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [21, 22, 4],
+          "action_ids" : [23, 24, 5],
           "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
           "base_default_next" : "FabricIngress.next.hashed",
           "next_tables" : {
@@ -4770,7 +4867,7 @@
             "nop" : "FabricIngress.next.hashed"
           },
           "default_entry" : {
-            "action_id" : 4,
+            "action_id" : 5,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4778,10 +4875,10 @@
         },
         {
           "name" : "FabricIngress.next.hashed",
-          "id" : 17,
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 202,
+            "line" : 138,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -4800,22 +4897,21 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [23, 24, 25, 5],
-          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+          "action_ids" : [25, 26, 6],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
           "base_default_next" : "FabricIngress.next.multicast",
           "next_tables" : {
             "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
             "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
-            "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
             "nop" : "FabricIngress.next.multicast"
           }
         },
         {
           "name" : "FabricIngress.next.multicast",
-          "id" : 18,
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 236,
+            "line" : 171,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -4833,52 +4929,15 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [26, 6],
+          "action_ids" : [27, 7],
           "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
-          "base_default_next" : "FabricIngress.next.next_vlan",
+          "base_default_next" : "node_38",
           "next_tables" : {
-            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
-            "nop" : "FabricIngress.next.next_vlan"
+            "FabricIngress.next.set_mcast_group_id" : "node_38",
+            "nop" : "node_38"
           },
           "default_entry" : {
-            "action_id" : 6,
-            "action_const" : true,
-            "action_data" : [],
-            "action_entry_const" : true
-          }
-        },
-        {
-          "name" : "FabricIngress.next.next_vlan",
-          "id" : 19,
-          "source_info" : {
-            "filename" : "include/control/next.p4",
-            "line" : 86,
-            "column" : 10,
-            "source_fragment" : "next_vlan"
-          },
-          "key" : [
-            {
-              "match_type" : "exact",
-              "name" : "next_id",
-              "target" : ["scalars", "userMetadata.next_id"],
-              "mask" : null
-            }
-          ],
-          "match_type" : "exact",
-          "type" : "simple",
-          "max_size" : 1024,
-          "with_counters" : true,
-          "support_timeout" : false,
-          "direct_meters" : null,
-          "action_ids" : [20, 3],
-          "actions" : ["FabricIngress.next.set_vlan", "nop"],
-          "base_default_next" : "node_36",
-          "next_tables" : {
-            "FabricIngress.next.set_vlan" : "node_36",
-            "nop" : "node_36"
-          },
-          "default_entry" : {
-            "action_id" : 3,
+            "action_id" : 7,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4886,7 +4945,7 @@
         },
         {
           "name" : "tbl_port_counter31",
-          "id" : 20,
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 31,
@@ -4900,14 +4959,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [37],
+          "action_ids" : [38],
           "actions" : ["port_counter31"],
-          "base_default_next" : "node_38",
+          "base_default_next" : "node_40",
           "next_tables" : {
-            "port_counter31" : "node_38"
+            "port_counter31" : "node_40"
           },
           "default_entry" : {
-            "action_id" : 37,
+            "action_id" : 38,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4915,7 +4974,7 @@
         },
         {
           "name" : "tbl_port_counter34",
-          "id" : 21,
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 34,
@@ -4929,14 +4988,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [38],
+          "action_ids" : [39],
           "actions" : ["port_counter34"],
           "base_default_next" : null,
           "next_tables" : {
             "port_counter34" : null
           },
           "default_entry" : {
-            "action_id" : 38,
+            "action_id" : 39,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -4949,7 +5008,7 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 183,
+            "line" : 125,
             "column" : 57,
             "source_fragment" : "hashed_selector"
           },
@@ -5010,7 +5069,7 @@
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 110,
+            "line" : 112,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -5025,7 +5084,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering111",
+          "true_next" : "tbl_filtering113",
           "false_next" : "node_6"
         },
         {
@@ -5033,7 +5092,7 @@
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 122,
+            "line" : 124,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -5055,7 +5114,7 @@
               }
             }
           },
-          "true_next" : "tbl_filtering127",
+          "true_next" : "tbl_filtering129",
           "false_next" : "FabricIngress.filtering.ingress_port_vlan"
         },
         {
@@ -5063,7 +5122,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 69,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding"
           },
@@ -5086,7 +5145,7 @@
             }
           },
           "true_next" : "node_11",
-          "false_next" : "tbl_acl27"
+          "false_next" : "node_17"
         },
         {
           "name" : "node_11",
@@ -5164,14 +5223,44 @@
             }
           },
           "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_17"
+        },
+        {
+          "name" : "node_17",
+          "id" : 7,
+          "source_info" : {
+            "filename" : "fabric.p4",
+            "line" : 74,
+            "column" : 12,
+            "source_fragment" : "fabric_metadata.skip_next"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "not",
+              "left" : null,
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata.skip_next"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.pre_next.next_mpls",
           "false_next" : "tbl_acl27"
         },
         {
-          "name" : "node_18",
-          "id" : 7,
+          "name" : "node_21",
+          "id" : 8,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 96,
+            "line" : 97,
             "column" : 12,
             "source_fragment" : "hdr.gtpu.isValid() && hdr.inner_ipv4.isValid()"
           },
@@ -5203,15 +5292,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl97",
-          "false_next" : "node_24"
+          "true_next" : "tbl_acl98",
+          "false_next" : "node_27"
         },
         {
-          "name" : "node_20",
-          "id" : 8,
+          "name" : "node_23",
+          "id" : 9,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 100,
+            "line" : 101,
             "column" : 16,
             "source_fragment" : "hdr.inner_tcp.isValid()"
           },
@@ -5226,15 +5315,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl101",
-          "false_next" : "node_22"
+          "true_next" : "tbl_acl102",
+          "false_next" : "node_25"
         },
         {
-          "name" : "node_22",
-          "id" : 9,
+          "name" : "node_25",
+          "id" : 10,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 23,
             "source_fragment" : "hdr.inner_udp.isValid()"
           },
@@ -5249,15 +5338,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl104",
+          "true_next" : "tbl_acl105",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_24",
-          "id" : 10,
+          "name" : "node_27",
+          "id" : 11,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 107,
+            "line" : 108,
             "column" : 19,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -5272,15 +5361,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl108",
+          "true_next" : "tbl_acl109",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_26",
-          "id" : 11,
+          "name" : "node_29",
+          "id" : 12,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 111,
+            "line" : 112,
             "column" : 16,
             "source_fragment" : "hdr.tcp.isValid()"
           },
@@ -5295,15 +5384,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl112",
-          "false_next" : "node_28"
+          "true_next" : "tbl_acl113",
+          "false_next" : "node_31"
         },
         {
-          "name" : "node_28",
-          "id" : 12,
+          "name" : "node_31",
+          "id" : 13,
           "source_info" : {
             "filename" : "include/control/acl.p4",
-            "line" : 114,
+            "line" : 115,
             "column" : 23,
             "source_fragment" : "hdr.udp.isValid()"
           },
@@ -5318,15 +5407,15 @@
               }
             }
           },
-          "true_next" : "tbl_acl115",
+          "true_next" : "tbl_acl116",
           "false_next" : "FabricIngress.acl.acl"
         },
         {
-          "name" : "node_31",
-          "id" : 13,
+          "name" : "node_34",
+          "id" : 14,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 73,
+            "line" : 78,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next"
           },
@@ -5352,8 +5441,8 @@
           "true_next" : "FabricIngress.next.xconnect"
         },
         {
-          "name" : "node_36",
-          "id" : 14,
+          "name" : "node_38",
+          "id" : 15,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 30,
@@ -5375,11 +5464,11 @@
             }
           },
           "true_next" : "tbl_port_counter31",
-          "false_next" : "node_38"
+          "false_next" : "node_40"
         },
         {
-          "name" : "node_38",
-          "id" : 15,
+          "name" : "node_40",
+          "id" : 16,
           "source_info" : {
             "filename" : "include/control/port_counter.p4",
             "line" : 33,
@@ -5410,15 +5499,15 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 91,
+        "line" : 96,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
-      "init_table" : "node_42",
+      "init_table" : "node_44",
       "tables" : [
         {
           "name" : "tbl_packetio41",
-          "id" : 22,
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 41,
@@ -5432,14 +5521,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [44],
+          "action_ids" : [45],
           "actions" : ["packetio41"],
-          "base_default_next" : "node_44",
+          "base_default_next" : "node_46",
           "next_tables" : {
-            "packetio41" : "node_44"
+            "packetio41" : "node_46"
           },
           "default_entry" : {
-            "action_id" : 44,
+            "action_id" : 45,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5447,7 +5536,7 @@
         },
         {
           "name" : "tbl_packetio44",
-          "id" : 23,
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 44,
@@ -5461,25 +5550,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [45],
+          "action_ids" : [46],
           "actions" : ["packetio44"],
-          "base_default_next" : "node_46",
+          "base_default_next" : "node_48",
           "next_tables" : {
-            "packetio44" : "node_46"
+            "packetio44" : "node_48"
           },
           "default_entry" : {
-            "action_id" : 45,
+            "action_id" : 46,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next349",
-          "id" : 24,
+          "name" : "tbl_next283",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 349,
+            "line" : 283,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -5490,14 +5579,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [46],
-          "actions" : ["next349"],
-          "base_default_next" : "node_48",
+          "action_ids" : [47],
+          "actions" : ["next283"],
+          "base_default_next" : "node_50",
           "next_tables" : {
-            "next349" : "node_48"
+            "next283" : "node_50"
           },
           "default_entry" : {
-            "action_id" : 46,
+            "action_id" : 47,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5505,10 +5594,10 @@
         },
         {
           "name" : "tbl_egress_next_pop_mpls_if_present",
-          "id" : 25,
+          "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -5519,14 +5608,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [39],
+          "action_ids" : [40],
           "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 39,
+            "action_id" : 40,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5534,10 +5623,10 @@
         },
         {
           "name" : "tbl_egress_next_set_mpls",
-          "id" : 26,
+          "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 355,
+            "line" : 289,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -5548,14 +5637,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [40],
+          "action_ids" : [41],
           "actions" : ["FabricEgress.egress_next.set_mpls"],
           "base_default_next" : "FabricEgress.egress_next.egress_vlan",
           "next_tables" : {
             "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
           },
           "default_entry" : {
-            "action_id" : 40,
+            "action_id" : 41,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5563,10 +5652,10 @@
         },
         {
           "name" : "FabricEgress.egress_next.egress_vlan",
-          "id" : 27,
+          "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 331,
+            "line" : 265,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -5590,27 +5679,27 @@
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [41, 42, 43],
+          "action_ids" : [42, 43, 44],
           "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
-          "base_default_next" : "node_53",
+          "base_default_next" : "node_55",
           "next_tables" : {
-            "FabricEgress.egress_next.push_vlan" : "node_53",
-            "FabricEgress.egress_next.pop_vlan" : "node_53",
-            "FabricEgress.egress_next.drop" : "node_53"
+            "FabricEgress.egress_next.push_vlan" : "node_55",
+            "FabricEgress.egress_next.pop_vlan" : "node_55",
+            "FabricEgress.egress_next.drop" : "node_55"
           },
           "default_entry" : {
-            "action_id" : 43,
+            "action_id" : 44,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next375",
-          "id" : 28,
+          "name" : "tbl_next309",
+          "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 309,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -5621,25 +5710,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [48],
-          "actions" : ["next375"],
-          "base_default_next" : "node_55",
+          "action_ids" : [49],
+          "actions" : ["next309"],
+          "base_default_next" : "node_57",
           "next_tables" : {
-            "next375" : "node_55"
+            "next309" : "node_57"
           },
           "default_entry" : {
-            "action_id" : 48,
+            "action_id" : 49,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next376",
-          "id" : 29,
+          "name" : "tbl_next310",
+          "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -5650,25 +5739,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [47],
-          "actions" : ["next376"],
+          "action_ids" : [48],
+          "actions" : ["next310"],
           "base_default_next" : null,
           "next_tables" : {
-            "next376" : null
+            "next310" : null
           },
           "default_entry" : {
-            "action_id" : 47,
+            "action_id" : 48,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next379",
-          "id" : 30,
+          "name" : "tbl_next313",
+          "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 379,
+            "line" : 313,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -5679,25 +5768,25 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [50],
-          "actions" : ["next379"],
-          "base_default_next" : "node_59",
+          "action_ids" : [51],
+          "actions" : ["next313"],
+          "base_default_next" : "node_61",
           "next_tables" : {
-            "next379" : "node_59"
+            "next313" : "node_61"
           },
           "default_entry" : {
-            "action_id" : 50,
+            "action_id" : 51,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
           }
         },
         {
-          "name" : "tbl_next380",
-          "id" : 31,
+          "name" : "tbl_next314",
+          "id" : 32,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -5708,14 +5797,14 @@
           "with_counters" : false,
           "support_timeout" : false,
           "direct_meters" : null,
-          "action_ids" : [49],
-          "actions" : ["next380"],
+          "action_ids" : [50],
+          "actions" : ["next314"],
           "base_default_next" : null,
           "next_tables" : {
-            "next380" : null
+            "next314" : null
           },
           "default_entry" : {
-            "action_id" : 49,
+            "action_id" : 50,
             "action_const" : true,
             "action_data" : [],
             "action_entry_const" : true
@@ -5725,8 +5814,8 @@
       "action_profiles" : [],
       "conditionals" : [
         {
-          "name" : "node_42",
-          "id" : 16,
+          "name" : "node_44",
+          "id" : 17,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 39,
@@ -5745,11 +5834,11 @@
             }
           },
           "true_next" : "tbl_packetio41",
-          "false_next" : "node_44"
+          "false_next" : "node_46"
         },
         {
-          "name" : "node_44",
-          "id" : 17,
+          "name" : "node_46",
+          "id" : 18,
           "source_info" : {
             "filename" : "include/control/packetio.p4",
             "line" : 43,
@@ -5771,14 +5860,14 @@
             }
           },
           "true_next" : "tbl_packetio44",
-          "false_next" : "node_46"
+          "false_next" : "node_48"
         },
         {
-          "name" : "node_46",
-          "id" : 18,
+          "name" : "node_48",
+          "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 281,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -5813,15 +5902,15 @@
               }
             }
           },
-          "true_next" : "tbl_next349",
-          "false_next" : "node_48"
+          "true_next" : "tbl_next283",
+          "false_next" : "node_50"
         },
         {
-          "name" : "node_48",
-          "id" : 19,
+          "name" : "node_50",
+          "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 352,
+            "line" : 286,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -5839,15 +5928,15 @@
               }
             }
           },
-          "true_next" : "node_49",
+          "true_next" : "node_51",
           "false_next" : "tbl_egress_next_set_mpls"
         },
         {
-          "name" : "node_49",
-          "id" : 20,
+          "name" : "node_51",
+          "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 353,
+            "line" : 287,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -5866,11 +5955,11 @@
           "false_next" : "FabricEgress.egress_next.egress_vlan"
         },
         {
-          "name" : "node_53",
-          "id" : 21,
+          "name" : "node_55",
+          "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -5885,15 +5974,15 @@
               }
             }
           },
-          "true_next" : "tbl_next375",
-          "false_next" : "node_57"
+          "true_next" : "tbl_next309",
+          "false_next" : "node_59"
         },
         {
-          "name" : "node_55",
-          "id" : 22,
+          "name" : "node_57",
+          "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 310,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -5912,14 +6001,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "tbl_next376"
+          "true_next" : "tbl_next310"
         },
         {
-          "name" : "node_57",
-          "id" : 23,
+          "name" : "node_59",
+          "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 378,
+            "line" : 312,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid() && fabric_metadata.fwd_type != FWD_BRIDGING"
           },
@@ -5955,14 +6044,14 @@
             }
           },
           "false_next" : null,
-          "true_next" : "tbl_next379"
+          "true_next" : "tbl_next313"
         },
         {
-          "name" : "node_59",
-          "id" : 24,
+          "name" : "node_61",
+          "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 380,
+            "line" : 314,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -5981,7 +6070,7 @@
             }
           },
           "false_next" : null,
-          "true_next" : "tbl_next380"
+          "true_next" : "tbl_next314"
         }
       ]
     }
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
index dd1645b..2765d9f 100644
--- a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
@@ -156,6 +156,54 @@
 }
 tables {
   preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
     id: 44104738
     name: "FabricIngress.acl.acl"
     alias: "acl"
@@ -232,6 +280,12 @@
     bitwidth: 16
     match_type: TERNARY
   }
+  match_fields {
+    id: 13
+    name: "port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
   action_refs {
     id: 23623126
   }
@@ -253,30 +307,6 @@
 }
 tables {
   preamble {
-    id: 35696861
-    name: "FabricIngress.next.next_vlan"
-    alias: "next_vlan"
-  }
-  match_fields {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-    match_type: EXACT
-  }
-  action_refs {
-    id: 22099101
-  }
-  action_refs {
-    id: 28485346
-    annotations: "@defaultonly"
-    scope: DEFAULT_ONLY
-  }
-  const_default_action_id: 28485346
-  direct_resource_ids: 326370320
-  size: 1024
-}
-tables {
-  preamble {
     id: 48735793
     name: "FabricIngress.next.xconnect"
     alias: "xconnect"
@@ -327,9 +357,6 @@
     id: 20985706
   }
   action_refs {
-    id: 27920375
-  }
-  action_refs {
     id: 28485346
     annotations: "@defaultonly"
     scope: DEFAULT_ONLY
@@ -416,6 +443,11 @@
     name: "FabricIngress.filtering.permit"
     alias: "permit"
   }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -428,6 +460,11 @@
     name: "vlan_id"
     bitwidth: 12
   }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
 }
 actions {
   preamble {
@@ -486,6 +523,30 @@
 }
 actions {
   preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
     id: 23623126
     name: "FabricIngress.acl.set_next_id_acl"
     alias: "set_next_id_acl"
@@ -531,18 +592,6 @@
 }
 actions {
   preamble {
-    id: 22099101
-    name: "FabricIngress.next.set_vlan"
-    alias: "set_vlan"
-  }
-  params {
-    id: 1
-    name: "vlan_id"
-    bitwidth: 12
-  }
-}
-actions {
-  preamble {
     id: 24640974
     name: "FabricIngress.next.output_xconnect"
     alias: "output_xconnect"
@@ -601,33 +650,6 @@
 }
 actions {
   preamble {
-    id: 27920375
-    name: "FabricIngress.next.mpls_routing_hashed"
-    alias: "mpls_routing_hashed"
-  }
-  params {
-    id: 1
-    name: "port_num"
-    bitwidth: 9
-  }
-  params {
-    id: 2
-    name: "smac"
-    bitwidth: 48
-  }
-  params {
-    id: 3
-    name: "dmac"
-    bitwidth: 48
-  }
-  params {
-    id: 4
-    name: "label"
-    bitwidth: 20
-  }
-}
-actions {
-  preamble {
     id: 21629581
     name: "FabricIngress.next.set_mcast_group_id"
     alias: "set_mcast_group_id"
@@ -738,6 +760,28 @@
 }
 direct_counters {
   preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
     id: 319194241
     name: "FabricIngress.acl.acl_counter"
     alias: "acl_counter"
@@ -749,17 +793,6 @@
 }
 direct_counters {
   preamble {
-    id: 326370320
-    name: "FabricIngress.next.next_vlan_counter"
-    alias: "next_vlan_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 35696861
-}
-direct_counters {
-  preamble {
     id: 321989420
     name: "FabricIngress.next.xconnect_counter"
     alias: "xconnect_counter"
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java
index 2ea8b29..3852629 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java
@@ -69,78 +69,6 @@
         interpreter = new FabricInterpreter(allCapabilities);
     }
 
-    /* Filtering control block */
-
-    /**
-     * Map treatment to push_internal_vlan action.
-     */
-    @Test
-    public void testFilteringTreatmentPermitWithInternalVlan() throws Exception {
-        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                .pushVlan()
-                .setVlanId(VLAN_100)
-                .build();
-        PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
-        PiActionParam param = new PiActionParam(FabricConstants.VLAN_ID,
-                                                ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
-        PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
-                .withParameter(param)
-                .build();
-
-        assertEquals(expectedAction, mappedAction);
-    }
-
-    /**
-     * Map empty treatment to permit action.
-     */
-    @Test
-    public void testFilteringTreatmentPermit() throws Exception {
-        TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
-        PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
-        PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
-                .build();
-
-        assertEquals(expectedAction, mappedAction);
-    }
-
-    /**
-     * Map empty treatment and wipeDeferred to permit action.
-     */
-    @Test
-    public void testFilteringTreatmentPermit2() throws Exception {
-        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                .wipeDeferred()
-                .build();
-        PiAction mappedAction = interpreter.mapTreatment(treatment,
-                FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
-        PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
-                .build();
-
-        assertEquals(expectedAction, mappedAction);
-    }
-
-    /**
-     * Map popVlan to permit action.
-     */
-    @Test
-    public void testFilteringTreatmentPermit3() throws Exception {
-        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                .popVlan()
-                .build();
-        PiAction mappedAction = interpreter.mapTreatment(treatment,
-                FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
-        PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
-                .build();
-
-        assertEquals(expectedAction, mappedAction);
-    }
-
     /* Forwarding control block */
 
     /**
@@ -230,45 +158,39 @@
     }
 
     /**
-     * Map treatment for hashed table to routing v4 action.
+     * Map treatment to set_vlan_output action.
      */
     @Test
-    public void testNextTreatmentHashedRoutingMpls() throws Exception {
+    public void testNextVlanTreatment() throws Exception {
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                .setEthSrc(SRC_MAC)
-                .setEthDst(DST_MAC)
-                .setOutput(PORT_1)
-                .pushMpls()
-                .setMpls(MPLS_10)
+                .setVlanId(VLAN_100)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(
-                treatment, FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
-        PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC, SRC_MAC.toBytes());
-        PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC, DST_MAC.toBytes());
-        PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM, PORT_1.toLong());
-        PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, MPLS_10.toInt());
+                treatment, FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN);
+        PiActionParam vlanParam = new PiActionParam(
+                FabricConstants.VLAN_ID, VLAN_100.toShort());
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_HASHED)
-                .withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam, mplsParam))
+                .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_VLAN)
+                .withParameter(vlanParam)
                 .build();
         assertEquals(expectedAction, mappedAction);
     }
 
     /**
-     * Map treatment to set_vlan_output action.
+     * Map treatment to set_mpls action.
      */
     @Test
-    public void testNextTreatment3() throws Exception {
+    public void testNextMplsTreatment() throws Exception {
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                .setVlanId(VLAN_100)
+                .setMpls(MPLS_10)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(
-                treatment, FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN);
-        PiActionParam vlanParam = new PiActionParam(
-                FabricConstants.VLAN_ID, VLAN_100.toShort());
+                treatment, FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS);
+        PiActionParam mplsParam = new PiActionParam(
+                FabricConstants.LABEL, MPLS_10.toInt());
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
-                .withParameter(vlanParam)
+                .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_MPLS_LABEL)
+                .withParameter(mplsParam)
                 .build();
         assertEquals(expectedAction, mappedAction);
     }
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/BaseObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/BaseObjectiveTranslatorTest.java
index 72f49be..5015d4e 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/BaseObjectiveTranslatorTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/BaseObjectiveTranslatorTest.java
@@ -44,6 +44,8 @@
     static final VlanId VLAN_200 = VlanId.vlanId("200");
     static final MacAddress HOST_MAC = MacAddress.valueOf("00:00:00:00:00:01");
     static final MacAddress ROUTER_MAC = MacAddress.valueOf("00:00:00:00:02:01");
+    static final MacAddress SPINE1_MAC = MacAddress.valueOf("00:00:00:00:03:01");
+    static final MacAddress SPINE2_MAC = MacAddress.valueOf("00:00:00:00:03:02");
     static final IpPrefix IPV4_UNICAST_ADDR = IpPrefix.valueOf("10.0.0.1/32");
     static final IpPrefix IPV4_MCAST_ADDR = IpPrefix.valueOf("224.0.0.1/32");
     static final IpPrefix IPV6_UNICAST_ADDR = IpPrefix.valueOf("2000::1/32");
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java
index a2fa47b..d3a7c5c 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java
@@ -49,6 +49,7 @@
 import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.verify;
 import static org.junit.Assert.assertTrue;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INTERNAL;
 
 public class FabricPipelinerTest {
 
@@ -95,6 +96,7 @@
                 .piTableAction(PiAction.builder()
                         .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
                         .withParameter(new PiActionParam(FabricConstants.VLAN_ID, DEFAULT_VLAN))
+                        .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, PORT_TYPE_INTERNAL))
                         .build())
                 .build();
         final FlowRule expectedCpuIgVlanRule = DefaultFlowRule.builder()
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java
index 71e45b1..73039b5 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslatorTest.java
@@ -44,15 +44,22 @@
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_PW_TRANSPORT_VLAN;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.DEFAULT_VLAN;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ETH_TYPE_EXACT_MASK;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV4_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_IPV6_ROUTING;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.FWD_MPLS;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ONE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.ZERO;
 
 /**
  * Test cases for fabric.p4 pipeline filtering control block.
  */
 public class FilteringObjectiveTranslatorTest extends BaseObjectiveTranslatorTest {
 
-    public static final byte[] ONE = {1};
-    public static final byte[] ZERO = {0};
-    public static final short EXACT_MATCH_ETH_TYPE = (short) 0xFFFF;
     private FilteringObjectiveTranslator translator;
 
     @Before
@@ -77,6 +84,7 @@
                 VlanId.NONE,
                 VlanId.NONE,
                 VLAN_100,
+                PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
 
         // forwarding classifier ipv4
@@ -85,7 +93,7 @@
                 ROUTER_MAC,
                 null,
                 Ethernet.TYPE_IPV4,
-                FilteringObjectiveTranslator.FWD_IPV4_ROUTING));
+                FWD_IPV4_ROUTING));
 
         // forwarding classifier ipv6
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
@@ -93,7 +101,7 @@
                 ROUTER_MAC,
                 null,
                 Ethernet.TYPE_IPV6,
-                FilteringObjectiveTranslator.FWD_IPV6_ROUTING));
+                FWD_IPV6_ROUTING));
 
         // forwarding classifier mpls
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
@@ -101,7 +109,7 @@
                 ROUTER_MAC,
                 null,
                 Ethernet.MPLS_UNICAST,
-                FilteringObjectiveTranslator.FWD_MPLS));
+                FWD_MPLS));
 
 //        ObjectiveTranslation.Builder expectedTranslationBuilder = ObjectiveTranslation.builder()
 //                .addFlowRule(inportFlowRuleExpected);
@@ -148,6 +156,7 @@
                 VlanId.NONE,
                 VlanId.NONE,
                 VLAN_100,
+                PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
 
         // forwarding classifier
@@ -156,7 +165,7 @@
                 MacAddress.IPV4_MULTICAST,
                 MacAddress.IPV4_MULTICAST_MASK,
                 Ethernet.TYPE_IPV4,
-                FilteringObjectiveTranslator.FWD_IPV4_ROUTING));
+                FWD_IPV4_ROUTING));
 
         ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules);
 
@@ -192,6 +201,7 @@
                 VlanId.NONE,
                 VlanId.NONE,
                 VLAN_100,
+                PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
 
         flowRules.addAll(buildExpectedFwdClassifierRule(
@@ -199,7 +209,7 @@
                 MacAddress.IPV6_MULTICAST,
                 MacAddress.IPV6_MULTICAST_MASK,
                 Ethernet.TYPE_IPV6,
-                FilteringObjectiveTranslator.FWD_IPV6_ROUTING));
+                FWD_IPV6_ROUTING));
 
         ObjectiveTranslation expectedTranslation = buildExpectedTranslation(flowRules);
 
@@ -222,6 +232,7 @@
                 VlanId.NONE,
                 VlanId.NONE,
                 VLAN_100,
+                PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
 
         // No rules in forwarding classifier, will do default action: set fwd type to bridging
@@ -297,18 +308,18 @@
         Collection<FlowRule> expectedFlowRules = Lists.newArrayList();
         // Ingress port vlan rule
         expectedFlowRules.add(buildExpectedVlanInPortRule(
-                PORT_1, VLAN_100, VLAN_200, VlanId.NONE,
+                PORT_1, VLAN_100, VLAN_200, VlanId.NONE, PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
         // Forwarding classifier rules (ipv6, ipv4, mpls)
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
                 PORT_1, ROUTER_MAC, null, Ethernet.TYPE_IPV4,
-                FilteringObjectiveTranslator.FWD_IPV4_ROUTING));
+                FWD_IPV4_ROUTING));
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
                 PORT_1, ROUTER_MAC, null, Ethernet.TYPE_IPV6,
-                FilteringObjectiveTranslator.FWD_IPV6_ROUTING));
+                FWD_IPV6_ROUTING));
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
                 PORT_1, ROUTER_MAC, null, Ethernet.MPLS_UNICAST,
-                FilteringObjectiveTranslator.FWD_MPLS));
+                FWD_MPLS));
         ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules);
 
         assertEquals(expectedTranslation, actualTranslation);
@@ -349,7 +360,7 @@
      * ingress_port_vlan table.
      */
     @Test
-    public void testPortUpdate() throws FabricPipelinerException {
+    public void testIsPortUpdate() throws FabricPipelinerException {
         // Tagged port scenario
         FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
                 .withKey(Criteria.matchInPort(PORT_1))
@@ -366,7 +377,7 @@
         Collection<FlowRule> expectedFlowRules = Lists.newArrayList();
         // Ingress port vlan rule
         expectedFlowRules.add(buildExpectedVlanInPortRule(
-                PORT_1, VLAN_100, null, VlanId.NONE,
+                PORT_1, VLAN_100, null, VlanId.NONE, PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
         ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules);
         assertEquals(expectedTranslation, actualTranslation);
@@ -389,7 +400,7 @@
         expectedFlowRules = Lists.newArrayList();
         // Ingress port vlan rule
         expectedFlowRules.add(buildExpectedVlanInPortRule(
-                PORT_1, VlanId.NONE, null, VLAN_200,
+                PORT_1, VlanId.NONE, null, VLAN_200, PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
         expectedTranslation = buildExpectedTranslation(expectedFlowRules);
         assertEquals(expectedTranslation, actualTranslation);
@@ -414,7 +425,7 @@
         Collection<FlowRule> expectedFlowRules = Lists.newArrayList();
         // Ingress port vlan rule
         expectedFlowRules.add(buildExpectedVlanInPortRule(
-                PORT_1, VLAN_100, null, VlanId.NONE,
+                PORT_1, VLAN_100, null, VlanId.NONE, PORT_TYPE_EDGE,
                 FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
         // forwarding classifier ipv4
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
@@ -422,26 +433,109 @@
                 ROUTER_MAC,
                 null,
                 Ethernet.TYPE_IPV4,
-                FilteringObjectiveTranslator.FWD_IPV4_ROUTING));
+                FWD_IPV4_ROUTING));
         // forwarding classifier ipv6
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
                 PORT_1,
                 ROUTER_MAC,
                 null,
                 Ethernet.TYPE_IPV6,
-                FilteringObjectiveTranslator.FWD_IPV6_ROUTING));
+                FWD_IPV6_ROUTING));
         // forwarding classifier mpls
         expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
                 PORT_1,
                 ROUTER_MAC,
                 null,
                 Ethernet.MPLS_UNICAST,
-                FilteringObjectiveTranslator.FWD_MPLS));
+                FWD_MPLS));
 
         ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules);
         assertEquals(expectedTranslation, actualTranslation);
     }
 
+    /**
+     * Test is infra port scenarios for filtering objective.
+     */
+    @Test
+    public void testIsInfraPort() throws FabricPipelinerException {
+        // PW transport vlan
+        FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+                .withKey(Criteria.matchInPort(PORT_1))
+                .addCondition(Criteria.matchEthDst(ROUTER_MAC))
+                .addCondition(Criteria.matchVlanId(VlanId.vlanId((short) DEFAULT_PW_TRANSPORT_VLAN)))
+                .withPriority(PRIORITY)
+                .fromApp(APP_ID)
+                .permit()
+                .add();
+        ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+        Collection<FlowRule> expectedFlowRules = Lists.newArrayList();
+        expectedFlowRules.add(buildExpectedVlanInPortRule(
+                PORT_1, VlanId.vlanId((short) DEFAULT_PW_TRANSPORT_VLAN), null, VlanId.NONE,
+                PORT_TYPE_INFRA, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.TYPE_IPV4,
+                FWD_IPV4_ROUTING));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.TYPE_IPV6,
+                FWD_IPV6_ROUTING));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.MPLS_UNICAST,
+                FWD_MPLS));
+
+        ObjectiveTranslation expectedTranslation = buildExpectedTranslation(expectedFlowRules);
+        assertEquals(expectedTranslation, actualTranslation);
+
+        // Untagged port scenario
+        filteringObjective = DefaultFilteringObjective.builder()
+                .withKey(Criteria.matchInPort(PORT_1))
+                .addCondition(Criteria.matchEthDst(ROUTER_MAC))
+                .addCondition(Criteria.matchVlanId(VlanId.NONE))
+                .withPriority(PRIORITY)
+                .fromApp(APP_ID)
+                .withMeta(DefaultTrafficTreatment.builder()
+                        .pushVlan()
+                        .setVlanId(VlanId.vlanId((short) DEFAULT_VLAN))
+                        .build())
+                .permit()
+                .add();
+        actualTranslation = translator.translate(filteringObjective);
+        expectedFlowRules = Lists.newArrayList();
+        expectedFlowRules.add(buildExpectedVlanInPortRule(
+                PORT_1, null, null, VlanId.vlanId((short) DEFAULT_VLAN),
+                PORT_TYPE_INFRA, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.TYPE_IPV4,
+                FWD_IPV4_ROUTING));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.TYPE_IPV6,
+                FWD_IPV6_ROUTING));
+        expectedFlowRules.addAll(buildExpectedFwdClassifierRule(
+                PORT_1,
+                ROUTER_MAC,
+                null,
+                Ethernet.MPLS_UNICAST,
+                FWD_MPLS));
+
+        expectedTranslation = buildExpectedTranslation(expectedFlowRules);
+        assertEquals(expectedTranslation, actualTranslation);
+    }
+
     /* Utilities */
 
     private void assertError(ObjectiveError error, ObjectiveTranslation actualTranslation) {
@@ -473,6 +567,7 @@
                                                  VlanId vlanId,
                                                  VlanId innerVlanId,
                                                  VlanId internalVlan,
+                                                 byte portType,
                                                  TableId tableId) {
 
         TrafficSelector.Builder selector = DefaultTrafficSelector.builder()
@@ -482,8 +577,8 @@
         if (!vlanValid(vlanId)) {
             piAction = PiAction.builder()
                     .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
-                    .withParameter(new PiActionParam(
-                            FabricConstants.VLAN_ID, internalVlan.toShort()))
+                    .withParameter(new PiActionParam(FabricConstants.VLAN_ID, internalVlan.toShort()))
+                    .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, portType))
                     .build();
         } else {
             selector.matchVlanId(vlanId);
@@ -492,6 +587,7 @@
             }
             piAction = PiAction.builder()
                     .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
+                    .withParameter(new PiActionParam(FabricConstants.PORT_TYPE, portType))
                     .build();
         }
 
@@ -567,13 +663,13 @@
         Collection<FlowRule> flowRules = Lists.newArrayList();
         TrafficSelector selectorIpv4 = selectorBuilder
                 .add(PiCriterion.builder()
-                             .matchTernary(FabricConstants.HDR_ETH_TYPE, Ethernet.MPLS_UNICAST, EXACT_MATCH_ETH_TYPE)
+                             .matchTernary(FabricConstants.HDR_ETH_TYPE, Ethernet.MPLS_UNICAST, ETH_TYPE_EXACT_MASK)
                              .matchExact(FabricConstants.HDR_IP_ETH_TYPE, Ethernet.TYPE_IPV4)
                              .build())
                 .build();
         TrafficSelector selectorIpv6 = selectorBuilder
                 .add(PiCriterion.builder()
-                             .matchTernary(FabricConstants.HDR_ETH_TYPE, Ethernet.MPLS_UNICAST, EXACT_MATCH_ETH_TYPE)
+                             .matchTernary(FabricConstants.HDR_ETH_TYPE, Ethernet.MPLS_UNICAST, ETH_TYPE_EXACT_MASK)
                              .matchExact(FabricConstants.HDR_IP_ETH_TYPE, Ethernet.TYPE_IPV6)
                              .build())
                 .build();
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java
index 14253e7..dfae0df 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslatorTest.java
@@ -34,6 +34,7 @@
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.criteria.Criterion;
 import org.onosproject.net.flow.criteria.EthCriterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
 import org.onosproject.net.flowobjective.DefaultForwardingObjective;
 import org.onosproject.net.flowobjective.ForwardingObjective;
 import org.onosproject.net.group.DefaultGroupBucket;
@@ -52,6 +53,9 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_EDGE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_INFRA;
+import static org.onosproject.pipelines.fabric.impl.behaviour.Constants.PORT_TYPE_MASK;
 
 /**
  * Test cases for fabric.p4 pipeline forwarding control block.
@@ -185,7 +189,150 @@
 
         assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
     }
-/**
+
+    /**
+     * Test versatile flag of forwarding objective with next step.
+     */
+    @Test
+    public void testAclNext() {
+        // ACL 8-tuples
+        TrafficSelector selector = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_IPV4)
+                .matchIPDst(IPV4_UNICAST_ADDR)
+                .build();
+        ForwardingObjective fwd = DefaultForwardingObjective.builder()
+                .withSelector(selector)
+                .withPriority(PRIORITY)
+                .fromApp(APP_ID)
+                .makePermanent()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .nextStep(NEXT_ID_1)
+                .add();
+
+        ObjectiveTranslation result = translator.translate(fwd);
+
+        List<FlowRule> flowRulesInstalled = (List<FlowRule>) result.flowRules();
+        List<GroupDescription> groupsInstalled = (List<GroupDescription>) result.groups();
+        assertEquals(1, flowRulesInstalled.size());
+        assertTrue(groupsInstalled.isEmpty());
+
+        FlowRule actualFlowRule = flowRulesInstalled.get(0);
+        PiAction piAction = PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_ACL_SET_NEXT_ID_ACL)
+                .withParameter(new PiActionParam(FabricConstants.NEXT_ID, NEXT_ID_1))
+                .build();
+        FlowRule expectedFlowRule = DefaultFlowRule.builder()
+                .forDevice(DEVICE_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_ACL_ACL)
+                .withPriority(PRIORITY)
+                .makePermanent()
+                .withSelector(selector)
+                .withTreatment(DefaultTrafficTreatment.builder()
+                        .piTableAction(piAction).build())
+                .fromApp(APP_ID)
+                .build();
+
+        assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
+    }
+
+    /**
+     * Test versatile flag of forwarding objective with next step and port type.
+     */
+    @Test
+    public void testAclNextWithPortType() {
+        // ACL 8-tuples
+        TrafficSelector selector = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_IPV4)
+                .matchIPDst(IPV4_UNICAST_ADDR)
+                .build();
+        TrafficSelector metaSelector = DefaultTrafficSelector.builder()
+                .matchMetadata(PORT_TYPE_EDGE)
+                .build();
+        ForwardingObjective fwd = DefaultForwardingObjective.builder()
+                .withSelector(selector)
+                .withPriority(PRIORITY)
+                .fromApp(APP_ID)
+                .makePermanent()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .nextStep(NEXT_ID_1)
+                .withMeta(metaSelector)
+                .add();
+
+        ObjectiveTranslation result = translator.translate(fwd);
+
+        List<FlowRule> flowRulesInstalled = (List<FlowRule>) result.flowRules();
+        List<GroupDescription> groupsInstalled = (List<GroupDescription>) result.groups();
+        assertEquals(1, flowRulesInstalled.size());
+        assertTrue(groupsInstalled.isEmpty());
+
+        FlowRule actualFlowRule = flowRulesInstalled.get(0);
+        PiAction piAction = PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_ACL_SET_NEXT_ID_ACL)
+                .withParameter(new PiActionParam(FabricConstants.NEXT_ID, NEXT_ID_1))
+                .build();
+        TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_IPV4)
+                .matchIPDst(IPV4_UNICAST_ADDR)
+                .matchPi(PiCriterion.builder()
+                        .matchTernary(FabricConstants.HDR_PORT_TYPE, PORT_TYPE_EDGE, PORT_TYPE_MASK)
+                        .build())
+                .build();
+        FlowRule expectedFlowRule = DefaultFlowRule.builder()
+                .forDevice(DEVICE_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_ACL_ACL)
+                .withPriority(PRIORITY)
+                .makePermanent()
+                .withSelector(expectedSelector)
+                .withTreatment(DefaultTrafficTreatment.builder()
+                        .piTableAction(piAction).build())
+                .fromApp(APP_ID)
+                .build();
+
+        assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
+
+        metaSelector = DefaultTrafficSelector.builder()
+                .matchMetadata(PORT_TYPE_INFRA)
+                .build();
+        fwd = DefaultForwardingObjective.builder()
+                .withSelector(selector)
+                .withPriority(PRIORITY)
+                .fromApp(APP_ID)
+                .makePermanent()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .nextStep(NEXT_ID_1)
+                .withMeta(metaSelector)
+                .add();
+
+        result = translator.translate(fwd);
+
+        flowRulesInstalled = (List<FlowRule>) result.flowRules();
+        groupsInstalled = (List<GroupDescription>) result.groups();
+        assertEquals(1, flowRulesInstalled.size());
+        assertTrue(groupsInstalled.isEmpty());
+
+        actualFlowRule = flowRulesInstalled.get(0);
+        expectedSelector = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_IPV4)
+                .matchIPDst(IPV4_UNICAST_ADDR)
+                .matchPi(PiCriterion.builder()
+                        .matchTernary(FabricConstants.HDR_PORT_TYPE, PORT_TYPE_INFRA, PORT_TYPE_MASK)
+                        .build())
+                .build();
+        expectedFlowRule = DefaultFlowRule.builder()
+                .forDevice(DEVICE_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_ACL_ACL)
+                .withPriority(PRIORITY)
+                .makePermanent()
+                .withSelector(expectedSelector)
+                .withTreatment(DefaultTrafficTreatment.builder()
+                        .piTableAction(piAction).build())
+                .fromApp(APP_ID)
+                .build();
+
+        assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
+    }
+
+    /**
      * Test versatile flag of forwarding objective with acl drop.
      */
     @Test
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslatorTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslatorTest.java
index 393ba45..6647a83 100644
--- a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslatorTest.java
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslatorTest.java
@@ -57,6 +57,7 @@
     private NextObjectiveTranslator translatorSimple;
 
     private FlowRule vlanMetaFlowRule;
+    private FlowRule mplsFlowRule;
 
     @Before
     public void setup() {
@@ -72,7 +73,7 @@
                 .matchPi(nextIdCriterion)
                 .build();
         PiAction piAction = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
+                .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_VLAN)
                 .withParameter(new PiActionParam(FabricConstants.VLAN_ID, VLAN_100.toShort()))
                 .build();
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
@@ -81,7 +82,24 @@
         vlanMetaFlowRule = DefaultFlowRule.builder()
                 .withSelector(selector)
                 .withTreatment(treatment)
-                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
+                .forTable(FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN)
+                .makePermanent()
+                // FIXME: currently next objective doesn't support priority, ignore this
+                .withPriority(0)
+                .forDevice(DEVICE_ID)
+                .fromApp(APP_ID)
+                .build();
+        piAction = PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_MPLS_LABEL)
+                .withParameter(new PiActionParam(FabricConstants.LABEL, MPLS_10.toInt()))
+                .build();
+        treatment = DefaultTrafficTreatment.builder()
+                .piTableAction(piAction)
+                .build();
+        mplsFlowRule = DefaultFlowRule.builder()
+                .withSelector(selector)
+                .withTreatment(treatment)
+                .forTable(FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_MPLS)
                 .makePermanent()
                 // FIXME: currently next objective doesn't support priority, ignore this
                 .withPriority(0)
@@ -91,6 +109,164 @@
     }
 
     /**
+     * Test program mpls ecmp output group for Hashed table.
+     */
+    @Test
+    public void testMplsHashedOutput() throws Exception {
+        TrafficTreatment treatment1 = DefaultTrafficTreatment.builder()
+                .setEthSrc(ROUTER_MAC)
+                .setEthDst(SPINE1_MAC)
+                .pushMpls()
+                .copyTtlOut()
+                .setMpls(MPLS_10)
+                .popVlan()
+                .setOutput(PORT_1)
+                .build();
+        TrafficTreatment treatment2 = DefaultTrafficTreatment.builder()
+                .setEthSrc(ROUTER_MAC)
+                .setEthDst(SPINE2_MAC)
+                .pushMpls()
+                .copyTtlOut()
+                .setMpls(MPLS_10)
+                .popVlan()
+                .setOutput(PORT_2)
+                .build();
+
+        NextObjective nextObjective = DefaultNextObjective.builder()
+                .withId(NEXT_ID_1)
+                .withPriority(PRIORITY)
+                .withMeta(VLAN_META)
+                .addTreatment(treatment1)
+                .addTreatment(treatment2)
+                .withType(NextObjective.Type.HASHED)
+                .makePermanent()
+                .fromApp(APP_ID)
+                .add();
+
+        ObjectiveTranslation actualTranslation = translatorHashed.doTranslate(nextObjective);
+
+        // Expected hashed table flow rule.
+        PiCriterion nextIdCriterion = PiCriterion.builder()
+                .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+                .build();
+        TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
+                .matchPi(nextIdCriterion)
+                .build();
+        PiActionProfileGroupId actionGroupId = PiActionProfileGroupId.of(NEXT_ID_1);
+        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+                .piTableAction(actionGroupId)
+                .build();
+        FlowRule expectedFlowRule = DefaultFlowRule.builder()
+                .forDevice(DEVICE_ID)
+                .fromApp(APP_ID)
+                .makePermanent()
+                // FIXME: currently next objective doesn't support priority, ignore this
+                .withPriority(0)
+                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
+                .withSelector(nextIdSelector)
+                .withTreatment(treatment)
+                .build();
+
+        // First egress rule - port1
+        PortNumber outPort = outputPort(treatment1);
+        PiCriterion egressVlanTableMatch = PiCriterion.builder()
+                .matchExact(FabricConstants.HDR_EG_PORT, outPort.toLong())
+                .build();
+        TrafficSelector selectorForEgressVlan = DefaultTrafficSelector.builder()
+                .matchPi(egressVlanTableMatch)
+                .matchVlanId(VLAN_100)
+                .build();
+        PiAction piActionForEgressVlan = PiAction.builder()
+                .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
+                .build();
+        TrafficTreatment treatmentForEgressVlan = DefaultTrafficTreatment.builder()
+                .piTableAction(piActionForEgressVlan)
+                .build();
+        FlowRule expectedEgressVlanPopRule1 = DefaultFlowRule.builder()
+                .withSelector(selectorForEgressVlan)
+                .withTreatment(treatmentForEgressVlan)
+                .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
+                .makePermanent()
+                .withPriority(nextObjective.priority())
+                .forDevice(DEVICE_ID)
+                .fromApp(APP_ID)
+                .build();
+
+        // Second egress rule - port2
+        outPort = outputPort(treatment2);
+        egressVlanTableMatch = PiCriterion.builder()
+                .matchExact(FabricConstants.HDR_EG_PORT, outPort.toLong())
+                .build();
+        selectorForEgressVlan = DefaultTrafficSelector.builder()
+                .matchPi(egressVlanTableMatch)
+                .matchVlanId(VLAN_100)
+                .build();
+        FlowRule expectedEgressVlanPopRule2 = DefaultFlowRule.builder()
+                .withSelector(selectorForEgressVlan)
+                .withTreatment(treatmentForEgressVlan)
+                .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
+                .makePermanent()
+                .withPriority(nextObjective.priority())
+                .forDevice(DEVICE_ID)
+                .fromApp(APP_ID)
+                .build();
+
+        // Expected group
+        PiAction piAction1 = PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+                .withParameter(new PiActionParam(
+                        FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+                .withParameter(new PiActionParam(
+                        FabricConstants.DMAC, SPINE1_MAC.toBytes()))
+                .withParameter(new PiActionParam(
+                        FabricConstants.PORT_NUM, PORT_1.toLong()))
+                .build();
+        PiAction piAction2 = PiAction.builder()
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+                .withParameter(new PiActionParam(
+                        FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+                .withParameter(new PiActionParam(
+                        FabricConstants.DMAC, SPINE2_MAC.toBytes()))
+                .withParameter(new PiActionParam(
+                        FabricConstants.PORT_NUM, PORT_2.toLong()))
+                .build();
+        treatment1 = DefaultTrafficTreatment.builder()
+                .piTableAction(piAction1)
+                .build();
+        treatment2 = DefaultTrafficTreatment.builder()
+                .piTableAction(piAction2)
+                .build();
+        List<TrafficTreatment> treatments = ImmutableList.of(treatment1, treatment2);
+        List<GroupBucket> buckets = treatments.stream()
+                .map(DefaultGroupBucket::createSelectGroupBucket)
+                .collect(Collectors.toList());
+        GroupBuckets groupBuckets = new GroupBuckets(buckets);
+        PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+                FabricConstants.FABRIC_INGRESS_NEXT_HASHED_SELECTOR,
+                NEXT_ID_1);
+        GroupDescription expectedGroup = new DefaultGroupDescription(
+                DEVICE_ID,
+                GroupDescription.Type.SELECT,
+                groupBuckets,
+                groupKey,
+                NEXT_ID_1,
+                APP_ID
+        );
+
+        ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+                .addFlowRule(expectedFlowRule)
+                .addFlowRule(vlanMetaFlowRule)
+                .addFlowRule(mplsFlowRule)
+                .addGroup(expectedGroup)
+                .addFlowRule(expectedEgressVlanPopRule1)
+                .addFlowRule(expectedEgressVlanPopRule2)
+                .build();
+
+        assertEquals(expectedTranslation, actualTranslation);
+    }
+
+    // TODO: add profile with simple next or remove tests
+    /**
      * Test program output rule for Simple table.
      */
     @Test
@@ -269,7 +445,7 @@
                 .build();
 
         PiAction piActionPush = PiAction.builder()
-                .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+                .withId(FabricConstants.FABRIC_INGRESS_PRE_NEXT_SET_DOUBLE_VLAN)
                 .withParameter(new PiActionParam(
                         FabricConstants.INNER_VLAN_ID, VLAN_100.toShort()))
                 .withParameter(new PiActionParam(
@@ -298,7 +474,7 @@
                 .withTreatment(DefaultTrafficTreatment.builder()
                                        .piTableAction(piActionPush)
                                        .build())
-                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
+                .forTable(FabricConstants.FABRIC_INGRESS_PRE_NEXT_NEXT_VLAN)
                 .makePermanent()
                 // FIXME: currently next objective doesn't support priority, ignore this
                 .withPriority(0)