X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_ue_mgr.c;h=39569c92323d58908a2cf34e51eeefe636673234;hb=62605166db94fd7d52f32de84dea8c7006e0f4c5;hp=2ef2d741bb572bd0f11f7267e61716564c77336d;hpb=d76403d03e7b7f60cd515f1b834d28278685a70b;p=o-du%2Fl2.git diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 2ef2d741b..39569c923 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" @@ -34,6 +34,11 @@ #include "du_f1ap_msg_hdl.h" #include "du_ue_mgr.h" +#ifdef O1_ENABLE +#include "AlarmInterface.h" +#include "ConfigInterface.h" +#endif + DuMacDlCcchInd packMacDlCcchIndOpts[] = { packMacDlCcchInd, /* Loose coupling */ @@ -97,13 +102,6 @@ DuRlcUeDeleteReq packRlcUeDeleteReqOpts[] = packDuRlcUeDeleteReq /* Light weight-loose coupling */ }; -DuMacCellDeleteReq packMacCellDeleteReqOpts[] = -{ - packDuMacCellDeleteReq, /* Loose coupling */ - MacProcCellDeleteReq, /* TIght coupling */ - packDuMacCellDeleteReq /* Light weight-loose coupling */ -}; - /******************************************************************* * * @brief Function to fillDlUserDataInfo @@ -177,12 +175,6 @@ uint8_t duBuildAndSendDlUserDataToRlc(uint16_t msgLen, EgtpMsg *egtpMsg) return RFAILED; } memset(dlDataMsgInfo, 0, sizeof(RlcDlUserDataInfo)); - if(ODU_GET_MSG_BUF(DU_APP_MEM_REGION, DU_POOL, &dlDataMsgInfo->dlMsg) != ROK) - { - DU_LOG("\nERROR --> DU_APP : Memory allocation failed for dlMsg in duHdlEgtpDlData()"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlDataMsgInfo, sizeof(RlcDlUserDataInfo)); - return RFAILED; - } dlDataMsgInfo->dlMsg = egtpMsg->msg; dlDataMsgInfo->msgLen = msgLen; @@ -222,6 +214,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) @@ -288,7 +285,7 @@ uint8_t duBuildAndSendDlCcchInd(uint16_t *cellId, uint16_t *crnti, \ { dlCcchIndInfo->dlCcchMsg[idx2] = dlCcchMsg[idx2]; } - DU_FREE(dlCcchMsg, dlCcchMsgSize); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlCcchMsg, dlCcchMsgSize); /* Fill Pst */ FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_DL_CCCH_IND); @@ -485,11 +482,20 @@ uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg) * @return gnbDuF1apId * * ****************************************************************/ -uint32_t genGnbDuUeF1apId() -{ - static uint32_t gnbDuUeF1apId = 0; - - return ++gnbDuUeF1apId; +int32_t genGnbDuUeF1apId(uint8_t cellId) +{ + uint8_t cellIdx =0; + + GET_CELL_IDX(cellId, cellIdx); + if(duCb.actvCellLst[cellIdx]) + { + return ++duCb.actvCellLst[cellIdx]->gnbDuUeF1apIdGenerator; + } + else + { + DU_LOG("ERROR --> DU_APP : genGnbDuUeF1apId(): CellId[%d] does not exist", cellId); + } + return -1; } /****************************************************************** @@ -511,12 +517,18 @@ uint8_t duProcUlCcchInd(UlCcchIndInfo *ulCcchIndInfo) { uint8_t ret = ROK; - uint32_t gnbDuUeF1apId = 0; + int32_t gnbDuUeF1apId = 0; - gnbDuUeF1apId = genGnbDuUeF1apId(); + gnbDuUeF1apId = genGnbDuUeF1apId(ulCcchIndInfo->cellId); + + if(gnbDuUeF1apId == -1) + { + DU_LOG("ERROR --> DU_APP : duProcUlCcchInd(): Received cellId[%d] does not exist", ulCcchIndInfo->cellId); + return RFAILED; + } /* Store Ue mapping */ - duCb.ueCcchCtxt[duCb.numUe].gnbDuUeF1apId = gnbDuUeF1apId; + duCb.ueCcchCtxt[duCb.numUe].gnbDuUeF1apId = (uint32_t)gnbDuUeF1apId; duCb.ueCcchCtxt[duCb.numUe].crnti = ulCcchIndInfo->crnti; duCb.ueCcchCtxt[duCb.numUe].cellId = ulCcchIndInfo->cellId; @@ -697,17 +709,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; } @@ -939,69 +959,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; } /****************************************************************** @@ -1019,26 +1043,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; } @@ -1185,7 +1219,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); } @@ -1207,7 +1241,7 @@ 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 @@ -1216,7 +1250,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) { @@ -1621,6 +1655,7 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) duCb.actvCellLst[cellIdx]->numActvUes++; memset(ueCcchCtxt, 0, sizeof(UeCcchCtxt)); + duCb.numUe--; } } return ret; @@ -1706,6 +1741,9 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) 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); if(ret == ROK) @@ -1720,10 +1758,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); } @@ -1737,7 +1772,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) { @@ -1747,7 +1782,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) { @@ -1760,7 +1795,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); @@ -1943,6 +1978,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 */ @@ -2007,40 +2048,43 @@ 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) { if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_DEL, duTnlCfg->tnlCfg1->teId, f1TnlCfg->tnlCfg1) == ROK) { - /* Free memory at drbIdx */ - DU_FREE(duTnlCfg->tnlCfg1, sizeof(GtpTnlCfg)); - DU_FREE(duTnlCfg, sizeof(UpTnlCfg)); - duCb.numDrb--; - for(delIdx = ueCbIdx; delIdx < duCb.numDrb; delIdx++) - { - /* moving all elements one index ahead */ - ret = fillTnlCfgToAddMod(&duCb.upTnlCfg[delIdx], duCb.upTnlCfg[delIdx+1]); - if(ret != ROK) - { - return ret; - } - } + /* Free memory at drbIdx */ + duCb.numDrb--; + for(delIdx = ueCbIdx; delIdx < duCb.numDrb; delIdx++) + { + /* moving all elements one index ahead */ + ret = fillTnlCfgToAddMod(&duCb.upTnlCfg[delIdx], duCb.upTnlCfg[delIdx+1]); + if(ret != ROK) + { + return ret; + } + } + if(duCb.upTnlCfg[delIdx]) + { + DU_FREE(duCb.upTnlCfg[delIdx]->tnlCfg1, sizeof(GtpTnlCfg)); + DU_FREE(duCb.upTnlCfg[delIdx], sizeof(UpTnlCfg)); + } } } return ret; @@ -2158,7 +2202,7 @@ uint8_t duUpdateDuUeCbCfg(uint8_t ueIdx, uint8_t cellId) if(duUpdateTunnelCfgDb(ueIdx, cellId, &ueCb->f1UeDb->duUeCfg) != ROK) { DU_LOG("\nERROR --> DU_APP : Failed to establish tunnel in duUpdateDuUeCbCfg()"); - return RFAILED; + return RFAILED; } } } @@ -2206,7 +2250,7 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) macUeCfg.macUeCfgState = UE_RECFG_COMPLETE; if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK) { - BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId); + BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueIdx); } } } @@ -2327,7 +2371,7 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE; if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK) { - BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId); + BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueIdx); } } } @@ -2494,32 +2538,49 @@ 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(cellId, crnti); + if(ret == RFAILED) + { + DU_LOG("\nERROR --> DU APP : Failed to process UE Context Release Request in DuProcRlcDlRrcMsgRsp()"); + } + } } } 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; } /******************************************************************* @@ -2714,88 +2775,16 @@ void deletePdschServCellCfg(PdschServCellCfg *pdschServCellCfg) void deleteMacUeCfg(MacUeCfg *ueCfg) { - uint8_t lcCfgIdx; - uint8_t resrcIdx; - ServCellCfgInfo *servCellCfg; - PucchResrcInfo *resrcToAddModList; - - if(ueCfg) + uint8_t lcCfgIdx=0; + + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->ambrCfg, sizeof(AmbrCfg)); + if(ueCfg->spCellCfgPres) { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->ambrCfg, sizeof(AmbrCfg)); - if(ueCfg->spCellCfgPres) - { - servCellCfg = &ueCfg->spCellCfg.servCellCfg; - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->bwpInactivityTmr, sizeof(uint8_t)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.resrcSet,\ - sizeof(PucchResrcSetCfg)); - if(servCellCfg->initUlBwp.pucchCfg.resrc) - { - /*freeing the PucchResrcCfg*/ - for(resrcIdx= 0; resrcIdx< servCellCfg->initUlBwp.pucchCfg.resrc->resrcToAddModListCount; resrcIdx++) - { - resrcToAddModList=&servCellCfg->initUlBwp.pucchCfg.resrc->resrcToAddModList[resrcIdx]; - switch(resrcToAddModList->pucchFormat) - { - case PUCCH_FORMAT_0: - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format0 ,\ - sizeof(PucchFormat0)); - break; - } - case PUCCH_FORMAT_1: - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format1 ,\ - sizeof(PucchFormat1)); - break; - } - case PUCCH_FORMAT_2: - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format2 ,\ - sizeof(PucchFormat2_3)); - break; - } - case PUCCH_FORMAT_3: - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format3 ,\ - sizeof(PucchFormat2_3)); - break; - } - case PUCCH_FORMAT_4: - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format4 ,\ - sizeof(PucchFormat4)); - break; - } - } - } - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.resrc,\ - sizeof(PucchResrcCfg)); - } - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format1,\ - sizeof(PucchFormatCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format2,\ - sizeof(PucchFormatCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format3,\ - sizeof(PucchFormatCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format4,\ - sizeof(PucchFormatCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.schedReq,\ - sizeof(PucchSchedReqCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.multiCsiCfg,\ - sizeof(PucchMultiCsiCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.spatialInfo,\ - sizeof(PucchSpatialCfg)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.dlDataToUlAck ,\ - sizeof(PucchDlDataToUlAck)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.powerControl,\ - sizeof(PucchPowerControl)); - deletePdschServCellCfg(&servCellCfg->pdschServCellCfg); - } - for(lcCfgIdx=0; lcCfgIdx< ueCfg->numLcs; lcCfgIdx++) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->lcCfgList[lcCfgIdx].drbQos, sizeof(DrbQosInfo)); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->lcCfgList[lcCfgIdx].snssai, sizeof(Snssai)); - } + freeUeReCfgCellGrpInfo(ueCfg); + } + for(lcCfgIdx=0; lcCfgIdx< ueCfg->numLcs; lcCfgIdx++) + { + freeMacLcCfg(&ueCfg->lcCfgList[lcCfgIdx]); } memset(ueCfg, 0, sizeof(MacUeCfg)); } @@ -2817,7 +2806,9 @@ void deleteMacUeCfg(MacUeCfg *ueCfg) * ****************************************************************/ uint8_t deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx) { + uint8_t tnlIdx = 0; DuUeCb *ueCb = NULLP; + if(duCb.actvCellLst[cellIdx] != NULLP) { if((duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\ @@ -2830,18 +2821,27 @@ uint8_t deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx) { freeF1UeDb(ueCb->f1UeDb); } + for(tnlIdx = 0; tnlIdx < duCb.numDrb; ) + { + if(duCb.upTnlCfg[tnlIdx]->ueIdx == ueIdx) + { + duCb.upTnlCfg[tnlIdx]->configType = CONFIG_DEL; + duProcEgtpTunnelCfg(tnlIdx, duCb.upTnlCfg[tnlIdx], duCb.upTnlCfg[tnlIdx]); + } + else + tnlIdx++; + } duCb.actvCellLst[cellIdx]->numActvUes--; memset(ueCb, 0, sizeof(DuUeCb)); } else { - DU_LOG("INFO --> DU APP : deleteUeCfg(): MAC or RLC UE configuration state not UE_DELETE_COMPLETE"); return RFAILED; } } else { - DU_LOG("ERROR --> DU APP : deleteUeCfg(): CellIdx[%d] is not found", cellIdx); + DU_LOG("\nERROR --> DU APP : deleteUeCfg(): CellIdx[%d] is not found", cellIdx); return RFAILED; } return ROK; @@ -2866,36 +2866,37 @@ uint8_t deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx) uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp) { - uint8_t ueIdx = 0,ret =ROK; + uint8_t ret =ROK,ueId=0; uint16_t cellIdx=0; - uint32_t gnbCuUeF1apId=0, gnbDuUeF1apId =0; - + uint32_t gnbCuUeF1apId =0 , gnbDuUeF1apId =0; + if(deleteRsp) { if(deleteRsp->result == SUCCESS) { - DU_LOG("\nINFO --> DU APP : MAC UE Delete Response : SUCCESS [UE IDX : %d]", deleteRsp->ueIdx); + DU_LOG("\nINFO --> DU APP : MAC UE Delete Response : SUCCESS [UE IDX : %d]", deleteRsp->ueId); GET_CELL_IDX(deleteRsp->cellId, cellIdx); - ueIdx = deleteRsp->ueIdx; if(duCb.actvCellLst[cellIdx]) { - duCb.actvCellLst[cellIdx]->ueCb[deleteRsp->ueIdx -1].macUeCfg.macUeCfgState = UE_DELETE_COMPLETE; - gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbDuUeF1apId; - gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbCuUeF1apId; - if(deleteUeCfg(cellIdx, ueIdx) == ROK) + duCb.actvCellLst[cellIdx]->ueCb[deleteRsp->ueId -1].macUeCfg.macUeCfgState = UE_DELETE_COMPLETE; + ueId = deleteRsp->ueId; + gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbDuUeF1apId; + gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueId-1].gnbCuUeF1apId; + if(deleteUeCfg(cellIdx, ueId) == ROK) { - ret = BuildAndSendUeContextReleaseComplete(gnbCuUeF1apId, gnbDuUeF1apId); - if(ret !=ROK) - { - DU_LOG("\nERROR --> DU APP : DuProcMacUeDeleteRsp(): failed to send UE context release complete"); - } + ret = BuildAndSendUeContextReleaseComplete(deleteRsp->cellId, gnbCuUeF1apId, gnbDuUeF1apId); + if(ret != ROK) + { + DU_LOG("\nERROR --> DU APP : DuProcMacUeDeleteRsp(): failed to send UE context release complete"); + } } + } } else { DU_LOG("\nERROR --> DU APP : DuProcMacUeDeleteRsp(): MAC UE Delete Response : FAILURE [UE IDX : %d]",\ - deleteRsp->ueIdx); + deleteRsp->ueId); ret = RFAILED; } DU_FREE_SHRABL_BUF(pst->region, pst->pool, deleteRsp, sizeof(MacUeDeleteRsp)); @@ -2928,36 +2929,32 @@ uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp) uint8_t DuProcRlcUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *delRsp) { - uint8_t ueIdx = 0, ret = ROK; - uint16_t cellIdx = 0; - uint32_t gnbCuUeF1apId=0, gnbDuUeF1apId =0; + uint8_t ueId = 0, ret = ROK; + uint16_t cellIdx = 0,crnti=0; if(delRsp) { - ueIdx = delRsp->ueIdx; + ueId = delRsp->ueId; GET_CELL_IDX(delRsp->cellId, cellIdx); if(delRsp->result == SUCCESSFUL) { - DU_LOG("\nINFO --> DU_APP: RLC UE Delete Response : SUCCESS [UE IDX:%d]", ueIdx); + DU_LOG("\nINFO --> DU_APP: RLC UE Delete Response : SUCCESS [UE IDX:%d]", ueId); if(duCb.actvCellLst[cellIdx]!=NULLP) { - duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg.rlcUeCfgState = UE_DELETE_COMPLETE; - gnbCuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbDuUeF1apId; - gnbDuUeF1apId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbCuUeF1apId; - if(deleteUeCfg(cellIdx, ueIdx) == ROK) + duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg.rlcUeCfgState = UE_DELETE_COMPLETE; + GET_CRNTI(crnti, ueId); + if(sendUeDeleteReqToMac(delRsp->cellId, ueId, crnti) == RFAILED) { - ret = BuildAndSendUeContextReleaseComplete(gnbCuUeF1apId, gnbDuUeF1apId); - if(ret != ROK) - { - DU_LOG("\nERROR --> DU APP : DuProcMacUeDeleteRsp(): failed to send UE context release complete"); - } + DU_LOG("\nERROR --> DU APP : duBuildAndSendUeDeleteReq(): Failed to build UE delete req for MAC "); + return RFAILED; } + } } else { - DU_LOG("\nERROR --> DU_APP: RLC UE Delete Response : FAILED [UE IDX:%d]", ueIdx); + DU_LOG("\nERROR --> DU_APP: RLC UE Delete Response : FAILED [UE IDX:%d]", ueId); ret = RFAILED; } DU_FREE_SHRABL_BUF(pst->region, pst->pool, delRsp, sizeof(RlcUeDeleteRsp)); @@ -2977,13 +2974,13 @@ uint8_t DuProcRlcUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *delRsp) * Functionality: * sending UE Delete Req To Mac * -* @params[in] cellId, ueIdx, crnti +* @params[in] cellId, ueId, crnti * @return ROK - success * RFAILED - failure * *****************************************************************/ -uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueIdx, uint16_t crnti) +uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueId, uint16_t crnti) { Pst pst; uint8_t ret=ROK; @@ -2993,11 +2990,10 @@ uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueIdx, uint16_t crnti) if(ueDelete) { ueDelete->cellId = cellId; - ueDelete->ueIdx = ueIdx; + ueDelete->ueId = ueId; ueDelete->crnti = crnti; FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_UE_DELETE_REQ); - /* Processing one Ue at a time to MAC */ DU_LOG("\nDEBUG --> DU_APP: Sending UE delete Request to MAC "); ret = (*packMacUeDeleteReqOpts[pst.selector])(&pst, ueDelete); if(ret == RFAILED) @@ -3025,13 +3021,13 @@ uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueIdx, uint16_t crnti) * Functionality: * Sending UE Delete Req To Rlc * - * @params[in] cellId, ueIdx + * @params[in] cellId, ueId * @return ROK - success * RFAILED - failure * *****************************************************************/ -uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueIdx) +uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueId) { uint8_t ret; Pst pst; @@ -3041,7 +3037,7 @@ uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueIdx) if(ueDelete !=NULLP) { ueDelete->cellId = cellId; - ueDelete->ueIdx = ueIdx; + ueDelete->ueId = ueId; FILL_PST_DUAPP_TO_RLC(pst, RLC_UL_INST, EVENT_RLC_UE_DELETE_REQ); ret = (*packRlcUeDeleteReqOpts[pst.selector])(&pst, ueDelete); @@ -3065,7 +3061,7 @@ uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueIdx) * * @details * - * Function : duProcUeDeleteReq + * Function : duBuildAndSendUeDeleteReq * * Functionality: DU processes UE delete req from CU and sends to MAC * and RLC @@ -3076,37 +3072,33 @@ uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueIdx) * * ****************************************************************/ -uint8_t duProcUeDeleteReq(uint16_t cellId) +uint8_t duBuildAndSendUeDeleteReq(uint16_t cellId, uint16_t crnti) { - uint8_t ueIdx = 0, ueId =0; - uint16_t cellIdx = 0, crnti = 0; + uint8_t ueId =0; + uint16_t cellIdx = 0; - DU_LOG("\nDEBUG --> DU_APP: Processing UE Delete Request "); + DU_LOG("\nDEBUG --> DU_APP: Processing UE Delete Request "); GET_CELL_IDX(cellId, cellIdx); - GET_CRNTI(crnti,ueIdx); + GET_UE_IDX(crnti, ueId); if(duCb.actvCellLst[cellIdx] != NULLP) { - for(ueIdx =0;ueIdx< duCb.actvCellLst[cellIdx]->numActvUes; ueIdx++) + if(crnti != duCb.actvCellLst[cellIdx]->ueCb[ueId - 1].crnti) { - ueId = ueIdx+1; - if(sendUeDeleteReqToRlc(cellId, ueId) == RFAILED) - { - DU_LOG("\nERROR --> DU APP : duProcUeDeleteReq():Failed to build UE delete req for RLC "); - return RFAILED; - } + DU_LOG("\nERROR --> DU APP : duBuildAndSendUeDeleteReq(): CRNTI [%d] not found", crnti); + return RFAILED; + } - GET_CRNTI(crnti,ueId); - if(sendUeDeleteReqToMac(cellId, ueId, crnti) == RFAILED) - { - DU_LOG("\nERROR --> DU APP : duProcUeDeleteReq(): Failed to build UE delete req for MAC "); - return RFAILED; - } + duCb.actvCellLst[cellIdx]->ueCb[ueId - 1].ueState = UE_DELETION_IN_PROGRESS; + if(sendUeDeleteReqToRlc(cellId, ueId) == RFAILED) + { + DU_LOG("\nERROR --> DU APP : DuProcMacUeDeleteRsp():Failed to build UE delete req for RLC "); + return RFAILED; } } else { - DU_LOG("\nERROR --> DU APP : duProcUeDeleteReq(): Cell Id is not found"); + DU_LOG("\nERROR --> DU APP : duBuildAndSendUeDeleteReq(): Cell Id is not found"); return RFAILED; } @@ -3169,194 +3161,63 @@ void deleteRlcUeCfg(RlcUeCfg *ueCfg) } /******************************************************************* - * - * @brief Delete DU CellCb information - * - * @details - * - * Function : deleteDuCellCb - * - * Functionality: Delete DU CellCb information - * - * @params[in] DuCellCb *cellCb - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -void deleteDuCellCb(DuCellCb *cellCb) -{ - - if(cellCb->duMacCellCfg) - { - if(cellCb->duMacCellCfg->prachCfg.fdm[0].unsuedRootSeq) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cellCb->duMacCellCfg->prachCfg.fdm[0].unsuedRootSeq,\ - cellCb->duMacCellCfg->prachCfg.fdm[0].numUnusedRootSeq); - } - if(cellCb->duMacCellCfg->sib1Cfg.sib1Pdu) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,cellCb->duMacCellCfg->sib1Cfg.sib1Pdu,\ - cellCb->duMacCellCfg->sib1Cfg.sib1PduLen); - } - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cellCb->duMacCellCfg, sizeof(MacCellCfg)); - } - memset(cellCb, 0, sizeof(DuCellCb)); - -} - -/******************************************************************* - * - * @brief Handle Cell delete response from MAC - * - * @details - * - * Function : DuProcMacCellDeleteRsp - * - * Functionality: Handle Cell delete response from MAC - * - * @params[in] Pointer to MacCellDeleteRsp and Pst - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *deleteRsp) +* +* @brief Du process Ue Context Release Command +* +* @details +* +* Function : duProcUeContextReleaseCommand +* +* Functionality: Du process Ue Context Release Command +* +* @params[in] DuUeCb *duUeCb +* @return ROK - success +* RFAILED - failure +* +* ****************************************************************/ +uint8_t duProcUeContextReleaseCommand(DuUeCb *duUeCb) { - uint8_t ret = ROK; - uint16_t cellIdx=0; - if(deleteRsp) + uint8_t ret =ROK, ueIdx=0; + uint16_t cellId=0,crnti =0; + if(duUeCb == NULLP) { - if(deleteRsp->result == SUCCESSFUL_RSP) - { - GET_CELL_IDX(deleteRsp->cellId, cellIdx); - DU_LOG("\nINFO --> DU APP : MAC CELL Delete Response : SUCCESS [CELL IDX : %d]", deleteRsp->cellId); - if(duCb.actvCellLst[cellIdx]->cellId == deleteRsp->cellId) - { - deleteDuCellCb(duCb.actvCellLst[cellIdx]); - duCb.numActvCells--; - DU_FREE(duCb.actvCellLst[cellIdx], sizeof(DuCellCb)); - } - else - { - DU_LOG("\nERROR --> DU APP : DuProcMacCellDeleteRsp(): CellId [%d] doesnot exist", deleteRsp->cellId); - ret = RFAILED; - } - } - else - { - DU_LOG("\nERROR --> DU APP : DuProcMacCellDeleteRsp(): MAC CELL Delete Response : FAILED\ - [CELL IDX : %d]", deleteRsp->cellId); - ret = RFAILED; - } - DU_FREE_SHRABL_BUF(pst->region, pst->pool, deleteRsp, sizeof(MacUeDeleteRsp)); + DU_LOG("\nERROR --> DU APP : duProcUeContextReleaseCommand() : duUeCb is null"); + return RFAILED; } - else + if(duUeCb->f1UeDb == NULLP) { - DU_LOG("\nERROR --> DU APP : DuProcMacCellDeleteRsp(): Received MAC cell delete response is NULL"); - ret = RFAILED; + DU_LOG("\nERROR --> DU APP : duProcUeContextReleaseCommand() : f1UeDb is null"); + return RFAILED; } - return ret; -} - -/******************************************************************* - * - * @brief Sending Cell Delete Req To Mac - * - * @details - * - * Function : sendCellDeleteReqToMac - * - * Functionality: - * sending Cell Delete Req To Mac - * - * @params[in] uint16_t cellId - * @return ROK - success - * RFAILED - failure - * - * - *****************************************************************/ - -uint8_t sendCellDeleteReqToMac(uint16_t cellId) -{ - Pst pst; - uint8_t ret=ROK; - MacCellDelete *cellDelete = NULLP; - DU_ALLOC(cellDelete, sizeof(MacCellDelete)); - if(cellDelete) + cellId = duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->cellId; + crnti = duUeCb->crnti; + /* Send DL RRC msg for RRC release */ + if(duUeCb->f1UeDb->dlRrcMsg) { - cellDelete->cellId = cellId; - FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_DELETE_REQ); - - DU_LOG("\nINFO --> DU APP : Sending Cell Delete Request to MAC"); - /* Processing one Cell at a time to MAC */ - ret = (*packMacCellDeleteReqOpts[pst.selector])(&pst, cellDelete); - if(ret == RFAILED) + if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP) { - DU_LOG("\nERROR --> DU APP : sendCellDeleteReqToMac(): Failed to send Cell delete Req to MAC"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cellDelete, sizeof(MacCellDelete)); + ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx].rlcUeCfg,\ + duUeCb->f1UeDb->dlRrcMsg); + if(ret == RFAILED) + { + DU_LOG("\nERROR --> DU APP : duProcUeContextReleaseCommand() : Failed to send DL RRC msg"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\ + duUeCb->f1UeDb->dlRrcMsg->rrcMsgSize); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg)); + } } } else { - DU_LOG("\nERROR --> DU APP : sendCellDeleteReqToMac(): Failed to allocate memory"); - ret = RFAILED; - } - return ret; -} - -/******************************************************************* - * - * @brief DU preocess Cell Delete Req to MAC - * - * @details - * - * Function : duProcCellDeleteReq - * - * Functionality: DU process Cell Delete Req to MAC - * - * @params[in] uint16_t cellId - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -uint8_t duProcCellDeleteReq(uint16_t cellId) -{ - uint16_t cellIdx = 0; - - DU_LOG("\nINFO --> DU APP : Processing Cell Delete Request "); - GET_CELL_IDX(cellId, cellIdx); - - if(duCb.actvCellLst[cellIdx] != NULLP) - { - if(duBuildAndSendMacCellStop() == RFAILED) - { - DU_LOG("\nERROR --> DU APP : duProcCellDeleteReq(): Failed to process Cell delete req for cellId[%d]",cellId); - return RFAILED; - } - - if(duCb.actvCellLst[cellIdx]->numActvUes) - { - DU_LOG("\nERROR --> DU APP : duProcCellDeleteReq(): Active UEs present Failed to process cell Delete\ - Req for cellID[%d]", cellId); - return RFAILED; - } - if(sendCellDeleteReqToMac(cellId) == RFAILED) + ret = duBuildAndSendUeDeleteReq(cellId,crnti); + if(ret == RFAILED) { - DU_LOG("\nERROR --> DU APP : duProcCellDeleteReq(): Failed to build and send Cell delete req for MAC for\ - cellId[%d]",cellId); - return RFAILED; + DU_LOG("\nERROR --> DU APP : duProcUeContextReleaseCommand(): Failed to build and send Ue Delete request"); } } - else - { - DU_LOG("\nERROR --> DU APP : duProcCellDeleteReq(): CellId[%d] is not found", cellId); - return RFAILED; - } - return ROK; + return ret; } /**********************************************************************