X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_msg_hdl.c;h=3887cc8a3b1e0becbb4a75c0e05943745bbb63d8;hb=refs%2Fchanges%2F91%2F5391%2F11;hp=b1424da90def6ac6178916c68c98fa67f8c88051;hpb=762bc0a2a50222d74b01d9a88071bfaf5d90979b;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index b1424da90..3887cc8a3 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -71,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 */ }; /************************************************************************** @@ -160,7 +160,7 @@ uint8_t duBuildRlcCfg(Inst inst) pst.srcProcId = DU_PROC; pst.region = duCb.init.region; - DU_LOG("\nDU_APP : RLC Gen Cfg Req sent for inst %d", inst); + DU_LOG("\nDEBUG --> DU_APP : RLC Gen Cfg Req sent for inst %d", inst); /* Send the request to RLC */ packRlcConfigReq(&pst, &rlcMngmt); @@ -226,7 +226,7 @@ uint8_t duBuildRlcLsapCfg(Ent ent, Inst inst, uint8_t lsapInst) lSap->sapId = lsapInst; /* SapId will be stored as suId in MAC */ lSap->selector = (inst == RLC_UL_INST) ? ODU_SELECTOR_LWLC : ODU_SELECTOR_TC; rlcMngmt.hdr.elmId.elmnt = STRGUSAP; - DU_LOG("\nDU_APP : RLC MAC Lower Sap Cfg Req sent for inst %d", inst); + DU_LOG("\nDEBUG --> DU_APP : RLC MAC Lower Sap Cfg Req sent for inst %d", inst); } else @@ -238,7 +238,7 @@ uint8_t duBuildRlcLsapCfg(Ent ent, Inst inst, uint8_t lsapInst) lSap->sapId = 0; lSap->selector = ODU_SELECTOR_LC; rlcMngmt.hdr.elmId.elmnt = STUDXSAP; - DU_LOG("\nDU_APP : RLC DL/UL Lower Sap Cfg Req sent for inst %d", inst); + DU_LOG("\nDEBUG --> DU_APP : RLC DL/UL Lower Sap Cfg Req sent for inst %d", inst); } packRlcConfigReq(&pst, &rlcMngmt); @@ -305,7 +305,7 @@ uint8_t duBuildRlcUsapCfg(uint8_t elemId, Ent ent, Inst inst) pst.srcProcId = DU_PROC; pst.region = duCb.init.region; - DU_LOG("\nDU_APP : RLC Kwu Upper Sap Cfg Req sent for inst %d", inst); + DU_LOG("\nDEBUG --> DU_APP : RLC Kwu Upper Sap Cfg Req sent for inst %d", inst); packRlcConfigReq(&pst, &rlcMngmt); return ROK; @@ -338,12 +338,12 @@ uint8_t duProcCfgComplete() DU_ALLOC(cell, sizeof(DuCellCb)) if(cell == NULLP) { - DU_LOG("\nDU_APP : Memory Allocation failed in duProcCfgComplete"); + DU_LOG("\nERROR --> DU_APP : Memory Allocation failed in duProcCfgComplete"); ret = RFAILED; } else { - uint8_t idx1; + uint8_t idx1=0; memset(cell, 0, sizeof(DuCellCb)); cell->cellId = ++cellId; memset(&cell->cellInfo.nrEcgi.plmn, 0, sizeof(Plmn)); @@ -493,7 +493,7 @@ uint8_t duHdlRlcCntrlCfgComplete(Pst *pst, RlcMngmt *cntrl) { if (pst->srcInst == RLC_DL_INST) { - DU_LOG("\nDU_APP : BIND OF RLC DL TO MAC (RGU) SAP SUCCESSFUL"); + DU_LOG("\nDEBUG --> DU_APP : BIND OF RLC DL TO MAC (RGU) SAP SUCCESSFUL"); macCfgInst++; if(macCfgInst < DEFAULT_CELLS) { @@ -507,7 +507,7 @@ uint8_t duHdlRlcCntrlCfgComplete(Pst *pst, RlcMngmt *cntrl) } else { - DU_LOG("\nDU_APP : BIND OF RLC UL TO MAC (RGU) SAP SUCCESSFUL"); + DU_LOG("\nDEBUG --> DU_APP : BIND OF RLC UL TO MAC (RGU) SAP SUCCESSFUL"); macCfgInst++; if(macCfgInst < DEFAULT_CELLS) { @@ -545,7 +545,7 @@ uint8_t duProcRlcUlCfgComplete(Pst *pst, RlcMngmt *cfm) { uint8_t ret; - DU_LOG("\nDU_APP : RLC UL Cfg Status %d", cfm->cfm.status); + DU_LOG("\nDEBUG --> DU_APP : RLC UL Cfg Status %d", cfm->cfm.status); if (cfm->cfm.status == LCM_PRIM_OK) { switch(cfm->hdr.elmId.elmnt) @@ -574,7 +574,7 @@ uint8_t duProcRlcUlCfgComplete(Pst *pst, RlcMngmt *cfm) default: break; } - DU_LOG("\nDU_APP : RLC UL Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); + DU_LOG("\nDEBUG --> DU_APP : RLC UL Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); if(rlcUlCfg == DU_RLC_UL_CONFIGURED) { rlcUlCfg = 0; @@ -586,7 +586,7 @@ uint8_t duProcRlcUlCfgComplete(Pst *pst, RlcMngmt *cfm) } else { - DU_LOG("\nDU_APP : Config confirm NOK from RLC UL"); + DU_LOG("\nERROR --> DU_APP : Config confirm NOK from RLC UL"); ret = RFAILED; } return ret; @@ -610,7 +610,7 @@ uint8_t duProcRlcUlCfgComplete(Pst *pst, RlcMngmt *cfm) ***************************************************************************/ uint8_t duProcRlcDlCfgComplete(Pst *pst, RlcMngmt *cfm) { - DU_LOG("\nDU_APP : RLC DL Cfg Status %d", cfm->cfm.status); + DU_LOG("\nDEBUG --> DU_APP : RLC DL Cfg Status %d", cfm->cfm.status); if (cfm->cfm.status == LCM_PRIM_OK) { switch(cfm->hdr.elmId.elmnt) @@ -640,7 +640,7 @@ uint8_t duProcRlcDlCfgComplete(Pst *pst, RlcMngmt *cfm) break; } - DU_LOG("\nDU_APP : RLC DL Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); + DU_LOG("\nDEBUG --> DU_APP : RLC DL Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); if(rlcDlCfg == DU_RLC_DL_CONFIGURED) { rlcDlCfg = 0; @@ -651,7 +651,7 @@ uint8_t duProcRlcDlCfgComplete(Pst *pst, RlcMngmt *cfm) } else { - DU_LOG("\nDU_APP : Config confirm NOK from RLC DL"); + DU_LOG("\nERROR --> DU_APP : Config confirm NOK from RLC DL"); } return ROK; } @@ -749,7 +749,7 @@ uint8_t duBuildMacGenCfg() pst.srcProcId = DU_PROC; pst.region = duCb.init.region; - DU_LOG("\nDU_APP : MAC Gen Cfg Req sent"); + DU_LOG("\nDEBUG --> DU_APP : MAC Gen Cfg Req sent"); /* Send the request to MAC */ cmPkLrgCfgReq(&pst, &rgMngmt); @@ -811,7 +811,7 @@ uint8_t duBuildMacUsapCfg(SpId sapId) pst.srcProcId = DU_PROC; pst.region = duCb.init.region; - DU_LOG("\nDU_APP : MAC Rgu USap Cfg Req sent"); + DU_LOG("\nDEBUG --> DU_APP : MAC Rgu USap Cfg Req sent"); /* Send the request to MAC */ cmPkLrgCfgReq(&pst, &rgMngmt); @@ -857,11 +857,11 @@ uint8_t duHdlMacCfgComplete(Pst *pst, RgMngmt *cfm) default: break; } - DU_LOG("\nDU_APP : MAC Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); + DU_LOG("\nDEBUG --> DU_APP : MAC Cfg Cfm received for the element %d ",cfm->hdr.elmId.elmnt); if(macCfg == MAC_CONFIGURED && numRlcMacSaps == MAX_MAC_SAP) { macCfg = 0; - DU_LOG("\nDU_APP : Completed sending Configs"); + DU_LOG("\nDEBUG --> DU_APP : Completed sending Configs"); macCfgInst = 0; duBindUnbindRlcToMacSap(RLC_DL_INST, ABND); } @@ -869,7 +869,7 @@ uint8_t duHdlMacCfgComplete(Pst *pst, RgMngmt *cfm) } else { - DU_LOG("\nDU_APP : Config confirm NOK from MAC"); + DU_LOG("\nERROR --> DU_APP : Config confirm NOK from MAC"); ret = RFAILED; } return ret; @@ -903,11 +903,11 @@ uint8_t duBindUnbindRlcToMacSap(uint8_t inst, uint8_t action) if (action == ABND) { - DU_LOG("\nDU_APP : Cntrl Req to RLC inst %d to bind MAC sap", inst); + DU_LOG("\nDEBUG --> DU_APP : Cntrl Req to RLC inst %d to bind MAC sap", inst); } else { - DU_LOG("\nDU_APP : Cntrl Req to RLC inst %d to unbind MAC sap", inst); + DU_LOG("\nDEBUG --> DU_APP : Cntrl Req to RLC inst %d to unbind MAC sap", inst); } cntrl = &(rlcMngmt.t.cntrl); @@ -975,7 +975,7 @@ uint8_t duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy) } else { - DU_LOG("\nDU_APP : Invalid assocId %d received", ntfy->u.assocChange.assocId); + DU_LOG("\nERROR --> DU_APP : Invalid assocId %d received", ntfy->u.assocChange.assocId); return RFAILED; } return ROK; @@ -1036,7 +1036,7 @@ uint8_t duBuildEgtpCfgReq() Pst pst; EgtpConfig egtpCfg; - DU_LOG("\nDU_APP : Sending EGTP config request"); + DU_LOG("\nDEBUG --> DU_APP : Sending EGTP config request"); memset(&egtpCfg, 0, sizeof(EgtpConfig)); memcpy(&egtpCfg, &duCfgParam.egtpParams, sizeof(EgtpConfig)); @@ -1069,14 +1069,14 @@ uint8_t duHdlEgtpCfgComplete(CmStatus cfm) if(cfm.status == LCM_PRIM_OK) { - DU_LOG("\nDU_APP : EGTP configuraton complete"); + DU_LOG("\nDEBUG --> DU_APP : EGTP configuraton complete"); #ifdef EGTP_TEST duSendEgtpSrvOpenReq(); #endif } else { - DU_LOG("\nDU_APP : EGTP configuraton failed"); + DU_LOG("\nERROR --> DU_APP : EGTP configuraton failed"); ret = RFAILED; } @@ -1104,7 +1104,7 @@ uint8_t duSendEgtpSrvOpenReq() { Pst pst; - DU_LOG("\nDU_APP : Sending EGTP server open request"); + DU_LOG("\nDEBUG --> DU_APP : Sending EGTP server open request"); duFillEgtpPst(&pst, EVTSRVOPENREQ); packEgtpSrvOpenReq(&pst); @@ -1135,14 +1135,14 @@ uint8_t duHdlEgtpSrvOpenComplete(CmStatus cfm) if(cfm.status == LCM_PRIM_OK) { - DU_LOG("\nDU_APP : EGTP server opened successfully"); + DU_LOG("\nDEBUG --> DU_APP : EGTP server opened successfully"); #ifdef EGTP_TEST duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_ADD, EGTP_LCL_TEID, EGTP_REM_TEID); #endif } else { - DU_LOG("\nDU_APP : EGTP server opening failed"); + DU_LOG("\nERROR --> DU_APP : EGTP server opening failed"); ret = RFAILED; } @@ -1177,11 +1177,9 @@ uint8_t duSendEgtpTnlMgmtReq(uint8_t action, uint32_t lclTeid, uint32_t remTeid) tnlEvt.lclTeid = lclTeid; tnlEvt.remTeid = remTeid; - DU_LOG("\nDU_APP : Sending EGTP tunnel management request"); - + DU_LOG("\nDEBUG --> DU_APP : Sending EGTP tunnel management request"); duFillEgtpPst(&pst, EVTTNLMGMTREQ); - packEgtpTnlMgmtReq(&pst, tnlEvt); - + egtpTnlMgmtReq(&pst, tnlEvt); return ROK; } @@ -1207,17 +1205,32 @@ uint8_t duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm) if(tnlEvtCfm.cfmStatus.status == LCM_PRIM_OK) { - DU_LOG("\nDU_APP : Tunnel management confirm OK"); + DU_LOG("\nDEBUG --> DU_APP: Tunnel management confirm OK"); } else { - DU_LOG("\nDU_APP : Tunnel management failed"); + DU_LOG("\nERROR --> DU_APP: Tunnel management failed"); ret = RFAILED; } 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; @@ -1237,121 +1250,6 @@ uint8_t duSendEgtpDatInd(Buffer *mBuf) } -#ifdef EGTP_TEST -/******************************************************************* - * - * @brief Simulate UL Data for intial test - * - * @details - * - * Function : duSendEgtpTestData - * - * Functionality: - * Simulate UL data for initial test - * - * @params[in] - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t duSendEgtpTestData() -{ - char data[30] = "This is EGTP data from DU"; - int datSize = 30; - - Buffer *mBuf; - - 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_BUF(mBuf); - return RFAILED; - } - } - else - { - DU_LOG("\nDU_APP : Failed to allocate memory"); - return RFAILED; - } - - /* filling IPv4 header */ - CmIpv4Hdr ipv4Hdr; - MsgLen mLen; - - mLen = 0; - ODU_GET_MSG_LEN(mBuf, &mLen); - - memset(&ipv4Hdr, 0, sizeof(CmIpv4Hdr)); - ipv4Hdr.length = CM_IPV4_HDRLEN + mLen; - ipv4Hdr.hdrVer = 0x45; - ipv4Hdr.proto = 1; - 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; - Data revPkArray[CM_IPV4_HDRLEN]; - Data pkArray[CM_IPV4_HDRLEN]; - - /* initialize locals */ - cnt = 0; - memset(revPkArray, 0, CM_IPV4_HDRLEN); - memset(pkArray, 0, CM_IPV4_HDRLEN); - - /* Pack Header Version */ - pkArray[cnt++] = ipv4Hdr.hdrVer; - - /* Pack TOS */ - pkArray[cnt++] = ipv4Hdr.tos; - - pkArray[cnt++] = (Data)GetHiByte(ipv4Hdr.length); - pkArray[cnt++] = (Data)GetLoByte(ipv4Hdr.length); - - /* Pack Id */ - pkArray[cnt++] = (Data) GetHiByte(ipv4Hdr.id); - pkArray[cnt++] = (Data) GetLoByte(ipv4Hdr.id); - - /* Pack Offset */ - pkArray[cnt++] = (Data)GetHiByte(ipv4Hdr.off); - pkArray[cnt++] = (Data)GetLoByte(ipv4Hdr.off); - - /* Pack TTL */ - pkArray[cnt++] = ipv4Hdr.ttl; - - /* Pack Protocol */ - pkArray[cnt++] = ipv4Hdr.proto; - - /* Pack Checksum */ - pkArray[cnt++] = (Data)GetHiByte(ipv4Hdr.chkSum); - pkArray[cnt++] = (Data)GetLoByte(ipv4Hdr.chkSum); - - /* Pack Source Address */ - pkArray[cnt++] = (Data)GetHiByte(GetHiWord(ipv4Hdr.srcAddr)); - pkArray[cnt++] = (Data)GetLoByte(GetHiWord(ipv4Hdr.srcAddr)); - pkArray[cnt++] = (Data)GetHiByte(GetLoWord(ipv4Hdr.srcAddr)); - pkArray[cnt++] = (Data)GetLoByte(GetLoWord(ipv4Hdr.srcAddr)); - - /* Pack Destination Address */ - pkArray[cnt++] = (Data)GetHiByte(GetHiWord(ipv4Hdr.destAddr)); - pkArray[cnt++] = (Data)GetLoByte(GetHiWord(ipv4Hdr.destAddr)); - pkArray[cnt++] = (Data)GetHiByte(GetLoWord(ipv4Hdr.destAddr)); - pkArray[cnt++] = (Data)GetLoByte(GetLoWord(ipv4Hdr.destAddr)); - - for (idx = 0; idx < CM_IPV4_HDRLEN; idx++) - revPkArray[idx] = pkArray[CM_IPV4_HDRLEN - idx -1]; - - /* this function automatically reverses revPkArray */ - ret = ODU_ADD_PRE_MSG_MULT(revPkArray, (MsgLen)cnt, mBuf); - - duSendEgtpDatInd(mBuf); - - return ROK; -} -#endif /* EGTP_TEST */ - - /************************************************************************** * @brief Function to send configs to SCH * @@ -1421,7 +1319,7 @@ uint8_t duSendSchCfg() pst.region = duCb.init.region; pst.event = (Event) EVTMACSCHGENCFGREQ; - DU_LOG("\nDU_APP : MAC Sch Cfg sent"); + DU_LOG("\nDEBUG --> DU_APP : MAC Sch Cfg sent"); /* Send the request to MAC */ cmPkLrgSchCfgReq(&pst, &rgMngmt); @@ -1451,21 +1349,21 @@ uint8_t duLayerConfigComplete() { uint8_t ret = ROK; - DU_LOG("\nDU_APP : Configuring all Layer is complete"); + DU_LOG("\nINFO --> DU_APP : Configuring all Layer is complete"); if((ret = duSctpCfgReq(duCfgParam.sctpParams)) != ROK) { - DU_LOG("\nDU_APP : Failed configuring Sctp Params"); + DU_LOG("\nERROR --> DU_APP : Failed configuring Sctp Params"); ret = RFAILED; } if((ret = duSctpAssocReq(F1_INTERFACE)) != ROK) { - DU_LOG("\nDU_APP : Failed to send AssocReq F1"); + DU_LOG("\nERROR --> DU_APP : Failed to send AssocReq F1"); ret = RFAILED; } if((ret = duSctpAssocReq(E2_INTERFACE)) != ROK) { - DU_LOG("\nDU_APP : Failed to send AssocReq E2"); + DU_LOG("\nERROR --> DU_APP : Failed to send AssocReq E2"); ret = RFAILED; } @@ -1496,7 +1394,7 @@ uint8_t duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm) { case STSCHINST: { - DU_LOG("\nDU_APP : Received SCH CFG CFM at DU APP"); + DU_LOG("\nDEBUG --> DU_APP : Received SCH CFG CFM at DU APP"); break; } default: @@ -1508,33 +1406,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 * @@ -1607,83 +1478,26 @@ uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm) ret = BuildAndSendDUConfigUpdate(); /* Build and Send Cell Start Req to MAC */ - ret = duBuildAndSendMacCellStartReq(); + ret = duBuildAndSendMacCellStart(); } else { /* TODO : Action to be taken if cell configuration fails. * Should CU be informed? */ - DU_LOG("\nMac cell cfg failed"); + DU_LOG("\nERROR --> DU_APP : Mac 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) -{ - DuCellCb *cellCb = NULLP; - - if(slotInfo->cellId <=0 || slotInfo->cellId > MAX_NUM_CELL) - { - DU_LOG("\nDU APP : Invalid Cell Id %d", slotInfo->cellId); - return RFAILED; - } - - if(duGetCellCb(slotInfo->cellId, &cellCb) != ROK) - return RFAILED; - - if(!cellCb->firstSlotIndRcvd) - { - DU_LOG("\nDU APP : Slot Indication received"); - cellCb->firstSlotIndRcvd = true; - if((cellCb != NULL) && (cellCb->cellStatus == ACTIVATION_IN_PROGRESS)) - { - DU_LOG("\nDU APP : 5G-NR Cell %d is UP", slotInfo->cellId); - cellCb->cellStatus = ACTIVATED; - -#ifdef O1_ENABLE - DU_LOG("\nDU APP : Raise cell UP alarm for cell id=%d", slotInfo->cellId); - raiseCellAlrm(CELL_UP_ALARM_ID, slotInfo->cellId); -#endif - } - } - - /* 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(pst->region, pst->pool, slotInfo, sizeof(SlotIndInfo)); - return ROK; -} - /******************************************************************* * * @brief Builds and sends cell start request to MAC * * @details * - * Function : duBuildAndSendMacCellStartReq + * Function : duBuildAndSendMacCellStart * * Functionality: * Builds and sends cell start request to MAC @@ -1693,18 +1507,18 @@ 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"); + DU_LOG("\nINFO --> DU 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"); + DU_LOG("\nERROR --> DU APP : Memory alloc failed while building cell start request"); return RFAILED; } @@ -1712,13 +1526,12 @@ uint8_t duBuildAndSendMacCellStartReq() { if(duCb.actvCellLst[id]) { - duCb.actvCellLst[id]->firstSlotIndRcvd = FALSE; - cellStartInfo->cellId = duCb.actvCellLst[id]->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; @@ -1730,7 +1543,7 @@ uint8_t duBuildAndSendMacCellStartReq() * * @details * - * Function : duBuildAndSendMacCellStopReq + * Function : duBuildAndSendMacCellStop * * Functionality: * Builds and sends cell stop request to MAC @@ -1740,26 +1553,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"); + DU_LOG("\nINFO --> DU 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"); + DU_LOG("\nERROR --> DU 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); } /******************************************************************* @@ -1778,39 +1591,35 @@ uint8_t duBuildAndSendMacCellStopReq() * RFAILED - failure * * ****************************************************************/ -uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellStopId) +uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId) { DuCellCb *cellCb = NULLP; - - if(cellStopId->cellId <=0 || cellStopId->cellId > MAX_NUM_CELL) + + if(cellId->cellId <=0 || cellId->cellId > MAX_NUM_CELL) { - DU_LOG("\nDU APP : Invalid Cell Id %d", cellStopId->cellId); + DU_LOG("\nERROR --> DU APP : Invalid Cell Id %d in duHandleStopInd()", cellId->cellId); } - if(duGetCellCb(cellStopId->cellId, &cellCb) != ROK) + if(duGetCellCb(cellId->cellId, &cellCb) != ROK) return RFAILED; - if(cellCb->firstSlotIndRcvd) + if((cellCb->cellStatus == ACTIVATED)) { - cellCb->firstSlotIndRcvd = false; - if((cellCb->cellStatus == ACTIVATED)) - { - DU_LOG("\nDU APP : 5G-NR Cell %d is DOWN", cellStopId->cellId); - cellCb->cellStatus = DELETION_IN_PROGRESS; + DU_LOG("\nINFO --> DU 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", cellStopId->cellId); - raiseCellAlrm(CELL_DOWN_ALARM_ID, cellStopId->cellId); + DU_LOG("\nINFO --> DU 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; } @@ -1834,7 +1643,7 @@ uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellStopId) uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo) { - DU_LOG("\nDU APP : UL CCCH Indication received"); + DU_LOG("\nINFO --> DU APP : UL CCCH Indication received"); return (duProcUlCcchInd(ulCcchIndInfo)); } @@ -1858,11 +1667,12 @@ uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo) uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo) { DuCellCb *cellCb = NULLP; - DuUeCb ueCb; + DuUeCb ueCb ={0}; if(duGetCellCb(ulRrcMsgInfo->cellId, &cellCb) != ROK) return RFAILED; - + if(ulRrcMsgInfo->ueIdx > 0) + { ueCb = cellCb->ueCb[ulRrcMsgInfo->ueIdx -1]; @@ -1871,6 +1681,7 @@ uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo) 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; } @@ -1906,6 +1717,74 @@ uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryRepor return ret; } +/******************************************************************* + * + * @brief Process UL user data from RLC + * + * @details + * + * Function : DuProcRlcUlUserDataTrans + * + * Functionality: Process UL user data from RLC + * + * @params[in] Post structure + * UL user data + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData) +{ + uint8_t rbIdx; + DuCellCb *cellCb; + DuUeCb ueCb; + EgtpMsg egtpMsg; + Buffer *mBuf; + + if(duGetCellCb(ulUserData->cellId, &cellCb) != ROK) + return RFAILED; + + ueCb = cellCb->ueCb[ulUserData->ueIdx -1]; + + DU_LOG("\nDEBUG --> DU APP : Received UL user data"); + + /* Fill EGTP header */ + egtpMsg.msgHdr.msgType = EGTPU_MSG_GPDU; + egtpMsg.msgHdr.nPdu.pres = FALSE; + egtpMsg.msgHdr.seqNum.pres = FALSE; + egtpMsg.msgHdr.extHdr.udpPort.pres = FALSE; + egtpMsg.msgHdr.extHdr.pdcpNmb.pres = FALSE; + + /* Fetch EGTP tunnel info */ + /* TODO : keep the "#if 0" code block and test once DL User data changes are submitted */ +#if 0 + for(rbIdx = 0; rbIdx < MAX_NUM_DRB; rbIdx++) + { + if(ueCb.ulTnlCfg[rbIx]->drbId == ulUserData->rbId) + { + egtpMsg.msgHdr.teId = ueCb.ulTnlCfg[rbIx]->tnlCfg.teId; + } + } +#else + egtpMsg.msgHdr.teId = 1; +#endif + + if (ODU_GET_MSG_BUF(DU_APP_MEM_REGION, DU_POOL, &mBuf) != ROK) + { + DU_LOG("\nERROR --> DU APP : Failed to allocated buffer memory in DuProcRlcUlUserDataTrans"); + DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulUserData->userData, ulUserData->msgLen); + DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulUserData, sizeof(RlcUlUserDatInfo)); + return RFAILED; + } + oduCpyFixBufToMsg(ulUserData->userData, mBuf, ulUserData->msgLen); + ODU_PRINT_MSG(mBuf, 0, 0); + egtpMsg.msg = mBuf; + egtpHdlDatInd(egtpMsg); + + DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulUserData->userData, ulUserData->msgLen); + DU_FREE_SHRABL_BUF(pst->region, pst->pool, ulUserData, sizeof(RlcUlUserDatInfo)); + return ROK; +} /********************************************************************** End of file