X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_msg_hdl.c;h=90fe20bfa9995ce927a7206c016088f03b99ea0e;hb=ba2574ac618b40905509604da8d3a2b1b9e39664;hp=89c6469e31015f3e9a4e2a4f39f45e53fd1518d6;hpb=0a26c487f1b6bbb5217e47b15fa8273b2e749283;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index 89c6469e3..90fe20bfa 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -38,6 +38,14 @@ #include "legtp.h" #include "lphy_stub.h" #include "du_utils.h" +#include "du_cell_mgr.h" + +#ifdef O1_ENABLE + +#include "GlobalDefs.h" +#include "AlarmInterface.h" + +#endif uint8_t rlcDlCfg = 0; uint8_t numRlcDlSaps = 0; @@ -46,15 +54,15 @@ uint8_t numRlcMacSaps = 0; uint8_t macCfg = 0; uint8_t macCfgInst = 0; -extern DuCfgParams duCfgParam; -extern uint8_t packRlcConfigReq(Pst *pst, RlcMngmt *cfg); -extern uint8_t cmPkLkwCntrlReq(Pst *pst, RlcMngmt *cfg); -extern uint8_t cmPkLrgCfgReq(Pst *pst, RgMngmt *cfg); -extern uint8_t BuildAndSendE2SetupReq(); -extern uint8_t egtpHdlDatInd(EgtpMsg egtpMsg); -extern uint8_t BuildAndSendDUConfigUpdate(); -extern uint16_t getTransId(); -extern uint8_t cmPkLrgSchCfgReq(Pst * pst,RgMngmt * cfg); +DuCfgParams duCfgParam; +uint8_t packRlcConfigReq(Pst *pst, RlcMngmt *cfg); +uint8_t cmPkLkwCntrlReq(Pst *pst, RlcMngmt *cfg); +uint8_t cmPkLrgCfgReq(Pst *pst, RgMngmt *cfg); +uint8_t BuildAndSendE2SetupReq(); +uint8_t egtpHdlDatInd(EgtpMsg egtpMsg); +uint8_t BuildAndSendDUConfigUpdate(); +uint16_t getTransId(); +uint8_t cmPkLrgSchCfgReq(Pst * pst,RgMngmt * cfg); packMacCellCfgReq packMacCellCfgOpts[] = { @@ -63,18 +71,18 @@ packMacCellCfgReq packMacCellCfgOpts[] = packMacCellCfg, /* packing for light weight loosly coupled */ }; -DuMacCellStartReq packMacCellStartReqOpts[] = +DuMacCellStart packMacCellStartOpts[] = { - packMacCellStartReq, /* Loose coupling */ - MacProcCellStartReq, /* TIght coupling */ - packMacCellStartReq /* Light weight-loose coupling */ + packMacCellStart, /* Loose coupling */ + MacProcCellStart, /* TIght coupling */ + packMacCellStart /* Light weight-loose coupling */ }; -DuMacCellStopReq packMacCellStopReqOpts[] = +DuMacCellStop packMacCellStopOpts[] = { - packMacCellStopReq, /* Loose coupling */ - MacProcCellStopReq, /* TIght coupling */ - packMacCellStopReq /* Light weight-loose coupling */ + packMacCellStop, /* Loose coupling */ + MacProcCellStop, /* TIght coupling */ + packMacCellStop /* Light weight-loose coupling */ }; /************************************************************************** @@ -178,8 +186,8 @@ uint8_t duBuildRlcCfg(Inst inst) uint8_t duBuildRlcLsapCfg(Ent ent, Inst inst, uint8_t lsapInst) { - RlcMngmt rlcMngmt; - RlcSapCfg *lSap = NULLP; + RlcMngmt rlcMngmt; + RlcSapCfg *lSap = NULLP; Pst pst; DU_SET_ZERO(&rlcMngmt, sizeof(RlcMngmt)); @@ -254,8 +262,8 @@ uint8_t duBuildRlcLsapCfg(Ent ent, Inst inst, uint8_t lsapInst) ***************************************************************************/ uint8_t duBuildRlcUsapCfg(uint8_t elemId, Ent ent, Inst inst) { - RlcMngmt rlcMngmt; - RlcSapCfg *uSap = NULLP; + RlcMngmt rlcMngmt; + RlcSapCfg *uSap = NULLP; Pst pst; DU_SET_ZERO(&rlcMngmt, sizeof(RlcMngmt)); @@ -321,50 +329,48 @@ uint8_t duBuildRlcUsapCfg(uint8_t elemId, Ent ent, Inst inst) ***************************************************************************/ uint8_t duProcCfgComplete() { - uint8_t ret = ROK; + uint8_t ret = ROK; static uint16_t cellId = 0; - uint16_t idx; + uint16_t idx; for(idx=0; idx< DEFAULT_CELLS; idx++) { DuCellCb *cell = NULLP; DU_ALLOC(cell, sizeof(DuCellCb)) - if(cell == NULLP) + if(cell == NULLP) + { + DU_LOG("\nDU_APP : Memory Allocation failed in duProcCfgComplete"); + ret = RFAILED; + } + else + { + uint8_t idx1=0; + memset(cell, 0, sizeof(DuCellCb)); + cell->cellId = ++cellId; + memset(&cell->cellInfo.nrEcgi.plmn, 0, sizeof(Plmn)); + cell->cellInfo.nrEcgi.plmn.mcc[0] = PLMN_MCC0; + cell->cellInfo.nrEcgi.plmn.mcc[1] = PLMN_MCC1; + cell->cellInfo.nrEcgi.plmn.mcc[2] = PLMN_MCC2; + cell->cellInfo.nrEcgi.plmn.mnc[0] = PLMN_MNC0; + cell->cellInfo.nrEcgi.plmn.mnc[1] = PLMN_MNC1; + cell->cellInfo.nrEcgi.cellId = NR_CELL_ID; + cell->cellInfo.nrPci = NR_PCI; + cell->cellInfo.fiveGsTac = DU_TAC; + memset(&cell->cellInfo.plmn[idx1], 0, sizeof(Plmn)); + for(idx1=0; idx1cellInfo.plmn[idx1].mcc[0] = PLMN_MCC0; + cell->cellInfo.plmn[idx1].mcc[1] = PLMN_MCC1; + cell->cellInfo.plmn[idx1].mcc[2] = PLMN_MCC2; + cell->cellInfo.plmn[idx1].mnc[0] = PLMN_MNC0; + cell->cellInfo.plmn[idx1].mnc[1] = PLMN_MNC1; } - else - { - uint32_t nci; - uint8_t idx1; - memset(cell, 0, sizeof(DuCellCb)); - cell->cellId = ++cellId; - cell->cellInfo.nrEcgi.plmn.mcc[0] = PLMN_MCC0; - cell->cellInfo.nrEcgi.plmn.mcc[1] = PLMN_MCC1; - cell->cellInfo.nrEcgi.plmn.mcc[2] = PLMN_MCC2; - cell->cellInfo.nrEcgi.plmn.mnc[0] = PLMN_MNC0; - cell->cellInfo.nrEcgi.plmn.mnc[1] = PLMN_MNC1; - cell->cellInfo.nrEcgi.plmn.mnc[2] = PLMN_MNC2; - cell->cellInfo.nrEcgi.cellId = NR_CELL_ID; - cell->cellInfo.nrPci = NR_PCI; - cell->cellInfo.fiveGsTac = DU_TAC; - for(idx1=0; idx1cellInfo.plmn[idx1].mcc[0] = PLMN_MCC0; - cell->cellInfo.plmn[idx1].mcc[1] = PLMN_MCC1; - cell->cellInfo.plmn[idx1].mcc[2] = PLMN_MCC2; - cell->cellInfo.plmn[idx1].mnc[0] = PLMN_MNC0; - cell->cellInfo.plmn[idx1].mnc[1] = PLMN_MNC1; - cell->cellInfo.plmn[idx1].mnc[2] = PLMN_MNC2; - } - cell->cellInfo.maxUe = duCfgParam.maxUe; - cell->cellStatus = CELL_OUT_OF_SERVICE; - nci = (uint16_t)cell->cellInfo.nrEcgi.cellId; + cell->cellInfo.maxUe = duCfgParam.maxUe; + cell->cellStatus = CELL_OUT_OF_SERVICE; - duCb.cfgCellLst[nci-1] = cell; - duCb.numCfgCells++; - } + duCb.cfgCellLst[duCb.numCfgCells] = cell; + duCb.numCfgCells++; } + } if(ret != RFAILED) { //Start layer configs @@ -891,9 +897,8 @@ uint8_t duBindUnbindRlcToMacSap(uint8_t inst, uint8_t action) RlcMngmt rlcMngmt; Pst pst; - TRC2(smBindKwToRguSap) - DU_SET_ZERO(&rlcMngmt, sizeof(RlcMngmt)); + DU_SET_ZERO(&rlcMngmt, sizeof(RlcMngmt)); DU_SET_ZERO(&pst, sizeof(Pst)); if (action == ABND) @@ -994,7 +999,7 @@ uint8_t duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy) * ****************************************************************/ uint8_t duFillEgtpPst(Pst *pst, Event event) { - memset((uint8_t *)pst, 0, sizeof(Pst)); + memset(pst, 0, sizeof(Pst)); pst->srcEnt = (Ent)ENTDUAPP; pst->srcInst = (Inst)DU_INST; pst->srcProcId = DU_PROC; @@ -1033,8 +1038,8 @@ uint8_t duBuildEgtpCfgReq() DU_LOG("\nDU_APP : Sending EGTP config request"); - memset((uint8_t *)&egtpCfg, 0, sizeof(EgtpConfig)); - memcpy((uint8_t *)&egtpCfg, (uint8_t *)&duCfgParam.egtpParams, (PTR)sizeof(EgtpConfig)); + memset(&egtpCfg, 0, sizeof(EgtpConfig)); + memcpy(&egtpCfg, &duCfgParam.egtpParams, sizeof(EgtpConfig)); duFillEgtpPst(&pst, EVTCFGREQ); packEgtpCfgReq(&pst, egtpCfg); @@ -1173,10 +1178,8 @@ uint8_t duSendEgtpTnlMgmtReq(uint8_t action, uint32_t lclTeid, uint32_t remTeid) tnlEvt.remTeid = remTeid; DU_LOG("\nDU_APP : Sending EGTP tunnel management request"); - duFillEgtpPst(&pst, EVTTNLMGMTREQ); - packEgtpTnlMgmtReq(&pst, tnlEvt); - + egtpTnlMgmtReq(&pst, tnlEvt); return ROK; } @@ -1203,12 +1206,9 @@ uint8_t duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm) if(tnlEvtCfm.cfmStatus.status == LCM_PRIM_OK) { DU_LOG("\nDU_APP : Tunnel management confirm OK"); - -#ifdef EGTP_TEST - duSendUeCreateReqToRlc(); - +#ifdef EGTP_TEST duSendEgtpTestData(); -#endif +#endif } else { @@ -1219,6 +1219,21 @@ uint8_t duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm) return (ret); } +/******************************************************************* + * + * @brief Sends UL user data over to EGTP + * + * @details + * + * Function : duSendEgtpDatInd + * + * Functionality: Sends UL user data over to EGTP + * + * @params[in] UL data buffer + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ uint8_t duSendEgtpDatInd(Buffer *mBuf) { EgtpMsg egtpMsg; @@ -1262,12 +1277,12 @@ uint8_t duSendEgtpTestData() Buffer *mBuf; - if(ODU_GET_MSG(DU_APP_MEM_REGION, DU_POOL, &mBuf) == ROK) + if(ODU_GET_MSG_BUF(DU_APP_MEM_REGION, DU_POOL, &mBuf) == ROK) { if(ODU_ADD_POST_MSG_MULT((Data *)data, datSize, mBuf) != ROK) { DU_LOG("\nDU_APP : ODU_ADD_POST_MSG_MULT failed"); - ODU_PUT_MSG(mBuf); + ODU_PUT_MSG_BUF(mBuf); return RFAILED; } } @@ -1282,14 +1297,14 @@ uint8_t duSendEgtpTestData() MsgLen mLen; mLen = 0; - ODU_FIND_MSG_LEN(mBuf, &mLen); + ODU_GET_MSG_LEN(mBuf, &mLen); - memset((uint8_t *)&ipv4Hdr, 0, sizeof(CmIpv4Hdr)); + memset(&ipv4Hdr, 0, sizeof(CmIpv4Hdr)); ipv4Hdr.length = CM_IPV4_HDRLEN + mLen; ipv4Hdr.hdrVer = 0x45; ipv4Hdr.proto = 1; - ipv4Hdr.srcAddr = CM_INET_NTOH_U32(duCfgParam.egtpParams.localIp.ipV4Addr); - ipv4Hdr.destAddr = CM_INET_NTOH_U32(duCfgParam.egtpParams.destIp.ipV4Addr); + ipv4Hdr.srcAddr = CM_INET_NTOH_UINT32(duCfgParam.egtpParams.localIp.ipV4Addr); + ipv4Hdr.destAddr = CM_INET_NTOH_UINT32(duCfgParam.egtpParams.destIp.ipV4Addr); /* Packing IPv4 header into buffer */ uint8_t ret, cnt, idx; @@ -1509,33 +1524,6 @@ uint8_t duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm) return ROK; } -/******************************************************************* - * - * @brief Sends Slot indication to EGTP - * - * @details - * - * Function : duSendEgtpSlotInd - * - * Functionality: - * Sends Slot indication to EGTP - * - * @params[in] - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t duSendEgtpSlotInd() -{ - Pst pst; - - duFillEgtpPst(&pst, EVTSLOTIND); - packEgtpSlotInd(&pst); - - return ROK; - -} - /************************************************************************** * @brief Function to fill and send MacCellconfig * @@ -1546,15 +1534,14 @@ uint8_t duSendEgtpSlotInd() * Functionality: * Initiates MAC Configs towards MAC * - * @param[in] void + * @param[in]cell id * @return ROK - success * RFAILED - failure * ***************************************************************************/ -uint8_t duBuildAndSendMacCellCfg() +uint8_t duBuildAndSendMacCellCfg(uint16_t cellId) { Pst pst; - DU_SET_ZERO(&pst, sizeof(Pst)); MacCellCfg *duMacCellCfg = NULLP; DU_ALLOC_SHRABL_BUF(duMacCellCfg, sizeof(MacCellCfg)); @@ -1563,8 +1550,8 @@ uint8_t duBuildAndSendMacCellCfg() return RFAILED; } - /* store the address in the duCb so that we can free on confirm msg */ - duCb.duMacCellCfg = duMacCellCfg; + /* store the address in the duCellCb so that we can free on confirm msg */ + duCb.actvCellLst[cellId-1]->duMacCellCfg = duMacCellCfg; /* copy the mac config structure from duCfgParams */ memcpy(duMacCellCfg,&duCfgParam.macCellCfg,sizeof(MacCellCfg)); @@ -1593,83 +1580,33 @@ uint8_t duBuildAndSendMacCellCfg() ***************************************************************************/ uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm) { - uint8_t actvCellIdx = 0; - uint8_t ret = ROK; - - if(macCellCfgCfm->rsp == ROK) - { - for(actvCellIdx = 0 ; actvCellIdx cellId == duCb.actvCellLst[actvCellIdx]->cellId) - { - duCb.duMacCellCfg = NULLP; - /* Build and send GNB-DU config update */ - ret = BuildAndSendDUConfigUpdate(); - - /* TODO: Trigger cell start req once cell up slot ind is received*/ - /* Build and Send Cell Start Req to MAC */ - ret = duBuildAndSendMacCellStartReq(); - - } - } - } - else - { - DU_LOG("\nMac cell cfg failed"); - ret = RFAILED; - } - return ret; -} - -/******************************************************************* - * - * @brief Handles slot indication from MAC - * - * @details - * - * Function : duHandleSlotInd - * - * Functionality: - * Handles slot indication from MAC - * - * @params[in] Post structure pointer - * Slot Info pointer - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t duHandleSlotInd(Pst *pst, SlotIndInfo *slotInfo) -{ + uint8_t actvCellIdx = 0; + uint8_t ret = ROK; - DU_LOG("\nDU APP : Slot Indication received"); - - if(slotInfo->cellId <=0 || slotInfo->cellId > MAX_NUM_CELL) - { - DU_LOG("\nDU APP : Invalid Cell Id %d", slotInfo->cellId); - } - if(!duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd) + for(actvCellIdx = 0; actvCellIdx < MAX_NUM_CELL; actvCellIdx++) { - duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd = true; - if((duCb.actvCellLst[slotInfo->cellId-1] != NULL) && \ - (duCb.actvCellLst[slotInfo->cellId-1]->cellStatus == \ - ACTIVATION_IN_PROGRESS)) + if(macCellCfgCfm->cellId == duCb.actvCellLst[actvCellIdx]->cellId) { - DU_LOG("\nDU APP : 5G-NR Cell %d is UP", slotInfo->cellId); - duCb.actvCellLst[slotInfo->cellId-1]->cellStatus = ACTIVATED; + duCb.actvCellLst[actvCellIdx]->duMacCellCfg = NULLP; } - } + if(macCellCfgCfm->rsp == ROK) + { + /* Build and send GNB-DU config update */ + ret = BuildAndSendDUConfigUpdate(); - /* TODO : Slot Indication to be moved out of EGTP_TEST when - * data path is established */ -#ifdef EGTP_TEST - duSendEgtpSlotInd(); -#endif - - if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC)) - DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, slotInfo, sizeof(SlotIndInfo)); + /* Build and Send Cell Start Req to MAC */ + ret = duBuildAndSendMacCellStart(); + } + else + { + /* TODO : Action to be taken if cell configuration fails. + * Should CU be informed? */ - return ROK; + DU_LOG("\nMac cell cfg failed"); + ret = RFAILED; + } + return ret; } /******************************************************************* @@ -1678,7 +1615,7 @@ uint8_t duHandleSlotInd(Pst *pst, SlotIndInfo *slotInfo) * * @details * - * Function : duBuildAndSendMacCellStartReq + * Function : duBuildAndSendMacCellStart * * Functionality: * Builds and sends cell start request to MAC @@ -1688,32 +1625,31 @@ uint8_t duHandleSlotInd(Pst *pst, SlotIndInfo *slotInfo) * RFAILED - failure * * ****************************************************************/ -uint8_t duBuildAndSendMacCellStartReq() +uint8_t duBuildAndSendMacCellStart() { Pst pst; - MacCellStartInfo *cellStartInfo = NULL; + OduCellId *cellId = NULL; DU_LOG("\nDU APP : Building and Sending cell start request to MAC"); /* Send Cell Start Request to MAC */ - DU_ALLOC_SHRABL_BUF(cellStartInfo, sizeof(MacCellStartInfo)); - if(!cellStartInfo) + DU_ALLOC_SHRABL_BUF(cellId, sizeof(OduCellId)); + if(!cellId) { DU_LOG("\nDU APP : Memory alloc failed while building cell start request"); return RFAILED; } - for(uint8_t id = 0; id < MAX_NUM_CELL; id++) + for(uint8_t id = 0; id < duCb.numActvCells; id++) { if(duCb.actvCellLst[id]) { - duCb.actvCellLst[id]->firstSlotIndRcvd = FALSE; - cellStartInfo->cellId = duCb.actvCellLst[id]->cellInfo.nrEcgi.cellId; + cellId->cellId = duCb.actvCellLst[id]->cellId; /* Fill Pst */ - FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_START_REQ); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_START); - return (*packMacCellStartReqOpts[pst.selector])(&pst, cellStartInfo); + return (*packMacCellStartOpts[pst.selector])(&pst, cellId); } } return ROK; @@ -1725,7 +1661,7 @@ uint8_t duBuildAndSendMacCellStartReq() * * @details * - * Function : duBuildAndSendMacCellStopReq + * Function : duBuildAndSendMacCellStop * * Functionality: * Builds and sends cell stop request to MAC @@ -1735,26 +1671,26 @@ uint8_t duBuildAndSendMacCellStartReq() * RFAILED - failure * * ****************************************************************/ -uint8_t duBuildAndSendMacCellStopReq() +uint8_t duBuildAndSendMacCellStop() { Pst pst; - MacCellStopInfo *cellStopInfo = NULL; + OduCellId *cellId = NULL; DU_LOG("\nDU APP : Building and Sending cell stop request to MAC"); /* Send Cell Stop Request to MAC */ - DU_ALLOC_SHRABL_BUF(cellStopInfo, sizeof(MacCellStopInfo)); - if(!cellStopInfo) + DU_ALLOC_SHRABL_BUF(cellId, sizeof(OduCellId)); + if(!cellId) { DU_LOG("\nDU APP : Memory alloc failed while building cell stop request"); return RFAILED; } - cellStopInfo->cellId = duCb.actvCellLst[0]->cellId; + cellId->cellId = duCb.actvCellLst[0]->cellId; /* Fill Pst */ - FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_STOP_REQ); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_STOP); - return (*packMacCellStopReqOpts[pst.selector])(&pst, cellStopInfo); + return (*packMacCellStopOpts[pst.selector])(&pst, cellId); } /******************************************************************* @@ -1773,27 +1709,34 @@ uint8_t duBuildAndSendMacCellStopReq() * RFAILED - failure * * ****************************************************************/ -uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellStopId) +uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId) { - if(cellStopId->cellId <=0 || cellStopId->cellId > MAX_NUM_CELL) + DuCellCb *cellCb = NULLP; + + if(cellId->cellId <=0 || cellId->cellId > MAX_NUM_CELL) { - DU_LOG("\nDU APP : Invalid Cell Id %d", cellStopId->cellId); + DU_LOG("\nDU APP : Invalid Cell Id %d in duHandleStopInd()", cellId->cellId); } - if(duCb.actvCellLst[cellStopId->cellId-1] != NULL) + + if(duGetCellCb(cellId->cellId, &cellCb) != ROK) + return RFAILED; + + if((cellCb->cellStatus == ACTIVATED)) { - if(duCb.actvCellLst[cellStopId->cellId-1]->firstSlotIndRcvd) - { - duCb.actvCellLst[cellStopId->cellId-1]->firstSlotIndRcvd = false; - if((duCb.actvCellLst[cellStopId->cellId-1]->cellStatus == \ - ACTIVATED)) - { - DU_LOG("\nDU APP : 5G-NR Cell %d is DOWN", cellStopId->cellId); - duCb.actvCellLst[cellStopId->cellId-1]->cellStatus = DELETION_IN_PROGRESS; - } - } + DU_LOG("\nDU APP : 5G-NR Cell %d is DOWN", cellId->cellId); + cellCb->cellStatus = DELETION_IN_PROGRESS; + +#ifdef O1_ENABLE + DU_LOG("\nDU APP : Raise cell down alarm for cell id=%d", cellId->cellId); + raiseCellAlrm(CELL_DOWN_ALARM_ID, cellId->cellId); +#endif } + if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC)) - DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, cellStopId, sizeof(MacCellStopInfo)); + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, cellId, sizeof(OduCellId)); + + cellCb->cellStatus = CELL_OUT_OF_SERVICE; //TODO: cell status must be set to OOS after all UE and cell cleanup which is not + //supported now return ROK; } @@ -1841,17 +1784,58 @@ uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo) * ****************************************************************/ uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo) { - DuUeCb ueCb; - - ueCb = duCb.actvCellLst[ulRrcMsgInfo->cellId -1]->ueCb[ulRrcMsgInfo->ueIdx -1]; + DuCellCb *cellCb = NULLP; + DuUeCb ueCb ={0}; + + if(duGetCellCb(ulRrcMsgInfo->cellId, &cellCb) != ROK) + return RFAILED; + if(ulRrcMsgInfo->ueIdx > 0) + { + ueCb = cellCb->ueCb[ulRrcMsgInfo->ueIdx -1]; + + BuildAndSendULRRCMessageTransfer(ueCb, ulRrcMsgInfo->lcId, ulRrcMsgInfo->msgLen, \ ulRrcMsgInfo->rrcMsg); DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulRrcMsgInfo->rrcMsg, ulRrcMsgInfo->msgLen); DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulRrcMsgInfo, sizeof(RlcUlRrcMsgInfo)); + } return ROK; } +/******************************************************************* +* +* @brief Process RRC delivery report from RLC +* +* @details +* +* Function : DuProcRlcRrcDeliveryReport +* +* Functionality: Process RRC delivery Message from RLC +* +* @params[in] Post structure +* UL RRC Message Info +* @return ROK - success +* RFAILED - failure +* +* ****************************************************************/ +uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport) +{ + DuCellCb *cellCb = NULLP; + DuUeCb ueCb; + uint8_t ret = RFAILED; + + if(duGetCellCb(rrcDeliveryReport->cellId, &cellCb) != ROK) + return RFAILED; + + ueCb = cellCb->ueCb[rrcDeliveryReport->ueIdx -1]; + ret = BuildAndSendRrcDeliveryReport(ueCb.gnbCuUeF1apId, ueCb.gnbDuUeF1apId,rrcDeliveryReport); + + DU_FREE_SHRABL_BUF(pst->region, pst->pool, rrcDeliveryReport, sizeof(RrcDeliveryReport)); + return ret; +} + + /********************************************************************** End of file **********************************************************************/