+ break;
+ }
+ }
+}
+
+bool getE2tProcedureOngoingStatus(char *enbName, E2NodeConnectionHandling &e2NodeConnectionHandling)
+{
+ mdclog_write(MDCLOG_DEBUG, "Inside getE2tProcedureOngoingStatus, Checking for enb %s", enbName);
+ if(strcmp(enbName, "") == 0)
+ {
+ mdclog_write(MDCLOG_DEBUG, "enbName is empty");
+ return false;
+ }
+ else if(connectionHandlingPerE2NodeMap.empty())
+ {
+ mdclog_write(MDCLOG_DEBUG, "connectionHandlingPerE2Node map is empty");
+ return false;
+ }
+ else
+ {
+ std::map<std::string, E2NodeConnectionHandling>::iterator itr = connectionHandlingPerE2NodeMap.begin();
+ while (itr != connectionHandlingPerE2NodeMap.end())
+ {
+ int result = itr->first.compare(enbName);
+ if (result == 0)
+ {
+ mdclog_write(MDCLOG_DEBUG, "enb name in map :%s, status :%d", itr->first.c_str(), itr->second.e2tProcedureOngoingStatus);
+ e2NodeConnectionHandling = itr->second;
+ return true;
+ break;
+ }
+ ++itr;
+ }
+ }
+ return false;
+}
+
+void setE2ProcedureOngoingStatus(char *enbName, E2T_Procedure_States state)
+{
+ printEntryPresentInMap();
+ if(connectionHandlingPerE2NodeMap.empty())
+ {
+ mdclog_write(MDCLOG_DEBUG, "connectionHandlingPerE2Node map is empty");
+ return;
+ }
+ else
+ {
+ mdclog_write(MDCLOG_DEBUG, "Entry Present in connectionHandlingPerE2NodeMap Map");
+ std::map<std::string, E2NodeConnectionHandling>::iterator itr = connectionHandlingPerE2NodeMap.begin();
+ while(itr != connectionHandlingPerE2NodeMap.end())
+ {
+ int result = itr->first.compare(enbName);
+ if (result == 0)
+ {
+ mdclog_write(MDCLOG_DEBUG, "Key %s Found in connectionHandlingPerE2NodeMap Map, Current Procedure is %d", enbName, itr->second.e2tProcedureOngoingStatus);
+ itr->second.e2tProcedureOngoingStatus = state;
+ mdclog_write(MDCLOG_DEBUG, "Current procedure updated to %d", itr->second.e2tProcedureOngoingStatus);
+ break;
+ }
+ ++itr;
+ }
+ }
+}
+
+void insertE2SetupProcedureOngoing(char *enbName, long &transactionID)
+{
+ struct E2NodeConnectionHandling e2NodeConnectionHandling;
+ e2NodeConnectionHandling.e2tProcedureOngoingStatus = E2_SETUP_PROCEDURE_ONGOING;
+ e2NodeConnectionHandling.e2SetupProcedureTransactionId = transactionID;
+
+ std::string key(enbName);
+ printEntryPresentInMap();
+ if(connectionHandlingPerE2NodeMap.empty())
+ {
+ mdclog_write(MDCLOG_DEBUG, "connectionHandlingPerE2Node map is empty");
+ mdclog_write(MDCLOG_DEBUG, "Inserting %s to connectionHandlingPerE2NodeMap Map", enbName);
+
+ connectionHandlingPerE2NodeMap.insert(std::make_pair(key, e2NodeConnectionHandling));
+
+ mdclog_write(MDCLOG_DEBUG, "Default Value after Inserting Key for %s - Value is {e2tProcedureOngoingStatus is %d, e2SetupProcedureTransactionId: %ld}",
+ key.c_str(),
+ e2NodeConnectionHandling.e2tProcedureOngoingStatus,
+ e2NodeConnectionHandling.e2SetupProcedureTransactionId);
+ return;
+ }
+ else
+ {
+ mdclog_write(MDCLOG_DEBUG, "Entry Present in connectionHandlingPerE2NodeMap Map");
+ std::map<std::string, E2NodeConnectionHandling>::iterator itr = connectionHandlingPerE2NodeMap.begin();
+ bool enodebNameFound = false;
+ while(itr != connectionHandlingPerE2NodeMap.end())
+ {
+ int result = itr->first.compare(enbName);
+ if (result == 0)
+ {
+ enodebNameFound = true;
+ break;
+ }
+ ++itr;
+ }
+ if (enodebNameFound == false)
+ {
+ mdclog_write(MDCLOG_DEBUG, "Inserting %s to connectionHandlingPerE2NodeMap Map", enbName);
+ connectionHandlingPerE2NodeMap.insert(std::make_pair(key, e2NodeConnectionHandling));
+
+ mdclog_write(MDCLOG_DEBUG, "Default Value after Inserting Key for %s - Value is {e2tProcedureOngoingStatus is %d, e2SetupProcedureTransactionId: %ld}",
+ key.c_str(),
+ e2NodeConnectionHandling.e2tProcedureOngoingStatus,
+ e2NodeConnectionHandling.e2SetupProcedureTransactionId);
+ }
+ else
+ {
+ mdclog_write(MDCLOG_DEBUG, "Processing E2Setup Req received for same gnb - %s", enbName);
+ setE2ProcedureOngoingStatus(enbName, E2_SETUP_PROCEDURE_ONGOING);
+ }
+ }
+}
+
+E2T_Procedure_States currentE2tProcedureOngoingStatus(char *enbName)
+{
+ printEntryPresentInMap();
+ if(connectionHandlingPerE2NodeMap.empty())
+ {
+ mdclog_write(MDCLOG_DEBUG, "connectionHandlingPerE2Node map is empty");
+ return E2_SETUP_PROCEDURE_NOT_INITIATED;
+ }
+ else
+ {
+ mdclog_write(MDCLOG_DEBUG, "Entry Present in connectionHandlingPerE2NodeMap Map");
+ std::map<std::string, E2NodeConnectionHandling>::iterator itr = connectionHandlingPerE2NodeMap.begin();
+ while(itr != connectionHandlingPerE2NodeMap.end())
+ {
+ int result = itr->first.compare(enbName);
+ if (result == 0)
+ {
+ mdclog_write(MDCLOG_DEBUG, "Key %s Found in connectionHandlingPerE2NodeMap Map, Current Procedure is %d", enbName, itr->second.e2tProcedureOngoingStatus);
+ mdclog_write(MDCLOG_DEBUG, "%s Entry has found", enbName);
+ return itr->second.e2tProcedureOngoingStatus;
+ }
+ ++itr;
+ }
+ mdclog_write(MDCLOG_DEBUG, "No Key %s Found in connectionHandlingPerE2NodeMap Map", enbName);
+ return E2_SETUP_PROCEDURE_NOT_INITIATED;
+ }
+}
+
+bitset<sendMsgMaxBitPosition> getSendMsgBitSetValue(int procedureCode, bitset<requiredIePresentMaxBitSetPosition> isRequiredIesPresent, char* enbName)
+{
+ bitset<sendMsgMaxBitPosition> sendMsgTo(0); // Msg being sent to E2M = 0, Msg being sent to SubMgr = 1
+ switch(procedureCode)
+ {
+ case numberZero:
+ {
+ E2T_Procedure_States currentProcedureOngoing = currentE2tProcedureOngoingStatus(enbName);
+ if ((currentProcedureOngoing == E2_SETUP_PROCEDURE_COMPLETED ||
+ currentProcedureOngoing == RIC_SERVICE_UPDATE_PROCEDURE_ONGOING) &&
+ (isRequiredIesPresent.test(transactionIdIeBitSetPosition)))
+ {
+ sendMsgTo.set(sendMsgToE2MBitSetPosition);
+ }
+ else if ((currentProcedureOngoing == RIC_SUBS_PROCEDURE_ONGOING) &&
+ isRequiredIesPresent.test(ricRequestIdIeBitSetPosition) && isRequiredIesPresent.test(causeIeBitSetPosition))
+ {
+ sendMsgTo.set(sendMsgToSubMgrBitSetPosition);
+ }
+ break;
+ }
+ case ProcedureCode_id_E2setup:
+ case ProcedureCode_id_RICserviceUpdate:
+ {
+ if(isRequiredIesPresent.test(transactionIdIeBitSetPosition))
+ {
+ sendMsgTo.set(sendMsgToE2MBitSetPosition);
+ }
+ break;