X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_msg_hdl.c;h=a0f040e47761f8f7a58d1a4c0fd55dc756a92bb5;hb=069ae37558afd5aee2d1072bbf5b517cf665bdd8;hp=7d279112ddb9d6134e83207fe02d30e4f017df88;hpb=ef711b0830aedde36f4a1beceed146d08e77ce58;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index 7d279112d..a0f040e47 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -16,7 +16,7 @@ ################################################################################ *******************************************************************************/ -/* This file contains message handling functionality for DU cell management */ +/* This file contains message handling functionality for DU APP */ #include "du_mgr.h" #include "du_sctp.h" @@ -36,6 +36,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 S16 BuildAndSendDUConfigUpdate(); +extern U16 getTransId(); +extern S16 cmPkLrgSchCfgReq(Pst * pst,RgMngmt * cfg); packMacCellCfgReq packMacCellCfgOpts[] = { @@ -44,6 +49,20 @@ packMacCellCfgReq packMacCellCfgOpts[] = packMacCellCfg, /* packing for light weight loosly coupled */ }; +DuMacCellStartReq packMacCellStartReqOpts[] = +{ + packMacCellStartReq, /* Loose coupling */ + MacHdlCellStartReq, /* TIght coupling */ + packMacCellStartReq /* Light weight-loose coupling */ +}; + +DuMacCellStopReq packMacCellStopReqOpts[] = +{ + packMacCellStopReq, /* Loose coupling */ + MacHdlCellStopReq, /* TIght coupling */ + packMacCellStopReq /* Light weight-loose coupling */ +}; + /************************************************************************** * @brief Function to fill configs required by RLC * @@ -303,8 +322,7 @@ S16 duProcCfgComplete() else { U32 nci; - U8 idx; - + U8 idx1; memset(cell, 0, sizeof(DuCellCb)); cell->cellId = cellId++; cell->cellInfo.nrEcgi.plmn.mcc[0] = PLMN_MCC0; @@ -316,15 +334,15 @@ S16 duProcCfgComplete() cell->cellInfo.nrEcgi.cellId = NR_CELL_ID; cell->cellInfo.nrPci = NR_PCI; cell->cellInfo.fiveGsTac = DU_TAC; - for(idx=0; idxcellInfo.plmn[idx].mcc[0] = PLMN_MCC0; - cell->cellInfo.plmn[idx].mcc[1] = PLMN_MCC1; - cell->cellInfo.plmn[idx].mcc[2] = PLMN_MCC2; - cell->cellInfo.plmn[idx].mnc[0] = PLMN_MNC0; - cell->cellInfo.plmn[idx].mnc[1] = PLMN_MNC1; - cell->cellInfo.plmn[idx].mnc[2] = PLMN_MNC2; - } + cell->cellInfo.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 = (U16)cell->cellInfo.nrEcgi.cellId; @@ -668,7 +686,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; @@ -681,7 +699,7 @@ 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; @@ -697,7 +715,7 @@ 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; @@ -744,7 +762,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; @@ -760,7 +778,7 @@ S16 duBuildMacUsapCfg(SpId sapId) 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 */ @@ -921,39 +939,26 @@ S16 duBindUnbindRlcToMacSap(U8 inst, U8 action) S16 duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy) { - switch(ntfy->header.nType) + if(f1Params.assocId == ntfy->u.assocChange.assocId) { - case CM_INET_SCTP_ASSOC_CHANGE: - switch(ntfy->u.assocChange.state) - { - case CM_INET_SCTP_COMM_UP: - { - DU_LOG("\nDU_APP : SCTP communication UP"); - //Setup F1-C - if(ntfy->u.assocChange.assocId == f1Params.assocId) - { - /* Build and send F1 Setup response */ - if(BuildAndSendF1SetupReq() != ROK) - { - RETVALUE(RFAILED); - } - } - //Setup E2 - if(ntfy->u.assocChange.assocId == ricParams.assocId) - { - /* Build and send F1 Setup response */ - if(BuildAndSendE2SetupReq() != ROK) - { - RETVALUE(RFAILED); - } - } - - break; - } - } - break; + if(BuildAndSendF1SetupReq() != ROK) + { + return RFAILED; + } } - RETVALUE(ROK); + else if(ricParams.assocId == ntfy->u.assocChange.assocId) + { + if(BuildAndSendE2SetupReq() != ROK) + { + return RFAILED; + } + } + else + { + DU_LOG("\nDU_APP : Invalid assocId %d received", ntfy->u.assocChange.assocId); + return RFAILED; + } + return ROK; } /******************************************************************* @@ -1017,7 +1022,7 @@ S16 duBuildEgtpCfgReq() cmMemcpy((U8 *)&egtpCfg, (U8 *)&duCfgParam.egtpParams, (PTR)sizeof(EgtpConfig)); duFillEgtpPst(&pst, EVTCFGREQ); - cmPkEgtpCfgReq(&pst, egtpCfg); + packEgtpCfgReq(&pst, egtpCfg); RETVALUE(ROK); } @@ -1082,7 +1087,7 @@ S16 duSendEgtpSrvOpenReq() DU_LOG("\nDU_APP : Sending EGTP server open request"); duFillEgtpPst(&pst, EVTSRVOPENREQ); - cmPkEgtpSrvOpenReq(&pst); + packEgtpSrvOpenReq(&pst); RETVALUE(ROK); } @@ -1155,7 +1160,7 @@ S16 duSendEgtpTnlMgmtReq(U8 action, U32 lclTeid, U32 remTeid) DU_LOG("\nDU_APP : Sending EGTP tunnel management request"); duFillEgtpPst(&pst, EVTTNLMGMTREQ); - cmPkEgtpTnlMgmtReq(&pst, tnlEvt); + packEgtpTnlMgmtReq(&pst, tnlEvt); RETVALUE(ROK); } @@ -1188,9 +1193,6 @@ S16 duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm) duSendUeCreateReqToRlc(); duSendEgtpTestData(); - - /* For testing purpose. TTI thread should actually be in L1 */ - duStartTtiThread(); #endif } else @@ -1365,7 +1367,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; @@ -1382,7 +1384,7 @@ 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; @@ -1391,7 +1393,7 @@ S16 duSendSchCfg() 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 */ @@ -1442,7 +1444,7 @@ S16 duLayerConfigComplete() DU_LOG("\nDU_APP : Failed configuring Sctp Params"); ret = RFAILED; } - if((ret = duSctpAssocReq(F1_INTERFACE)) != ROK) + if((ret = duSctpAssocReq(F1_INTERFACE)) != ROK) { DU_LOG("\nDU_APP : Failed to send AssocReq F1"); ret = RFAILED; @@ -1494,26 +1496,26 @@ S16 duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm) /******************************************************************* * - * @brief Handles TTI indication + * @brief Sends Slot indication to EGTP * * @details * - * Function : duSendEgtpTTIInd + * Function : duSendEgtpSlotInd * * Functionality: - * Handles TTI indication received from PHY + * Sends Slot indication to EGTP * * @params[in] * @return ROK - success * RFAILED - failure * * ****************************************************************/ -S16 duSendEgtpTTIInd() +S16 duSendEgtpSlotInd() { Pst pst; - duFillEgtpPst(&pst, EVTTTIIND); - cmPkEgtpTTIInd(&pst); + duFillEgtpPst(&pst, EVTSLOTIND); + packEgtpSlotInd(&pst); RETVALUE(ROK); @@ -1584,29 +1586,197 @@ S16 duBuildAndSendMacCellCfg() * RFAILED - failure * ***************************************************************************/ -S16 duHandleMacCellCfgCfm(MacCellCfgCfm *macCellCfgCfm) +int duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm) { S16 ret = ROK; - if(macCellCfgCfm->transId == duCb.duMacCellCfg->transId) + if(macCellCfgCfm->rsp == ROK) + { + if(macCellCfgCfm->transId == duCb.duMacCellCfg->transId) + { + /* free the memory allocated during sending macCellCfg request */ + DU_FREE(duCb.duMacCellCfg->sib1Cfg.sib1Pdu, duCfgParam.srvdCellLst[0].duSysInfo.sib1Len); + DU_FREE(duCb.duMacCellCfg,sizeof(MacCellCfg)); + 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 + { + /* transaction ID missmatch */ + DU_LOG("\n transaction ID mismatch in macCellCfg"); + ret = RFAILED; + } + } + 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 + * + * ****************************************************************/ +uint16_t duHandleSlotInd(Pst *pst, SlotInfo *slotInfo) +{ + + DU_LOG("\nDU APP : Slot Indication received"); + + if(slotInfo->cellId <=0 || slotInfo->cellId > DU_MAX_CELLS) { - /* free the memory allocated during sending macCellCfg request */ - DU_FREE(duCb.duMacCellCfg,sizeof(MacCellCfg)); - duCb.duMacCellCfg = NULLP; + 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 : Cell Id %d is ACTIVE", 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 + + if((pst->selector == DU_SELECTOR_LWLC) || (pst->selector == DU_SELECTOR_TC)) + DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, slotInfo, sizeof(SlotInfo)); + + return ROK; +} + +/******************************************************************* + * + * @brief Builds and sends cell start request to MAC + * + * @details + * + * Function : duBuildAndSendMacCellStartReq + * + * Functionality: + * Builds and sends cell start request to MAC + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t duBuildAndSendMacCellStartReq() +{ + Pst pst; + MacCellStartInfo *cellStartInfo = NULL; - /* Build and send GNB-DU config update */ - ret = BuildAndSendDUConfigUpdate(); + DU_LOG("\nDU APP : Building and Sending cell start request to MAC"); + + /* Send Cell Start Request to MAC */ + DU_ALLOC(cellStartInfo, sizeof(MacCellStartInfo)); + if(!cellStartInfo) + { + DU_LOG("\nDU APP : Memory alloc failed while building cell start request"); + return RFAILED; } - else + + for(uint8_t id = 0; id < DU_MAX_CELLS; id++) { - /* transaction ID missmatch */ - DU_LOG("\n transaction ID mismatch in macCellCfg"); - ret = RFAILED; + 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.srcEnt = ENTDUAPP; + pst.dstEnt = ENTRG; + pst.dstInst = 0; + pst.srcInst = 0; + pst.dstProcId = DU_PROC; + pst.srcProcId = DU_PROC; + pst.region = DU_APP_MEM_REGION; + pst.pool = DU_POOL; + pst.event = EVENT_MAC_CELL_START_REQ; + + return (*packMacCellStartReqOpts[pst.selector])(&pst, cellStartInfo); + } } + return ROK; +} - return ret; +/******************************************************************* + * + * @brief Builds and sends cell stop request to MAC + * + * @details + * + * Function : duBuildAndSendMacCellStopReq + * + * Functionality: + * Builds and sends cell stop request to MAC + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +S16 duBuildAndSendMacCellStopReq() +{ + Pst pst; + MacCellStopInfo *cellStopInfo = NULL; + + DU_LOG("\nDU APP : Building and Sending cell stop request to MAC"); + + /* Send Cell Stop Request to MAC */ + DU_ALLOC(cellStopInfo, sizeof(MacCellStopInfo)); + if(!cellStopInfo) + { + DU_LOG("\nDU APP : Memory alloc failed while building cell stop request"); + return RFAILED; + } + cellStopInfo->cellId = duCb.actvCellLst[0]->cellId; + + /* Fill Pst */ + pst.selector = DU_MAC_LWLC; + pst.srcEnt = ENTDUAPP; + pst.dstEnt = ENTRG; + pst.dstInst = 0; + pst.srcInst = 0; + pst.dstProcId = DU_PROC; + pst.srcProcId = DU_PROC; + pst.region = DU_APP_MEM_REGION; + pst.pool = DU_POOL; + pst.event = EVENT_MAC_CELL_STOP_REQ; + + return (*packMacCellStopReqOpts[pst.selector])(&pst, cellStopInfo); } + /********************************************************************** End of file **********************************************************************/