[VOL-2552][VOL-2517] Handling 4096 as transaprent VLAN
Change-Id: I537f7a374b3f25b4c077b9088088f44aac92cd74
diff --git a/internal/pkg/openflow/parseGrpcReturn.go b/internal/pkg/openflow/parseGrpcReturn.go
index 0ee2cec..a5bd1d1 100644
--- a/internal/pkg/openflow/parseGrpcReturn.go
+++ b/internal/pkg/openflow/parseGrpcReturn.go
@@ -67,12 +67,26 @@
case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
ofpVlanVid := ofp.NewOxmVlanVid()
val := ofbField.GetValue()
- if val != nil {
- vlanId := val.(*openflow_13.OfpOxmOfbField_VlanVid)
- ofpVlanVid.Value = uint16(vlanId.VlanVid) | 0x1000
- } else {
+ if val == nil {
ofpVlanVid.Value = uint16(0)
+ return ofpVlanVid, 2
}
+ vlanId := val.(*openflow_13.OfpOxmOfbField_VlanVid)
+ if ofbField.HasMask {
+ ofpVlanVidMasked := ofp.NewOxmVlanVidMasked()
+ valMask := ofbField.GetMask()
+ vlanMask := valMask.(*openflow_13.OfpOxmOfbField_VlanVidMask)
+ if vlanId.VlanVid == 4096 && vlanMask.VlanVidMask == 4096 {
+ ofpVlanVidMasked.Value = uint16(vlanId.VlanVid)
+ ofpVlanVidMasked.ValueMask = uint16(vlanMask.VlanVidMask)
+ } else {
+ ofpVlanVidMasked.Value = uint16(vlanId.VlanVid) | 0x1000
+ ofpVlanVidMasked.ValueMask = uint16(vlanMask.VlanVidMask)
+
+ }
+ return ofpVlanVidMasked, 4
+ }
+ ofpVlanVid.Value = uint16(vlanId.VlanVid) | 0x1000
return ofpVlanVid, 2
case voltha.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
ofpMetadata := ofp.NewOxmMetadata()