X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_f1ap_msg_hdl.c;h=cec32a3cdaa7d5f00ea85857277387a9c07a8d2b;hb=0b405462775bb65021e41dc4494ed38ce3a9c4f4;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..cec32a3cd 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -103,12 +103,55 @@ #include "GTPTunnel.h" #ifdef O1_ENABLE -#include "ConfigInterface.h" +#include "CmInterface.h" extern StartupConfig g_cfg; #endif 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 @@ -804,7 +847,7 @@ uint8_t BuildDLNRInfo(NRFreqInfo_t *dlnrfreq) S16 BuildNrCellId(BIT_STRING_t *nrcell) { memset(nrcell->buf, 0, nrcell->size); - nrcell->buf[4] = 16; + nrcell->buf[4] = duCfgParam.sib1Params.cellIdentity; nrcell->bits_unused = 4; return ROK; } @@ -2284,7 +2327,7 @@ uint8_t fillServedCellInfo(Served_Cell_Information_t *srvCellInfo) { srvCellInfo->nRCGI.nRCellIdentity.buf[tmp] = 0; } - srvCellInfo->nRCGI.nRCellIdentity.buf[4] = 16; + srvCellInfo->nRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; srvCellInfo->nRCGI.nRCellIdentity.bits_unused =4; /*nRPCI*/ @@ -2382,7 +2425,7 @@ uint8_t fillServCellToModItem(Served_Cells_To_Modify_Item_t *modifyItem) { modifyItem->oldNRCGI.nRCellIdentity.buf[ieIdx] = 0; } - modifyItem->oldNRCGI.nRCellIdentity.buf[4] = 16; + modifyItem->oldNRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; modifyItem->oldNRCGI.nRCellIdentity.bits_unused = 4; if(fillServedCellInfo(&modifyItem->served_Cell_Information)) @@ -2491,7 +2534,7 @@ uint8_t fillCellToDeleteItem(struct Served_Cells_To_Delete_ItemIEs *deleteItemIe { deleteItem->oldNRCGI.nRCellIdentity.buf[arrIdx] = 0; } - deleteItem->oldNRCGI.nRCellIdentity.buf[4] = 16; + deleteItem->oldNRCGI.nRCellIdentity.buf[4] = duCfgParam.sib1Params.cellIdentity; deleteItem->oldNRCGI.nRCellIdentity.bits_unused = 4; return ROK; } @@ -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; }