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=ca5c9e5f39191f8e02779e321ae41b09b111e39e;hpb=904a5d446b480d71da1bf81f892bab86ab365ce6;p=o-du%2Fl2.git diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index ca5c9e5f3..9f3b50c92 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -29,6 +29,7 @@ #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" @@ -65,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[] = { @@ -109,6 +111,13 @@ DuMacStatsReqFunc packMacStatsReqOpts[]= 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 * @@ -2093,70 +2102,34 @@ uint8_t DuProcRlcSliceMetrics(Pst *pst, SlicePmList *sliceStats) * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendStatsReqToMac(MacStatsReq duMacStatsReq) +uint8_t BuildAndSendStatsReqToMac(RicSubscription *ricSubscriptionInfo) { Pst pst; MacStatsReq *macStatsReq = NULLP; - - DU_LOG("\nINFO --> DU_APP : Builds Statistics Request to send to MAC"); + /* 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; } - else - { - memcpy(macStatsReq, &duMacStatsReq, sizeof(MacStatsReq)); - - FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_STATISTICS_REQ); + /* 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 "); - if( (*packMacStatsReqOpts[pst.selector])(&pst, macStatsReq) == RFAILED) - { - DU_LOG("\nERROR --> DU_APP: Failed to send Statistics Request to MAC"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, macStatsReq, sizeof(MacStatsReq)); - return RFAILED; - } - } - return ROK; -} - -/******************************************************************* - * - * @brief Fetch statistics details from Action Definition Format 1 - * - * @details - * - * Function : FetchStatsFromActionDefFormat1() - * - * Functionality: Fetch statistics details from Action - * Definition Format 1 received in an E2 message from - * RIC. - * - * @params[in] ActionDefFormat1 - * - * @return Statistics - * - * ****************************************************************/ -Statistics FetchStatsFromActionDefFormat1(ActionDefFormat1 format1) -{ - Statistics stats; + FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_STATISTICS_REQ); - /* TODO : When E2AP subscription procedure is implemented: - * Measurement info list is traveresed - * Based on KPI type, stats.macStatsReq or stats.rlcstatsReq is filled */ + if( (*packMacStatsReqOpts[pst.selector])(&pst, macStatsReq) == ROK) + return ROK; - /* Hardcoding values for now for testing purpose - * Will be removed in next gerrit */ - stats.macStatsReq.numStats = 2; - stats.macStatsReq.statsList[0].type = MAC_DL_TOTAL_PRB_USAGE; - stats.macStatsReq.statsList[0].periodicity = 100; - stats.macStatsReq.statsList[1].type = MAC_UL_TOTAL_PRB_USAGE; - stats.macStatsReq.statsList[1].periodicity = 100; + DU_LOG("\nERROR --> DU_APP: Failed to send Statistics Request to MAC"); + } - return stats; + 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; } /******************************************************************* @@ -2171,29 +2144,16 @@ Statistics FetchStatsFromActionDefFormat1(ActionDefFormat1 format1) * reporting configuration. If so, send the update to * respective layer. * - * @params[in] + * @params[in] Subscription Info * * @return ROK - success * RFAILED - failure * * ****************************************************************/ -uint8_t BuildAndSendStatsReq(ActionDefinition subscribedAction) +uint8_t BuildAndSendStatsReq(RicSubscription *ricSubscriptionInfo) { - Statistics stats; - - switch(subscribedAction.styleType) - { - case 1: - stats = FetchStatsFromActionDefFormat1(subscribedAction.choice.format1); - case 2: - case 3: - case 4: - case 5: - default: - break; - } - - if(BuildAndSendStatsReqToMac(stats.macStatsReq) != ROK) + /* Build and sent subscription information to MAC in Statistics Request */ + if(BuildAndSendStatsReqToMac(ricSubscriptionInfo) != ROK) { DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsReqToMac()"); return RFAILED; @@ -2202,18 +2162,13 @@ uint8_t BuildAndSendStatsReq(ActionDefinition subscribedAction) /* TODO : When KPI collection from RLC will be supported, this function will be * called to configure KPIs to be colled */ #if 0 - if(BuildAndSendStatsReqToRlc(macStatsReq->rlcStatsReq) != ROK) + if(BuildAndSendStatsReqToRlc() != ROK) { - DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsReqToRlc()"); - return RFAILED; + DU_LOG("\nERROR --> DU_APP : Failed at BuildAndSendStatsReqToRlc()"); + return RFAILED; } #endif - /* TODO : In the caller of this function, change ActionDefinition->action - * from CONFIG_ADD to CONFIG_UNKNOWN once configuration is sent - * To be done in next gerrit*/ - - return ROK; } @@ -2238,24 +2193,42 @@ uint8_t BuildAndSendStatsReq(ActionDefinition subscribedAction) * ****************************************************************/ uint8_t DuProcMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp) { + uint8_t ret = RFAILED; + DU_LOG("\nINFO --> DU_APP : DuProcMacStatsRsp: Received Statistics Response from MAC"); + if(statsRsp) { - if(statsRsp->rsp == MAC_DU_APP_RSP_OK) +#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("\nINFO --> DU_APP : Statistics configured successfully"); - /* TODO : Start Reporting period timer for this subscription request - * To be handled in next gerrit */ + DU_LOG("\n Group Id [%d]", statsRsp->statsGrpAcceptedList[idx]); } - else + + DU_LOG("\n Number of Rejected Groups [%d]", statsRsp->numGrpRejected); + for(idx=0; idxnumGrpRejected; idx++) { - DU_LOG("\nERROR --> DU_APP : Statistics configuration failed with cause [%d]", statsRsp->cause); + 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)); - return ROK; } - - DU_LOG("\nINFO --> DU_APP : DuProcMacStatsRsp: Received NULL Pointer"); - return RFAILED; + else + { + DU_LOG("\nERROR --> DU_APP : DuProcMacStatsRsp: Received NULL Pointer"); + } + return ret; } /******************************************************************* @@ -2276,26 +2249,157 @@ uint8_t DuProcMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp) * ****************************************************************/ 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("\nMeasurement type [%d] Measurement Value [%lf]", statsInd->type, statsInd->value); + 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 - /* TODO : When stats indication is received - * DU APP searches for the message type in E2AP RIC subscription database - * and stores in the value in the list of subscribed measurements - * - * This will be implemented in next gerrit. - */ + /* 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)); - return ROK; } + 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); - DU_LOG("\nINFO --> DU_APP : DuProcMacStatsInd: Received NULL Pointer"); - return RFAILED; + 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; } /**********************************************************************