VOL-4059 If multicast gem configuring for one UNI, the already created Multicast GEM and its InterworkingTP shouldn’t be created again.

Change-Id: I9574fb0f08053e441e7a60157f078a1ad3287b2a
diff --git a/internal/pkg/onuadaptercore/omci_ani_config.go b/internal/pkg/onuadaptercore/omci_ani_config.go
index 5701985..b6ca5e4 100644
--- a/internal/pkg/onuadaptercore/omci_ani_config.go
+++ b/internal/pkg/onuadaptercore/omci_ani_config.go
@@ -1323,7 +1323,7 @@
 		{
 			oFsm.handleOmciAniConfigDeleteResponseMessage(ctx, msg)
 
-		} //SetResponseType
+		} //DeleteResponseType
 	default:
 		{
 			logger.Errorw(ctx, "uniPonAniConfigFsm - Rx OMCI unhandled MsgType",
@@ -1384,6 +1384,15 @@
 	logger.Debugw(ctx, "GemNWCtp create loop finished", log.Fields{"device-id": oFsm.deviceID})
 	_ = oFsm.pAdaptFsm.pFsm.Event(aniEvRxGemntcpsResp)
 }
+func (oFsm *uniPonAniConfigFsm) hasMulticastGem(ctx context.Context) bool {
+	for _, gemPortAttribs := range oFsm.gemPortAttribsSlice {
+		if gemPortAttribs.isMulticast {
+			logger.Debugw(ctx, "Found multicast gem", log.Fields{"device-id": oFsm.deviceID})
+			return true
+		}
+	}
+	return false
+}
 
 func (oFsm *uniPonAniConfigFsm) performCreatingGemIWs(ctx context.Context) {
 	// for all GemPorts of this T-Cont as given by the size of set gemPortAttribsSlice
@@ -1405,6 +1414,10 @@
 					"GalProfilePointer":                    galEthernetEID,
 				},
 			}
+			if oFsm.pUniTechProf.multicastConfiguredForOtherUniTps(ctx, oFsm.uniTpKey) {
+				logger.Debugw(ctx, "MulticastGemInterworkingTP already exist", log.Fields{"device-id": oFsm.deviceID, "multicast-gem-id": gemPortAttribs.multicastGemID})
+				continue
+			}
 			oFsm.mutexPLastTxMeInstance.Lock()
 			meInstance, err := oFsm.pOmciCC.sendCreateMulticastGemIWTPVar(context.TODO(), oFsm.pDeviceHandler.pOpenOnuAc.omciTimeout,
 				true, oFsm.pAdaptFsm.commChan, meParams)