From f3638e5eecd563d0a02488afe54a6bf19b52ffad Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Mon, 6 Mar 2023 23:22:19 +0530 Subject: [PATCH] [Epic-ID: ODUHIGH-488][Task-ID: ODUHIGH-499] WG8 Alignment | Slice Cfg and Recfg Rsp Signed-off-by: lal.harshita Change-Id: Ia2df792d6b9c75e1446e4d339eeab77ccfc1021c Signed-off-by: lal.harshita --- src/5gnrmac/mac_cfg_hdl.c | 138 +++++---------------- src/5gnrmac/mac_msg_hdl.c | 21 ++-- src/5gnrsch/sch.c | 291 ++++++++++++++++++--------------------------- src/5gnrsch/sch.h | 8 +- src/5gnrsch/sch_ue_mgr.c | 34 +++--- src/cm/du_app_mac_inf.h | 16 +-- src/cm/mac_sch_interface.h | 14 +-- src/du_app/du_msg_hdl.c | 86 ++++---------- 8 files changed, 207 insertions(+), 401 deletions(-) diff --git a/src/5gnrmac/mac_cfg_hdl.c b/src/5gnrmac/mac_cfg_hdl.c index cd3b9a543..69591c488 100644 --- a/src/5gnrmac/mac_cfg_hdl.c +++ b/src/5gnrmac/mac_cfg_hdl.c @@ -755,60 +755,6 @@ void freeMacSliceCfgReq(MacSliceCfgReq *cfgReq,Pst *pst) } } -/** - * @brief fill Mac Slice Config Rsp - * - * @details - * - * Function : fillMacSliceCfgRsp - * - * This function fill Mac Slice Config Rsp - * - * @param[in] SchSliceCfgRsp *sliceCfgRsp, MacSliceCfgRsp *macSliceCfgRsp, - * uint8_t *count - * @return int - * -# ROK - **/ -uint8_t fillMacSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp, MacSliceCfgRsp *macSliceCfgRsp) -{ - - bool sliceFound = false; - uint8_t cfgIdx = 0; - - macSliceCfgRsp->numSliceCfgRsp = schSliceCfgRsp->numSliceCfgRsp; - MAC_ALLOC_SHRABL_BUF(macSliceCfgRsp->listOfSliceCfgRsp, macSliceCfgRsp->numSliceCfgRsp* sizeof(MacSliceRsp*)); - if(macSliceCfgRsp->listOfSliceCfgRsp == NULLP) - { - DU_LOG("\nERROR --> MAC : Memory allocation failedi in fillMacSliceCfgRsp"); - return RFAILED; - } - - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp; cfgIdx++) - { - sliceFound = false; - if(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) - { - sliceFound = true; - } - - MAC_ALLOC_SHRABL_BUF(macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - if(macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx] == NULLP) - { - DU_LOG("\nERROR --> MAC : Memory allocation failedi in fillMacSliceCfgRsp"); - return RFAILED; - } - - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai = schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai; - if(sliceFound == true) - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = MAC_DU_APP_RSP_OK; - else - { - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = MAC_DU_APP_RSP_NOK; - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->cause = SLICE_NOT_PRESENT; - } - } - return ROK; -} /** * @brief send slice cfg response to duapp. @@ -832,35 +778,6 @@ uint8_t MacSendSliceConfigRsp(MacSliceCfgRsp *macSliceCfgRsp) return (*macDuSliceCfgRspOpts[rspPst.selector])(&rspPst, macSliceCfgRsp); } -/** - * @brief free the slice cfg rsp received from sch. - * - * @details - * - * Function : freeSchSliceCfgRsp - * - * This free the slice cfg rsp received from sch - * - * @param[in] SchSliceCfgRsp *sliceCfgrsp - * @return int - * -# ROK - **/ -void freeSchSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp) -{ - uint8_t cfgIdx = 0; - - if(schSliceCfgRsp) - { - if(schSliceCfgRsp->numSliceCfgRsp) - { - for(cfgIdx = 0; cfgIdx< schSliceCfgRsp->numSliceCfgRsp; cfgIdx++) - { - MAC_FREE(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - } - MAC_FREE(schSliceCfgRsp->listOfSliceCfgRsp, schSliceCfgRsp->numSliceCfgRsp * sizeof(SliceRsp*)); - } - } -} /** * @brief Mac process the slice cfg rsp received from sch. @@ -876,6 +793,7 @@ void freeSchSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp) * @return int * -# ROK **/ + uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceCfgRsp) { MacSliceCfgRsp *macSliceCfgRsp = NULLP; @@ -888,33 +806,32 @@ uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceCfgRsp) DU_LOG("\nERROR --> MAC : Failed to allocate memory in MacProcSchSliceCfgRsp"); return RFAILED; } - if(schSliceCfgRsp->listOfSliceCfgRsp) + macSliceCfgRsp->snssai = schSliceCfgRsp->snssai; + if(schSliceCfgRsp->rsp == RSP_OK) + macSliceCfgRsp->rsp = MAC_DU_APP_RSP_OK; + else { - if(fillMacSliceCfgRsp(schSliceCfgRsp, macSliceCfgRsp) != ROK) - { - DU_LOG("\nERROR --> MAC : Failed to fill the slice cfg response"); - return RFAILED; - } - MacSendSliceConfigRsp(macSliceCfgRsp); + macSliceCfgRsp->rsp = MAC_DU_APP_RSP_NOK; } - freeSchSliceCfgRsp(schSliceCfgRsp); + macSliceCfgRsp->cause = schSliceCfgRsp->cause; + MacSendSliceConfigRsp(macSliceCfgRsp); } return ROK; } /** -* @brief send slice cfg response to duapp. -* -* @details -* -* Function : MacSendSliceReconfigRsp -* -* sends slice cfg response to duapp -* -* @param[in] MacSliceRecfgRsp macSliceRecfgRsp -* @return int -* -# ROK -**/ + * @brief send slice cfg response to duapp. + * + * @details + * + * Function : MacSendSliceReconfigRsp + * + * sends slice cfg response to duapp + * + * @param[in] MacSliceRecfgRsp macSliceRecfgRsp + * @return int + * -# ROK + **/ uint8_t MacSendSliceReconfigRsp(MacSliceRecfgRsp *macSliceRecfgRsp) { Pst rspPst; @@ -952,16 +869,15 @@ uint8_t MacProcSchSliceRecfgRsp(Pst *pst, SchSliceRecfgRsp *schSliceRecfgRsp) return RFAILED; } - if(schSliceRecfgRsp->listOfSliceCfgRsp) + macSliceRecfgRsp->snssai = schSliceRecfgRsp->snssai; + if(schSliceRecfgRsp->rsp == RSP_OK) + macSliceRecfgRsp->rsp = MAC_DU_APP_RSP_OK; + else { - if(fillMacSliceCfgRsp(schSliceRecfgRsp, macSliceRecfgRsp) != ROK) - { - DU_LOG("\nERROR --> MAC : Failed to fill the slice Recfg response"); - return RFAILED; - } - MacSendSliceReconfigRsp(macSliceRecfgRsp); + macSliceRecfgRsp->rsp = MAC_DU_APP_RSP_NOK; } - freeSchSliceCfgRsp(schSliceRecfgRsp); + macSliceRecfgRsp->cause = schSliceRecfgRsp->cause; + MacSendSliceReconfigRsp(macSliceRecfgRsp); } return ROK; } diff --git a/src/5gnrmac/mac_msg_hdl.c b/src/5gnrmac/mac_msg_hdl.c index 0369b2c5a..6939b8c3b 100644 --- a/src/5gnrmac/mac_msg_hdl.c +++ b/src/5gnrmac/mac_msg_hdl.c @@ -842,8 +842,8 @@ uint8_t FapiMacUciInd(Pst *pst, UciInd *macUciInd) **********************************************************************/ uint8_t fillSliceCfgInfo(SchSliceCfgReq *schSliceCfgReq, MacSliceCfgReq *macSliceCfgReq) { - uint8_t cfgIdx = 0, memberListIdx = 0, totalSliceCfgRecvd = 0; - + uint8_t rrmPolicyIdx= 0,cfgIdx = 0, memberListIdx = 0, totalSliceCfgRecvd = 0; + if(macSliceCfgReq->listOfRrmPolicy) { for(cfgIdx = 0; cfgIdxnumOfRrmPolicy; cfgIdx++) @@ -858,11 +858,13 @@ uint8_t fillSliceCfgInfo(SchSliceCfgReq *schSliceCfgReq, MacSliceCfgReq *macSlic DU_LOG("\nERROR --> MAC : Memory allocation failed in fillSliceCfgInfo"); return RFAILED; } - for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) + cfgIdx = 0; + + for(rrmPolicyIdx = 0; rrmPolicyIdxnumOfRrmPolicy; rrmPolicyIdx++) { - for(memberListIdx = 0; memberListIdxlistOfRrmPolicy[cfgIdx]->numOfRrmPolicyMem; memberListIdx++) + for(memberListIdx = 0; memberListIdxlistOfRrmPolicy[rrmPolicyIdx]->numOfRrmPolicyMem; memberListIdx++) { - if(macSliceCfgReq->listOfRrmPolicy[cfgIdx]->rRMPolicyMemberList[memberListIdx]) + if(macSliceCfgReq->listOfRrmPolicy[rrmPolicyIdx]->rRMPolicyMemberList[memberListIdx]) { MAC_ALLOC(schSliceCfgReq->listOfSlices[cfgIdx], sizeof(SchRrmPolicyOfSlice)); @@ -872,11 +874,12 @@ uint8_t fillSliceCfgInfo(SchSliceCfgReq *schSliceCfgReq, MacSliceCfgReq *macSlic return RFAILED; } - memcpy(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, &macSliceCfgReq->listOfRrmPolicy[cfgIdx]->rRMPolicyMemberList[memberListIdx]->snssai, sizeof(Snssai)); + memcpy(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, &macSliceCfgReq->listOfRrmPolicy[rrmPolicyIdx]->rRMPolicyMemberList[memberListIdx]->snssai, sizeof(Snssai)); - schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.maxRatio = macSliceCfgReq->listOfRrmPolicy[cfgIdx]->policyRatio.maxRatio; - schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.minRatio = macSliceCfgReq->listOfRrmPolicy[cfgIdx]->policyRatio.minRatio; - schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.dedicatedRatio = macSliceCfgReq->listOfRrmPolicy[cfgIdx]->policyRatio.dedicatedRatio; + schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.maxRatio = macSliceCfgReq->listOfRrmPolicy[rrmPolicyIdx]->policyRatio.maxRatio; + schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.minRatio = macSliceCfgReq->listOfRrmPolicy[rrmPolicyIdx]->policyRatio.minRatio; + schSliceCfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo.dedicatedRatio = macSliceCfgReq->listOfRrmPolicy[rrmPolicyIdx]->policyRatio.dedicatedRatio; + cfgIdx++; } } } diff --git a/src/5gnrsch/sch.c b/src/5gnrsch/sch.c index 6af894443..cc2af0e97 100644 --- a/src/5gnrsch/sch.c +++ b/src/5gnrsch/sch.c @@ -1720,150 +1720,105 @@ void SchSendSliceCfgRspToMac(Inst inst, SchSliceCfgRsp sliceCfgRsp) MacMessageRouter(&rspPst, (void *)&sliceCfgRsp); } + /******************************************************************************* * - * @brief fill slice configuration response + * @brief This function is used to store or modify the slice configuration Sch DB * * @details * - * Function : fillSliceCfgRsp + * Function : addOrModifySliceCfgInSchDb * * Functionality: - * fill slice configuration response + * function is used to store or modify the slice configuration Sch DB * - * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count + * @params[in] SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, + * SchSliceCfgRsp cfgRsp, uint8_t count * * @return * ROK - Success * RFAILED - Failure * * ********************************************************************************/ -uint8_t fillSliceCfgRsp(bool sliceRecfg, SchSliceCfg *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq, SchSliceCfgRsp *schSliceCfgRsp, uint8_t *count) +uint8_t addSliceCfgInSchDb(CmLListCp *sliceCfgInDb, SchRrmPolicyOfSlice *cfgReq) { - bool sliceFound = false; - uint8_t cfgIdx = 0, sliceIdx = 0, plmnIdx = 0; + SchRrmPolicyOfSlice *sliceToStore; - schSliceCfgRsp->numSliceCfgRsp = schSliceCfgReq->numOfConfiguredSlice; - SCH_ALLOC(schSliceCfgRsp->listOfSliceCfgRsp, schSliceCfgRsp->numSliceCfgRsp * sizeof(SliceRsp*)); - if(schSliceCfgRsp->listOfSliceCfgRsp == NULLP) + SCH_ALLOC(sliceToStore, sizeof(SchRrmPolicyOfSlice)); + if(sliceToStore) { - DU_LOG("\nERROR --> SCH : Memory allocation failed at fillSliceCfgRsp"); - return RFAILED; + memcpy(&sliceToStore->snssai, &cfgReq->snssai, sizeof(Snssai)); + memcpy(&sliceToStore->rrmPolicyRatioInfo, &cfgReq->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio)); + addNodeToLList(sliceCfgInDb, sliceToStore, NULL); } - - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp ; cfgIdx++) + else { - sliceFound = false; - /* Here comparing the slice cfg request with the slice stored in cellCfg */ - if(sliceRecfg != true) - { - for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) - { - for(sliceIdx = 0; sliceIdxcellCfg.plmnInfoList[plmnIdx].numSliceSupport; sliceIdx++) - { - if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, cellCb->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai))) - { - (*count)++; - sliceFound = true; - break; - } - } - if(sliceFound == true) - { - break; - } - } - } - else - { - /* Here comparing the slice cfg request with the slice stored in SchDb */ - if(storedSliceCfg->listOfSlices) - { - for(sliceIdx = 0; sliceIdxnumOfSliceConfigured; sliceIdx++) - { - if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, &storedSliceCfg->listOfSlices[sliceIdx]->snssai,\ - sizeof(Snssai))) - { - (*count)++; - sliceFound = true; - break; - } - } - } - } - - SCH_ALLOC(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - if(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx] == NULLP) - { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in fillSliceCfgRsp"); - return RFAILED; - } - - - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai = schSliceCfgReq->listOfSlices[cfgIdx]->snssai; - if(sliceFound == true) - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = RSP_OK; - else - { - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = RSP_NOK; - schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->cause = SLICE_NOT_FOUND; - } + DU_LOG("\nERROR --> SCH : Memory allocation failed in addOrModifySliceCfgInSchDb"); + return RFAILED; } return ROK; } /******************************************************************************* * - * @brief This function is used to store the slice configuration Sch DB + * @brief fill slice configuration response * * @details * - * Function : addSliceCfgInSchDb + * Function : fillSliceCfgRsp * * Functionality: - * function is used to store the slice configuration Sch DB + * fill slice configuration response * - * @params[in] SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, - * SchSliceCfgRsp cfgRsp, uint8_t count + * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count * * @return * ROK - Success * RFAILED - Failure * * ********************************************************************************/ -uint8_t addSliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceCfgReq *cfgReq, SchSliceCfgRsp cfgRsp, uint8_t count) +uint8_t fillSliceCfgRsp(Inst inst, CmLListCp *storedSliceCfg, SchCellCb *cellCb, SchSliceCfgReq *schSliceCfgReq) { - uint8_t cfgIdx = 0, sliceIdx = 0; - - if(count) - { - storeSliceCfg->numOfSliceConfigured = count; - SCH_ALLOC(storeSliceCfg->listOfSlices, storeSliceCfg->numOfSliceConfigured * sizeof(SchRrmPolicyOfSlice*)); - if(storeSliceCfg->listOfSlices == NULLP) - { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in addSliceCfgInSchDb"); - return RFAILED; - } + SchMacRsp sliceFound; + uint8_t cfgIdx = 0, sliceIdx = 0, plmnIdx = 0, ret =ROK; + SchSliceCfgRsp schSliceCfgRsp; - for(cfgIdx = 0; cfgIdxnumOfSliceConfigured; cfgIdx++) + for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) + { + sliceFound = RSP_NOK; + /* Here comparing the slice cfg request with the slice stored in cellCfg */ + for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) { - if(cfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) + for(sliceIdx = 0; sliceIdxcellCfg.plmnInfoList[plmnIdx].numSliceSupport; sliceIdx++) { - SCH_ALLOC(storeSliceCfg->listOfSlices[sliceIdx], sizeof(SchRrmPolicyOfSlice)); - if(storeSliceCfg->listOfSlices[sliceIdx] == NULLP) + /* If we find the SliceCfgReq's SNSSAI in CellCb's SNSSAI DB, we mark this slice as configured and add it to Sch's DB. */ + if(!memcmp(&schSliceCfgReq->listOfSlices[cfgIdx]->snssai, cellCb->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai))) { - DU_LOG("\nERROR --> SCH : Failed to allocate memory in addSliceCfgInSchDb"); - return RFAILED; + if(addSliceCfgInSchDb(storedSliceCfg, schSliceCfgReq->listOfSlices[cfgIdx]) == ROK) + { + sliceFound = RSP_OK; + schSliceCfgRsp.cause = SLICE_CONFIGURED; + } + else + { + DU_LOG("\nERROR --> SCH : Failed to store slice configuration in SchDb"); + schSliceCfgRsp.cause = RESOURCE_NOT_AVAILABLE; + ret = RFAILED; + } + plmnIdx = MAX_PLMN; + break; } - - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->snssai, &cfgReq->listOfSlices[sliceIdx]->snssai, sizeof(Snssai)); - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, &cfgReq->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, - sizeof(SchRrmPolicyRatio)); - sliceIdx++; } } + + if((sliceFound == RSP_NOK) && (schSliceCfgRsp.cause != RESOURCE_NOT_AVAILABLE)) + schSliceCfgRsp.cause = SLICE_NOT_FOUND; + + schSliceCfgRsp.snssai = schSliceCfgReq->listOfSlices[cfgIdx]->snssai; + schSliceCfgRsp.rsp = sliceFound; + SchSendSliceCfgRspToMac(inst, schSliceCfgRsp); } - return ROK; + return ret; } /******************************************************************************* @@ -1923,9 +1878,8 @@ void freeSchSliceCfgReq(SchSliceCfgReq *sliceCfgReq) * ********************************************************************************/ uint8_t SchProcSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq) { - uint8_t count = 0; + uint8_t ret = ROK; Inst inst = pst->dstInst - SCH_INST_START; - SchSliceCfgRsp sliceCfgRsp; DU_LOG("\nINFO --> SCH : Received Slice Cfg request from MAC"); if(schSliceCfgReq) @@ -1933,77 +1887,22 @@ uint8_t SchProcSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq) if(schSliceCfgReq->listOfSlices) { /* filling the slice configuration response of each slice */ - if(fillSliceCfgRsp(false, NULLP, schCb[inst].cells[0], schSliceCfgReq, &sliceCfgRsp, &count) != ROK) + if(fillSliceCfgRsp(inst, &schCb[inst].sliceCfg, schCb[inst].cells[0], schSliceCfgReq) != ROK) { DU_LOG("\nERROR --> SCH : Failed to fill the slice cfg rsp"); - return RFAILED; - } - - if(addSliceCfgInSchDb(&schCb[inst].sliceCfg, schSliceCfgReq, sliceCfgRsp, count) != ROK) - { - DU_LOG("\nERROR --> SCH : Failed to add slice cfg in sch database"); - return RFAILED; + ret = RFAILED; } freeSchSliceCfgReq(schSliceCfgReq); - SchSendSliceCfgRspToMac(inst, sliceCfgRsp); } } else { DU_LOG("\nERROR --> SCH : Received SchSliceCfgReq is NULL"); + ret = RFAILED; } - return ROK; + return ret; } -/******************************************************************************* - * - * @brief This function is used to store the slice reconfiguration Sch DB - * - * @details - * - * Function : modifySliceCfgInSchDb - * - * Functionality: - * function is used to store the slice re configuration Sch DB - * - * @params[in] Pst *pst, SchSliceCfgReq *schSliceCfgReq - * - * @return - * ROK - Success - * RFAILED - Failure - * - * ********************************************************************************/ -uint8_t modifySliceCfgInSchDb(SchSliceCfg *storeSliceCfg, SchSliceRecfgReq *recfgReq, SchSliceRecfgRsp recfgRsp, uint8_t count) -{ - uint8_t cfgIdx = 0, sliceIdx = 0; - - if(count) - { - if(storeSliceCfg->listOfSlices == NULLP) - { - DU_LOG("\nINFO --> SCH : Memory allocation failed in modifySliceCfgInSchDb"); - return RFAILED; - } - - for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) - { - if(recfgRsp.listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) - { - for(sliceIdx = 0; sliceIdxnumOfSliceConfigured; sliceIdx++) - { - if(!memcmp(&storeSliceCfg->listOfSlices[sliceIdx]->snssai, &recfgReq->listOfSlices[cfgIdx]->snssai, sizeof(Snssai))) - { - memcpy(&storeSliceCfg->listOfSlices[sliceIdx]->rrmPolicyRatioInfo, &recfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo, - sizeof(SchRrmPolicyRatio)); - break; - } - } - } - } - } - freeSchSliceCfgReq(recfgReq); - return ROK; -} /******************************************************************************* * * @brief This function is used to send Slice re Cfg rsp to MAC @@ -2030,6 +1929,61 @@ void SchSendSliceRecfgRspToMac(Inst inst, SchSliceRecfgRsp schSliceRecfgRsp) MacMessageRouter(&rspPst, (void *)&schSliceRecfgRsp); } + +/******************************************************************************* + * + * @brief fill slice configuration response + * + * @details + * + * Function : fillSliceRecfgRsp + * + * Functionality: fill slice reconfiguration response + * + * @params[in] SchCellCb, SchSliceCfgReq, SchSliceCfgRsp,uint8_t count + * + * @return + * ROK - Success + * RFAILED - Failure + * + * ********************************************************************************/ + +uint8_t fillSliceRecfgRsp(Inst inst, CmLListCp *storedSliceCfg, SchSliceRecfgReq *schSliceRecfgReq) +{ + SchMacRsp sliceFound; + uint8_t cfgIdx = 0; + SchRrmPolicyOfSlice *rrmPolicyOfSlices; + SchSliceRecfgRsp schSliceRecfgRsp; + + for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) + { + sliceFound = RSP_NOK; + /* Here comparing the slice recfg request with the StoredSliceCfg */ + CmLList *sliceCfg = storedSliceCfg->first; + + while(sliceCfg) + { + rrmPolicyOfSlices = (SchRrmPolicyOfSlice*)sliceCfg->node; + + if(rrmPolicyOfSlices && (memcmp(&schSliceRecfgReq->listOfSlices[cfgIdx]->snssai, &(rrmPolicyOfSlices->snssai), sizeof(Snssai)) == 0)) + { + memcpy(&rrmPolicyOfSlices->rrmPolicyRatioInfo, &schSliceRecfgReq->listOfSlices[cfgIdx]->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio)); + sliceFound = RSP_OK; + break; + } + sliceCfg = sliceCfg->next; + } + + schSliceRecfgRsp.snssai = schSliceRecfgReq->listOfSlices[cfgIdx]->snssai; + schSliceRecfgRsp.rsp = sliceFound; + if(schSliceRecfgRsp.rsp == RSP_OK) + schSliceRecfgRsp.cause = SLICE_RECONFIGURED; + else + schSliceRecfgRsp.cause = SLICE_NOT_FOUND; + SchSendSliceRecfgRspToMac(inst, schSliceRecfgRsp); + } + return ROK; +} /******************************************************************************* * * @brief This function is used to store the slice reconfiguration Sch DB @@ -2050,9 +2004,8 @@ void SchSendSliceRecfgRspToMac(Inst inst, SchSliceRecfgRsp schSliceRecfgRsp) * ********************************************************************************/ uint8_t SchProcSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq) { - uint8_t count = 0; + uint8_t ret = ROK; Inst inst = pst->dstInst - SCH_INST_START; - SchSliceRecfgRsp schSliceRecfgRsp; DU_LOG("\nINFO --> SCH : Received Slice ReCfg request from MAC"); if(schSliceRecfgReq) @@ -2060,26 +2013,20 @@ uint8_t SchProcSliceRecfgReq(Pst *pst, SchSliceRecfgReq *schSliceRecfgReq) if(schSliceRecfgReq->listOfSlices) { /* filling the slice configuration response of each slice */ - if(fillSliceCfgRsp(true, &schCb[inst].sliceCfg, NULLP, schSliceRecfgReq, &schSliceRecfgRsp, &count) != ROK) + if(fillSliceRecfgRsp(inst, &schCb[inst].sliceCfg, schSliceRecfgReq) != ROK) { DU_LOG("\nERROR --> SCH : Failed to fill sch slice cfg response"); - return RFAILED; + ret = RFAILED; } - - /* Modify the slice configuration stored in schCb */ - if(modifySliceCfgInSchDb(&schCb[inst].sliceCfg, schSliceRecfgReq, schSliceRecfgRsp, count) != ROK) - { - DU_LOG("\nERROR --> SCH : Failed to modify slice cfg of SchDb"); - return RFAILED; - } - SchSendSliceRecfgRspToMac(inst, schSliceRecfgRsp); + freeSchSliceCfgReq(schSliceRecfgReq); } } else { DU_LOG("\nERROR --> SCH : Received SchSliceRecfgReq is NULL"); + } - return ROK; + return ret; } /**************************************************************************** diff --git a/src/5gnrsch/sch.h b/src/5gnrsch/sch.h index 89c633a5d..dda54989e 100644 --- a/src/5gnrsch/sch.h +++ b/src/5gnrsch/sch.h @@ -642,12 +642,6 @@ typedef struct schCellCb }SchCellCb; -typedef struct schSliceCfg -{ - uint8_t numOfSliceConfigured; - SchRrmPolicyOfSlice **listOfSlices; -}SchSliceCfg; - /** * @brief * Control block for sch @@ -660,7 +654,7 @@ typedef struct schCb CmTqType tmrTq[SCH_TQ_SIZE]; /*!< Timer Task Queue */ SchAllApis allApis[NUM_SCH_TYPE]; /*!node; + if(rrmPolicyOfSlices && (memcmp(snssai, &(rrmPolicyOfSlices->snssai), sizeof(Snssai)) == 0)) { - if(memcmp(snssai, &(sliceCfg.listOfSlices[sliceCfgIdx]->snssai), sizeof(Snssai)) == 0) - { - /*Updating latest RrmPolicy*/ - *rsvdDedicatedPRB = \ - (uint16_t)(((sliceCfg.listOfSlices[sliceCfgIdx]->rrmPolicyRatioInfo.dedicatedRatio)*(MAX_NUM_RB))/100); - *isDedicated = TRUE; - DU_LOG("\nINFO --> SCH : Updated RRM policy, reservedPOOL:%d",*rsvdDedicatedPRB); - } - } - /*case: This LcCtxt is either a Default LC or this LC is part of someother RRM_MemberList*/ - if(*isDedicated != TRUE) - { - DU_LOG("\nINFO --> SCH : This SNSSAI is not a part of this RRMPolicy"); + /*Updating latest RrmPolicy*/ + *rsvdDedicatedPRB = \ + (uint16_t)(((rrmPolicyOfSlices->rrmPolicyRatioInfo.dedicatedRatio)*(MAX_NUM_RB))/100); + *isDedicated = TRUE; + DU_LOG("\nINFO --> SCH : Updated RRM policy, reservedPOOL:%d",*rsvdDedicatedPRB); + break; } + sliceCfg = sliceCfg->next; + } + /*case: This LcCtxt is either a Default LC or this LC is part of someother RRM_MemberList*/ + if(*isDedicated != TRUE) + { + DU_LOG("\nINFO --> SCH : This SNSSAI is not a part of this RRMPolicy"); } return ROK; } diff --git a/src/cm/du_app_mac_inf.h b/src/cm/du_app_mac_inf.h index 8d2980170..998de688d 100644 --- a/src/cm/du_app_mac_inf.h +++ b/src/cm/du_app_mac_inf.h @@ -100,8 +100,10 @@ typedef enum typedef enum { - SLICE_PRESENT, - SLICE_NOT_PRESENT + SLICE_NOT_PRESENT, + SLICE_IS_CONFIGURED, + SLICE_IS_RECONFIGURED, + RESOURCE_DOES_NOT_AVAILABLE }RspReason; typedef enum @@ -1503,12 +1505,12 @@ typedef struct macCellDeleteRsp CellDeleteStatus result; }MacCellDeleteRsp; -typedef struct macSliceRsp +typedef struct macSliceCfgRsp { Snssai snssai; MacRsp rsp; RspReason cause; -}MacSliceRsp; +}MacSliceCfgRsp; typedef struct rrmPolicyRatio { @@ -1537,12 +1539,6 @@ typedef struct macSliceCfgReq MacSliceRrmPolicy **listOfRrmPolicy; }MacSliceCfgReq; -typedef struct macSliceCfgRsp -{ - uint8_t numSliceCfgRsp; - MacSliceRsp **listOfSliceCfgRsp; -}MacSliceCfgRsp; - /*As per ORAN-WG8, Slice Cfg and ReCfg are same structures*/ typedef struct macSliceCfgReq MacSliceRecfgReq; typedef struct macSliceCfgRsp MacSliceRecfgRsp; diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 48f44b438..3870988de 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -135,8 +135,10 @@ typedef enum typedef enum { - SLICE_FOUND, - SLICE_NOT_FOUND + SLICE_NOT_FOUND, + SLICE_CONFIGURED, + SLICE_RECONFIGURED, + RESOURCE_NOT_AVAILABLE }RspCause; typedef enum @@ -2023,17 +2025,11 @@ typedef struct schSliceCfgReq SchRrmPolicyOfSlice **listOfSlices; }SchSliceCfgReq; -typedef struct sliceRsp +typedef struct schSliceCfgRsp { Snssai snssai; SchMacRsp rsp; RspCause cause; -}SliceRsp; - -typedef struct schSliceCfgRsp -{ - uint8_t numSliceCfgRsp; - SliceRsp **listOfSliceCfgRsp; }SchSliceCfgRsp; /*As per ORAN-WG8, Slice Cfg and Recfg are same structures*/ diff --git a/src/du_app/du_msg_hdl.c b/src/du_app/du_msg_hdl.c index ca148c86e..e5b2f79d8 100644 --- a/src/du_app/du_msg_hdl.c +++ b/src/du_app/du_msg_hdl.c @@ -1861,40 +1861,6 @@ uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData) return ROK; } -/******************************************************************* - * - * @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 @@ -1913,22 +1879,18 @@ 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)); } return ROK; } @@ -2038,28 +2000,20 @@ uint8_t BuildAndSendSliceRecfgReq() * 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 "); + } + else + { + DU_LOG("\nERROR --> DU_APP : Slice not available"); } - duFreeSliceCfgRsp(pst, reCfgRsp); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, recfgRsp, sizeof(MacSliceCfgRsp)); } return ROK; } -- 2.16.6