X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcu_stub%2Fcu_f1ap_msg_hdl.c;h=07e176c8376eede6702cbdb3c5a0e816b84a944d;hb=62605166db94fd7d52f32de84dea8c7006e0f4c5;hp=d6d1c6fe407f5a3a83dcca7aef67236644bde602;hpb=5930d5e34206cae1908b3b830d5aad02d70a75e0;p=o-du%2Fl2.git diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index d6d1c6fe4..07e176c83 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -1021,18 +1021,18 @@ uint8_t fillSrbCfg(uint8_t srbId, SRB_ToAddModList_t *bearerCfg) * * ****************************************************************/ -uint8_t fillMasterCellGroup(OCTET_STRING_t *masterCellGroup) +uint8_t fillMasterCellGroup(uint8_t ueId, OCTET_STRING_t *masterCellGroup) { uint8_t ret = ROK; masterCellGroup->buf = NULLP; - if(f1apMsgDb.duToCuContainer.buf) + if(ueCb[ueId-1].f1apMsgDb.duToCuContainer.buf) { - masterCellGroup->size = f1apMsgDb.duToCuContainer.size; + masterCellGroup->size = ueCb[ueId-1].f1apMsgDb.duToCuContainer.size; CU_ALLOC(masterCellGroup->buf, masterCellGroup->size); if(masterCellGroup->buf != NULLP) { - memcpy(masterCellGroup->buf, f1apMsgDb.duToCuContainer.buf,\ - masterCellGroup->size); + memcpy(masterCellGroup->buf, ueCb[ueId-1].f1apMsgDb.duToCuContainer.buf,\ + masterCellGroup->size); } else { @@ -1063,7 +1063,7 @@ uint8_t fillMasterCellGroup(OCTET_STRING_t *masterCellGroup) * * ****************************************************************/ -uint8_t fillRRCSetupIE(RRCSetup_IEs_t *rrcSetupIE) +uint8_t fillRRCSetupIE(uint8_t ueId, RRCSetup_IEs_t *rrcSetupIE) { uint8_t ret = ROK; if(rrcSetupIE) @@ -1075,7 +1075,7 @@ uint8_t fillRRCSetupIE(RRCSetup_IEs_t *rrcSetupIE) } if(ret == ROK) { - ret = fillMasterCellGroup(&rrcSetupIE->masterCellGroup); + ret = fillMasterCellGroup(ueId, &rrcSetupIE->masterCellGroup); } else { @@ -1103,7 +1103,7 @@ uint8_t fillRRCSetupIE(RRCSetup_IEs_t *rrcSetupIE) * * ****************************************************************/ -uint8_t fillDlCcchRrcMsg(RRCContainer_t *rrcContainer) +uint8_t fillDlCcchRrcMsg(uint8_t ueId, RRCContainer_t *rrcContainer) { uint8_t ret = ROK; uint16_t idx2; @@ -1117,71 +1117,71 @@ uint8_t fillDlCcchRrcMsg(RRCContainer_t *rrcContainer) CU_ALLOC(dl_CCCH_Msg.message.choice.c1 , sizeof(DL_CCCH_MessageType_t)); if(dl_CCCH_Msg.message.choice.c1 != NULLP) { - dl_CCCH_Msg.message.choice.c1->present = DL_CCCH_MessageType__c1_PR_rrcSetup; - CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup, sizeof(RRCSetup_t)); - if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup != NULLP) - { - dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->rrc_TransactionIdentifier = 0; - dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->criticalExtensions.\ - present = RRCSetup__criticalExtensions_PR_rrcSetup; - /* Fill RRC Setup IE */ - CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ - criticalExtensions.choice.rrcSetup, sizeof(RRCSetup_IEs_t)); - if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ - criticalExtensions.choice.rrcSetup != NULLP) - { - ret = fillRRCSetupIE(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ - criticalExtensions.choice.rrcSetup); + dl_CCCH_Msg.message.choice.c1->present = DL_CCCH_MessageType__c1_PR_rrcSetup; + CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup, sizeof(RRCSetup_t)); + if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup != NULLP) + { + dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->rrc_TransactionIdentifier = 0; + dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->criticalExtensions.\ + present = RRCSetup__criticalExtensions_PR_rrcSetup; + /* Fill RRC Setup IE */ + CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ + criticalExtensions.choice.rrcSetup, sizeof(RRCSetup_IEs_t)); + if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ + criticalExtensions.choice.rrcSetup != NULLP) + { + ret = fillRRCSetupIE(ueId, dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\ + criticalExtensions.choice.rrcSetup); - if(ret == ROK) - { - /* encode DL-CCCH message into RRC Container */ - xer_fprint(stdout, &asn_DEF_DL_CCCH_MessageType, &dl_CCCH_Msg); - memset(encBuf, 0, ENC_BUF_MAX_LEN); - encBufSize = 0; - encRetVal = aper_encode(&asn_DEF_DL_CCCH_MessageType, 0, &dl_CCCH_Msg, PrepFinalEncBuf, encBuf); - /* Encode results */ - if(encRetVal.encoded == ENCODE_FAIL) - { - DU_LOG( "\nERROR --> F1AP : Could not encode RRCContainer for DL-CCCH Msg(at %s)\n",\ - encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); - return RFAILED; - } - else - { - DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for RRCContainer for DL-CCCH Msg\n"); - for(int i = 0; i< encBufSize; i++) - { - DU_LOG("%x",encBuf[i]); - } - rrcContainer->size = encBufSize; - CU_ALLOC(rrcContainer->buf, rrcContainer->size); - if(rrcContainer->buf != NULLP) - { - memset(rrcContainer->buf, 0, encBufSize); - for(idx2 = 0; idx2 < encBufSize; idx2++) - { - rrcContainer->buf[idx2] = encBuf[idx2]; - } - } - } - } - else - { - ret = RFAILED; - } - } - else - { - DU_LOG("\nERROR --> F1AP: Memory Alloc failed for RRC Setup Msg at fillDlCcchRrcMsg()"); - ret = RFAILED; - } - } - else - { - DU_LOG("\nERROR --> F1AP: Memory Alloc failed for RRC Msg at fillDlCcchRrcMsg()"); - ret = RFAILED; - } + if(ret == ROK) + { + /* encode DL-CCCH message into RRC Container */ + xer_fprint(stdout, &asn_DEF_DL_CCCH_MessageType, &dl_CCCH_Msg); + memset(encBuf, 0, ENC_BUF_MAX_LEN); + encBufSize = 0; + encRetVal = aper_encode(&asn_DEF_DL_CCCH_MessageType, 0, &dl_CCCH_Msg, PrepFinalEncBuf, encBuf); + /* Encode results */ + if(encRetVal.encoded == ENCODE_FAIL) + { + DU_LOG( "\nERROR --> F1AP : Could not encode RRCContainer for DL-CCCH Msg(at %s)\n",\ + encRetVal.failed_type ? encRetVal.failed_type->name : "unknown"); + return RFAILED; + } + else + { + DU_LOG("\nDEBUG --> F1AP : Created APER encoded buffer for RRCContainer for DL-CCCH Msg\n"); + for(int i = 0; i< encBufSize; i++) + { + DU_LOG("%x",encBuf[i]); + } + rrcContainer->size = encBufSize; + CU_ALLOC(rrcContainer->buf, rrcContainer->size); + if(rrcContainer->buf != NULLP) + { + memset(rrcContainer->buf, 0, encBufSize); + for(idx2 = 0; idx2 < encBufSize; idx2++) + { + rrcContainer->buf[idx2] = encBuf[idx2]; + } + } + } + } + else + { + ret = RFAILED; + } + } + else + { + DU_LOG("\nERROR --> F1AP: Memory Alloc failed for RRC Setup Msg at fillDlCcchRrcMsg()"); + ret = RFAILED; + } + } + else + { + DU_LOG("\nERROR --> F1AP: Memory Alloc failed for RRC Msg at fillDlCcchRrcMsg()"); + ret = RFAILED; + } } else { @@ -1529,14 +1529,14 @@ uint8_t fillDlDcchRrcMsg(RRCContainer_t *rrcContainer) * * ****************************************************************/ -uint8_t BuildDLRRCContainer(uint8_t rrcMsgType, RRCContainer_t *rrcContainer) +uint8_t BuildDLRRCContainer(uint8_t ueId, uint8_t rrcMsgType, RRCContainer_t *rrcContainer) { uint8_t ret, bufLen; ret =ROK; if(rrcMsgType == RRC_SETUP) { - ret = fillDlCcchRrcMsg(rrcContainer); + ret = fillDlCcchRrcMsg(ueId, rrcContainer); if(ret == RFAILED) DU_LOG("\nERROR --> F1AP: Failed to fill DL-CCCH Msg at RRC SETUP"); } @@ -1600,7 +1600,7 @@ uint8_t BuildDLRRCContainer(uint8_t rrcMsgType, RRCContainer_t *rrcContainer) * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType) +uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t ueId, uint8_t srbId, uint8_t rrcMsgType) { uint8_t elementCnt = 0; uint8_t ieId; @@ -1671,8 +1671,8 @@ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType) dlRRCMsg->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; dlRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject; dlRRCMsg->protocolIEs.list.array[idx]->value.present = \ - DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; - dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID; + DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; + dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = ueId; /* GNB DU UE F1AP ID */ idx++; @@ -1680,8 +1680,8 @@ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType) ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; dlRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject; dlRRCMsg->protocolIEs.list.array[idx]->value.present = \ - DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; - dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID; + DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; + dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = ueId; /* SRBID */ idx++; @@ -1696,8 +1696,8 @@ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType) dlRRCMsg->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_RRCContainer; dlRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject; dlRRCMsg->protocolIEs.list.array[idx]->value.present = \ - DLRRCMessageTransferIEs__value_PR_RRCContainer; - BuildDLRRCContainer(rrcMsgType, &dlRRCMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer); + DLRRCMessageTransferIEs__value_PR_RRCContainer; + BuildDLRRCContainer(ueId, rrcMsgType, &dlRRCMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer); xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg); @@ -1750,10 +1750,10 @@ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType) * * ****************************************************************/ -uint8_t setDlRRCMsgType() +uint8_t setDlRRCMsgType(uint8_t ueId) { uint8_t rrcMsgType = 0; - switch(f1apMsgDb.dlRrcMsgCount) + switch(ueCb[ueId -1].f1apMsgDb.dlRrcMsgCount) { case RRC_SETUP: rrcMsgType = RRC_SETUP; @@ -1798,7 +1798,7 @@ uint8_t setDlRRCMsgType() uint8_t procInitULRRCMsg(F1AP_PDU_t *f1apMsg) { - uint8_t idx, rrcMsgType; + uint8_t idx, rrcMsgType, gnbDuUeF1apId; uint8_t ret =ROK; InitialULRRCMessageTransfer_t *initULRRCMsg = NULLP; DU_LOG("\nINFO --> F1AP : filling the required values in DB in procInitULRRCMsg"); @@ -1809,49 +1809,51 @@ uint8_t procInitULRRCMsg(F1AP_PDU_t *f1apMsg) { switch(initULRRCMsg->protocolIEs.list.array[idx]->id) { - case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: - break; - case ProtocolIE_ID_id_NRCGI: - break; - case ProtocolIE_ID_id_C_RNTI: - break; - case ProtocolIE_ID_id_RRCContainer: - break; - case ProtocolIE_ID_id_DUtoCURRCContainer: - { - if((initULRRCMsg->protocolIEs.list.array[idx]->value.choice\ - .DUtoCURRCContainer.size > 0) && (initULRRCMsg->protocolIEs\ - .list.array[idx]->value.choice.DUtoCURRCContainer.buf != NULLP)) - { - DU_LOG("\nINFO --> Received Du to Cu RRC Container "); - f1apMsgDb.duToCuContainer.size = initULRRCMsg->protocolIEs\ - .list.array[idx]->value.choice.DUtoCURRCContainer.size; - CU_ALLOC(f1apMsgDb.duToCuContainer.buf, \ - f1apMsgDb.duToCuContainer.size); - if(f1apMsgDb.duToCuContainer.buf != NULLP) - { - memcpy(f1apMsgDb.duToCuContainer.buf, initULRRCMsg->protocolIEs\ - .list.array[idx]->value.choice.DUtoCURRCContainer.buf, f1apMsgDb\ - .duToCuContainer.size); - } - } - else - { - DU_LOG("\nERROR --> Failed to receive Du to Cu RRC Container "); - ret = RFAILED; - } - break; - } - default: - DU_LOG("\nERROR --> Invalid Event %ld", initULRRCMsg->protocolIEs.list.array[idx]->id); - break; + case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + gnbDuUeF1apId = initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID; + break; + case ProtocolIE_ID_id_NRCGI: + break; + case ProtocolIE_ID_id_C_RNTI: + break; + case ProtocolIE_ID_id_RRCContainer: + break; + case ProtocolIE_ID_id_DUtoCURRCContainer: + { + if((initULRRCMsg->protocolIEs.list.array[idx]->value.choice\ + .DUtoCURRCContainer.size > 0) && (initULRRCMsg->protocolIEs\ + .list.array[idx]->value.choice.DUtoCURRCContainer.buf != NULLP)) + { + DU_LOG("\nINFO --> Received Du to Cu RRC Container "); + ueCb[gnbDuUeF1apId-1].ueId = gnbDuUeF1apId; + ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.size = initULRRCMsg->protocolIEs\ + .list.array[idx]->value.choice.DUtoCURRCContainer.size; + CU_ALLOC(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf, \ + ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.size); + if(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf != NULLP) + { + memcpy(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf, initULRRCMsg->protocolIEs\ + .list.array[idx]->value.choice.DUtoCURRCContainer.buf, ueCb[gnbDuUeF1apId-1].f1apMsgDb\ + .duToCuContainer.size); + } + } + else + { + DU_LOG("\nERROR --> Failed to receive Du to Cu RRC Container "); + ret = RFAILED; + } + break; + } + default: + DU_LOG("\nERROR --> Invalid Event %ld", initULRRCMsg->protocolIEs.list.array[idx]->id); + break; } } if(ret == ROK) { - f1apMsgDb.dlRrcMsgCount++; - rrcMsgType = setDlRRCMsgType(); - ret = BuildAndSendDLRRCMessageTransfer(SRB0, rrcMsgType); + ueCb[gnbDuUeF1apId-1].f1apMsgDb.dlRrcMsgCount++; + rrcMsgType = setDlRRCMsgType(gnbDuUeF1apId); + ret = BuildAndSendDLRRCMessageTransfer(gnbDuUeF1apId, SRB0, rrcMsgType); } return ret; } @@ -2238,7 +2240,7 @@ uint8_t BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo) ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ gTP_TEID.buf[2] = 0; ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[3] = 1; + gTP_TEID.buf[3] = cuCfgParams.egtpParams.currTunnelId++; return ROK; }/*End of BuildULTnlInfo*/ @@ -6573,6 +6575,27 @@ uint8_t BuildAndSendUeContextSetupReq(uint8_t cuUeF1apId, uint8_t duUeF1apId, \ return ret; }/* End of BuildAndSendUeContextSetupReq*/ + +uint8_t procUeContextSetupResponse(F1AP_PDU_t *f1apMsg) +{ + uint8_t idx, duUeF1apId; + UEContextSetupResponse_t *ueCtxtSetupRsp; + ueCtxtSetupRsp = &f1apMsg->choice.successfulOutcome->value.choice.UEContextSetupResponse; + + for(idx=0; idx < ueCtxtSetupRsp->protocolIEs.list.count; idx++) + { + switch(ueCtxtSetupRsp->protocolIEs.list.array[idx]->id) + { + case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + { + duUeF1apId = ueCtxtSetupRsp->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID; + break; + } + } + } + ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */ +} + /**************************************************************** * @brief Function to process Ul Rrc Msg received from DU * @@ -6638,12 +6661,12 @@ uint8_t procUlRrcMsg(F1AP_PDU_t *f1apMsg) } if(srbId == 1) { - f1apMsgDb.dlRrcMsgCount++; - rrcMsgType = setDlRRCMsgType(); + ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++; + rrcMsgType = setDlRRCMsgType(duUeF1apId); if(rrcMsgType == REGISTRATION_ACCEPT) { - DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Registration Accept"); - ret = BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType); + DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Registration Accept"); + ret = BuildAndSendDLRRCMessageTransfer(duUeF1apId, srbId, rrcMsgType); } if(rrcMsgType == UE_CONTEXT_SETUP_REQ) { @@ -6653,19 +6676,19 @@ uint8_t procUlRrcMsg(F1AP_PDU_t *f1apMsg) } if(rrcMsgType == SECURITY_MODE_COMPLETE) { - /* To trigger the DL RRC Msg for RRC Reconfig */ - f1apMsgDb.dlRrcMsgCount++; - rrcMsgType = setDlRRCMsgType(); - if(rrcMsgType == RRC_RECONFIG) - { - DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Reconfig"); - BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType); - } + /* To trigger the DL RRC Msg for RRC Reconfig */ + ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++; + rrcMsgType = setDlRRCMsgType(duUeF1apId); + if(rrcMsgType == RRC_RECONFIG) + { + DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Reconfig"); + BuildAndSendDLRRCMessageTransfer(duUeF1apId, srbId, rrcMsgType); + } } if(rrcMsgType == UE_CONTEXT_MOD_REQ) { DU_LOG("\nINFO --> F1AP: Sending UE Context Modification Request"); - BuildAndSendUeContextModificationReq(); + BuildAndSendUeContextModificationReq(duUeF1apId); } } return ret; @@ -6953,7 +6976,7 @@ uint8_t BuildUlTnlInfoforDrb2(ULUPTNLInformation_ToBeSetup_List_t *ulInfo) ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->\ gTP_TEID.buf[2] = 0; ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->\ - gTP_TEID.buf[3] = 2; + gTP_TEID.buf[3] = cuCfgParams.egtpParams.currTunnelId++; return ROK; }/*End of BuildULTnlInfo*/ @@ -7347,7 +7370,7 @@ void FreeUeContextModicationRequest(F1AP_PDU_t *f1apMsg) * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendUeContextModificationReq() +uint8_t BuildAndSendUeContextModificationReq(uint8_t ueId) { uint8_t ieIdx = 0; uint8_t elementCnt = 0; @@ -7408,16 +7431,16 @@ uint8_t BuildAndSendUeContextModificationReq() ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present = \ - UEContextModificationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID; - ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_CU_UE_F1AP_ID =CU_ID; + UEContextModificationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_CU_UE_F1AP_ID = ueId; ieIdx++; ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present=\ - UEContextModificationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID; - ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID =DU_ID; - + UEContextModificationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID; + ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID = ueId; + ieIdx++; ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeSetupMod_List; ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; @@ -7726,7 +7749,7 @@ uint8_t procUeContextReleaseReq(F1AP_PDU_t *f1apMsg) uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg) { bool cellToBeDelete = false; - uint8_t ieIdx = 0; + uint8_t ieIdx = 0, ueIdx = 0; GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP; duCfgUpdate = &f1apMsg->choice.initiatingMessage->value.choice.GNBDUConfigurationUpdate; @@ -7765,7 +7788,11 @@ uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg) } else { - memset(&f1apMsgDb, 0, sizeof(F1apMsgDb)); + for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) + { + CU_FREE(ueCb[ueIdx].f1apMsgDb.duToCuContainer.buf, ueCb[ueIdx].f1apMsgDb.duToCuContainer.size); + memset(&ueCb[ueIdx], 0, sizeof(UeCb)); + } } return ROK; @@ -7908,7 +7935,7 @@ void F1APMsgHdlr(Buffer *mBuf) case SuccessfulOutcome__value_PR_UEContextSetupResponse: { DU_LOG("\nINFO --> F1AP : UE ContextSetupResponse received"); - f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */ + procUeContextSetupResponse(f1apMsg); break; } case SuccessfulOutcome__value_PR_UEContextModificationResponse: