From 14bc32509bcf3f8fdf4b869dd98c8fe70999ae3c Mon Sep 17 00:00:00 2001
From: Artee Roy <a.roy@gxgroup.eu>
Date: Tue, 14 Dec 2021 16:20:32 +0530
Subject: [PATCH] Feature# 5101 Q-in-Q transparent inner VLAN

---
 iopsys-brcm63xx-arm/base-files/sbin/vlanconf | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/iopsys-brcm63xx-arm/base-files/sbin/vlanconf b/iopsys-brcm63xx-arm/base-files/sbin/vlanconf
index 5f346affa..49007fc95 100755
--- a/iopsys-brcm63xx-arm/base-files/sbin/vlanconf
+++ b/iopsys-brcm63xx-arm/base-files/sbin/vlanconf
@@ -392,7 +392,13 @@ create_vlan() {
 			vlanCtl_filterOnTagVid $VLANID $TAGINDEX
 
 			TAGINDEX=1
-			[ $TYPE == "8021ad" ] && vlanCtl_filterOnTagVid $INNER_VLANID $TAGINDEX
+
+			# The check for INNER_VLANID -ne 0 is for supporting any inner vlan in QinQ
+			# if INNER_VLANID is specified, then, this rule is added normally:
+			# vlanctl  --set-rxif NAME --filter-vid VLANID 0 --filter-vid INNER_VLANID 1 --pop-tag --if IFNAME --rx --tags 2 --rule-append
+			# Otherwise, pop outer tag and continue:
+			# vlanctl  --set-rxif NAME --filter-vid VLANID --pop-tag --if IFNAME --rx --tags 2 --rule-append
+			[ "$TYPE" == "8021ad" -a $INNER_VLANID -ne 0 ] && vlanCtl_filterOnTagVid $INNER_VLANID $TAGINDEX
 
 			# For managed interfaces, pop the vlan header at rx
 			if [ $UNMANAGED -eq 0 ]; then
@@ -458,7 +464,13 @@ create_vlan() {
 			vlanCtl_filterOnTagVid $VLANID $TAGINDEX
 
 			TAGINDEX=1
-			[ $TYPE == "8021ad" ] && vlanCtl_filterOnTagVid $INNER_VLANID $TAGINDEX
+
+			# The check for INNER_VLANID -ne 0 is for supporting any inner vlan in QinQ
+			# if INNER_VLANID is specified, then, this rule is added normally:
+			# vlanctl  --set-rxif NAME --filter-vid VLANID 0 --filter-vid INNER_VLANID 1 --pop-tag --if IFNAME --rx --tags 2 --rule-append
+			# Otherwise, pop outer tag and continue:
+			# vlanctl  --set-rxif NAME --filter-vid VLANID --pop-tag --if IFNAME --rx --tags 2 --rule-append
+			[ "$TYPE" == "8021ad" -a $INNER_VLANID -ne 0 ] && vlanCtl_filterOnTagVid $INNER_VLANID $TAGINDEX
 
 			vlanCtl_cmdPopVlanTag
 			[ $TYPE == "8021ad" ] && vlanCtl_cmdPopVlanTag
-- 
GitLab