Merge "[VOL-3987] Do not validate GemPort 4069 as it's reserved for multicast and shared across ONUs"
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 1ee67dd..f9e2e32 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -823,21 +823,24 @@
 		msgObj, err := omcilib.ParseCreateRequest(msg.OmciPkt)
 		if err == nil {
 			if msgObj.EntityClass == me.GemPortNetworkCtpClassID {
-				if used, sn = o.PonPort.isGemPortAllocated(msgObj.EntityInstance); used {
-					onuLogger.WithFields(log.Fields{
-						"IntfId":       o.PonPortID,
-						"OnuId":        o.ID,
-						"GemPortId":    msgObj.EntityInstance,
-						"SerialNumber": o.Sn(),
-					}).Errorf("gemport-already-allocated-to-onu-with-sn-%s", common.OnuSnToString(sn))
-				} else {
-					onuLogger.WithFields(log.Fields{
-						"IntfId":       o.PonPortID,
-						"OnuId":        o.ID,
-						"GemPortId":    msgObj.EntityInstance,
-						"SerialNumber": o.Sn(),
-					}).Trace("storing-gem-port-id-via-omci")
-					o.PonPort.storeGemPort(msgObj.EntityInstance, o.SerialNumber)
+				// GemPort 4069 is reserved for multicast and shared across ONUs
+				if msgObj.EntityInstance != 4069 {
+					if used, sn = o.PonPort.isGemPortAllocated(msgObj.EntityInstance); used {
+						onuLogger.WithFields(log.Fields{
+							"IntfId":       o.PonPortID,
+							"OnuId":        o.ID,
+							"GemPortId":    msgObj.EntityInstance,
+							"SerialNumber": o.Sn(),
+						}).Errorf("gemport-already-allocated-to-onu-with-sn-%s", common.OnuSnToString(sn))
+					} else {
+						onuLogger.WithFields(log.Fields{
+							"IntfId":       o.PonPortID,
+							"OnuId":        o.ID,
+							"GemPortId":    msgObj.EntityInstance,
+							"SerialNumber": o.Sn(),
+						}).Trace("storing-gem-port-id-via-omci")
+						o.PonPort.storeGemPort(msgObj.EntityInstance, o.SerialNumber)
+					}
 				}
 			}
 		}