Added ethertype QinQ when double VLAN tagged packets

Double VLAN tagged packets in Mininet uses QinQ Ethertype.

Change-Id: I7c3fa5f1db1ade768e1d998185d9eadded9ebb81
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index 9868339..e7f6e44 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -299,6 +299,7 @@
         hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id;
         hdr.inner_vlan_tag.eth_type = fabric_metadata.last_eth_type;
         hdr.vlan_tag.eth_type = ETHERTYPE_VLAN;
+        hdr.ethernet.eth_type = ETHERTYPE_QINQ;
     }
 #endif // WITH_DOUBLE_VLAN_TERMINATION
 
diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4
index 2d6a1d4..3fadebf 100644
--- a/pipelines/fabric/src/main/resources/include/parser.p4
+++ b/pipelines/fabric/src/main/resources/include/parser.p4
@@ -43,6 +43,8 @@
         fabric_metadata.last_eth_type = hdr.ethernet.eth_type;
         fabric_metadata.vlan_id = DEFAULT_VLAN_ID;
         transition select(hdr.ethernet.eth_type){
+            ETHERTYPE_QINQ: parse_vlan_tag;
+            ETHERTYPE_QINQ_NON_STD: parse_vlan_tag;
             ETHERTYPE_VLAN: parse_vlan_tag;
             ETHERTYPE_MPLS: parse_mpls;
             ETHERTYPE_IPV4: pre_parse_ipv4;
@@ -63,8 +65,6 @@
             ETHERTYPE_MPLS: parse_mpls;
 #if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
             ETHERTYPE_VLAN: parse_inner_vlan_tag;
-            ETHERTYPE_QINQ: parse_inner_vlan_tag;
-            ETHERTYPE_QINQ_NON_STD: parse_inner_vlan_tag;
 #endif // WITH_XCONNECT
             default: accept;
         }
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
index 911f55f..933529d 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
@@ -409,6 +409,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -472,18 +484,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -1166,7 +1166,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -4041,6 +4041,25 @@
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["ethernet", "eth_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x88a8"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 105,
+            "column" : 31,
+            "source_fragment" : "0x88A8; ..."
+          }
         }
       ]
     },
@@ -4063,7 +4082,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
           }
@@ -4078,7 +4097,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -4168,7 +4187,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4250,7 +4269,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 350,
+            "line" : 351,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           }
@@ -4272,7 +4291,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4321,7 +4340,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -4343,7 +4362,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4392,7 +4411,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -6303,7 +6322,7 @@
           "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6332,7 +6351,7 @@
           "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -6361,7 +6380,7 @@
           "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -6390,7 +6409,7 @@
           "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 346,
+            "line" : 347,
             "column" : 12,
             "source_fragment" : "push_vlan()"
           },
@@ -6419,7 +6438,7 @@
           "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 348,
             "column" : 12,
             "source_fragment" : "push_inner_vlan()"
           },
@@ -6448,7 +6467,7 @@
           "id" : 42,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 350,
+            "line" : 351,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           },
@@ -6477,7 +6496,7 @@
           "id" : 43,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -6566,7 +6585,7 @@
           "id" : 46,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -6595,7 +6614,7 @@
           "id" : 47,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -6624,7 +6643,7 @@
           "id" : 48,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6653,7 +6672,7 @@
           "id" : 49,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -6682,7 +6701,7 @@
           "id" : 50,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6802,7 +6821,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -6855,7 +6874,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -6881,7 +6900,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -6904,7 +6923,7 @@
           "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 344,
+            "line" : 345,
             "column" : 12,
             "source_fragment" : "fabric_metadata.push_double_vlan == true"
           },
@@ -6937,7 +6956,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -6967,7 +6986,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -6993,7 +7012,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -7016,7 +7035,7 @@
           "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -7042,7 +7061,7 @@
           "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -7065,7 +7084,7 @@
           "id" : 32,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
index 10538ac..5a7432d 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
@@ -754,6 +754,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -829,18 +841,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -2127,7 +2127,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -14709,6 +14709,25 @@
             "column" : 31,
             "source_fragment" : "0x8100; ..."
           }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["ethernet", "eth_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x88a8"
+            }
+          ],
+          "source_info" : {
+            "filename" : "include/control/../define.p4",
+            "line" : 105,
+            "column" : 31,
+            "source_fragment" : "0x88A8; ..."
+          }
         }
       ]
     },
@@ -14731,7 +14750,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
           }
@@ -14746,7 +14765,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -14836,7 +14855,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -14918,7 +14937,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 350,
+            "line" : 351,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           }
@@ -14940,7 +14959,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -14989,7 +15008,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -15011,7 +15030,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -15060,7 +15079,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -15082,7 +15101,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 377,
             "column" : 45,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -15131,7 +15150,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 376,
             "column" : 16,
             "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1"
           }
@@ -18525,7 +18544,7 @@
           "id" : 67,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -18554,7 +18573,7 @@
           "id" : 68,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -18583,7 +18602,7 @@
           "id" : 69,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -18612,7 +18631,7 @@
           "id" : 70,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 346,
+            "line" : 347,
             "column" : 12,
             "source_fragment" : "push_vlan()"
           },
@@ -18641,7 +18660,7 @@
           "id" : 71,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 347,
+            "line" : 348,
             "column" : 12,
             "source_fragment" : "push_inner_vlan()"
           },
@@ -18670,7 +18689,7 @@
           "id" : 72,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 350,
+            "line" : 351,
             "column" : 12,
             "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
           },
@@ -18699,7 +18718,7 @@
           "id" : 73,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -18788,7 +18807,7 @@
           "id" : 76,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -18817,7 +18836,7 @@
           "id" : 77,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -18846,7 +18865,7 @@
           "id" : 78,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -18875,7 +18894,7 @@
           "id" : 79,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -18904,7 +18923,7 @@
           "id" : 80,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -18933,7 +18952,7 @@
           "id" : 81,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 375,
+            "line" : 376,
             "column" : 35,
             "source_fragment" : "="
           },
@@ -18962,7 +18981,7 @@
           "id" : 82,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 377,
             "column" : 45,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -20204,7 +20223,7 @@
           "id" : 34,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -20257,7 +20276,7 @@
           "id" : 35,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -20283,7 +20302,7 @@
           "id" : 36,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -20306,7 +20325,7 @@
           "id" : 37,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 344,
+            "line" : 345,
             "column" : 12,
             "source_fragment" : "fabric_metadata.push_double_vlan == true"
           },
@@ -20339,7 +20358,7 @@
           "id" : 38,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -20369,7 +20388,7 @@
           "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -20395,7 +20414,7 @@
           "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -20418,7 +20437,7 @@
           "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -20444,7 +20463,7 @@
           "id" : 42,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -20467,7 +20486,7 @@
           "id" : 43,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
@@ -20493,7 +20512,7 @@
           "id" : 44,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 374,
+            "line" : 375,
             "column" : 21,
             "source_fragment" : "hdr.ipv6.isValid()"
           },
@@ -20516,7 +20535,7 @@
           "id" : 45,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 376,
+            "line" : 377,
             "column" : 20,
             "source_fragment" : "hdr.ipv6.hop_limit == 0"
           },
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 f8bab98..7aa7642 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
@@ -562,6 +562,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -625,18 +637,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -1330,7 +1330,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -9491,7 +9491,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
           }
@@ -9506,7 +9506,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -9596,7 +9596,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -9678,7 +9678,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -9727,7 +9727,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -9749,7 +9749,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -9798,7 +9798,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -11327,7 +11327,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -11356,7 +11356,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -11385,7 +11385,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -11414,7 +11414,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -11503,7 +11503,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -11532,7 +11532,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -11561,7 +11561,7 @@
           "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -11590,7 +11590,7 @@
           "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -11619,7 +11619,7 @@
           "id" : 32,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -12686,7 +12686,7 @@
           "id" : 15,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -12739,7 +12739,7 @@
           "id" : 16,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -12765,7 +12765,7 @@
           "id" : 17,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -12788,7 +12788,7 @@
           "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -12818,7 +12818,7 @@
           "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -12844,7 +12844,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -12867,7 +12867,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -12893,7 +12893,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -12916,7 +12916,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
index 65bcce8..a4997b3 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
@@ -622,6 +622,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -685,18 +697,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -1596,7 +1596,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -11064,7 +11064,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
           }
@@ -11079,7 +11079,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -11169,7 +11169,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -11251,7 +11251,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -11300,7 +11300,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -11322,7 +11322,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -11371,7 +11371,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -13579,7 +13579,7 @@
           "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -13608,7 +13608,7 @@
           "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -13637,7 +13637,7 @@
           "id" : 42,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -13666,7 +13666,7 @@
           "id" : 43,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -13755,7 +13755,7 @@
           "id" : 46,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -13784,7 +13784,7 @@
           "id" : 47,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -13813,7 +13813,7 @@
           "id" : 48,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -13842,7 +13842,7 @@
           "id" : 49,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -13871,7 +13871,7 @@
           "id" : 50,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -14967,7 +14967,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -15020,7 +15020,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -15046,7 +15046,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -15069,7 +15069,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -15099,7 +15099,7 @@
           "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -15125,7 +15125,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -15148,7 +15148,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -15174,7 +15174,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -15197,7 +15197,7 @@
           "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
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 14c6701..0f6a839 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
@@ -437,6 +437,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -500,18 +512,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -1258,7 +1258,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -4235,7 +4235,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
           }
@@ -4250,7 +4250,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -4340,7 +4340,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4422,7 +4422,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4471,7 +4471,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -4493,7 +4493,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -4542,7 +4542,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -6451,7 +6451,7 @@
           "id" : 39,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6480,7 +6480,7 @@
           "id" : 40,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -6509,7 +6509,7 @@
           "id" : 41,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -6538,7 +6538,7 @@
           "id" : 42,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -6627,7 +6627,7 @@
           "id" : 45,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -6656,7 +6656,7 @@
           "id" : 46,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -6685,7 +6685,7 @@
           "id" : 47,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6714,7 +6714,7 @@
           "id" : 48,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -6743,7 +6743,7 @@
           "id" : 49,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -6863,7 +6863,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -6916,7 +6916,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -6942,7 +6942,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -6965,7 +6965,7 @@
           "id" : 25,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -6995,7 +6995,7 @@
           "id" : 26,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -7021,7 +7021,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -7044,7 +7044,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -7070,7 +7070,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -7093,7 +7093,7 @@
           "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },
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 bc0e350..a51ce3a 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
@@ -377,6 +377,18 @@
           "transitions" : [
             {
               "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x9100",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
               "value" : "0x8100",
               "mask" : null,
               "next_state" : "parse_vlan_tag"
@@ -440,18 +452,6 @@
               "next_state" : "parse_inner_vlan_tag"
             },
             {
-              "type" : "hexstr",
-              "value" : "0x88a8",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
-              "type" : "hexstr",
-              "value" : "0x9100",
-              "mask" : null,
-              "next_state" : "parse_inner_vlan_tag"
-            },
-            {
               "value" : "default",
               "mask" : null,
               "next_state" : null
@@ -1005,7 +1005,7 @@
       "binding" : "FabricEgress.egress_next.egress_vlan",
       "source_info" : {
         "filename" : "include/control/next.p4",
-        "line" : 309,
+        "line" : 310,
         "column" : 50,
         "source_fragment" : "egress_vlan_counter"
       }
@@ -2675,7 +2675,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 312,
+            "line" : 313,
             "column" : 8,
             "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type"
           }
@@ -2690,7 +2690,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 313,
+            "line" : 314,
             "column" : 8,
             "source_fragment" : "hdr.vlan_tag.setInvalid()"
           }
@@ -2780,7 +2780,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -2862,7 +2862,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -2911,7 +2911,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 12,
             "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
           }
@@ -2933,7 +2933,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           }
@@ -2982,7 +2982,7 @@
           ],
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 16,
             "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
           }
@@ -4212,7 +4212,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 334,
+            "line" : 335,
             "column" : 12,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -4241,7 +4241,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 36,
             "source_fragment" : "pop_mpls_if_present()"
           },
@@ -4270,7 +4270,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 340,
+            "line" : 341,
             "column" : 12,
             "source_fragment" : "set_mpls()"
           },
@@ -4299,7 +4299,7 @@
           "id" : 24,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 317,
+            "line" : 318,
             "column" : 10,
             "source_fragment" : "egress_vlan"
           },
@@ -4388,7 +4388,7 @@
           "id" : 27,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 357,
+            "line" : 358,
             "column" : 20,
             "source_fragment" : "push_vlan()"
           },
@@ -4417,7 +4417,7 @@
           "id" : 28,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 366,
+            "line" : 367,
             "column" : 25,
             "source_fragment" : "="
           },
@@ -4446,7 +4446,7 @@
           "id" : 29,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 35,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -4475,7 +4475,7 @@
           "id" : 30,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 370,
+            "line" : 371,
             "column" : 29,
             "source_fragment" : "="
           },
@@ -4504,7 +4504,7 @@
           "id" : 31,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 39,
             "source_fragment" : "mark_to_drop(standard_metadata)"
           },
@@ -4595,7 +4595,7 @@
           "id" : 15,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 332,
+            "line" : 333,
             "column" : 12,
             "source_fragment" : "fabric_metadata.is_multicast == true ..."
           },
@@ -4648,7 +4648,7 @@
           "id" : 16,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 337,
+            "line" : 338,
             "column" : 12,
             "source_fragment" : "fabric_metadata.mpls_label == 0"
           },
@@ -4674,7 +4674,7 @@
           "id" : 17,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 338,
+            "line" : 339,
             "column" : 16,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -4697,7 +4697,7 @@
           "id" : 18,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 354,
+            "line" : 355,
             "column" : 16,
             "source_fragment" : "!egress_vlan.apply().hit"
           },
@@ -4727,7 +4727,7 @@
           "id" : 19,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 356,
+            "line" : 357,
             "column" : 20,
             "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
           },
@@ -4753,7 +4753,7 @@
           "id" : 20,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 365,
+            "line" : 366,
             "column" : 12,
             "source_fragment" : "hdr.mpls.isValid()"
           },
@@ -4776,7 +4776,7 @@
           "id" : 21,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 367,
+            "line" : 368,
             "column" : 16,
             "source_fragment" : "hdr.mpls.ttl == 0"
           },
@@ -4802,7 +4802,7 @@
           "id" : 22,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 369,
+            "line" : 370,
             "column" : 15,
             "source_fragment" : "hdr.ipv4.isValid()"
           },
@@ -4825,7 +4825,7 @@
           "id" : 23,
           "source_info" : {
             "filename" : "include/control/next.p4",
-            "line" : 371,
+            "line" : 372,
             "column" : 20,
             "source_fragment" : "hdr.ipv4.ttl == 0"
           },