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;
}