X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_msg_hdl.c;h=199ba76ada39025448d72106c1d2797f13be5a68;hb=6c530e3037c009f3c4ec76a14128e89c7a9db0a3;hp=5c02e508f94aec88e65745e8be0e27b12d27acd3;hpb=3360eb21f592bfe7249f501fa59ef8739b8589c2;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index 5c02e508f..199ba76ad 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -17,10 +17,17 @@ *******************************************************************************/ /* This file contains message handling functionality for DU APP */ - +#include "common_def.h" +#include "lrg.h" +#include "legtp.h" +#include "lkw.h" +#include "lrg.x" +#include "lkw.x" +#include "du_cfg.h" #include "du_mgr.h" #include "du_sctp.h" #include "du_f1ap_msg_hdl.h" +#include "du_ue_mgr.h" #include "lsctp.h" #include "legtp.h" #include "lphy_stub.h" @@ -36,6 +43,11 @@ extern DuCfgParams duCfgParam; extern S16 cmPkLkwCfgReq(Pst *pst, KwMngmt *cfg); extern S16 cmPkLkwCntrlReq(Pst *pst, KwMngmt *cfg); extern S16 cmPkLrgCfgReq(Pst *pst, RgMngmt *cfg); +extern S16 BuildAndSendE2SetupReq(); +extern S16 egtpHdlDatInd(EgtpMsg egtpMsg); +extern uint8_t BuildAndSendDUConfigUpdate(); +extern U16 getTransId(); +extern S16 cmPkLrgSchCfgReq(Pst * pst,RgMngmt * cfg); packMacCellCfgReq packMacCellCfgOpts[] = { @@ -106,7 +118,7 @@ S16 duBuildRlcCfg(Inst inst) genCfg->lmPst.region = (inst == RLC_UL_INST) ? RLC_UL_MEM_REGION:RLC_DL_MEM_REGION; genCfg->lmPst.pool = RLC_POOL; - genCfg->lmPst.selector = DU_SELECTOR_LC; + genCfg->lmPst.selector = ODU_SELECTOR_LC; /* Fill Header */ kwMngmt.hdr.msgType = TCFG; @@ -122,10 +134,10 @@ S16 duBuildRlcCfg(Inst inst) kwMngmt.hdr.response.mem.region = (inst == RLC_UL_INST) ? RLC_UL_MEM_REGION:RLC_DL_MEM_REGION; kwMngmt.hdr.response.mem.pool = DU_POOL; - kwMngmt.hdr.response.selector = DU_SELECTOR_LC; + kwMngmt.hdr.response.selector = ODU_SELECTOR_LC; /* Fill Pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTKW; pst.dstInst = inst; @@ -175,7 +187,7 @@ S16 duBuildRlcLsapCfg(Ent ent, Inst inst, U8 lsapInst) kwMngmt.hdr.response.mem.pool = RLC_POOL; /* Fill Pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTKW; pst.dstProcId = DU_PROC; @@ -197,7 +209,7 @@ S16 duBuildRlcLsapCfg(Ent ent, Inst inst, U8 lsapInst) lSap->ent = ENTRG; lSap->inst = lsapInst; lSap->sapId = lsapInst; /* SapId will be stored as suId in MAC */ - lSap->selector = (inst == RLC_UL_INST) ? DU_SELECTOR_LWLC : DU_SELECTOR_TC; + lSap->selector = (inst == RLC_UL_INST) ? ODU_SELECTOR_LWLC : ODU_SELECTOR_TC; kwMngmt.hdr.elmId.elmnt = STRGUSAP; DU_LOG("\nDU_APP : RLC MAC Lower Sap Cfg Req sent for inst %d", inst); @@ -209,7 +221,7 @@ S16 duBuildRlcLsapCfg(Ent ent, Inst inst, U8 lsapInst) lSap->inst = (inst == RLC_UL_INST) ? RLC_DL_INST : RLC_UL_INST; lSap->sapId = 0; - lSap->selector = DU_SELECTOR_LC; + lSap->selector = ODU_SELECTOR_LC; kwMngmt.hdr.elmId.elmnt = STUDXSAP; DU_LOG("\nDU_APP : RLC DL/UL Lower Sap Cfg Req sent for inst %d", inst); } @@ -244,7 +256,7 @@ S16 duBuildRlcUsapCfg(U8 elemId, Ent ent, Inst inst) uSap = &(kwMngmt.t.cfg.s.sap); - uSap->selector = DU_SELECTOR_LC; + uSap->selector = ODU_SELECTOR_LC; uSap->mem.region = (inst == RLC_UL_INST) ? RLC_UL_MEM_REGION:RLC_DL_MEM_REGION; uSap->mem.pool = RLC_POOL; @@ -270,7 +282,7 @@ S16 duBuildRlcUsapCfg(U8 elemId, Ent ent, Inst inst) kwMngmt.hdr.response.mem.pool = RLC_POOL; /* Fill Pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTKW; pst.dstProcId = DU_PROC; @@ -307,7 +319,7 @@ S16 duProcCfgComplete() U16 idx; for(idx=0; idx< DEFAULT_CELLS; idx++) { - DuCellCb *cell; + DuCellCb *cell = NULLP; DU_ALLOC(cell, sizeof(DuCellCb)) if(cell == NULLP) { @@ -319,7 +331,7 @@ S16 duProcCfgComplete() U32 nci; U8 idx1; memset(cell, 0, sizeof(DuCellCb)); - cell->cellId = cellId++; + 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; @@ -681,7 +693,7 @@ S16 duBuildMacGenCfg() genCfg = &(rgMngmt.t.cfg.s.genCfg); /*----------- Fill General Configuration Parameters ---------*/ - genCfg->mem.region = RG_MEM_REGION; + genCfg->mem.region = MAC_MEM_REGION; genCfg->mem.pool = RG_POOL; genCfg->tmrRes = 10; genCfg->numRguSaps = 2; @@ -694,9 +706,9 @@ S16 duBuildMacGenCfg() genCfg->lmPst.srcInst = macCfgInst; genCfg->lmPst.prior = PRIOR0; genCfg->lmPst.route = RTESPEC; - genCfg->lmPst.region = RG_MEM_REGION; + genCfg->lmPst.region = MAC_MEM_REGION; genCfg->lmPst.pool = RG_POOL; - genCfg->lmPst.selector = DU_SELECTOR_LC; + genCfg->lmPst.selector = ODU_SELECTOR_LC; /* Fill Header */ rgMngmt.hdr.msgType = TCFG; @@ -710,12 +722,12 @@ S16 duBuildMacGenCfg() rgMngmt.hdr.response.prior = PRIOR0; rgMngmt.hdr.response.route = RTESPEC; - rgMngmt.hdr.response.mem.region = RG_MEM_REGION; + rgMngmt.hdr.response.mem.region = MAC_MEM_REGION; rgMngmt.hdr.response.mem.pool = RG_POOL; - rgMngmt.hdr.response.selector = DU_SELECTOR_LC; + rgMngmt.hdr.response.selector = ODU_SELECTOR_LC; /* Fill Pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstInst = macCfgInst; @@ -757,7 +769,7 @@ S16 duBuildMacUsapCfg(SpId sapId) uSap = &(rgMngmt.t.cfg.s.rguSap); - uSap->mem.region = RG_MEM_REGION; + uSap->mem.region = MAC_MEM_REGION; uSap->mem.pool = RG_POOL; uSap->suId = 0; uSap->spId = sapId; @@ -766,18 +778,18 @@ S16 duBuildMacUsapCfg(SpId sapId) uSap->inst = sapId; uSap->prior = PRIOR0; uSap->route = RTESPEC; - uSap->selector = DU_SELECTOR_LC ; + uSap->selector = ODU_SELECTOR_LC ; /* fill header */ rgMngmt.hdr.msgType = TCFG; rgMngmt.hdr.entId.ent = ENTRG; rgMngmt.hdr.entId.inst = (Inst)0; rgMngmt.hdr.elmId.elmnt = STRGUSAP; - rgMngmt.hdr.response.mem.region = RG_MEM_REGION; + rgMngmt.hdr.response.mem.region = MAC_MEM_REGION; rgMngmt.hdr.response.mem.pool = RG_POOL; /* fill pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstInst = macCfgInst; @@ -901,7 +913,7 @@ S16 duBindUnbindRlcToMacSap(U8 inst, U8 action) kwMngmt.hdr.response.mem.pool = RLC_POOL; /* Fill pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTKW; pst.dstProcId = DU_PROC; @@ -982,7 +994,7 @@ S16 duFillEgtpPst(Pst *pst, Event event) pst->dstInst = (Inst)EGTP_INST; pst->dstProcId = pst->srcProcId; pst->event = event; - pst->selector = DU_SELECTOR_LC; + pst->selector = ODU_SELECTOR_LC; pst->pool= DU_POOL; RETVALUE(ROK); @@ -1362,7 +1374,7 @@ S16 duSendSchCfg() /* Filling of Instance Id */ cfg->instId = DEFAULT_CELLS + 1; /* Filling of Gen config */ - cfg->genCfg.mem.region = RG_MEM_REGION; + cfg->genCfg.mem.region = MAC_MEM_REGION; cfg->genCfg.mem.pool = RG_POOL; cfg->genCfg.tmrRes = 10; @@ -1379,20 +1391,20 @@ S16 duSendSchCfg() cfg->genCfg.lmPst.srcInst = DEFAULT_CELLS + 1; cfg->genCfg.lmPst.prior = PRIOR0; cfg->genCfg.lmPst.route = RTESPEC; - cfg->genCfg.lmPst.region = RG_MEM_REGION; + cfg->genCfg.lmPst.region = MAC_MEM_REGION; cfg->genCfg.lmPst.pool = RG_POOL; - cfg->genCfg.lmPst.selector = DU_SELECTOR_LC; + cfg->genCfg.lmPst.selector = ODU_SELECTOR_LC; /* Fill Header */ rgMngmt.hdr.msgType = TCFG; rgMngmt.hdr.entId.ent = ENTRG; rgMngmt.hdr.entId.inst = DU_INST; rgMngmt.hdr.elmId.elmnt = STSCHINST; - rgMngmt.hdr.response.mem.region = RG_MEM_REGION; + rgMngmt.hdr.response.mem.region = MAC_MEM_REGION; rgMngmt.hdr.response.mem.pool = RG_POOL; /* Fill Pst */ - pst.selector = DU_SELECTOR_LC; + pst.selector = ODU_SELECTOR_LC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstProcId = DU_PROC; @@ -1552,7 +1564,7 @@ S16 duBuildAndSendMacCellCfg() duMacCellCfg->transId = getTransId(); /* transaction ID */ /* Fill Pst */ - pst.selector = DU_SELECTOR_LWLC; + pst.selector = ODU_SELECTOR_LWLC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstInst = 0; @@ -1581,7 +1593,7 @@ S16 duBuildAndSendMacCellCfg() * RFAILED - failure * ***************************************************************************/ -uint16_t duHandleMacCellCfgCfm(MacCellCfgCfm *macCellCfgCfm) +int duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm) { S16 ret = ROK; @@ -1599,7 +1611,7 @@ uint16_t duHandleMacCellCfgCfm(MacCellCfgCfm *macCellCfgCfm) /* TODO: Trigger cell start req once cell up slot ind is received*/ /* Build and Send Cell Start Req to MAC */ - //ret = duBuildAndSendMacCellStartReq(); + ret = duBuildAndSendMacCellStartReq(); } else @@ -1639,12 +1651,32 @@ uint16_t duHandleSlotInd(Pst *pst, SlotInfo *slotInfo) DU_LOG("\nDU APP : Slot Indication received"); + if(slotInfo->cellId <=0 || slotInfo->cellId > DU_MAX_CELLS) + { + DU_LOG("\nDU APP : Invalid Cell Id %d", slotInfo->cellId); + } + if(!duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd) + { + duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd = true; + if((duCb.actvCellLst[slotInfo->cellId-1] != NULL) && \ + (duCb.actvCellLst[slotInfo->cellId-1]->cellStatus == \ + ACTIVATION_IN_PROGRESS)) + { + DU_LOG("\nDU APP : 5G-NR Cell %d is UP", slotInfo->cellId); + duCb.actvCellLst[slotInfo->cellId-1]->cellStatus = ACTIVATED; + } + + } + /* TODO : Slot Indication to be moved out of EGTP_TEST when * data path is established */ #ifdef EGTP_TEST duSendEgtpSlotInd(); #endif - DU_FREE_MEM(pst->region, pst->pool, slotInfo, sizeof(SlotInfo)); + + if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC)) + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, slotInfo, sizeof(SlotInfo)); + return ROK; } @@ -1672,7 +1704,7 @@ uint16_t duBuildAndSendMacCellStartReq() DU_LOG("\nDU APP : Building and Sending cell start request to MAC"); /* Send Cell Start Request to MAC */ - DU_ALLOC(cellStartInfo, sizeof(MacCellStartInfo)); + DU_ALLOC_SHRABL_BUF(cellStartInfo, sizeof(MacCellStartInfo)); if(!cellStartInfo) { DU_LOG("\nDU APP : Memory alloc failed while building cell start request"); @@ -1683,10 +1715,11 @@ uint16_t duBuildAndSendMacCellStartReq() { if(duCb.actvCellLst[id]) { + duCb.actvCellLst[id]->firstSlotIndRcvd = FALSE; cellStartInfo->cellId = duCb.actvCellLst[id]->cellInfo.nrEcgi.cellId; /* Fill Pst */ - pst.selector = DU_MAC_LWLC; + pst.selector = ODU_SELECTOR_LWLC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstInst = 0; @@ -1719,7 +1752,7 @@ uint16_t duBuildAndSendMacCellStartReq() * RFAILED - failure * * ****************************************************************/ -S16 duBuildAndSendMacCellStopReq() +uint16_t duBuildAndSendMacCellStopReq() { Pst pst; MacCellStopInfo *cellStopInfo = NULL; @@ -1727,7 +1760,7 @@ S16 duBuildAndSendMacCellStopReq() DU_LOG("\nDU APP : Building and Sending cell stop request to MAC"); /* Send Cell Stop Request to MAC */ - DU_ALLOC(cellStopInfo, sizeof(MacCellStopInfo)); + DU_ALLOC_SHRABL_BUF(cellStopInfo, sizeof(MacCellStopInfo)); if(!cellStopInfo) { DU_LOG("\nDU APP : Memory alloc failed while building cell stop request"); @@ -1736,7 +1769,7 @@ S16 duBuildAndSendMacCellStopReq() cellStopInfo->cellId = duCb.actvCellLst[0]->cellId; /* Fill Pst */ - pst.selector = DU_MAC_LWLC; + pst.selector = ODU_SELECTOR_LWLC; pst.srcEnt = ENTDUAPP; pst.dstEnt = ENTRG; pst.dstInst = 0; @@ -1750,6 +1783,72 @@ S16 duBuildAndSendMacCellStopReq() return (*packMacCellStopReqOpts[pst.selector])(&pst, cellStopInfo); } +/******************************************************************* + * + * @brief Handles stop indication from MAC + * + * @details + * + * Function : duHandleStopInd + * + * Functionality: + * Handles stop indication from MAC + * + * @params[in] Post structure pointer + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellStopId) +{ + if(cellStopId->cellId <=0 || cellStopId->cellId > DU_MAX_CELLS) + { + DU_LOG("\nDU APP : Invalid Cell Id %d", cellStopId->cellId); + } + if(duCb.actvCellLst[cellStopId->cellId-1] != NULL) + { + 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; + } + } + } + if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC)) + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, cellStopId, sizeof(MacCellStopInfo)); + + return ROK; +} + +/******************************************************************* + * + * @brief Handles slot indication from MAC + * + * @details + * + * Function : duHandleUlCcchInd + * + * Functionality: + * Handles UL CCCH indication from MAC + * + * @params[in] Post structure pointer + * UL CCCH Ind pointer + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo) +{ + + DU_LOG("\nDU APP : UL CCCH Indication received"); + + return (duProcUlCcchInd(ulCcchIndInfo)); +} + /********************************************************************** End of file