X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_msg_hdl.c;h=9f3b50c92f527c602259a68f2f0c1b7e1edac7c9;hb=c371a26d48604a5d60686d9ca347e68671e69637;hp=22eb763734662d6011534bda497c12b5c60dc3e4;hpb=b7a8e8fc6abc7fba2f580684da44413d481be825;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index 22eb76373..9f3b50c92 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -19,6 +19,7 @@ /* This file contains message handling functionality for DU APP */ #include "common_def.h" #include "lrg.h" +#include "du_tmr.h" #include "legtp.h" #include "lkw.h" #include "kwu.h" @@ -27,6 +28,8 @@ #include "kwu.x" #include "du_app_mac_inf.h" #include "du_app_rlc_inf.h" +#include "du_e2ap_mgr.h" +#include "du_e2ap_msg_hdl.h" #include "du_cfg.h" #include "du_app_rlc_inf.h" #include "du_mgr.h" @@ -63,6 +66,7 @@ uint8_t BuildAndSendDUConfigUpdate(); uint16_t getTransId(); uint8_t cmPkLrgSchCfgReq(Pst * pst,RgMngmt * cfg); uint8_t sendCellDeleteReqToMac(uint16_t cellId); +uint8_t BuildAndSendStatsDeleteReq(RicSubscription *ricSubscriptionInfo); packMacCellCfgReq packMacCellCfgOpts[] = { @@ -95,10 +99,25 @@ DuMacSliceCfgReq packMacSliceCfgReqOpts[] = DuMacSliceRecfgReq packMacSliceRecfgReqOpts[] = { - packDuMacSliceRecfgReq, /* Loose coupling */ - MacProcSliceRecfgReq, /* TIght coupling */ - packDuMacSliceRecfgReq /* Light weight-loose coupling */ + packDuMacSliceRecfgReq, /* Loose coupling */ + MacProcSliceRecfgReq, /* TIght coupling */ + packDuMacSliceRecfgReq /* Light weight-loose coupling */ }; + +DuMacStatsReqFunc packMacStatsReqOpts[]= +{ + packDuMacStatsReq, /* Loose Coupling */ + MacProcStatsReq, /* Tight Coupling */ + packDuMacStatsReq /* Light weight-loose coupling */ +}; + +DuMacStatsDeleteReqFunc packMacStatsDeleteReqOpts[]= +{ + packDuMacStatsDeleteReq, /* Loose Coupling */ + MacProcStatsDeleteReq, /* Tight Coupling */ + packDuMacStatsDeleteReq /* Light weight-loose coupling */ +}; + /************************************************************************** * @brief Function to fill configs required by RLC * @@ -724,7 +743,7 @@ uint8_t duBuildMacGenCfg() /*----------- Fill General Configuration Parameters ---------*/ genCfg->mem.region = MAC_MEM_REGION; genCfg->mem.pool = MAC_POOL; - genCfg->tmrRes = 10; + genCfg->tmrRes = 1; genCfg->numRguSaps = 2; genCfg->lmPst.dstProcId = DU_PROC; @@ -1297,7 +1316,7 @@ uint8_t duSendSchCfg() /* Filling of Gen config */ cfg->genCfg.mem.region = MAC_MEM_REGION; cfg->genCfg.mem.pool = MAC_POOL; - cfg->genCfg.tmrRes = 10; + cfg->genCfg.tmrRes = 1; #ifdef LTE_ADV cfg->genCfg.forceCntrlSrbBoOnPCel = FALSE; @@ -1579,27 +1598,27 @@ uint8_t duBuildAndSendMacCellStop(uint16_t cellId) { Pst pst; uint16_t cellIdx=0; - OduCellId *oduCellId = NULL; - + CellStopInfo *cellStop = NULL; + DU_LOG("\nINFO --> DU APP : Building and Sending cell stop request to MAC"); GET_CELL_IDX(cellId, cellIdx); if(duCb.actvCellLst[cellIdx] != NULLP) { /* Send Cell Stop Request to MAC */ - DU_ALLOC_SHRABL_BUF(oduCellId, sizeof(OduCellId)); - if(!oduCellId) + DU_ALLOC_SHRABL_BUF(cellStop, sizeof(CellStopInfo)); + if(!cellStop) { - DU_LOG("\nERROR --> DU APP : duBuildAndSendMacCellStop(): Memory allocation failed "); + DU_LOG("\nERROR --> DU APP : Memory alloc failed while building cell stop request"); return RFAILED; } - memset(oduCellId, 0, sizeof(OduCellId)); - oduCellId->cellId = duCb.actvCellLst[cellIdx]->cellId; + memset(cellStop, 0, sizeof(CellStopInfo)); + cellStop->cellId = duCb.actvCellLst[cellIdx]->cellId; /* Fill Pst */ FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_STOP); - return (*packMacCellStopOpts[pst.selector])(&pst, oduCellId); + return (*packMacCellStopOpts[pst.selector])(&pst, cellStop); } else { @@ -1861,80 +1880,6 @@ uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData) return ROK; } -/******************************************************************* - * - * @brief Free tempSLiceCfg stored in duCfgParams - * - * @details - * - * Function : duFreeTempSliceCfg - * - * Functionality: Free tempSLiceCfg stored in duCfgParams - * - * @params[in] Post structure, - * - * @return Void - * - * ****************************************************************/ - -void duFreeTempSliceCfg() -{ - uint8_t policyIdx = 0, memberListTdx =0; - CopyOfRecvdSliceCfg *tempSliceCfg = &duCfgParam.tempSliceCfg; - - if(tempSliceCfg->totalRrmPolicy) - { - for(policyIdx = 0; policyIdxtotalRrmPolicy; policyIdx++) - { - if(tempSliceCfg->rrmPolicy[policyIdx]->numMemberList) - { - for(memberListTdx = 0; memberListTdxrrmPolicy[policyIdx]->numMemberList; memberListTdx++) - { - DU_FREE(tempSliceCfg->rrmPolicy[policyIdx]->memberList[memberListTdx], sizeof(PolicyMemberList)); - } - DU_FREE(tempSliceCfg->rrmPolicy[policyIdx]->memberList, (tempSliceCfg->rrmPolicy[policyIdx]->numMemberList) * sizeof(PolicyMemberList*)); - } - DU_FREE(tempSliceCfg->rrmPolicy[policyIdx], sizeof(RrmPolicy)); - } - DU_FREE(tempSliceCfg->rrmPolicy, tempSliceCfg->totalRrmPolicy* sizeof(RrmPolicy*)); - } - memset(tempSliceCfg, 0, sizeof(CopyOfRecvdSliceCfg)); -} - -/******************************************************************* - * - * @brief free the slice cfg rsp - * - * @details - * - * Function : duFreeSliceCfgRsp - * - * Functionality: free the slice cfg rsp - * - * @params[in] Post structure, MacSliceCfgRsp *cfgRsp - * - * @return ROK - success - * RFAILED - failure - * - **********************************************************************/ -void duFreeSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp) -{ - uint8_t cfgIdx; - - if(cfgRsp) - { - if(cfgRsp->numSliceCfgRsp) - { - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp; cfgIdx++) - { - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(MacSliceRsp)); - } - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp->listOfSliceCfgRsp, cfgRsp->numSliceCfgRsp * sizeof(MacSliceRsp*)); - } - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacSliceCfgRsp)); - } -} - /******************************************************************* * * @brief process the slice cfg rsp received from MAC @@ -1953,90 +1898,22 @@ void duFreeSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp) **********************************************************************/ uint8_t DuProcMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp) { - uint8_t cfgIdx = 0; - if(cfgRsp) { - if(cfgRsp->listOfSliceCfgRsp) - { - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp; cfgIdx++) - { - if(cfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp == MAC_DU_APP_RSP_OK) - { - duCb.sliceState = SLICE_CONFIGURED; - } - } - DU_LOG("\nINFO --> DU_APP : Slice Configuration is done successfully "); - } - duFreeSliceCfgRsp(pst, cfgRsp); + if(cfgRsp->rsp == MAC_DU_APP_RSP_OK) + { + duCb.sliceState = SLICE_CONFIGURED; + DU_LOG("\nINFO --> DU_APP : Slice configured successfully "); + } + else + { + DU_LOG("\nERROR --> DU_APP : Slice not available"); + } + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacSliceCfgRsp)); } - duFreeTempSliceCfg(); return ROK; } -/******************************************************************* - * - * @brief Fill the slice configration and rrm policy ratio - * information received form O1 - * - * @details - * - * Function : fillSliceCfgReCfgInfo - * - * Functionality: Fill the slice configration and recfg info - * - * @params[in] Post structure - * - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -uint8_t fillSliceCfgReCfgInfo(MacSliceRecfgReq *sliceRecfgReq, RrmPolicy *rrmPolicy[], uint8_t totalRrmPolicy, uint8_t totalSliceCount) -{ - uint8_t sliceIdx = 0, cfgIdx = 0, memberListIdx = 0; - - if(totalRrmPolicy) - { - DU_ALLOC_SHRABL_BUF(sliceRecfgReq->listOfSliceCfg, totalSliceCount*sizeof(MacSliceRrmPolicy*)); - if(sliceRecfgReq->listOfSliceCfg == NULLP) - { - DU_LOG("\nERROR --> DU_APP : Memory allocation failed in fillSliceCfgReCfgInfo"); - return RFAILED; - } - - for(sliceIdx = 0; sliceIdxnumMemberList; memberListIdx++) - { - DU_ALLOC_SHRABL_BUF(sliceRecfgReq->listOfSliceCfg[cfgIdx], sizeof(MacSliceRrmPolicy)); - if(sliceRecfgReq->listOfSliceCfg[cfgIdx] == NULLP) - { - DU_LOG("\nERROR --> DU_APP : Memory allocation failed in fillSliceCfgReCfgInfo"); - return RFAILED; - } - - - memcpy(&sliceRecfgReq->listOfSliceCfg[cfgIdx]->snssai, &rrmPolicy[sliceIdx]->memberList[memberListIdx]->snssai, sizeof(Snssai)); - - DU_ALLOC_SHRABL_BUF(sliceRecfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio, sizeof(RrmPolicyRatio)); - if(sliceRecfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio == NULLP) - { - DU_LOG("\nERROR --> DU_APP : Memory allocation failed in fillSliceCfgReCfgInfo"); - return RFAILED; - } - - sliceRecfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyMaxRatio = rrmPolicy[sliceIdx]->policyMaxRatio; - sliceRecfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyMinRatio = rrmPolicy[sliceIdx]->policyMinRatio; - sliceRecfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyDedicatedRatio = rrmPolicy[sliceIdx]->policyDedicatedRatio; - sliceRecfgReq->numOfConfiguredSlice++; - cfgIdx++; - } - } - } - return ROK; -} - /******************************************************************* * * @brief Fill the slice configration and rrm policy related @@ -2055,7 +1932,7 @@ uint8_t fillSliceCfgReCfgInfo(MacSliceRecfgReq *sliceRecfgReq, RrmPolicy *rrmPol * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendSliceConfigReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolicy, uint8_t totalSliceCnt) +uint8_t BuildAndSendSliceConfigReq() { Pst pst; MacSliceCfgReq *sliceCfgReq; @@ -2068,11 +1945,7 @@ uint8_t BuildAndSendSliceConfigReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolic } else { - if(fillSliceCfgReCfgInfo(sliceCfgReq, rrmPolicy, totalRrmPolicy, totalSliceCnt) != ROK) - { - DU_LOG("\nERROR --> DU_APP : Failed to fill slice Configuration info in MacSliceCfgReq"); - return RFAILED; - } + memcpy(sliceCfgReq, &duCfgParam.tempSliceCfg, sizeof(MacSliceCfgReq)); FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_SLICE_CFG_REQ); DU_LOG("\nDEBUG --> DU_APP : Sending Slice Cfg Request to MAC "); @@ -2085,7 +1958,6 @@ uint8_t BuildAndSendSliceConfigReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolic return ROK; } - /******************************************************************* * * @brief Fill the slice configration and rrm policy related @@ -2103,7 +1975,7 @@ uint8_t BuildAndSendSliceConfigReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolic * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendSliceRecfgReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolicy, uint8_t totalSliceCount) +uint8_t BuildAndSendSliceRecfgReq() { Pst pst; MacSliceRecfgReq *sliceRecfgReq = NULLP; @@ -2118,11 +1990,8 @@ uint8_t BuildAndSendSliceRecfgReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolicy } else { - if(fillSliceCfgReCfgInfo(sliceRecfgReq, rrmPolicy, totalRrmPolicy, totalSliceCount) != ROK) - { - DU_LOG("\nERROR --> DU_APP: Failed to fill slice cfg request info"); - return RFAILED; - } + memcpy(sliceRecfgReq, &duCfgParam.tempSliceCfg, sizeof(MacSliceRecfgReq)); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_SLICE_RECFG_REQ); DU_LOG("\nDEBUG --> DU_APP: Sending Slice ReCfg Request to MAC "); @@ -2150,30 +2019,21 @@ uint8_t BuildAndSendSliceRecfgReq(RrmPolicy *rrmPolicy[], uint8_t totalRrmPolicy * RFAILED - failure * **********************************************************************/ -uint8_t DuProcMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *reCfgRsp) +uint8_t DuProcMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *recfgRsp) { - uint8_t cfgIdx = 0; - - if(reCfgRsp) + if(recfgRsp) { - if(reCfgRsp->listOfSliceCfgRsp) + if(recfgRsp->rsp == MAC_DU_APP_RSP_OK) { - for(cfgIdx = 0; cfgIdx < reCfgRsp->numSliceCfgRsp; cfgIdx++) - { - if(reCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp == MAC_DU_APP_RSP_OK) - { - duCb.sliceState = SLICE_RECONFIGURED; - } - else - { - DU_LOG("\nERROR --> DU_APP : Slice not available"); - } - } - DU_LOG("\nINFO --> DU_APP : Slice ReCOnfiguration response received"); + duCb.sliceState = SLICE_RECONFIGURED; + DU_LOG("\nINFO --> DU_APP : Slice Reconfigured successfully "); } - duFreeSliceCfgRsp(pst, reCfgRsp); + else + { + DU_LOG("\nERROR --> DU_APP : Slice not available"); + } + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, recfgRsp, sizeof(MacSliceCfgRsp)); } - duFreeTempSliceCfg(); return ROK; } @@ -2225,6 +2085,323 @@ uint8_t DuProcRlcSliceMetrics(Pst *pst, SlicePmList *sliceStats) return ROK; } + +/******************************************************************* + * + * @brief Send Statistics request to MAC + * + * @details + * + * Function : BuildAndSendStatsReqToMac() + * + * Functionality: Send Statistics Request To Mac + * + * @params[in] + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t BuildAndSendStatsReqToMac(RicSubscription *ricSubscriptionInfo) +{ + Pst pst; + MacStatsReq *macStatsReq = NULLP; + + /* Fill MAC statistics request */ + DU_ALLOC_SHRABL_BUF(macStatsReq, sizeof(MacStatsReq)); + if(macStatsReq == NULLP) + { + DU_LOG("\nERROR --> DU_APP : Memory allocation failed for macStatsReq in BuildAndSendStatsReqToMac"); + return RFAILED; + } + + /* Fill E2 Subscription Info in MAC Statistics Request and send to MAC */ + if(fillRicSubsInMacStatsReq(macStatsReq, ricSubscriptionInfo) == ROK) + { + DU_LOG("\nDEBUG --> DU_APP: Sending Statistics Request to MAC "); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_STATISTICS_REQ); + + if( (*packMacStatsReqOpts[pst.selector])(&pst, macStatsReq) == ROK) + return ROK; + + DU_LOG("\nERROR --> DU_APP: Failed to send Statistics Request to MAC"); + } + + DU_LOG("\nERROR --> DU_APP: No Statistics group found valid. Hence statistics request is not sent to MAC"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macStatsReq, sizeof(MacStatsReq)); + return RFAILED; +} + +/******************************************************************* + * + * @brief Send Statistics request to DU layers + * + * @details + * + * Function : BuildAndSendStatsReq() + * + * Functionality: Check if there is an update in statistics + * reporting configuration. If so, send the update to + * respective layer. + * + * @params[in] Subscription Info + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t BuildAndSendStatsReq(RicSubscription *ricSubscriptionInfo) +{ + /* Build and sent subscription information to MAC in Statistics Request */ + if(BuildAndSendStatsReqToMac(ricSubscriptionInfo) != ROK) + { + DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsReqToMac()"); + return RFAILED; + } + +/* TODO : When KPI collection from RLC will be supported, this function will be + * called to configure KPIs to be colled */ +#if 0 + if(BuildAndSendStatsReqToRlc() != ROK) + { + DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsReqToRlc()"); + return RFAILED; + } +#endif + + return ROK; +} + +/******************************************************************* + * + * @brief Process statistics response from MAC + * + * @details + * + * Function : DuProcMacStatsRsp + * + * Functionality: Processes statistics configuration response + * from MAC. If configuration is succsessful, DUAPP starts + * reporting period timer for this subscription request + * from RIC + * + * @params[in] + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t DuProcMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp) +{ + uint8_t ret = RFAILED; + DU_LOG("\nINFO --> DU_APP : DuProcMacStatsRsp: Received Statistics Response from MAC"); + + if(statsRsp) + { +#ifdef DEBUG_PRINT + uint8_t idx = 0; + DU_LOG("\n Subscription Id [%ld]", statsRsp->subscriptionId); + + DU_LOG("\n Number of Accepted Groups [%d]", statsRsp->numGrpAccepted); + for(idx=0; idxnumGrpAccepted; idx++) + { + DU_LOG("\n Group Id [%d]", statsRsp->statsGrpAcceptedList[idx]); + } + + DU_LOG("\n Number of Rejected Groups [%d]", statsRsp->numGrpRejected); + for(idx=0; idxnumGrpRejected; idx++) + { + DU_LOG("\n Group Id [%d]", statsRsp->statsGrpRejectedList[idx].groupId); + } +#endif + + /* Check the list of accepted and rejected statistics group and send + * Ric subscription response/failure accordingly */ + if((ret = e2ProcStatsRsp(statsRsp)) != ROK) + { + DU_LOG("\nERROR --> DU_APP : DuProcMacStatsRsp: Failed in %s at line %d", __func__, __LINE__); + } + + DU_FREE_SHRABL_BUF(pst->region, pst->pool, statsRsp, sizeof(MacStatsRsp)); + } + else + { + DU_LOG("\nERROR --> DU_APP : DuProcMacStatsRsp: Received NULL Pointer"); + } + return ret; +} + +/******************************************************************* + * + * @brief Process statistics indication from MAC + * + * @details + * + * Function : DuProcMacStatsInd + * + * Functionality: Processes statistics indication from MAC. + * + * @params[in] + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t DuProcMacStatsInd(Pst *pst, MacStatsInd *statsInd) +{ + uint8_t ret = RFAILED; + + if(statsInd) + { +#ifdef DEBUG_PRINT + DU_LOG("\nDEBUG --> DU_APP : DuProcMacStatsInd: Received Statistics Indication"); + DU_LOG("\n Subscription Id [%ld]", statsInd->subscriptionId); + DU_LOG("\n Group Id [%d]", statsInd->groupId); + for(int idx = 0; idx < statsInd->numStats; idx++) + { + DU_LOG("\n Meas type [%d] Meas Value [%lf]", statsInd->measuredStatsList[idx].type,\ + statsInd->measuredStatsList[idx].value); + } +#endif + + /* Extract statistics from statistics indication message and store in E2 DB */ + if((ret = e2ProcStatsInd(statsInd)) != ROK) + { + DU_LOG("\nINFO --> DU_APP : Failed in %s at line %d", __func__, __LINE__); + } + + /* Free statistics indication */ + DU_FREE_SHRABL_BUF(pst->region, pst->pool, statsInd, sizeof(MacStatsInd)); + } + else + { + DU_LOG("\nINFO --> DU_APP : DuProcMacStatsInd: Received NULL Pointer"); + } + return ret; +} + +/******************************************************************* + * + * @brief Process statistics delete response from MAC + * + * @details + * + * Function : DuProcMacStatsDeleteRsp + * + * Functionality: Processes statistics delete response + * from MAC. + + * @params[in] + * Pst Information + * Mac stats delete rsp + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ + +uint8_t DuProcMacStatsDeleteRsp(Pst *pst, MacStatsDeleteRsp *statsDeleteRsp) +{ + uint8_t ret = RFAILED; + DU_LOG("\nINFO --> DU_APP : DuProcMacStatsDeleteRsp: Received Statistics Response from MAC"); + + if(statsDeleteRsp) + { + if((ret = e2ProcStatsDeleteRsp(statsDeleteRsp)) != ROK) + { + DU_LOG("\nINFO --> DU_APP : Failed in %s at line %d", __func__, __LINE__); + } + DU_FREE_SHRABL_BUF(pst->region, pst->pool, statsDeleteRsp, sizeof(MacStatsDeleteRsp)); + } + else + { + DU_LOG("\nERROR --> DU_APP : DuProcMacStatsDeleteRsp: Received NULL Pointer"); + } + return ret; +} + +/******************************************************************* + * + * @brief Send Statistics delete req to MAC + * + * @details + * + * Function : BuildAndSendStatsDeleteReqToMac() + * + * Functionality: Send Statistics delete req To Mac + * + * @params[in] + * Subscription Info + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t BuildAndSendStatsDeleteReqToMac(RicSubscription *ricSubscriptionInfo) +{ + Pst pst; + E2FailureCause failureCause; + MacStatsDeleteReq *macStatsDelete = NULLP; + + /* Fill MAC statistics delete */ + DU_ALLOC_SHRABL_BUF(macStatsDelete, sizeof(MacStatsDeleteReq)); + if(macStatsDelete == NULLP) + { + DU_LOG("\nERROR --> DU_APP : Memory allocation failed for macStatsDelete in BuildAndSendStatsDeleteReqToMac"); + failureCause.causeType = E2_MISCELLANEOUS; + failureCause.cause = E2_MISCELLANEOUS_CAUSE_UNSPECIFIED; + + if(BuildAndSendRicSubscriptionDeleteFailure(ricSubscriptionInfo->ranFuncId, ricSubscriptionInfo->requestId, failureCause) != ROK) + { + DU_LOG("\nERROR --> E2AP : e2ProcStatsDeleteRsp: failed to build and send ric subs delete failure"); + return RFAILED; + } + return RFAILED; + } + + /* Generate subscription ID using RIC Request ID and RAN Function ID */ + encodeSubscriptionId(&macStatsDelete->subscriptionId, ricSubscriptionInfo->ranFuncId, ricSubscriptionInfo->requestId); + + DU_LOG("\nDEBUG --> DU_APP: Sending Statistics delete req to MAC "); + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_STATS_DELETE_REQ); + + if( (*packMacStatsDeleteReqOpts[pst.selector])(&pst, macStatsDelete) != ROK) + { + DU_LOG("\nERROR --> DU_APP: Failed to send Statistics delete req to MAC"); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macStatsDelete, sizeof(MacStatsDeleteReq)); + return RFAILED; + } + + return ROK; +} + + +/******************************************************************* + * + * @brief Statistics delete to DU layers + * + * @details + * + * Function : BuildAndSendStatsDeleteReq() + * + * Functionality: Statistics delete to DU layers + * + * @params[in] Subscription Info + * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t BuildAndSendStatsDeleteReq(RicSubscription *ricSubscriptionInfo) +{ + /* Build and sent subscription information to MAC in Statistics delete */ + if(BuildAndSendStatsDeleteReqToMac(ricSubscriptionInfo) != ROK) + { + DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsDeleteReqToMac()"); + return RFAILED; + } + return ROK; +} + /********************************************************************** End of file **********************************************************************/