X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_ue_mgr.c;h=1f088039b0e9feb115756e6e25d6a6a01ed046ac;hb=135666f5b7d048c76f68c15bd0c6b6566d1e49e2;hp=3545e6e6c2ecf69b7389cdff3443663c891f8e95;hpb=7c6820e987fadb1102e5891408ad33a8ce36ba95;p=o-du%2Fl2.git diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 3545e6e6c..1f088039b 100644 --- a/src/du_app/du_ue_mgr.c +++ b/src/du_app/du_ue_mgr.c @@ -30,14 +30,12 @@ #include "du_app_rlc_inf.h" #include "du_cfg.h" #include "du_utils.h" -#include -#include "F1AP-PDU.h" #include "du_mgr.h" #include "du_f1ap_msg_hdl.h" #include "du_ue_mgr.h" #ifdef EGTP_TEST -U32 sduId = 0; +uint32_t sduId = 0; #endif DuMacDlCcchInd packMacDlCcchIndOpts[] = @@ -150,7 +148,7 @@ uint8_t duHdlEgtpDlData(EgtpMsg *egtpMsg) uint8_t duBuildAndSendDlCcchInd(uint16_t *cellId, uint16_t *crnti, \ DlCcchMsgType msgType, uint16_t dlCcchMsgSize, uint8_t *dlCcchMsg) { - uint8_t ret = ROK; + uint8_t ret = ROK; uint16_t idx2; DlCcchIndInfo *dlCcchIndInfo = NULLP; Pst pst; @@ -220,48 +218,54 @@ uint8_t duBuildAndSendDlCcchInd(uint16_t *cellId, uint16_t *crnti, \ * RFAILED - failure * * ****************************************************************/ -uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, \ - uint8_t lcId, bool execDup, bool deliveryStaReq, uint16_t rrcMsgLen, uint8_t *rrcMsg) +uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, F1DlRrcMsg *f1DlRrcMsg) { - Pst pst; + Pst pst; uint8_t ret; uint8_t lcIdx; - RlcDlRrcMsgInfo *dlRrcMsgInfo; + RlcDlRrcMsgInfo *dlRrcMsgInfo = NULLP; + + if(!f1DlRrcMsg) + { + DU_LOG("\nDU APP : Received Dl RRC Msg is NULL at duBuildAndSendDlRrcMsgToRlc()"); + return RFAILED; + } DU_ALLOC_SHRABL_BUF(dlRrcMsgInfo, sizeof(RlcDlRrcMsgInfo)); if(!dlRrcMsgInfo) { DU_LOG("\nDU APP : Memory allocation failed for dlRrcMsgInfo in \ duBuildAndSendDlRrcMsgToRlc"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rrcMsg, rrcMsgLen); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, f1DlRrcMsg->rrcMsgPdu, f1DlRrcMsg->rrcMsgSize); return RFAILED; } - + /* Filling up the RRC msg info */ dlRrcMsgInfo->cellId = cellId; dlRrcMsgInfo->ueIdx = ueCfg.ueIdx; for(lcIdx = 0; lcIdx <= MAX_NUM_LC; lcIdx++) { - if(ueCfg.rlcLcCfg[lcIdx].lcId == lcId) + if(ueCfg.rlcLcCfg[lcIdx].lcId == f1DlRrcMsg->srbId) { dlRrcMsgInfo->rbType = ueCfg.rlcLcCfg[lcIdx].rbType; - dlRrcMsgInfo->rbId = ueCfg.rlcLcCfg[lcIdx].rbId; + dlRrcMsgInfo->rbId = ueCfg.rlcLcCfg[lcIdx].rbId; dlRrcMsgInfo->lcType = ueCfg.rlcLcCfg[lcIdx].lcType; - dlRrcMsgInfo->lcId = ueCfg.rlcLcCfg[lcIdx].lcId; + dlRrcMsgInfo->lcId = ueCfg.rlcLcCfg[lcIdx].lcId; break; } } - dlRrcMsgInfo->execDup = execDup; - dlRrcMsgInfo->deliveryStaRpt = deliveryStaReq; - dlRrcMsgInfo->rrcMsg = rrcMsg; - dlRrcMsgInfo->msgLen = rrcMsgLen; + dlRrcMsgInfo->execDup = f1DlRrcMsg->execDup; + dlRrcMsgInfo->deliveryStaRpt = f1DlRrcMsg->deliveryStatRpt; + dlRrcMsgInfo->msgLen = f1DlRrcMsg->rrcMsgSize; + dlRrcMsgInfo->rrcMsg = f1DlRrcMsg->rrcMsgPdu; /* Filling post structure and sending msg */ FILL_PST_DUAPP_TO_RLC(pst, RLC_DL_INST, EVENT_DL_RRC_MSG_TRANS_TO_RLC); + DU_LOG("\nDU_APP: Sending Dl RRC Msg to RLC \n"); ret = (*duSendDlRrcMsgToRlcOpts[pst.selector])(&pst, dlRrcMsgInfo); if(ret != ROK) { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rrcMsg, rrcMsgLen); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, f1DlRrcMsg->rrcMsgPdu, f1DlRrcMsg->rrcMsgSize); DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlRrcMsgInfo, sizeof(RlcDlRrcMsgInfo)); return RFAILED; } @@ -273,114 +277,45 @@ uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, \ /****************************************************************** * - * @brief Processes DL RRC Message Transfer sent by CU + * @brief Process DL RRC Msg recevied from F1AP * * @details * - * Function : procDlRrcMsgTrans + * Function : duProcDlRrcMsg * - * Functionality: Processes DL RRC Message Transfer sent by CU + * Functionality: Process DL RRC Msg recevied from F1AP * - * @params[in] F1AP_PDU_t ASN decoded F1AP message + * @params[in] dlCcchMsg - uint8_t* * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t procDlRrcMsgTrans(F1AP_PDU_t *f1apMsg) -{ - DLRRCMessageTransfer_t *dlRrcMsg = NULLP; - uint8_t *rrcMsgPdu = NULLP; - uint8_t ieIdx, ueIdx, cellIdx; - uint8_t ret, srbId; - uint16_t byteIdx, crnti, cellId, rrcMsgSize; - uint32_t gnbCuUeF1apId, gnbDuUeF1apId; - bool execDup = false; - bool deliveryStaRpt = false; - bool ueFound = false; - bool ueCcchCtxtFound = false; - - DU_LOG("\nDU_APP : DL RRC message transfer Recevied"); - dlRrcMsg = &f1apMsg->choice.initiatingMessage->value.choice.DLRRCMessageTransfer; +uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg) +{ + uint8_t ueIdx, ret; + uint16_t crnti, cellId, cellIdx; + bool ueCcchCtxtFound = false; + bool ueFound = false; ret = ROK; - for(ieIdx=0; ieIdxprotocolIEs.list.count; ieIdx++) - { - switch(dlRrcMsg->protocolIEs.list.array[ieIdx]->id) - { - case ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: - { - gnbCuUeF1apId = dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.GNB_CU_UE_F1AP_ID; - break; - } - case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: - { - gnbDuUeF1apId = dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID; - break; - } - case ProtocolIE_ID_id_SRBID: - { - srbId = dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.SRBID; - break; - } - case ProtocolIE_ID_id_ExecuteDuplication: - { - execDup = true; - break; - } - case ProtocolIE_ID_id_RRCContainer: - { - if(dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.RRCContainer.size > 0) - { - rrcMsgSize = dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.RRCContainer.size; - DU_ALLOC(rrcMsgPdu, rrcMsgSize); - if(!rrcMsgPdu) - { - DU_LOG("\nDU_APP : Memory allocation failed in procDlRrcMsgTrans"); - return RFAILED; - } - for(byteIdx = 0; byteIdx < rrcMsgSize; byteIdx++) - { - rrcMsgPdu[byteIdx] = \ - dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.RRCContainer.buf[byteIdx]; - } - } - else - { - DU_LOG("\nDU_APP : RRC Container Size is invalid:%ld",\ - dlRrcMsg->protocolIEs.list.array[ieIdx]->value.choice.RRCContainer.size); - return RFAILED; - } - break; - } - case ProtocolIE_ID_id_RRCDeliveryStatusRequest: - { - deliveryStaRpt = true; - break; - } - default: - DU_LOG("\nDU_APP : Invalid IE received in DL RRC Msg Transfer:%ld", - dlRrcMsg->protocolIEs.list.array[ieIdx]->id); - } - } - - if(srbId == SRB1_LCID) //RRC connection setup + if(dlRrcMsg->srbId == SRB0_LCID) //RRC connection setup { - for(ueIdx=0; ueIdx < duCb.numUe; ueIdx++) + for(ueIdx=0; ueIdxgnbDuUeF1apId == duCb.ueCcchCtxt[ueIdx].gnbDuUeF1apId) { ueCcchCtxtFound = true; - crnti = duCb.ueCcchCtxt[ueIdx].crnti; - cellId = duCb.ueCcchCtxt[ueIdx].cellId; - break; + crnti = duCb.ueCcchCtxt[ueIdx].crnti; + cellId = duCb.ueCcchCtxt[ueIdx].cellId; + break; } } } if(ueCcchCtxtFound) { - ret = duBuildAndSendDlCcchInd(&cellId, &crnti, RRC_SETUP, rrcMsgSize, rrcMsgPdu); + ret = duBuildAndSendDlCcchInd(&cellId, &crnti, RRC_SETUP, dlRrcMsg->rrcMsgSize, dlRrcMsg->rrcMsgPdu); if(ret == RFAILED) { DU_LOG("\nDU_APP: Falied to build DlCcch Ind at procDlRrcMsgTrans()"); @@ -389,12 +324,11 @@ uint8_t procDlRrcMsgTrans(F1AP_PDU_t *f1apMsg) { if(duCb.actvCellLst[cellId-1]->numActvUes < MAX_NUM_UE) { - ret = duCreateUeCb(&duCb.ueCcchCtxt[ueIdx], gnbCuUeF1apId); + ret = duCreateUeCb(&duCb.ueCcchCtxt[ueIdx], dlRrcMsg->gnbCuUeF1apId); if(ret == RFAILED) { DU_LOG("\nDU_APP: Failed to createUeCb for cellId [%d] at procDlRrcMsgTrans()", \ duCb.ueCcchCtxt[ueIdx].cellId); - ret = RFAILED; } } else @@ -410,13 +344,12 @@ uint8_t procDlRrcMsgTrans(F1AP_PDU_t *f1apMsg) { for(ueIdx = 0 ; ueIdx < MAX_NUM_UE; ueIdx++) { - if((gnbCuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId) - && (gnbDuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId)) + if((dlRrcMsg->gnbCuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId) + && (dlRrcMsg->gnbDuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId)) { ueFound = true; ret = duBuildAndSendDlRrcMsgToRlc(duCb.actvCellLst[cellIdx]->cellId, \ - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, srbId, \ - execDup, deliveryStaRpt, rrcMsgSize, rrcMsgPdu); + duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, dlRrcMsg); break; } } @@ -504,7 +437,8 @@ uint8_t duProcUlCcchInd(UlCcchIndInfo *ulCcchIndInfo) * * Functionality: Fills Default UL LC Cfg * - * + * @params[in] UlLcCfg *ulLcCfg + * @return void *****************************************************************/ void fillDefaultUlLcCfg(UlLcCfg *ulLcCfg) { @@ -525,6 +459,8 @@ void fillDefaultUlLcCfg(UlLcCfg *ulLcCfg) * * Functionality: Fills Initial DL Bandwidth Part * + * @params[in] InitialDlBwp *initDlBwp + * @return void * *****************************************************************/ void fillDefaultInitDlBwp(InitialDlBwp *initDlBwp) @@ -632,6 +568,8 @@ void fillDefaultInitDlBwp(InitialDlBwp *initDlBwp) * * Functionality: Fills Initial UL Bandwidth Part * + * @params[in] InitialUlBwp *initUlBwp + * @return void * *****************************************************************/ void fillDefaultInitUlBwp(InitialUlBwp *initUlBwp) @@ -681,6 +619,8 @@ void fillDefaultInitUlBwp(InitialUlBwp *initUlBwp) * * Functionality: Fills Sp Cell Group Info * + * @params[in] SpCellCfg *spCell + * @return void * *****************************************************************/ void fillDefaultSpCellGrpInfo(SpCellCfg *spCell) @@ -722,6 +662,8 @@ void fillDefaultSpCellGrpInfo(SpCellCfg *spCell) * * Functionality: Fills Physical Cell Group Info * + * @params[in] PhyCellGrpCfg *cellGrp + * @return void * *****************************************************************/ void fillDefaultPhyCellGrpInfo(PhyCellGrpCfg *cellGrp) @@ -747,6 +689,8 @@ void fillDefaultPhyCellGrpInfo(PhyCellGrpCfg *cellGrp) * * Functionality: Fills Mac Cell Group Info * + * @params[in] MacCellGrpCfg *cellGrp + * @return void * *****************************************************************/ void fillDefaultMacCellGrpInfo(MacCellGrpCfg *cellGrp) @@ -802,7 +746,19 @@ void fillDefaultMacCellGrpInfo(MacCellGrpCfg *cellGrp) } } - +/****************************************************************** + * + * @brief Function to fill Mac Lc Cfg for SRB1 + * + * @details + * + * Function : fillMacSrb1LcCfg + * + * Functionality: Function to fill Mac Lc cfg for SRB1 + * + * @params[in] LcCfg *lcCfg, LcCfg *ueSetReqDb + * @return void + *****************************************************************/ void fillMacSrb1LcCfg(LcCfg *macLcCfg) { @@ -824,6 +780,8 @@ void fillMacSrb1LcCfg(LcCfg *macLcCfg) * * Functionality: Function to fill the Lc cfg from ueSetupReqDb * + * @params[in] LcCfg *lcCfg, LcCfg *ueSetReqDb + * @return ROK/RFAILED * *****************************************************************/ @@ -841,7 +799,7 @@ uint8_t fillMacLcCfgToAddMod(LcCfg *lcCfg, LcCfg *ueSetReqDb) if(!lcCfg->drbQos) { DU_LOG("\nDU APP: Memory Alloc failed at drQos at fillMacLcCfgToAddMod()"); - ret = RFAILED; + return RFAILED; } } if(ret == ROK) @@ -854,31 +812,37 @@ uint8_t fillMacLcCfgToAddMod(LcCfg *lcCfg, LcCfg *ueSetReqDb) lcCfg->drbQos = NULLP; } - /* Filling SNSSAI */ - if(ueSetReqDb->snssai && ret == ROK) + if(ret == ROK) { - if(!lcCfg->snssai) + if(ueSetReqDb->snssai) { - DU_ALLOC_SHRABL_BUF(lcCfg->snssai, sizeof(Snssai)); if(!lcCfg->snssai) { - DU_LOG("\nDU APP: Memory Alloc failed at snnsai at fillMacLcCfgToAddMod()"); - ret = RFAILED; + DU_ALLOC_SHRABL_BUF(lcCfg->snssai, sizeof(Snssai)); + if(!lcCfg->snssai) + { + DU_LOG("\nDU APP: Memory Alloc failed at snnsai at fillMacLcCfgToAddMod()"); + ret = RFAILED; + } } + if(ret == ROK) + { + /* Filling SNSSAI */ + memcpy(lcCfg->snssai, ueSetReqDb->snssai, sizeof(Snssai)); + } + 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; + } } - if(ret == ROK) - { - memcpy(lcCfg->snssai, ueSetReqDb->snssai, sizeof(Snssai)); - } - } - else - { - lcCfg->snssai = NULLP; - if(lcCfg->drbQos) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, lcCfg->drbQos, sizeof(DrbQosInfo)); - lcCfg->drbQos = NULLP; - } + else + lcCfg->snssai = NULLP; } lcCfg->ulLcCfgPres = ueSetReqDb->ulLcCfgPres; memcpy(&lcCfg->ulLcCfg, &ueSetReqDb->ulLcCfg, sizeof(UlLcCfg)); @@ -892,31 +856,35 @@ uint8_t fillMacLcCfgToAddMod(LcCfg *lcCfg, LcCfg *ueSetReqDb) * * @details * - * Function : getMaxAggrBitRate + * Function : fillAmbr * * Functionality: Function to copy bit Rate from ueSetupReqDb * + * @params[in] AmbrCfg **macAmbr, AmbrCfg *ueDbAmbr + * @return ROK/RFAILED * *****************************************************************/ -uint8_t getMaxAggrBitRate(MaxAggrBitRate *macBitRate, MaxAggrBitRate *ueDbBitRate) +uint8_t fillAmbr(AmbrCfg **macAmbr, AmbrCfg *ueDbAmbr) { - if(ueDbBitRate) + if(ueDbAmbr) { - if(!macBitRate) + if(*macAmbr == NULLP) { - DU_ALLOC_SHRABL_BUF(macBitRate, sizeof(MaxAggrBitRate)); - if(!macBitRate) + DU_ALLOC_SHRABL_BUF(*macAmbr, sizeof(AmbrCfg)); + if(*macAmbr == NULLP) { - DU_LOG("\nDUAPP: Memory Alloc Failed at getMaxAggrBitRate()"); + DU_LOG("\nDUAPP: Memory Alloc Failed at fillAmbr()"); return RFAILED; } } - memcpy(macBitRate, ueDbBitRate, sizeof(MaxAggrBitRate)); + memset(*macAmbr, 0, sizeof(AmbrCfg)); + (*macAmbr)->ulBr = ueDbAmbr->ulBr; + (*macAmbr)->dlBr = ueDbAmbr->dlBr; } else { - macBitRate = NULLP; + *macAmbr = NULLP; } return ROK; } @@ -931,7 +899,7 @@ uint8_t getMaxAggrBitRate(MaxAggrBitRate *macBitRate, MaxAggrBitRate *ueDbBitRat * * Functionality: Builds and Send UE ReConfig Request to MAC * - * @Params[in] MacUeCfg * + * @Params[in] MacUeCfg pointer * @return ROK - success * RFAILED - failure * @@ -948,7 +916,7 @@ uint8_t sendUeReCfgReqToMac(MacUeCfg *macUeCfg) if(macUeCfg) { /* Processing one Ue at a time to MAC */ - DU_LOG("\nDU_APP: Sending Reconfig Request to MAC"); + DU_LOG("\nDU_APP: Sending Ue Reconfig Request to MAC"); ret = (*packMacUeReconfigReqOpts[pst.selector])(&pst, macUeCfg); if(ret == RFAILED) { @@ -974,7 +942,7 @@ uint8_t sendUeReCfgReqToMac(MacUeCfg *macUeCfg) * * Functionality: Function to return Drb LcId * - *Returns: lcId - SUCCESS + * Returns: lcId - SUCCESS * RFAILED - FAILURE *****************************************************************/ @@ -1009,10 +977,14 @@ uint8_t getDrbLcId(uint32_t *drbBitMap) * * Functionality: Fills MacUeCfg * + * @params[in] cellId, ueIdx, crnti, + * DuUeCfg pointer, + * MacUeCfg pointer + * @return ROK/RFAILED * *****************************************************************/ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ - UeContextSetupDb *ueCfgDb, MacUeCfg *macUeCfg) + DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg) { uint8_t ret, dbIdx, lcIdx, cellIdx; bool lcIdFound = false; @@ -1028,7 +1000,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ fillDefaultMacCellGrpInfo(&macUeCfg->macCellGrpCfg); fillDefaultPhyCellGrpInfo(&macUeCfg->phyCellGrpCfg); fillDefaultSpCellGrpInfo(&macUeCfg->spCellCfg); - macUeCfg->maxAggrBitRate = NULLP; + macUeCfg->ambrCfg = NULLP; fillMacSrb1LcCfg(&macUeCfg->lcCfgList[0]); macUeCfg->numLcs++; } @@ -1044,28 +1016,38 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ ret = procUeReCfgCellInfo(macUeCfg, ueCfgDb->cellGrpCfg); if(ret == ROK) { - ret = getMaxAggrBitRate(macUeCfg->maxAggrBitRate, ueCfgDb->duUeCfg.maxAggrBitRate); + if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent) + { + fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\ + &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL); + } + if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent) + { + fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\ + NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg); + } + ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg); } /* Filling LC Context */ - for(dbIdx = 0; (dbIdx < ueCfgDb->duUeCfg.numMacLcs && ret == ROK); dbIdx++) + for(dbIdx = 0; (dbIdx < ueCfgDb->numMacLcs && ret == ROK); dbIdx++) { - if(!ueCfgDb->duUeCfg.macLcCfg[dbIdx].ulLcCfgPres) + if(!ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres) { /* Filling default UL LC config in MAC if not present */ - ueCfgDb->duUeCfg.macLcCfg[dbIdx].ulLcCfgPres = true; - fillDefaultUlLcCfg(&ueCfgDb->duUeCfg.macLcCfg[dbIdx].ulLcCfg); + ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres = true; + fillDefaultUlLcCfg(&ueCfgDb->macLcCfg[dbIdx].ulLcCfg); } for(lcIdx = 0; lcIdx < duMacDb->numLcs; lcIdx++) { - if(ueCfgDb->duUeCfg.macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId) + if(ueCfgDb->macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId) { lcIdFound = true; - if((ueCfgDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) || - (ueCfgDb->duUeCfg.macLcCfg[dbIdx].configType == CONFIG_MOD)) + if((ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) || + (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD)) { - ueCfgDb->duUeCfg.macLcCfg[dbIdx].configType = CONFIG_MOD; - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->duUeCfg.macLcCfg[dbIdx]); + ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD; + ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]); } } else @@ -1074,7 +1056,7 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ if(!lcIdFound) { /* ADD/DEL CONFIG */ - ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->duUeCfg.macLcCfg[dbIdx]); + ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]); } if(ret == ROK) { @@ -1100,6 +1082,8 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \ * * Functionality: Fills Rlc AM Information * + * @params[in] AmBearerCfg *amCfg + * @return void * *****************************************************************/ void fillDefaultAmInfo(AmBearerCfg *amCfg) @@ -1127,6 +1111,8 @@ void fillDefaultAmInfo(AmBearerCfg *amCfg) * * Functionality: Fills RLC UM Bi Directional Information * + * @params[in] UmBiDirBearerCfg *umBiDirCfg + * @return void * *****************************************************************/ void fillDefaultUmBiInfo(UmBiDirBearerCfg *umBiDirCfg) @@ -1149,6 +1135,8 @@ void fillDefaultUmBiInfo(UmBiDirBearerCfg *umBiDirCfg) * * Functionality: Fills RLC UM Uni Directional Info * + * @params[in] UmUniDirUlBearerCfg *UmUlCfg + * @return void * *****************************************************************/ void fillDefaultUmUlInfo(UmUniDirUlBearerCfg *UmUlCfg) @@ -1167,6 +1155,8 @@ void fillDefaultUmUlInfo(UmUniDirUlBearerCfg *UmUlCfg) * * Functionality: Fills RLC UM Uni Directional DL Info * + * @params[in] UmUniDirDlBearerCfg *UmDlCfg + * @return void * *****************************************************************/ void fillDefaultUmDlInfo(UmUniDirDlBearerCfg *UmDlCfg) @@ -1184,11 +1174,14 @@ void fillDefaultUmDlInfo(UmUniDirDlBearerCfg *UmDlCfg) * * Functionality: Builds Rlc Mode Default Configuration * + * @params[in] rlcMode, RlcBearerCfg *lcCfg + * @return ROK/RFAILED * *****************************************************************/ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) { + if(lcCfg) { switch(rlcMode) @@ -1200,6 +1193,11 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); if(lcCfg->u.amCfg) fillDefaultAmInfo(lcCfg->u.amCfg); + else + { + DU_LOG("\n DU_APP: Memory Alloc failed at AmCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } } break; } @@ -1210,6 +1208,11 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); if(lcCfg->u.umBiDirCfg) fillDefaultUmBiInfo(lcCfg->u.umBiDirCfg); + else + { + DU_LOG("\n DU_APP: Memory Alloc failed at UmBiDirCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } } break; } @@ -1220,6 +1223,11 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); if(lcCfg->u.umUniDirUlCfg) fillDefaultUmUlInfo(lcCfg->u.umUniDirUlCfg); + else + { + DU_LOG("\n DU_APP: Memory Alloc failed at UmUniDirUlCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } } break; } @@ -1230,6 +1238,11 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); if(lcCfg->u.umUniDirDlCfg) fillDefaultUmDlInfo(lcCfg->u.umUniDirDlCfg); + else + { + DU_LOG("\n DU_APP: Memory Alloc failed at UmUniDirDlCfg at fillDefaultRlcModeCfg()"); + return RFAILED; + } } break; } @@ -1246,15 +1259,35 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) } return ROK; } -void fillRlcSrb1LcCfg(RlcBearerCfg *rlcLcCfg) + +/******************************************************************* + * + * @brief Function to fill Rlc Lc Cfg for SRB1 + * + * @details + * + * Function : fillRlcSrb1LcCfg + * + * Functionality: + * Function to fill Rlc Lc Cfg for SRB1 + * + * @params[in] Pointer to RlcBearerCfg + * @return ROK/RFAILED + * + *****************************************************************/ + +uint8_t fillRlcSrb1LcCfg(RlcBearerCfg *rlcLcCfg) { + uint8_t ret = ROK; + rlcLcCfg->rbId = SRB1_LCID; rlcLcCfg->rbType = RB_TYPE_SRB; rlcLcCfg->lcId = SRB1_LCID; rlcLcCfg->lcType = LCH_DCCH; rlcLcCfg->rlcMode = RLC_AM; rlcLcCfg->configType = CONFIG_ADD; - fillDefaultRlcModeCfg(rlcLcCfg->rlcMode, rlcLcCfg); + ret = fillDefaultRlcModeCfg(rlcLcCfg->rlcMode, rlcLcCfg); + return ret; } /******************************************************************* @@ -1283,7 +1316,7 @@ uint8_t sendUeReCfgReqToRlc(RlcUeCfg *rlcUeCfg) if(rlcUeCfg) { /* Processing one Ue at a time to RLC */ - DU_LOG("\nDU_APP: Sending Reconfig Request to RLC UL"); + DU_LOG("\nDU_APP: Sending Ue Reconfig Request to RLC UL"); ret = (*packRlcUeReconfigReqOpts[pst.selector])(&pst, rlcUeCfg); if(ret == RFAILED) { @@ -1324,8 +1357,11 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\ /* Initial RB being Added */ rlcUeCfg->cellId = cellId; rlcUeCfg->ueIdx = ueIdx; - fillRlcSrb1LcCfg(&rlcUeCfg->rlcLcCfg[0]); - rlcUeCfg->numLcs++; + ret = fillRlcSrb1LcCfg(&rlcUeCfg->rlcLcCfg[0]); + if(ret == ROK) + rlcUeCfg->numLcs++; + else + memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); } else { @@ -1335,9 +1371,15 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\ /*Filling RlcUeCfg */ rlcUeCfg->cellId = cellId; rlcUeCfg->ueIdx = ueIdx; - for(dbIdx = 0; dbIdx < ueCfgDb->numRlcLcs; dbIdx++) + for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++) { - fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]); + ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]); + if(ret == RFAILED) + { + DU_LOG("\n DU_APP: Failed to fill Rlc Mode at fillRlcUeCfg()"); + memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); + return ret; + } /* Fill Rlc Ue Cfg List for ADD/MOD/DEL */ for(lcIdx = 0; lcIdx < duRlcDb->numLcs; lcIdx++) { @@ -1395,12 +1437,12 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) GET_UE_IDX(ueCcchCtxt->crnti, ueIdx); DU_LOG("\nDU_APP: Filling UeCb for ueIdx [%d]", ueIdx); - duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].crnti = ueCcchCtxt->crnti; + duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].f1UeDb = NULLP; + duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].crnti = ueCcchCtxt->crnti; duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbDuUeF1apId = ueCcchCtxt->gnbDuUeF1apId; duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbCuUeF1apId = gnbCuUeF1apId; duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].drbBitMap = NULLP; duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].ueState = UE_ACTIVE; - duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].f1UeDb = NULLP; /* Filling Mac Ue Config */ memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg, 0, sizeof(MacUeCfg)); @@ -1443,9 +1485,11 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueIdx,\ uint16_t crnti, MacUeCfg *duMacUeCfg) { - uint8_t ret = ROK; - Pst pst; + uint8_t ret = ROK; MacUeCfg *macUeCfg = NULLP; + Pst pst; + memset(&pst, 0, sizeof(Pst)); + ret = fillMacUeCfg(cellId, ueIdx, crnti, NULL, duMacUeCfg); if(ret == RFAILED) @@ -1454,7 +1498,7 @@ uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueIdx,\ return RFAILED; } /* Fill Pst */ - FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_UE_CONFIG_REQ); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_UE_CREATE_REQ); /* Copying ueCb to a sharable buffer */ DU_ALLOC_SHRABL_BUF(macUeCfg, sizeof(MacUeCfg)); @@ -1490,21 +1534,31 @@ uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueIdx,\ * Functionality: update DuUeCb MAC Cfg * * @params[in] DuUeCb Pointer - * UeContextSetupDb pointer + * F1UeContextSetupDb pointer * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, UeContextSetupDb *f1UeDb) +uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) { uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx; ret = ROK; /*Filling Cell Group Cfg*/ - ret = procUeReCfgCellInfo(macUeCfg, f1UeDb->cellGrpCfg); + ret = procUeReCfgCellInfo(macUeCfg, f1UeDb->duUeCfg.cellGrpCfg); if(ret == ROK) { - ret = getMaxAggrBitRate(macUeCfg->maxAggrBitRate, f1UeDb->duUeCfg.maxAggrBitRate); + if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent) + { + fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\ + &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL); + } + if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent) + { + fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\ + NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg); + } + ret = fillAmbr(&macUeCfg->ambrCfg, f1UeDb->duUeCfg.ambrCfg); } /* Filling LC Context */ for(dbIdx = 0; (dbIdx < f1UeDb->duUeCfg.numMacLcs && ret == ROK); dbIdx++) @@ -1652,13 +1706,13 @@ uint8_t fillRlcCfgToAddMod(RlcBearerCfg *lcCfg, RlcBearerCfg *f1UeDbLcCfg) * Functionality: update DuUeCb Rlc Lc Cfg * * @params[in] DuUeCb Pointer - * UeContextSetupDb pointer + * F1UeContextSetupDb pointer * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, UeContextSetupDb *f1UeDb) +uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) { uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx; @@ -1775,24 +1829,22 @@ uint8_t duUpdateDuUeCbCfg(uint8_t ueIdx, uint8_t cellId) uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) { uint8_t ret = ROK; - uint8_t ueIdx, cellIdx; if(cfgRsp) { if(cfgRsp->result == MAC_DU_APP_RSP_OK) { - cellIdx = (cfgRsp->cellId -1); - ueIdx = (cfgRsp->ueIdx -1); - - if(pst->event == EVENT_MAC_UE_CONFIG_RSP) + if(pst->event == EVENT_MAC_UE_CREATE_RSP) { DU_LOG("\nDU APP : MAC UE Create Response : SUCCESS [UE IDX : %d]", cfgRsp->ueIdx); - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg.macUeCfgState = UE_CONFIG_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\ + macUeCfg.macUeCfgState = UE_CREATE_COMPLETE; } else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP) { DU_LOG("\nDU APP : MAC UE Reconfig Response : SUCCESS [UE IDX : %d]", cfgRsp->ueIdx); - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg.macUeCfgState = UE_RECFG_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\ + macUeCfg.macUeCfgState = UE_RECFG_COMPLETE; if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK) BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId); } @@ -1806,6 +1858,7 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) } ret = RFAILED; } + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp)); } else { @@ -1815,6 +1868,7 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) return ret; } + /******************************************************************* * * @brief Processes UE create Req to RLC UL @@ -1837,13 +1891,18 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t ueIdx,\ RlcUeCfg *duRlcUeCfg) { - uint8_t ret = ROK; + uint8_t ret = ROK; RlcUeCfg *rlcUeCfg = NULLP; - Pst pst; + Pst pst; - fillRlcUeCfg(cellId, ueIdx, NULL, duRlcUeCfg); - FILL_PST_DUAPP_TO_RLC(pst, RLC_UL_INST, EVENT_RLC_UE_CONFIG_REQ); + ret = fillRlcUeCfg(cellId, ueIdx, NULL, duRlcUeCfg); + if(ret == RFAILED) + { + DU_LOG("\nDU_APP: Failed to fill Rlc Ue Cfg at duBuildAndSendUeCreateReqToRlc()"); + return ret; + } + FILL_PST_DUAPP_TO_RLC(pst, RLC_UL_INST, EVENT_RLC_UE_CREATE_REQ); /* Copying ueCfg to a sharable buffer */ DU_ALLOC_SHRABL_BUF(rlcUeCfg, sizeof(RlcUeCfg)); if(rlcUeCfg) @@ -1889,27 +1948,24 @@ uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t ueIdx,\ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) { uint8_t ret = ROK; - uint8_t ueIdx, cellIdx; if(cfgRsp) { if(cfgRsp->result == RLC_DU_APP_RSP_OK) { - cellIdx = (cfgRsp->cellId -1); - ueIdx = (cfgRsp->ueIdx -1); - - if(pst->event == EVENT_RLC_UE_CONFIG_RSP) + if(pst->event == EVENT_RLC_UE_CREATE_RSP) { DU_LOG("\nDU_APP: RLC UE Create Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx); - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcUeCfgState = UE_CONFIG_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\ + rlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE; } else if(pst->event == EVENT_RLC_UE_RECONFIG_RSP) { DU_LOG("\nDU_APP: RLC UE Reconfig Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx); - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\ + rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE; if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK) BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId); - } } else @@ -1932,6 +1988,8 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) return ret; } + + /******************************************************************* * * @brief Builds and Send Ue Reconfig Req to RLC @@ -1992,7 +2050,7 @@ uint8_t duBuildAndSendUeReCfgReqToRlc(uint8_t cellId, uint8_t crnti, DuUeCfg *ue * * ****************************************************************/ -uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, UeContextSetupDb *ueCfgDb) +uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, DuUeCfg *ueCfgDb) { uint8_t ret, ueIdx = 0; MacUeCfg *macUeCfg = NULLP; @@ -2005,7 +2063,9 @@ uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, UeContextSe { memset(macUeCfg, 0, sizeof(MacUeCfg)); ret = fillMacUeCfg(cellId, ueIdx, crnti, ueCfgDb, macUeCfg); - if(ret == ROK) + if(ret == RFAILED) + DU_LOG("\nDU_APP: Failed to fill Mac Ue Cfg at duBuildAndSendUeReCfgReqToMac()"); + else ret = sendUeReCfgReqToMac(macUeCfg); } else @@ -2016,6 +2076,82 @@ uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, UeContextSe return ret; } +/******************************************************************* + * + * @brief Build and Send Ue context setup request + * + * @details + * + + * Function : duBuildAndSendUeContextSetupReq + * + * Functionality: + * Build and Send Ue context setup request + * + * @params[in] cellId, crnti, DuUeCfg pointer + * @return ROK - success + * RFAILED - failure + * + *****************************************************************/ + +uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, uint16_t crnti, DuUeCfg *duUeCfg) +{ + uint8_t ret = ROK; + + DU_LOG("\nDU_APP: Processing Ue Context Setup Request for cellId [%d]", cellId); + /* Filling RLC Ue Reconfig */ + ret = duBuildAndSendUeReCfgReqToRlc(cellId, crnti, duUeCfg); + if(ret == RFAILED) + DU_LOG("\nDU_APP: Failed to build ctxt setup req for RLC at duBuildAndSendUeContextSetupReq()"); + + /* Filling MAC Ue Reconfig */ + ret = duBuildAndSendUeReCfgReqToMac(cellId, crnti, duUeCfg); + if(ret == RFAILED) + DU_LOG("\nDU_APP: Failed at build ctxt setup req for MAC at duBuildAndSendUeContextSetupReq()"); + + return ret; +} + +/******************************************************************* + * + * @brief Processes DL Rsp received from RLC DL + * + * @details + * + + * Function : DuProcRlcDlRrcMsgRsp + * + * Functionality: + * Processes UE Rsp received from RLC DL + * + * @params[in] Post structure + * Pointer to RlcCfgCfm + * @return ROK - success + * RFAILED - failure + * + *****************************************************************/ +uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg) +{ + uint8_t ret = ROK, ueIdx = 0; + DuUeCb *ueCb = NULLP; + + if(dlRrcMsg->state == TRANSMISSION_COMPLETE) + { + GET_UE_IDX(dlRrcMsg->crnti, ueIdx); + ueCb = &duCb.actvCellLst[dlRrcMsg->cellId -1]->ueCb[ueIdx -1]; + if(ueCb->f1UeDb) + { + ret = duBuildAndSendUeContextSetupReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg); + if(ret == RFAILED) + DU_LOG("\nDUAPP: Failed to process UE Context Setup Request in DuProcRlcDlRrcMsgRsp()"); + } + } + else + DU_LOG("\nDUAPP: Failed to transmit DL RRC Msg"); + + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, dlRrcMsg, sizeof(RlcDlRrcMsgRsp)); + return ret; +} /******************************************************************* * * @brief Process UE context setup request from CU @@ -2040,33 +2176,30 @@ uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb) if(ueCb) { cellId = duCb.actvCellLst[ueCb->f1UeDb->cellIdx]->cellId; - - if(ueCb->f1UeDb->rrcMsg) + /* Send DL RRC msg for security Mode */ + if(ueCb->f1UeDb->dlRrcMsg) { - /* Sending DL RRC Message to RLC */ - ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->rlcUeCfg, SRB1_LCID, false, \ - ueCb->f1UeDb->deliveryStaReq, ueCb->f1UeDb->rrcMsgLen, ueCb->f1UeDb->rrcMsg); - if(ret == RFAILED) + if(ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu) { - DU_LOG("\nDU APP : Failed to send DL RRC msg in duProcUeContextSetupRequest()"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->rrcMsg, ueCb->f1UeDb->rrcMsgLen); + /* Sending DL RRC Message to RLC */ + ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->rlcUeCfg, ueCb->f1UeDb->dlRrcMsg); + if(ret == RFAILED) + { + DU_LOG("\nDU APP : Failed to send DL RRC msg in duProcUeContextSetupRequest()"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\ + ueCb->f1UeDb->dlRrcMsg->rrcMsgSize); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg)); + } } } - - if(ret == ROK) + else { - DU_LOG("\nDU_APP: Processing Ue Context Setup Request for cellId [%d]", cellId); - /* Filling RLC Ue Reconfig */ - ret = duBuildAndSendUeReCfgReqToRlc(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg); - if(ret == RFAILED) - DU_LOG("\nDU_APP: Failed to build ctxt setup req for RLC at duBuildAndSendUeReCfgReqToRlc()"); - - /* Filling MAC Ue Reconfig */ - ret = duBuildAndSendUeReCfgReqToMac(cellId, ueCb->crnti, ueCb->f1UeDb); - if(ret == RFAILED) - DU_LOG("\nDU_APP: Failed at build ctxt setup req for MAC at duBuildAndSendUeReCfgReqToMac()"); + ret = duBuildAndSendUeContextSetupReq(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg); + if(ret == RFAILED) + { + DU_LOG("\nDU APP : Failed to build ue context setup Req in duProcUeContextSetupRequest()"); + } } - } else {