diff --git a/iopsys-brcm63xx-arm/base-files/sbin/vlanconf b/iopsys-brcm63xx-arm/base-files/sbin/vlanconf index 5f346affa4cdc0c845e1141e5a3b83dc9ea5eceb..49007fc95f31b55c97f3f1b6353d40c9a42a3f2d 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