X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_ue_mgr.c;h=f796cb90523a271e05e2fc1588562de6ac5a48ec;hb=0b405462775bb65021e41dc4494ed38ce3a9c4f4;hp=4eb2a6759812e30d7ee47b9f748c6fdc2ed5e16e;hpb=377a2d180b617d4df038e1780d4a8de98d7c125f;p=o-du%2Fl2.git diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 4eb2a6759..f796cb905 100644 --- a/src/du_app/du_ue_mgr.c +++ b/src/du_app/du_ue_mgr.c @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # # limitations under the License. # ################################################################################ - *******************************************************************************/ +*******************************************************************************/ /* This file contains UE management handling functionality for DU APP */ #include "common_def.h" #include "lrg.h" @@ -36,7 +36,7 @@ #ifdef O1_ENABLE #include "AlarmInterface.h" -#include "ConfigInterface.h" +#include "CmInterface.h" #endif DuMacDlCcchInd packMacDlCcchIndOpts[] = @@ -102,6 +102,43 @@ DuRlcUeDeleteReq packRlcUeDeleteReqOpts[] = packDuRlcUeDeleteReq /* Light weight-loose coupling */ }; +/****************************************************************** + * + * @brief Function to return Drb LcId + * + * @details + * + * Function : getDrbLcId + * + * Functionality: Function to return Drb LcId + * + * @params[in] drbBitMap + * + * Returns: lcId - SUCCESS + * RFAILED - FAILURE + *****************************************************************/ + +uint8_t getDrbLcId(uint32_t *drbBitMap) +{ + uint8_t bitMask = 1, bitPos = 0; + bitPos = MIN_DRB_LCID; + + while(bitPos <= MAX_DRB_LCID) + { + if((*drbBitMap & (bitMask << bitPos)) == 0) + { + *drbBitMap = ((bitMask << bitPos)| *drbBitMap); + return bitPos; + } + else + { + bitPos++; + } + } + DU_LOG("\nERROR --> DU_APP: Max LC Reached in getDrbLcId()"); + return RFAILED; +} + /******************************************************************* * * @brief Function to fillDlUserDataInfo @@ -129,13 +166,13 @@ uint8_t fillDlUserDataInfo(uint32_t teId, RlcDlUserDataInfo *dlDataMsgInfo) { if(duCb.upTnlCfg[drbIdx] && (duCb.upTnlCfg[drbIdx]->tnlCfg1 != NULLP)) { - if(duCb.upTnlCfg[drbIdx]->tnlCfg1->teId == teId) - { - dlDataMsgInfo->cellId = duCb.upTnlCfg[drbIdx]->cellId; - dlDataMsgInfo->ueIdx = duCb.upTnlCfg[drbIdx]->ueIdx; - dlDataMsgInfo->rbId = duCb.upTnlCfg[drbIdx]->drbId; - return ROK; - } + if(duCb.upTnlCfg[drbIdx]->tnlCfg1->teId == teId) + { + dlDataMsgInfo->cellId = duCb.upTnlCfg[drbIdx]->cellId; + dlDataMsgInfo->ueIdx = duCb.upTnlCfg[drbIdx]->ueIdx; + dlDataMsgInfo->rbId = duCb.upTnlCfg[drbIdx]->drbId; + return ROK; + } } } return RFAILED; @@ -183,7 +220,8 @@ uint8_t duBuildAndSendDlUserDataToRlc(uint16_t msgLen, EgtpMsg *egtpMsg) { /* Filling post structure and sending msg */ FILL_PST_DUAPP_TO_RLC(pst, RLC_DL_INST, EVENT_DL_USER_DATA_TRANS_TO_RLC); - DU_LOG("\nDEBUG --> DU_APP : Sending User Data Msg to RLC \n"); + DU_LOG("\nDEBUG --> DU_APP : Sending User Data Msg to RLC [TEID, nPDU]:[%d, %d]\n",\ + egtpMsg->msgHdr.teId, egtpMsg->msgHdr.nPdu.val); ret = (*duSendRlcDlUserDataToRlcOpts[pst.selector])(&pst, dlDataMsgInfo); } if(ret != ROK) @@ -214,6 +252,11 @@ uint8_t duBuildAndSendDlUserDataToRlc(uint16_t msgLen, EgtpMsg *egtpMsg) uint8_t duHdlEgtpDlData(EgtpMsg *egtpMsg) { uint16_t msgLen = 0; + +#ifdef CALL_FLOW_DEBUG_LOG + DU_LOG("\nCall Flow: ENTEGTP -> ENTDUAPP : EVENT_HDL_RECV_DL_DATA\n"); +#endif + DU_LOG("\nDEBUG --> DU_APP : Processing DL data in duHdlEgtpDlData()"); if(!egtpMsg->msg) @@ -604,7 +647,7 @@ void fillDefaultInitDlBwp(InitialDlBwp *initDlBwp) coreset1StartPrb = coreset0EndPrb +6; coreset1NumPrb = CORESET1_NUM_PRB; /* calculate the PRBs */ - freqDomRscAllocType0(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource); + fillCoresetFeqDomAllocMap(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource); memcpy(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, freqDomainResource, FREQ_DOM_RSRC_SIZE); @@ -704,17 +747,25 @@ void fillDefaultInitUlBwp(InitialUlBwp *initUlBwp) initUlBwp->puschCfg.dmrsUlCfgForPuschMapTypeA.transPrecodDisabled. \ scramblingId0 = SCRAMBLING_ID; initUlBwp->puschCfg.resourceAllocType = RESOURCEALLOCATION_TYPE1; - initUlBwp->puschCfg.numTimeDomRsrcAlloc = 1; + initUlBwp->puschCfg.numTimeDomRsrcAlloc = 2; idx = 0; if(initUlBwp->puschCfg.numTimeDomRsrcAlloc <= MAX_NUM_UL_ALLOC) { - initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2_CFG1; initUlBwp->puschCfg.timeDomRsrcAllocList[idx].mappingType =\ MAPPING_TYPEA; initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbol = PUSCH_START_SYMBOL; initUlBwp->puschCfg.timeDomRsrcAllocList[idx].symbolLength = PUSCH_LENGTH_SYMBOL; initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbolAndLength =\ calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL); + + idx++; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].k2 = PUSCH_K2_CFG2; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].mappingType = MAPPING_TYPEA; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbol = PUSCH_START_SYMBOL; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].symbolLength = PUSCH_LENGTH_SYMBOL; + initUlBwp->puschCfg.timeDomRsrcAllocList[idx].startSymbolAndLength =\ + calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL); } initUlBwp->puschCfg.transformPrecoder = TRANSFORM_PRECODER_DISABLED; } @@ -899,11 +950,11 @@ void fillDefaultMacCellGrpInfo(MacUeCfg *macUeCfg) void fillDefaultModulation(MacUeCfg *ueCfg) { ueCfg->dlModInfo.modOrder = MOD_ORDER_QPSK; - ueCfg->dlModInfo.mcsIndex = SIB1_MCS; + ueCfg->dlModInfo.mcsIndex = DEFAULT_MCS; ueCfg->dlModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */ ueCfg->ulModInfo.modOrder = MOD_ORDER_QPSK; - ueCfg->ulModInfo.mcsIndex = SIB1_MCS; + ueCfg->ulModInfo.mcsIndex = DEFAULT_MCS; ueCfg->ulModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */ } @@ -946,69 +997,73 @@ void fillMacSrb1LcCfg(LcCfg *macLcCfg) * *****************************************************************/ -uint8_t fillMacLcCfgToAddMod(LcCfg *lcCfg, LcCfg *ueSetReqDb) +uint8_t fillMacLcCfgToAddMod(LcCfg *macLcCfgToSend, LcCfg *ueLcCfgDb, LcCfg *oldLcCfg, Bool toUpdate) { - uint8_t ret = ROK; - lcCfg->lcId = ueSetReqDb->lcId; - lcCfg->configType = ueSetReqDb->configType; - /* Filling DRBQOS */ - if(ueSetReqDb->drbQos) + if(!toUpdate) { - if(!lcCfg->drbQos) + if(macLcCfgToSend) { - DU_ALLOC_SHRABL_BUF(lcCfg->drbQos, sizeof(DrbQosInfo)); - if(!lcCfg->drbQos) - { - DU_LOG("\nERROR --> DU APP : Memory Alloc failed at drQos at fillMacLcCfgToAddMod()"); - return RFAILED; - } - } - if(ret == ROK) - { - memcpy(lcCfg->drbQos, ueSetReqDb->drbQos, sizeof(DrbQosInfo)); + macLcCfgToSend->lcId = ueLcCfgDb->lcId; + macLcCfgToSend->configType = ueLcCfgDb->configType; + + if(ueLcCfgDb->drbQos) + macLcCfgToSend->drbQos = ueLcCfgDb->drbQos; + else if(oldLcCfg) + macLcCfgToSend->drbQos = oldLcCfg->drbQos; + else + macLcCfgToSend->drbQos = NULL; + + if(ueLcCfgDb->snssai) + macLcCfgToSend->snssai = ueLcCfgDb->snssai; + else if(oldLcCfg) + macLcCfgToSend->snssai = oldLcCfg->snssai; + else + macLcCfgToSend->snssai = NULL; + + macLcCfgToSend->ulLcCfgPres = ueLcCfgDb->ulLcCfgPres; + memcpy(&macLcCfgToSend->ulLcCfg, &ueLcCfgDb->ulLcCfg, sizeof(UlLcCfg)); + memcpy(&macLcCfgToSend->dlLcCfg, &ueLcCfgDb->dlLcCfg, sizeof(DlLcCfg)); } } else { - lcCfg->drbQos = NULLP; - } + oldLcCfg->lcId = ueLcCfgDb->lcId; + oldLcCfg->configType = ueLcCfgDb->configType; - if(ret == ROK) - { - if(ueSetReqDb->snssai) + if(ueLcCfgDb->drbQos) { - if(!lcCfg->snssai) + if(oldLcCfg->drbQos) + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, oldLcCfg->drbQos, sizeof(DrbQosInfo)); + + DU_ALLOC_SHRABL_BUF(oldLcCfg->drbQos, sizeof(DrbQosInfo)); + if(oldLcCfg->drbQos == NULL) { - DU_ALLOC_SHRABL_BUF(lcCfg->snssai, sizeof(Snssai)); - if(!lcCfg->snssai) - { - DU_LOG("\nERROR --> DU APP : Memory Alloc failed at snnsai at fillMacLcCfgToAddMod()"); - ret = RFAILED; - } + DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillMacLcCfgToAddMod()"); + return RFAILED; } - if(ret == ROK) + memcpy(oldLcCfg->drbQos, ueLcCfgDb->drbQos, sizeof(DrbQosInfo)); + } + + if(ueLcCfgDb->snssai) + { + if(oldLcCfg->snssai) + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, oldLcCfg->snssai, sizeof(Snssai)); + + DU_ALLOC_SHRABL_BUF(oldLcCfg->snssai, sizeof(Snssai)); + if(oldLcCfg->snssai == NULL) { - /* Filling SNSSAI */ - memcpy(lcCfg->snssai, ueSetReqDb->snssai, sizeof(Snssai)); + DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillMacLcCfgToAddMod()"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, oldLcCfg->drbQos, sizeof(DrbQosInfo)); + return RFAILED; } - else - { - lcCfg->snssai = NULLP; - if(lcCfg->drbQos) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, lcCfg->drbQos, sizeof(DrbQosInfo)); - lcCfg->drbQos = NULLP; - } - return ret; - } + memcpy(oldLcCfg->snssai, ueLcCfgDb->snssai, sizeof(Snssai)); } - else - lcCfg->snssai = NULLP; + + oldLcCfg->ulLcCfgPres = ueLcCfgDb->ulLcCfgPres; + memcpy(&oldLcCfg->ulLcCfg, &ueLcCfgDb->ulLcCfg, sizeof(UlLcCfg)); + memcpy(&oldLcCfg->dlLcCfg, &ueLcCfgDb->dlLcCfg, sizeof(DlLcCfg)); } - lcCfg->ulLcCfgPres = ueSetReqDb->ulLcCfgPres; - memcpy(&lcCfg->ulLcCfg, &ueSetReqDb->ulLcCfg, sizeof(UlLcCfg)); - memcpy(&lcCfg->dlLcCfg, &ueSetReqDb->dlLcCfg, sizeof(DlLcCfg)); - return ret; + return ROK; } /****************************************************************** @@ -1026,26 +1081,36 @@ uint8_t fillMacLcCfgToAddMod(LcCfg *lcCfg, LcCfg *ueSetReqDb) * *****************************************************************/ -uint8_t fillAmbr(AmbrCfg **macAmbr, AmbrCfg *ueDbAmbr) +uint8_t fillAmbr(AmbrCfg **macAmbrCfgToSend, AmbrCfg *ueDbAmbr, AmbrCfg **oldMacAmbrCfg, Bool toUpdate) { - if(ueDbAmbr) + if(!toUpdate) { - if(*macAmbr == NULLP) + if(ueDbAmbr) { - DU_ALLOC_SHRABL_BUF(*macAmbr, sizeof(AmbrCfg)); - if(*macAmbr == NULLP) + *macAmbrCfgToSend = ueDbAmbr; + } + else + *macAmbrCfgToSend = *oldMacAmbrCfg; + } + else + { + if(ueDbAmbr) + { + if(*oldMacAmbrCfg) + { + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, *oldMacAmbrCfg, sizeof(AmbrCfg)); + } + DU_ALLOC_SHRABL_BUF(*oldMacAmbrCfg, sizeof(AmbrCfg)); + if(*oldMacAmbrCfg == NULLP) { DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillAmbr()"); return RFAILED; } + memset(*oldMacAmbrCfg, 0, sizeof(AmbrCfg)); + (*oldMacAmbrCfg)->ulBr = ueDbAmbr->ulBr; } - memset(*macAmbr, 0, sizeof(AmbrCfg)); - (*macAmbr)->ulBr = ueDbAmbr->ulBr; - } - else - { - *macAmbr = NULLP; } + return ROK; } @@ -1092,40 +1157,7 @@ uint8_t sendUeReCfgReqToMac(MacUeCfg *macUeCfg) return ret; } -/****************************************************************** - * - * @brief Function to return Drb LcId - * - * @details - * - * Function : getDrbLcId - * - * Functionality: Function to return Drb LcId - * - * Returns: lcId - SUCCESS - * RFAILED - FAILURE - *****************************************************************/ - -uint8_t getDrbLcId(uint32_t *drbBitMap) -{ - uint8_t bitMask = 1, bitPos = 0; - bitPos = MIN_DRB_LCID; - while(bitPos <= MAX_DRB_LCID) - { - if((*drbBitMap & (bitMask << bitPos)) == 0) - { - *drbBitMap = ((bitMask << bitPos)| *drbBitMap); - return bitPos; - } - else - { - bitPos++; - } - } - DU_LOG("\nERROR --> DU_APP: Max LC Reached in getDrbLcId()"); - return RFAILED; -} /****************************************************************** * @@ -1176,7 +1208,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ macUeCfg->cellId = cellId; macUeCfg->ueIdx = ueIdx; macUeCfg->crnti = crnti; - ret = procUeReCfgCellInfo(macUeCfg, ueCfgDb->cellGrpCfg); + ret = procUeReCfgCellInfo(macUeCfg, duMacDb, ueCfgDb->cellGrpCfg); if(ret == ROK) { if(macUeCfg->spCellCfgPres == true) @@ -1192,7 +1224,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg); } } - ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg); + ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg , &duMacDb->ambrCfg, FALSE); duFillModulationDetails(macUeCfg, duMacDb, ueCfgDb->ueNrCapability); } @@ -1214,7 +1246,8 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD)) { ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD; - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]); + ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx],\ + &duMacDb->lcCfgList[lcIdx], FALSE); } } else @@ -1223,7 +1256,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ if(!lcIdFound) { /* ADD/DEL CONFIG */ - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]); + ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx], NULL, FALSE); } if(ret == ROK) { @@ -1235,6 +1268,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ break; } }/*End of Outer FOR loop */ + memcpy(&ueCfgDb->copyOfmacUeCfg, macUeCfg, sizeof(MacUeCfg)); } return ret; } @@ -1348,69 +1382,68 @@ void fillDefaultUmDlInfo(UmUniDirDlBearerCfg *UmDlCfg) uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) { - if(lcCfg) { switch(rlcMode) { case RLC_AM : { - if(!lcCfg->u.amCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); - if(lcCfg->u.amCfg) - fillDefaultAmInfo(lcCfg->u.amCfg); - else - { - DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at AmCfg at fillDefaultRlcModeCfg()"); - return RFAILED; - } - } + if(!lcCfg->u.amCfg) + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); + if(lcCfg->u.amCfg) + fillDefaultAmInfo(lcCfg->u.amCfg); + else + { + DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at AmCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } + } break; } case RLC_UM_BI_DIRECTIONAL : { - if(!lcCfg->u.umBiDirCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); - if(lcCfg->u.umBiDirCfg) - fillDefaultUmBiInfo(lcCfg->u.umBiDirCfg); - else - { - DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at UmBiDirCfg at fillDefaultRlcModeCfg()"); - return RFAILED; - } - } + if(!lcCfg->u.umBiDirCfg) + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); + if(lcCfg->u.umBiDirCfg) + fillDefaultUmBiInfo(lcCfg->u.umBiDirCfg); + else + { + DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at UmBiDirCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } + } break; } case RLC_UM_UNI_DIRECTIONAL_UL : { - if(!lcCfg->u.umUniDirUlCfg) - { + if(!lcCfg->u.umUniDirUlCfg) + { DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); - if(lcCfg->u.umUniDirUlCfg) - fillDefaultUmUlInfo(lcCfg->u.umUniDirUlCfg); + if(lcCfg->u.umUniDirUlCfg) + fillDefaultUmUlInfo(lcCfg->u.umUniDirUlCfg); else - { + { DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at UmUniDirUlCfg at fillDefaultRlcModeCfg()"); - return RFAILED; - } - } + return RFAILED; + } + } break; } case RLC_UM_UNI_DIRECTIONAL_DL : { - if(!lcCfg->u.umUniDirDlCfg) - { + if(!lcCfg->u.umUniDirDlCfg) + { DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); if(lcCfg->u.umUniDirDlCfg) - fillDefaultUmDlInfo(lcCfg->u.umUniDirDlCfg); + fillDefaultUmDlInfo(lcCfg->u.umUniDirDlCfg); else - { + { DU_LOG("\n ERROR --> DU APP : Memory Alloc failed at UmUniDirDlCfg at fillDefaultRlcModeCfg()"); - return RFAILED; - } - } + return RFAILED; + } + } break; } default: @@ -1499,6 +1532,51 @@ uint8_t sendUeReCfgReqToRlc(RlcUeCfg *rlcUeCfg) return ret; } +/****************************************************************** + * + * @brief Fills Snssai information + * + * @details + * + * Function : fillSnssaiInfo + * + * Functionality: Fills Snssai information + * + * @params[in] LcCfg *snssaiTobeSend, LcCfg *snssaiDb, LcCfg *oldSnssai, + * Bool toUpdateg + * @return ROK - success + * RFAILED - failure + * + *****************************************************************/ +uint8_t fillSnssaiInfo(Snssai *snssaiTobeSend, Snssai *snssaiDb, Snssai **oldSnssai, Bool toUpdate) +{ + if(!toUpdate) + { + if(snssaiDb) + snssaiTobeSend = snssaiDb; + else if(oldSnssai) + snssaiTobeSend = *oldSnssai; + else + snssaiTobeSend = NULL; + } + else + { + if(snssaiDb) + { + if(*oldSnssai) + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, *oldSnssai, sizeof(Snssai)); + + DU_ALLOC_SHRABL_BUF(*oldSnssai, sizeof(Snssai)); + if(*oldSnssai == NULL) + { + DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillSnssaiInfo()"); + return RFAILED; + } + memcpy(*oldSnssai, snssaiDb, sizeof(Snssai)); + } + } + return ROK; +} /****************************************************************** * * @brief Fills RlcBearerCfg structure @@ -1528,7 +1606,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\ if(ret == ROK) rlcUeCfg->numLcs++; else - memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); + memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); } else { @@ -1560,6 +1638,8 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\ /* MOD */ ueCfgDb->rlcLcCfg[dbIdx].configType = CONFIG_MOD; /* update Db for MOD type */ memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(RlcBearerCfg)); + fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].snssai, ueCfgDb->rlcLcCfg[dbIdx].snssai,\ + &duRlcDb->rlcLcCfg[lcIdx].snssai,false); } } else @@ -1569,6 +1649,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\ { /* ADD/ DEL Config Type */ memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(RlcBearerCfg)); + fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].snssai, ueCfgDb->rlcLcCfg[dbIdx].snssai, NULL, false); } rlcUeCfg->numLcs++; } @@ -1713,9 +1794,12 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx, cellIdx; MacUeCfg *oldMacUeCfg; ret = ROK; + + GET_CELL_IDX(macUeCfg->cellId, cellIdx); + oldMacUeCfg = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueIdx-1].macUeCfg; /*Filling Cell Group Cfg*/ - ret = procUeReCfgCellInfo(macUeCfg, f1UeDb->duUeCfg.cellGrpCfg); + ret = procUeReCfgCellInfo(macUeCfg, &f1UeDb->duUeCfg.copyOfmacUeCfg, f1UeDb->duUeCfg.cellGrpCfg); if(ret == ROK) { if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent) @@ -1728,10 +1812,7 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\ NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg); } - ret = fillAmbr(&macUeCfg->ambrCfg, f1UeDb->duUeCfg.ambrCfg); - - GET_CELL_IDX(macUeCfg->cellId, cellIdx); - oldMacUeCfg = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueIdx-1].macUeCfg; + ret = fillAmbr(NULL, f1UeDb->duUeCfg.ambrCfg, &oldMacUeCfg->ambrCfg, true); duFillModulationDetails(macUeCfg, oldMacUeCfg, f1UeDb->duUeCfg.ueNrCapability); } @@ -1745,7 +1826,7 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) { if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_MOD) { - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[lcIdx],&f1UeDb->duUeCfg.macLcCfg[dbIdx]); + ret = fillMacLcCfgToAddMod(NULL, &f1UeDb->duUeCfg.macLcCfg[dbIdx], &macUeCfg->lcCfgList[lcIdx], true); } else if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_DEL) { @@ -1755,7 +1836,7 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) for(lcDelIdx = lcIdx; lcDelIdx < macUeCfg->numLcs; lcDelIdx++) { /* moving all elements one index ahead */ - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[lcDelIdx], &macUeCfg->lcCfgList[lcDelIdx+1]); + ret = fillMacLcCfgToAddMod(NULL, &macUeCfg->lcCfgList[lcDelIdx+1], &macUeCfg->lcCfgList[lcDelIdx], true); freeMacLcCfg(&macUeCfg->lcCfgList[lcDelIdx+1]); if(ret == RFAILED) { @@ -1768,7 +1849,7 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) } if(f1UeDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_ADD) { - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[numLcs], &f1UeDb->duUeCfg.macLcCfg[dbIdx]); + ret = fillMacLcCfgToAddMod(NULL, &f1UeDb->duUeCfg.macLcCfg[dbIdx], &macUeCfg->lcCfgList[numLcs], true); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to add LC at Idx %d in duUpdateMacCfg()", numLcs); @@ -1802,71 +1883,72 @@ uint8_t fillRlcCfgToAddMod(RlcBearerCfg *lcCfg, RlcBearerCfg *f1UeDbLcCfg) lcCfg->lcId = f1UeDbLcCfg->lcId; lcCfg->lcType = f1UeDbLcCfg->lcType; lcCfg->rlcMode = f1UeDbLcCfg->rlcMode; + switch(lcCfg->rlcMode) { case RLC_AM : - { - if(!lcCfg->u.amCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); + { if(!lcCfg->u.amCfg) - return RFAILED; - } - /* DL AM */ - lcCfg->u.amCfg->dlAmCfg.snLenDl = f1UeDbLcCfg->u.amCfg->dlAmCfg.snLenDl; - lcCfg->u.amCfg->dlAmCfg.pollRetxTmr = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollRetxTmr; - lcCfg->u.amCfg->dlAmCfg.pollPdu = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollPdu; - lcCfg->u.amCfg->dlAmCfg.pollByte = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollByte; - lcCfg->u.amCfg->dlAmCfg.maxRetxTh = f1UeDbLcCfg->u.amCfg->dlAmCfg.maxRetxTh; - - /* UL AM */ - lcCfg->u.amCfg->ulAmCfg.snLenUl = f1UeDbLcCfg->u.amCfg->ulAmCfg.snLenUl; - lcCfg->u.amCfg->ulAmCfg.reAssemTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.reAssemTmr; - lcCfg->u.amCfg->ulAmCfg.statProhTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.statProhTmr; - break; - } + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); + if(!lcCfg->u.amCfg) + return RFAILED; + } + /* DL AM */ + lcCfg->u.amCfg->dlAmCfg.snLenDl = f1UeDbLcCfg->u.amCfg->dlAmCfg.snLenDl; + lcCfg->u.amCfg->dlAmCfg.pollRetxTmr = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollRetxTmr; + lcCfg->u.amCfg->dlAmCfg.pollPdu = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollPdu; + lcCfg->u.amCfg->dlAmCfg.pollByte = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollByte; + lcCfg->u.amCfg->dlAmCfg.maxRetxTh = f1UeDbLcCfg->u.amCfg->dlAmCfg.maxRetxTh; + + /* UL AM */ + lcCfg->u.amCfg->ulAmCfg.snLenUl = f1UeDbLcCfg->u.amCfg->ulAmCfg.snLenUl; + lcCfg->u.amCfg->ulAmCfg.reAssemTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.reAssemTmr; + lcCfg->u.amCfg->ulAmCfg.statProhTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.statProhTmr; + break; + } case RLC_UM_BI_DIRECTIONAL : - { - if(!lcCfg->u.umBiDirCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); - if(!lcCfg->u.umBiDirCfg) - return RFAILED; + { + if(!lcCfg->u.umBiDirCfg) + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); + if(!lcCfg->u.umBiDirCfg) + return RFAILED; + } + /* UL UM BI DIR INFO */ + lcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm; + lcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr; + /* DL UM BI DIR INFO */ + lcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm; + break; } - /* UL UM BI DIR INFO */ - lcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm; - lcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr; - /* DL UM BI DIR INFO */ - lcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm; - break; - } case RLC_UM_UNI_DIRECTIONAL_UL : - { - if(!lcCfg->u.umUniDirUlCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); - if(!lcCfg->u.umUniDirUlCfg) - return RFAILED; - } - lcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm; - lcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr; - break; + { + if(!lcCfg->u.umUniDirUlCfg) + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); + if(!lcCfg->u.umUniDirUlCfg) + return RFAILED; + } + lcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm; + lcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr; + break; - } + } case RLC_UM_UNI_DIRECTIONAL_DL : - { - if(!lcCfg->u.umUniDirDlCfg) - { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); - if(!lcCfg->u.umUniDirDlCfg) - return RFAILED; + { + if(!lcCfg->u.umUniDirDlCfg) + { + DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); + if(!lcCfg->u.umUniDirDlCfg) + return RFAILED; + } + lcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm; + break; } - lcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm; - break; - } default: DU_LOG("\nERROR --> DU_APP: Invalid Rlc Mode %d at fillRlcCfgToAddMod()", lcCfg->rlcMode); - return RFAILED; + return RFAILED; } return ROK; } @@ -1897,41 +1979,52 @@ uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) numLcs = rlcUeCfg->numLcs; for(lcIdx = 0; lcIdx < numLcs; lcIdx++) { - if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].lcId == rlcUeCfg->rlcLcCfg[lcIdx].lcId) - { - if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_MOD) - { - ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]); - } - else if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_DEL) - { - /* Free memory at matched lcIdx index */ - freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx]); - rlcUeCfg->numLcs--; - for(lcDelIdx = lcIdx; lcDelIdx < rlcUeCfg->numLcs; lcDelIdx++) - { - ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcDelIdx], &rlcUeCfg->rlcLcCfg[lcDelIdx+1]); - freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcDelIdx+1]); - if(ret == RFAILED) - { + if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].lcId == rlcUeCfg->rlcLcCfg[lcIdx].lcId) + { + if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_MOD) + { + ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]); + if(ret == RFAILED) + { + DU_LOG("\nERROR --> DU APP : Failed to modify LC at Idx %d in duUpdateRlcCfg()", lcDelIdx); + break; + } + fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].snssai, &rlcUeCfg->rlcLcCfg[lcIdx].snssai, true); + } + else if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_DEL) + { + /* Free memory at matched lcIdx index */ + freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx]); + rlcUeCfg->numLcs--; + for(lcDelIdx = lcIdx; lcDelIdx < rlcUeCfg->numLcs; lcDelIdx++) + { + ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcDelIdx], &rlcUeCfg->rlcLcCfg[lcDelIdx+1]); + fillSnssaiInfo(NULL, rlcUeCfg->rlcLcCfg[lcDelIdx+1].snssai, &rlcUeCfg->rlcLcCfg[lcDelIdx].snssai,\ + true); + freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcDelIdx+1]); + if(ret == RFAILED) + { DU_LOG("\nERROR --> DU APP : Failed to delete LC at Idx %d in duUpdateRlcCfg()", lcDelIdx); - break; - } - } - } - } + break; + } + } + } + } } if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_ADD) { - ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]); - if(ret == ROK) - rlcUeCfg->numLcs++; + ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]); + if(ret == ROK) + { + fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].snssai, &rlcUeCfg->rlcLcCfg[ rlcUeCfg->numLcs].snssai,\ + true); + rlcUeCfg->numLcs++; + } } } return ret; } - /******************************************************************* * * @brief Function to fill Tunnel Config to Add/Mod @@ -1951,6 +2044,12 @@ uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) * ****************************************************************/ uint8_t fillTnlCfgToAddMod(UpTnlCfg **ueCbTnlCfg, UpTnlCfg *f1TnlCfg) { + if(*ueCbTnlCfg) + { + DU_FREE((*ueCbTnlCfg)->tnlCfg1, sizeof(GtpTnlCfg)); + DU_FREE(*ueCbTnlCfg, sizeof(UpTnlCfg)); + } + if(*ueCbTnlCfg == NULLP) { /* copying to DuCb Tnl Cfg */ @@ -2015,21 +2114,21 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl { if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_ADD, NULLP, f1TnlCfg->tnlCfg1) == ROK) { - if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numDrb], f1TnlCfg) == ROK) - { - duCb.numDrb++; - ret = ROK; - } + if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numDrb], f1TnlCfg) == ROK) + { + duCb.numDrb++; + ret = ROK; + } } } else if(f1TnlCfg->configType == CONFIG_MOD) { if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_MOD, duTnlCfg->tnlCfg1->teId, f1TnlCfg->tnlCfg1) == ROK) { - if(fillTnlCfgToAddMod(&duTnlCfg, f1TnlCfg) == ROK) - { - ret = ROK; - } + if(fillTnlCfgToAddMod(&duTnlCfg, f1TnlCfg) == ROK) + { + ret = ROK; + } } } else if(f1TnlCfg->configType == CONFIG_DEL) @@ -2037,7 +2136,6 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_DEL, duTnlCfg->tnlCfg1->teId, f1TnlCfg->tnlCfg1) == ROK) { /* Free memory at drbIdx */ - DU_FREE(duTnlCfg->tnlCfg1, sizeof(GtpTnlCfg)); duCb.numDrb--; for(delIdx = ueCbIdx; delIdx < duCb.numDrb; delIdx++) { @@ -2048,6 +2146,11 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl return ret; } } + if(duCb.upTnlCfg[delIdx]) + { + DU_FREE(duCb.upTnlCfg[delIdx]->tnlCfg1, sizeof(GtpTnlCfg)); + DU_FREE(duCb.upTnlCfg[delIdx], sizeof(UpTnlCfg)); + } } } return ret; @@ -2085,29 +2188,31 @@ uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg) duUeCfg->upTnlInfo[drbIdx].ueIdx = ueIdx; for(duCbDrbIdx = 0; duCbDrbIdx < duCb.numDrb; duCbDrbIdx++) { - if(duCb.upTnlCfg[duCbDrbIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId) - { - drbFound = true; /* existing DRB */ - if(duProcEgtpTunnelCfg(duCbDrbIdx, duCb.upTnlCfg[duCbDrbIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK) - { - DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]", - duUeCfg->upTnlInfo[drbIdx].drbId); - ret = RFAILED; - } - break; - } - else - drbFound = false; + if((duCb.upTnlCfg[duCbDrbIdx]->ueIdx == duUeCfg->upTnlInfo[drbIdx].ueIdx) && \ + (duCb.upTnlCfg[duCbDrbIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId)) + { + drbFound = true; /* existing DRB */ + if(duProcEgtpTunnelCfg(duCbDrbIdx, duCb.upTnlCfg[duCbDrbIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK) + { + DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]", + duUeCfg->upTnlInfo[drbIdx].drbId); + ret = RFAILED; + } + break; + } + else + drbFound = false; } + if(!drbFound && ret == ROK)/* new DRB to Add */ { - if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK) - { + if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK) + { DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to add tunnel req for Drb id[%d]", - duUeCfg->upTnlInfo[drbIdx].drbId); - ret = RFAILED; - break; - } + duUeCfg->upTnlInfo[drbIdx].drbId); + ret = RFAILED; + break; + } } else break; @@ -2501,31 +2606,39 @@ uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, uint16_t crnti, DuUeCfg uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg) { uint8_t ret = ROK, ueIdx = 0; + uint16_t cellId, crnti; DuUeCb *ueCb = NULLP; + DlMsgState state; + + state = dlRrcMsg->state; + cellId = dlRrcMsg->cellId; + crnti = dlRrcMsg->crnti; + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlRrcMsg, sizeof(RlcDlRrcMsgRsp)); - if(dlRrcMsg->state == TRANSMISSION_COMPLETE) + if(state == TRANSMISSION_COMPLETE) { - GET_UE_IDX(dlRrcMsg->crnti, ueIdx); - ueCb = &duCb.actvCellLst[dlRrcMsg->cellId -1]->ueCb[ueIdx -1]; + GET_UE_IDX(crnti, ueIdx); + ueCb = &duCb.actvCellLst[cellId -1]->ueCb[ueIdx -1]; + if(ueCb->f1UeDb && ueCb->f1UeDb->dlRrcMsgPres) { if(ueCb->f1UeDb->actionType == UE_CTXT_SETUP) { - ret = duBuildAndSendUeContextSetupReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg); + ret = duBuildAndSendUeContextSetupReq(cellId, crnti, &ueCb->f1UeDb->duUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to process UE Context Setup Request in DuProcRlcDlRrcMsgRsp()"); } if(ueCb->f1UeDb->actionType == UE_CTXT_MOD) { - ret = duBuildAndSendUeContextModReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg); + ret = duBuildAndSendUeContextModReq(cellId, crnti, &ueCb->f1UeDb->duUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to process UE Context Mod Request in DuProcRlcDlRrcMsgRsp()"); } if(ueCb->f1UeDb->actionType == UE_CTXT_RELEASE && ueCb->ueState == UE_ACTIVE) { - ret = duBuildAndSendUeDeleteReq(dlRrcMsg->cellId,dlRrcMsg->crnti); + ret = duBuildAndSendUeDeleteReq(cellId, crnti); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to process UE Context Release Request in DuProcRlcDlRrcMsgRsp()"); @@ -2536,7 +2649,6 @@ uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg) else DU_LOG("\nERROR --> DU APP : Failed to transmit DL RRC Msg"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlRrcMsg, sizeof(RlcDlRrcMsgRsp)); return ret; } /******************************************************************* @@ -3111,6 +3223,7 @@ void deleteRlcUeCfg(RlcUeCfg *ueCfg) break; } } + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, lcCfg->snssai, sizeof(Snssai)); } memset(ueCfg, 0, sizeof(RlcUeCfg)); } @@ -3148,12 +3261,14 @@ uint8_t duProcUeContextReleaseCommand(DuUeCb *duUeCb) cellId = duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->cellId; crnti = duUeCb->crnti; + GET_UE_IDX(crnti, ueIdx); + /* Send DL RRC msg for RRC release */ if(duUeCb->f1UeDb->dlRrcMsg) { if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP) { - ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx].rlcUeCfg,\ + ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx-1].rlcUeCfg,\ duUeCb->f1UeDb->dlRrcMsg); if(ret == RFAILED) {