Support compiling fabric.p4 with arbitrary table sizes

By using preprocessor macros. Also, change expected location of tofino
compiler outputs when building the pipeconf.

Change-Id: I98ea95b61d57e725c88e52a3bfd95618f3c407cb
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java
index b565c99..d1cd0e3 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java
@@ -16,11 +16,6 @@
 
 package org.onosproject.pipelines.fabric;
 
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.onosproject.core.CoreService;
 import org.onosproject.inbandtelemetry.api.IntProgrammable;
 import org.onosproject.net.behaviour.Pipeliner;
@@ -36,6 +31,11 @@
 import org.onosproject.pipelines.fabric.pipeliner.FabricPipeliner;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.slf4j.Logger;
 
 import java.io.File;
@@ -79,8 +79,8 @@
     private static final String P4INFO_TXT = "p4info.txt";
     private static final String CPU_PORT_TXT = "cpu_port.txt";
     private static final String SPECTRUM_BIN = "spectrum.bin";
-    private static final String TOFINO_BIN = "tofino.bin";
-    private static final String TOFINO_CTX_JSON = "context.json";
+    private static final String TOFINO_BIN = "pipe/tofino.bin";
+    private static final String TOFINO_CTX_JSON = "pipe/context.json";
     private static final String INT_PROFILE_SUFFIX = "-int";
     private static final String FULL_PROFILE_SUFFIX = "-full";
 
diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4
index 6c60d52..f4a7689 100644
--- a/pipelines/fabric/src/main/resources/fabric.p4
+++ b/pipelines/fabric/src/main/resources/fabric.p4
@@ -17,6 +17,7 @@
 #include <core.p4>
 #include <v1model.p4>
 
+#include "include/size.p4"
 #include "include/control/filtering.p4"
 #include "include/control/forwarding.p4"
 #include "include/control/acl.p4"
diff --git a/pipelines/fabric/src/main/resources/include/control/acl.p4 b/pipelines/fabric/src/main/resources/include/control/acl.p4
index 9eece9a..5b8718b 100644
--- a/pipelines/fabric/src/main/resources/include/control/acl.p4
+++ b/pipelines/fabric/src/main/resources/include/control/acl.p4
@@ -82,7 +82,7 @@
         }
 
         const default_action = nop_acl();
-        size = 128;
+        size = ACL_TABLE_SIZE;
         counters = acl_counter;
     }
 
diff --git a/pipelines/fabric/src/main/resources/include/control/filtering.p4 b/pipelines/fabric/src/main/resources/include/control/filtering.p4
index 638d9a1..cc8e313 100644
--- a/pipelines/fabric/src/main/resources/include/control/filtering.p4
+++ b/pipelines/fabric/src/main/resources/include/control/filtering.p4
@@ -61,6 +61,7 @@
         }
         const default_action = deny();
         counters = ingress_port_vlan_counter;
+        size = PORT_VLAN_TABLE_SIZE;
     }
 
     /*
@@ -94,6 +95,7 @@
         }
         const default_action = set_forwarding_type(FWD_BRIDGING);
         counters = fwd_classifier_counter;
+        size = FWD_CLASSIFIER_TABLE_SIZE;
     }
 
     apply {
diff --git a/pipelines/fabric/src/main/resources/include/control/forwarding.p4 b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
index e5f89cb..89544ea 100644
--- a/pipelines/fabric/src/main/resources/include/control/forwarding.p4
+++ b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
@@ -40,6 +40,9 @@
         bridging_counter.count();
     }
 
+    // FIXME: using ternary for eth_dst prevents our ability to scale in
+    //  bridging heavy environments. Do we really need ternary? Can we come up
+    //  with a multi-table/algorithmic approach?
     table bridging {
         key = {
             fabric_metadata.vlan_id: exact @name("vlan_id");
@@ -51,6 +54,7 @@
         }
         const default_action = nop();
         counters = bridging_counter;
+        size = BRIDGING_TABLE_SIZE;
     }
 
     /*
@@ -74,6 +78,7 @@
         }
         const default_action = nop();
         counters = mpls_counter;
+        size = MPLS_TABLE_SIZE;
     }
 
     /*
@@ -90,6 +95,9 @@
         routing_v4_counter.count();
     }
 
+    #ifdef _ROUTING_V4_TABLE_ANNOT
+    _ROUTING_V4_TABLE_ANNOT
+    #endif
     table routing_v4 {
         key = {
             hdr.ipv4.dst_addr: lpm @name("ipv4_dst");
@@ -101,6 +109,7 @@
         }
         const default_action = nop();
         counters = routing_v4_counter;
+        size = ROUTING_V4_TABLE_SIZE;
     }
 
 #ifdef WITH_IPV6
@@ -124,6 +133,7 @@
         }
         const default_action = nop();
         counters = routing_v6_counter;
+        size = ROUTING_V6_TABLE_SIZE;
     }
 #endif // WITH_IPV6
 
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index 98b3812..88e870c 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -81,6 +81,7 @@
         }
         const default_action = nop();
         counters = next_vlan_counter;
+        size = NEXT_VLAN_TABLE_SIZE;
     }
 
 #ifdef WITH_XCONNECT
@@ -112,6 +113,7 @@
         }
         counters = xconnect_counter;
         const default_action = nop();
+        size = XCONNECT_NEXT_TABLE_SIZE;
     }
 #endif // WITH_XCONNECT
 
@@ -150,6 +152,7 @@
         }
         const default_action = nop();
         counters = simple_counter;
+        size = SIMPLE_NEXT_TABLE_SIZE;
     }
 #endif // WITH_SIMPLE_NEXT
 
@@ -158,7 +161,8 @@
      * Hashed table.
      * Execute an action profile selector based on next id.
      */
-    action_selector(HashAlgorithm.crc16, 32w64, 32w16) hashed_selector;
+    @max_group_size(HASHED_SELECTOR_MAX_GROUP_SIZE)
+    action_selector(HashAlgorithm.crc16, HASHED_ACT_PROFILE_SIZE, 32w16) hashed_selector;
     direct_counter(CounterType.packets_and_bytes) hashed_counter;
 
     action output_hashed(port_num_t port_num) {
@@ -195,6 +199,7 @@
         implementation = hashed_selector;
         counters = hashed_counter;
         const default_action = nop();
+        size = HASHED_NEXT_TABLE_SIZE;
     }
 #endif // WITH_HASHED_NEXT
 
@@ -220,6 +225,7 @@
         }
         counters = multicast_counter;
         const default_action = nop();
+        size = MULTICAST_NEXT_TABLE_SIZE;
     }
 
     apply {
@@ -293,6 +299,7 @@
         }
         const default_action = nop();
         counters = egress_vlan_counter;
+        size = EGRESS_VLAN_TABLE_SIZE;
     }
 
     apply {
diff --git a/pipelines/fabric/src/main/resources/include/size.p4 b/pipelines/fabric/src/main/resources/include/size.p4
new file mode 100644
index 0000000..0555a61
--- /dev/null
+++ b/pipelines/fabric/src/main/resources/include/size.p4
@@ -0,0 +1,21 @@
+#ifndef __TABLE_SIZE__
+#define __TABLE_SIZE__
+
+// Default sizes when building for BMv2.
+
+#define PORT_VLAN_TABLE_SIZE 1024
+#define FWD_CLASSIFIER_TABLE_SIZE 1024
+#define BRIDGING_TABLE_SIZE 1024
+#define MPLS_TABLE_SIZE 1024
+#define ROUTING_V4_TABLE_SIZE 1024
+#define ACL_TABLE_SIZE 1024
+#define XCONNECT_NEXT_TABLE_SIZE 1024
+#define NEXT_VLAN_TABLE_SIZE 1024
+#define SIMPLE_NEXT_TABLE_SIZE 1024
+#define HASHED_NEXT_TABLE_SIZE 1024
+#define HASHED_SELECTOR_MAX_GROUP_SIZE 16
+#define HASHED_ACT_PROFILE_SIZE 32w1024
+#define MULTICAST_NEXT_TABLE_SIZE 1024
+#define EGRESS_VLAN_TABLE_SIZE 1024
+
+#endif
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
index bae36b5..2730427 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
@@ -1093,7 +1093,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -1117,7 +1117,7 @@
       "binding" : "FabricIngress.forwarding.mpls",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 59,
+        "line" : 63,
         "column" : 50,
         "source_fragment" : "mpls_counter"
       }
@@ -1129,7 +1129,7 @@
       "binding" : "FabricIngress.forwarding.routing_v4",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 82,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "routing_v4_counter"
       }
@@ -1165,7 +1165,7 @@
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 91,
+        "line" : 92,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
@@ -1177,7 +1177,7 @@
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 162,
+        "line" : 166,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
@@ -1189,7 +1189,7 @@
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 205,
+        "line" : 210,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
@@ -1237,7 +1237,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 277,
+        "line" : 283,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -1580,7 +1580,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 82,
+            "line" : 83,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -1642,7 +1642,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 62,
+            "line" : 66,
             "column" : 35,
             "source_fragment" : "= 0; ..."
           }
@@ -1965,7 +1965,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 32,
             "source_fragment" : "= next_id; ..."
           }
@@ -2204,7 +2204,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 208,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -2233,7 +2233,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 209,
+            "line" : 214,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -2329,7 +2329,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 103,
+            "line" : 105,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
           }
@@ -2348,7 +2348,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 104,
+            "line" : 106,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -2367,7 +2367,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 105,
+            "line" : 107,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -2386,7 +2386,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 106,
+            "line" : 108,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -2412,7 +2412,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -9005,7 +9005,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 246,
+            "line" : 252,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -9024,7 +9024,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 248,
+            "line" : 254,
             "column" : 33,
             "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
           }
@@ -9046,7 +9046,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 253,
+            "line" : 259,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -9065,7 +9065,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 254,
+            "line" : 260,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -9084,7 +9084,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 255,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -9103,7 +9103,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 256,
+            "line" : 262,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -9122,7 +9122,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 257,
+            "line" : 263,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -9163,7 +9163,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 265,
+            "line" : 271,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -9182,7 +9182,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 266,
+            "line" : 272,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -9201,7 +9201,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 267,
+            "line" : 273,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -9220,7 +9220,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 268,
+            "line" : 274,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -9239,7 +9239,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 269,
+            "line" : 275,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -9284,7 +9284,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 286,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -9299,7 +9299,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 287,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -9374,7 +9374,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "mark_to_drop()"
           }
@@ -9451,7 +9451,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 35,
             "source_fragment" : "mark_to_drop()"
           }
@@ -9500,7 +9500,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 319,
+            "line" : 326,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -9517,7 +9517,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 39,
             "source_fragment" : "mark_to_drop()"
           }
@@ -9566,7 +9566,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 323,
+            "line" : 330,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -9842,7 +9842,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 41,
+        "line" : 42,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -9972,7 +9972,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 86,
+            "line" : 87,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -10020,7 +10020,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 43,
+            "line" : 46,
             "column" : 10,
             "source_fragment" : "bridging"
           },
@@ -10063,7 +10063,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 67,
+            "line" : 71,
             "column" : 10,
             "source_fragment" : "mpls"
           },
@@ -10100,7 +10100,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 93,
+            "line" : 101,
             "column" : 10,
             "source_fragment" : "routing_v4"
           },
@@ -10218,7 +10218,7 @@
           ],
           "match_type" : "ternary",
           "type" : "simple",
-          "max_size" : 128,
+          "max_size" : 1024,
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -10244,7 +10244,7 @@
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -10288,7 +10288,7 @@
           "id" : 10,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 180,
+            "line" : 184,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -10322,7 +10322,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 213,
+            "line" : 218,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -10481,11 +10481,11 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 161,
-            "column" : 55,
+            "line" : 165,
+            "column" : 57,
             "source_fragment" : "hashed_selector"
           },
-          "max_size" : 64,
+          "max_size" : 1024,
           "selector" : {
             "algo" : "crc16",
             "input" : [
@@ -10542,7 +10542,7 @@
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 102,
+            "line" : 104,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -10565,7 +10565,7 @@
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 108,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -10595,7 +10595,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 67,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding == false"
           },
@@ -10628,7 +10628,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 131,
+            "line" : 141,
             "column" : 12,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
           },
@@ -10654,7 +10654,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 132,
+            "line" : 142,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
           },
@@ -10680,7 +10680,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 133,
+            "line" : 143,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST"
           },
@@ -10706,7 +10706,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 70,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next == false"
           },
@@ -10793,7 +10793,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 84,
+        "line" : 85,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -10919,7 +10919,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 285,
+            "line" : 291,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -12191,7 +12191,7 @@
           "id" : 13,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 299,
+            "line" : 306,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -12244,7 +12244,7 @@
           "id" : 14,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 304,
+            "line" : 311,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -12270,7 +12270,7 @@
           "id" : 15,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 305,
+            "line" : 312,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -12293,7 +12293,7 @@
           "id" : 16,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 310,
+            "line" : 317,
             "column" : 12,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -12323,7 +12323,7 @@
           "id" : 17,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 319,
             "column" : 16,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -12349,7 +12349,7 @@
           "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 318,
+            "line" : 325,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -12372,7 +12372,7 @@
           "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -12398,7 +12398,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 329,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -12421,7 +12421,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
index 6c5b97e..beb1309 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
@@ -269,7 +269,7 @@
   }
   const_default_action_id: 16827694
   direct_resource_ids: 318801025
-  size: 128
+  size: 1024
 }
 tables {
   preamble {
@@ -780,10 +780,11 @@
     id: 285217164
     name: "FabricIngress.next.hashed_selector"
     alias: "hashed_selector"
+    annotations: "@max_group_size(16)"
   }
   table_ids: 33608588
   with_selector: true
-  size: 64
+  size: 1024
 }
 counters {
   preamble {
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
index 385b6bf..659a31b 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
@@ -1359,7 +1359,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -1383,7 +1383,7 @@
       "binding" : "FabricIngress.forwarding.mpls",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 59,
+        "line" : 63,
         "column" : 50,
         "source_fragment" : "mpls_counter"
       }
@@ -1395,7 +1395,7 @@
       "binding" : "FabricIngress.forwarding.routing_v4",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 82,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "routing_v4_counter"
       }
@@ -1431,7 +1431,7 @@
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 91,
+        "line" : 92,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
@@ -1443,7 +1443,7 @@
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 162,
+        "line" : 166,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
@@ -1455,7 +1455,7 @@
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 205,
+        "line" : 210,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
@@ -1503,7 +1503,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 277,
+        "line" : 283,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -2048,7 +2048,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 82,
+            "line" : 83,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -2110,7 +2110,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 62,
+            "line" : 66,
             "column" : 35,
             "source_fragment" : "= 0; ..."
           }
@@ -2433,7 +2433,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 32,
             "source_fragment" : "= next_id; ..."
           }
@@ -2672,7 +2672,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 208,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -2701,7 +2701,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 209,
+            "line" : 214,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -2759,7 +2759,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 57,
+            "line" : 58,
             "column" : 50,
             "source_fragment" : "hdr.gtpu_ipv4"
           }
@@ -2774,7 +2774,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 57,
+            "line" : 58,
             "column" : 65,
             "source_fragment" : "hdr.gtpu_udp"
           }
@@ -3005,7 +3005,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 103,
+            "line" : 105,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
           }
@@ -3024,7 +3024,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 104,
+            "line" : 106,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -3043,7 +3043,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 105,
+            "line" : 107,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -3062,7 +3062,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 106,
+            "line" : 108,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -3088,7 +3088,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -10573,7 +10573,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 246,
+            "line" : 252,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -10592,7 +10592,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 248,
+            "line" : 254,
             "column" : 33,
             "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
           }
@@ -10614,7 +10614,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 253,
+            "line" : 259,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -10633,7 +10633,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 254,
+            "line" : 260,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -10652,7 +10652,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 255,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -10671,7 +10671,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 256,
+            "line" : 262,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -10690,7 +10690,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 257,
+            "line" : 263,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -10731,7 +10731,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 265,
+            "line" : 271,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -10750,7 +10750,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 266,
+            "line" : 272,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -10769,7 +10769,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 267,
+            "line" : 273,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -10788,7 +10788,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 268,
+            "line" : 274,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -10807,7 +10807,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 269,
+            "line" : 275,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -10852,7 +10852,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 286,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -10867,7 +10867,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 287,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -10942,7 +10942,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "mark_to_drop()"
           }
@@ -11019,7 +11019,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 35,
             "source_fragment" : "mark_to_drop()"
           }
@@ -11068,7 +11068,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 319,
+            "line" : 326,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -11085,7 +11085,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 39,
             "source_fragment" : "mark_to_drop()"
           }
@@ -11134,7 +11134,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 323,
+            "line" : 330,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -11410,7 +11410,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 41,
+        "line" : 42,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -11655,7 +11655,7 @@
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 86,
+            "line" : 87,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -12030,7 +12030,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 43,
+            "line" : 46,
             "column" : 10,
             "source_fragment" : "bridging"
           },
@@ -12073,7 +12073,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 67,
+            "line" : 71,
             "column" : 10,
             "source_fragment" : "mpls"
           },
@@ -12110,7 +12110,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 93,
+            "line" : 101,
             "column" : 10,
             "source_fragment" : "routing_v4"
           },
@@ -12228,7 +12228,7 @@
           ],
           "match_type" : "ternary",
           "type" : "simple",
-          "max_size" : 128,
+          "max_size" : 1024,
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -12254,7 +12254,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -12298,7 +12298,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 180,
+            "line" : 184,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -12332,7 +12332,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 213,
+            "line" : 218,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -12491,11 +12491,11 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 161,
-            "column" : 55,
+            "line" : 165,
+            "column" : 57,
             "source_fragment" : "hashed_selector"
           },
-          "max_size" : 64,
+          "max_size" : 1024,
           "selector" : {
             "algo" : "crc16",
             "input" : [
@@ -12629,7 +12629,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 102,
+            "line" : 104,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -12652,7 +12652,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 108,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -12776,7 +12776,7 @@
           "id" : 10,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 67,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding == false"
           },
@@ -12809,7 +12809,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 131,
+            "line" : 141,
             "column" : 12,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
           },
@@ -12835,7 +12835,7 @@
           "id" : 12,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 132,
+            "line" : 142,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
           },
@@ -12861,7 +12861,7 @@
           "id" : 13,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 133,
+            "line" : 143,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST"
           },
@@ -12887,7 +12887,7 @@
           "id" : 14,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 70,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next == false"
           },
@@ -12974,7 +12974,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 84,
+        "line" : 85,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -13100,7 +13100,7 @@
           "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 285,
+            "line" : 291,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -14395,7 +14395,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 299,
+            "line" : 306,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -14448,7 +14448,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 304,
+            "line" : 311,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -14474,7 +14474,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 305,
+            "line" : 312,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -14497,7 +14497,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 310,
+            "line" : 317,
             "column" : 12,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -14527,7 +14527,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 319,
             "column" : 16,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -14553,7 +14553,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 318,
+            "line" : 325,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -14576,7 +14576,7 @@
           "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -14602,7 +14602,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 329,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -14625,7 +14625,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
index b069b52..a42d2e9 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
@@ -311,7 +311,7 @@
   }
   const_default_action_id: 16827694
   direct_resource_ids: 318801025
-  size: 128
+  size: 1024
 }
 tables {
   preamble {
@@ -844,10 +844,11 @@
     id: 285217164
     name: "FabricIngress.next.hashed_selector"
     alias: "hashed_selector"
+    annotations: "@max_group_size(16)"
   }
   table_ids: 33608588
   with_selector: true
-  size: 64
+  size: 1024
 }
 counters {
   preamble {
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
index 8ad8e1e..c068c36 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
@@ -1033,7 +1033,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -1057,7 +1057,7 @@
       "binding" : "FabricIngress.forwarding.mpls",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 59,
+        "line" : 63,
         "column" : 50,
         "source_fragment" : "mpls_counter"
       }
@@ -1069,7 +1069,7 @@
       "binding" : "FabricIngress.forwarding.routing_v4",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 82,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "routing_v4_counter"
       }
@@ -1105,7 +1105,7 @@
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 91,
+        "line" : 92,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
@@ -1117,7 +1117,7 @@
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 162,
+        "line" : 166,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
@@ -1129,7 +1129,7 @@
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 205,
+        "line" : 210,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
@@ -1165,7 +1165,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 277,
+        "line" : 283,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -1668,7 +1668,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 82,
+            "line" : 83,
             "column" : 33,
             "source_fragment" : "= fwd_type; ..."
           }
@@ -1730,7 +1730,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 62,
+            "line" : 66,
             "column" : 35,
             "source_fragment" : "= 0; ..."
           }
@@ -2053,7 +2053,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 32,
             "source_fragment" : "= next_id; ..."
           }
@@ -2292,7 +2292,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 208,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -2321,7 +2321,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 209,
+            "line" : 214,
             "column" : 37,
             "source_fragment" : "= true; ..."
           }
@@ -2379,7 +2379,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 57,
+            "line" : 58,
             "column" : 50,
             "source_fragment" : "hdr.gtpu_ipv4"
           }
@@ -2394,7 +2394,7 @@
           ],
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 57,
+            "line" : 58,
             "column" : 65,
             "source_fragment" : "hdr.gtpu_udp"
           }
@@ -2625,7 +2625,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 103,
+            "line" : 105,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
           }
@@ -2644,7 +2644,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 104,
+            "line" : 106,
             "column" : 36,
             "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
           }
@@ -2663,7 +2663,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 105,
+            "line" : 107,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.pri; ..."
           }
@@ -2682,7 +2682,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 106,
+            "line" : 108,
             "column" : 37,
             "source_fragment" : "= hdr.vlan_tag.cfi; ..."
           }
@@ -2708,7 +2708,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 37,
             "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
           }
@@ -3744,7 +3744,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 246,
+            "line" : 252,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -3763,7 +3763,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 248,
+            "line" : 254,
             "column" : 33,
             "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
           }
@@ -3785,7 +3785,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 253,
+            "line" : 259,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -3804,7 +3804,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 254,
+            "line" : 260,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
           }
@@ -3823,7 +3823,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 255,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -3842,7 +3842,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 256,
+            "line" : 262,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -3861,7 +3861,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 257,
+            "line" : 263,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
           }
@@ -3902,7 +3902,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 265,
+            "line" : 271,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -3921,7 +3921,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 266,
+            "line" : 272,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
           }
@@ -3940,7 +3940,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 267,
+            "line" : 273,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
           }
@@ -3959,7 +3959,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 268,
+            "line" : 274,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -3978,7 +3978,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 269,
+            "line" : 275,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
           }
@@ -4023,7 +4023,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 286,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.eth_type; ..."
           }
@@ -4038,7 +4038,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 287,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -4113,7 +4113,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "mark_to_drop()"
           }
@@ -4190,7 +4190,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 35,
             "source_fragment" : "mark_to_drop()"
           }
@@ -4239,7 +4239,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 319,
+            "line" : 326,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -4256,7 +4256,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 39,
             "source_fragment" : "mark_to_drop()"
           }
@@ -4305,7 +4305,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 323,
+            "line" : 330,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -4319,7 +4319,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 41,
+        "line" : 42,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -4564,7 +4564,7 @@
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 86,
+            "line" : 87,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -4939,7 +4939,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 43,
+            "line" : 46,
             "column" : 10,
             "source_fragment" : "bridging"
           },
@@ -4982,7 +4982,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 67,
+            "line" : 71,
             "column" : 10,
             "source_fragment" : "mpls"
           },
@@ -5019,7 +5019,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 93,
+            "line" : 101,
             "column" : 10,
             "source_fragment" : "routing_v4"
           },
@@ -5137,7 +5137,7 @@
           ],
           "match_type" : "ternary",
           "type" : "simple",
-          "max_size" : 128,
+          "max_size" : 1024,
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -5163,7 +5163,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -5207,7 +5207,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 180,
+            "line" : 184,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -5241,7 +5241,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 213,
+            "line" : 218,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -5363,11 +5363,11 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 161,
-            "column" : 55,
+            "line" : 165,
+            "column" : 57,
             "source_fragment" : "hashed_selector"
           },
-          "max_size" : 64,
+          "max_size" : 1024,
           "selector" : {
             "algo" : "crc16",
             "input" : [
@@ -5501,7 +5501,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 102,
+            "line" : 104,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -5524,7 +5524,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 108,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -5648,7 +5648,7 @@
           "id" : 10,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 67,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding == false"
           },
@@ -5681,7 +5681,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 131,
+            "line" : 141,
             "column" : 12,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
           },
@@ -5707,7 +5707,7 @@
           "id" : 12,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 132,
+            "line" : 142,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
           },
@@ -5733,7 +5733,7 @@
           "id" : 13,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 133,
+            "line" : 143,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST"
           },
@@ -5759,7 +5759,7 @@
           "id" : 14,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 70,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next == false"
           },
@@ -5846,7 +5846,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 84,
+        "line" : 85,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -5972,7 +5972,7 @@
           "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 285,
+            "line" : 291,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -6321,7 +6321,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 299,
+            "line" : 306,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -6374,7 +6374,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 304,
+            "line" : 311,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -6400,7 +6400,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 305,
+            "line" : 312,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -6423,7 +6423,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 310,
+            "line" : 317,
             "column" : 12,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -6453,7 +6453,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 319,
             "column" : 16,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -6479,7 +6479,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 318,
+            "line" : 325,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -6502,7 +6502,7 @@
           "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -6528,7 +6528,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 329,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -6551,7 +6551,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
index c76efb0..7556914 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
@@ -287,7 +287,7 @@
   }
   const_default_action_id: 16827694
   direct_resource_ids: 318801025
-  size: 128
+  size: 1024
 }
 tables {
   preamble {
@@ -702,10 +702,11 @@
     id: 285217164
     name: "FabricIngress.next.hashed_selector"
     alias: "hashed_selector"
+    annotations: "@max_group_size(16)"
   }
   table_ids: 33608588
   with_selector: true
-  size: 64
+  size: 1024
 }
 counters {
   preamble {
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
index 1a129f9..4c13eb5 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -780,7 +780,7 @@
       "binding" : "FabricIngress.filtering.fwd_classifier",
       "source_info" : {
         "filename" : "include/control/filtering.p4",
-        "line" : 79,
+        "line" : 80,
         "column" : 50,
         "source_fragment" : "fwd_classifier_counter"
       }
@@ -804,7 +804,7 @@
       "binding" : "FabricIngress.forwarding.mpls",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 59,
+        "line" : 63,
         "column" : 50,
         "source_fragment" : "mpls_counter"
       }
@@ -816,7 +816,7 @@
       "binding" : "FabricIngress.forwarding.routing_v4",
       "source_info" : {
         "filename" : "include/control/forwarding.p4",
-        "line" : 82,
+        "line" : 87,
         "column" : 50,
         "source_fragment" : "routing_v4_counter"
       }
@@ -852,7 +852,7 @@
       "binding" : "FabricIngress.next.xconnect",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 91,
+        "line" : 92,
         "column" : 50,
         "source_fragment" : "xconnect_counter"
       }
@@ -864,7 +864,7 @@
       "binding" : "FabricIngress.next.hashed",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 162,
+        "line" : 166,
         "column" : 50,
         "source_fragment" : "hashed_counter"
       }
@@ -876,7 +876,7 @@
       "binding" : "FabricIngress.next.multicast",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 205,
+        "line" : 210,
         "column" : 50,
         "source_fragment" : "multicast_counter"
       }
@@ -912,7 +912,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 277,
+        "line" : 283,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -1213,7 +1213,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 82,
+            "line" : 83,
             "column" : 8,
             "source_fragment" : "fabric_metadata.fwd_type = fwd_type"
           }
@@ -1275,7 +1275,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 62,
+            "line" : 66,
             "column" : 8,
             "source_fragment" : "fabric_metadata.mpls_label = 0"
           }
@@ -1598,7 +1598,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 99,
+            "line" : 100,
             "column" : 8,
             "source_fragment" : "fabric_metadata.next_id = next_id"
           }
@@ -1837,7 +1837,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 208,
+            "line" : 213,
             "column" : 8,
             "source_fragment" : "standard_metadata.mcast_grp = group_id"
           }
@@ -1866,7 +1866,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 209,
+            "line" : 214,
             "column" : 8,
             "source_fragment" : "fabric_metadata.is_multicast = true"
           }
@@ -1962,7 +1962,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 103,
+            "line" : 105,
             "column" : 12,
             "source_fragment" : "fabric_metadata.eth_type = hdr.vlan_tag.eth_type"
           }
@@ -1981,7 +1981,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 104,
+            "line" : 106,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_id = hdr.vlan_tag.vlan_id"
           }
@@ -2000,7 +2000,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 105,
+            "line" : 107,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_pri = hdr.vlan_tag.pri"
           }
@@ -2019,7 +2019,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 106,
+            "line" : 108,
             "column" : 12,
             "source_fragment" : "fabric_metadata.vlan_cfi = hdr.vlan_tag.cfi"
           }
@@ -2045,7 +2045,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 113,
+            "line" : 115,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_ttl = DEFAULT_MPLS_TTL + 1"
           }
@@ -2189,7 +2189,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 246,
+            "line" : 252,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setInvalid()"
           }
@@ -2208,7 +2208,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 248,
+            "line" : 254,
             "column" : 8,
             "source_fragment" : "fabric_metadata.eth_type = fabric_metadata.ip_eth_type"
           }
@@ -2230,7 +2230,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 253,
+            "line" : 259,
             "column" : 8,
             "source_fragment" : "hdr.mpls.setValid()"
           }
@@ -2249,7 +2249,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 254,
+            "line" : 260,
             "column" : 8,
             "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label"
           }
@@ -2268,7 +2268,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 255,
+            "line" : 261,
             "column" : 8,
             "source_fragment" : "hdr.mpls.tc = 3w0"
           }
@@ -2287,7 +2287,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 256,
+            "line" : 262,
             "column" : 8,
             "source_fragment" : "hdr.mpls.bos = 1w1"
           }
@@ -2306,7 +2306,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 257,
+            "line" : 263,
             "column" : 8,
             "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl"
           }
@@ -2347,7 +2347,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 265,
+            "line" : 271,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setValid()"
           }
@@ -2366,7 +2366,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 266,
+            "line" : 272,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi"
           }
@@ -2385,7 +2385,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 267,
+            "line" : 273,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri"
           }
@@ -2404,7 +2404,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 268,
+            "line" : 274,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.eth_type"
           }
@@ -2423,7 +2423,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 269,
+            "line" : 275,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id"
           }
@@ -2468,7 +2468,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 280,
+            "line" : 286,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.eth_type"
           }
@@ -2483,7 +2483,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 281,
+            "line" : 287,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -2558,7 +2558,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 301,
+            "line" : 308,
             "column" : 12,
             "source_fragment" : "mark_to_drop()"
           }
@@ -2635,7 +2635,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 35,
             "source_fragment" : "mark_to_drop()"
           }
@@ -2684,7 +2684,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 319,
+            "line" : 326,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -2701,7 +2701,7 @@
           "parameters" : [],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 39,
             "source_fragment" : "mark_to_drop()"
           }
@@ -2750,7 +2750,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 323,
+            "line" : 330,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -2764,7 +2764,7 @@
       "id" : 0,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 41,
+        "line" : 42,
         "column" : 8,
         "source_fragment" : "FabricIngress"
       },
@@ -2894,7 +2894,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 86,
+            "line" : 87,
             "column" : 10,
             "source_fragment" : "fwd_classifier"
           },
@@ -2942,7 +2942,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 43,
+            "line" : 46,
             "column" : 10,
             "source_fragment" : "bridging"
           },
@@ -2985,7 +2985,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 67,
+            "line" : 71,
             "column" : 10,
             "source_fragment" : "mpls"
           },
@@ -3022,7 +3022,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 93,
+            "line" : 101,
             "column" : 10,
             "source_fragment" : "routing_v4"
           },
@@ -3140,7 +3140,7 @@
           ],
           "match_type" : "ternary",
           "type" : "simple",
-          "max_size" : 128,
+          "max_size" : 1024,
           "with_counters" : true,
           "support_timeout" : false,
           "direct_meters" : null,
@@ -3166,7 +3166,7 @@
           "id" : 9,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 103,
+            "line" : 104,
             "column" : 10,
             "source_fragment" : "xconnect"
           },
@@ -3210,7 +3210,7 @@
           "id" : 10,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 180,
+            "line" : 184,
             "column" : 10,
             "source_fragment" : "hashed"
           },
@@ -3244,7 +3244,7 @@
           "id" : 11,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 213,
+            "line" : 218,
             "column" : 10,
             "source_fragment" : "multicast"
           },
@@ -3366,11 +3366,11 @@
           "id" : 0,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 161,
-            "column" : 55,
+            "line" : 165,
+            "column" : 57,
             "source_fragment" : "hashed_selector"
           },
-          "max_size" : 64,
+          "max_size" : 1024,
           "selector" : {
             "algo" : "crc16",
             "input" : [
@@ -3427,7 +3427,7 @@
           "id" : 1,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 102,
+            "line" : 104,
             "column" : 12,
             "source_fragment" : "hdr.vlan_tag.isValid()"
           },
@@ -3450,7 +3450,7 @@
           "id" : 2,
           "source_info" : {
             "filename" : "include/control/filtering.p4",
-            "line" : 108,
+            "line" : 110,
             "column" : 12,
             "source_fragment" : "!hdr.mpls.isValid()"
           },
@@ -3480,7 +3480,7 @@
           "id" : 3,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 66,
+            "line" : 67,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_forwarding == false"
           },
@@ -3513,7 +3513,7 @@
           "id" : 4,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 131,
+            "line" : 141,
             "column" : 12,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
           },
@@ -3539,7 +3539,7 @@
           "id" : 5,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 132,
+            "line" : 142,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
           },
@@ -3565,7 +3565,7 @@
           "id" : 6,
           "source_info" : {
             "filename" : "include/control/forwarding.p4",
-            "line" : 133,
+            "line" : 143,
             "column" : 17,
             "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST"
           },
@@ -3591,7 +3591,7 @@
           "id" : 7,
           "source_info" : {
             "filename" : "fabric.p4",
-            "line" : 70,
+            "line" : 71,
             "column" : 12,
             "source_fragment" : "fabric_metadata.skip_next == false"
           },
@@ -3678,7 +3678,7 @@
       "id" : 1,
       "source_info" : {
         "filename" : "fabric.p4",
-        "line" : 84,
+        "line" : 85,
         "column" : 8,
         "source_fragment" : "FabricEgress"
       },
@@ -3804,7 +3804,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 285,
+            "line" : 291,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -4130,7 +4130,7 @@
           "id" : 13,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 299,
+            "line" : 306,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -4183,7 +4183,7 @@
           "id" : 14,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 304,
+            "line" : 311,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -4209,7 +4209,7 @@
           "id" : 15,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 305,
+            "line" : 312,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -4232,7 +4232,7 @@
           "id" : 16,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 310,
+            "line" : 317,
             "column" : 12,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -4262,7 +4262,7 @@
           "id" : 17,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 319,
             "column" : 16,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -4288,7 +4288,7 @@
           "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 318,
+            "line" : 325,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -4311,7 +4311,7 @@
           "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 320,
+            "line" : 327,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -4337,7 +4337,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 322,
+            "line" : 329,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -4360,7 +4360,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 324,
+            "line" : 331,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
index d8ce747..8802c9c 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
@@ -245,7 +245,7 @@
   }
   const_default_action_id: 16827694
   direct_resource_ids: 318801025
-  size: 128
+  size: 1024
 }
 tables {
   preamble {
@@ -638,10 +638,11 @@
     id: 285217164
     name: "FabricIngress.next.hashed_selector"
     alias: "hashed_selector"
+    annotations: "@max_group_size(16)"
   }
   table_ids: 33608588
   with_selector: true
-  size: 64
+  size: 1024
 }
 counters {
   preamble {