X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=edc1afef57546a5f93cc72d8587e868086c53f68;hb=3364273455756ae289662a274d5bcbf391ecd58e;hp=ef4a41c61028b197c812c69bad2f37a25a6f2bd3;hpb=9edb21c45713c87a3434d4511ef7c340de8567ea;p=o-du%2Fl2.git diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index ef4a41c61..edc1afef5 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -109,6 +109,49 @@ extern StartupConfig g_cfg; DuCfgParams duCfgParam; +/****************************************************************** + * + * @brief Function to fetch lcId based on DRB Id + * + * @details + * + * Function : fetchLcId + * + * @params[in] drbId + * + * Functionality: Function to fetch lcId based on DRB Id + * + * Returns: lcId - SUCCESS + * RFAILED - FAILURE + *****************************************************************/ + +uint8_t fetchLcId(uint8_t drbId) +{ + uint8_t cellIdx = 0, ueIdx = 0, lcIdx = 0, numLcs = 0, lcId = 0; + + for(cellIdx = 0; cellIdx < MAX_NUM_CELL; cellIdx++) + { + for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) + { + if(duCb.actvCellLst[cellIdx] != NULLP) + { + numLcs = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.numLcs; + for(lcIdx = 0; lcIdx < numLcs; lcIdx++) + { + if(duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].rbId == drbId && \ + duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].rbType == RB_TYPE_DRB) + { + lcId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].lcId; + return lcId; + } + } + } + } + } + DU_LOG("\nERROR --> DU_APP: fetchLcId() failed for drbId %d", drbId); + return RFAILED; +} + /************************************************************************ * * @brief Converts enum values into actual value of Poll retransmit timer @@ -12151,7 +12194,7 @@ void freeAperDecodeGnbDuAck(GNBDUConfigurationUpdateAcknowledge_t *gnbDuAck) uint8_t duProcGnbDuCfgUpdAckMsg(uint8_t transId) { uint8_t ieIdx=0, arrIdx=0,ret=ROK; - uint8_t ueId =0 , ueIdx =0; + uint8_t ueId =0 , ueIdx =0, totalActiveUe = 0; uint16_t cellId =0, cellIdx =0, crnti=0; CmLList *f1apPduNode = NULLP; ReservedF1apPduInfo *f1apPduInfo =NULLP; @@ -12203,28 +12246,38 @@ uint8_t duProcGnbDuCfgUpdAckMsg(uint8_t transId) ret = duSendCellDeletReq(cellId); if(ret == RFAILED) { - DU_LOG("ERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): Failed to send cell delete\ + DU_LOG("\nERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): Failed to send cell delete\ request for cellId[%d]", cellId); } } else { - for(ueIdx = 0; ueIdx < duCb.actvCellLst[cellIdx]->numActvUes; ueIdx++) + totalActiveUe = duCb.actvCellLst[cellIdx]->numActvUes; + while(totalActiveUe) { + if(duCb.actvCellLst[cellIdx]->ueCb[ueIdx].ueState != UE_ACTIVE) + { + ueIdx++; + continue; + } + crnti = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].crnti; GET_UE_IDX(crnti,ueId); + /* Sending Ue Context release request only for maximum supporting UEs */ ret = BuildAndSendUeContextReleaseReq(cellId, ueId); if(ret == RFAILED) { - DU_LOG("ERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): Failed to build and send UE delete\ + DU_LOG("\nERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): Failed to build and send UE delete\ request for cellId[%d]", cellId); } + ueIdx++; + totalActiveUe--; } } } else { - DU_LOG("ERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): CellId [%d] not found", cellId); + DU_LOG("\nERROR --> DU_APP : duProcGnbDuCfgUpdAckMsg(): CellId [%d] not found", cellId); ret = RFAILED; } break; @@ -13435,7 +13488,7 @@ uint8_t BuildAndSendUeContextReleaseComplete(uint16_t cellId, uint32_t gnbCuUeF1 break; }while(true); - if(ret == ROK) + if(ret == ROK && (duCb.actvCellLst[cellId-1]->numActvUes == 0)) { duCb.actvCellLst[cellId-1]->cellStatus = DELETION_IN_PROGRESS; ret = duSendCellDeletReq(cellId); @@ -13560,7 +13613,7 @@ uint8_t procF1UeContextReleaseCommand(F1AP_PDU_t *f1apMsg) { for(cellIdx = 0; cellIdx < duCb.numActvCells; cellIdx++) { - for(ueIdx = 0; ueIdx < duCb.actvCellLst[cellIdx]->numActvUes; ueIdx++) + for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) { if((duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId == gnbDuUeF1apId)&&\ (duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId == gnbCuUeF1apId)) @@ -13609,7 +13662,7 @@ uint8_t procF1UeContextReleaseCommand(F1AP_PDU_t *f1apMsg) } if(!ueIdxFound) { - DU_LOG("\nERROR --> F1AP: DuUeCb is not found at procF1UeContextSetupReq()"); + DU_LOG("\nERROR --> F1AP: DuUeCb is not found at procF1UeContextReleaseCommand()"); ret = RFAILED; }