From 4588074b60b6cd2d5a2c27fb1f0a8114e30b1810 Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Thu, 8 Dec 2022 10:21:43 +0530 Subject: [PATCH] [Epic-ID: ODUHIGH-464][Task-ID: ODUHIGH-480] WG8 Alignment |Third phase | Cfg/Recfg separaion Change-Id: Ia638ad5376a81c81cbfccbbedaf13ea477f01da2 Signed-off-by: lal.harshita --- src/5gnrrlc/rlc_msg_hdl.c | 140 +++++++++++++++++--- src/cm/du_app_rlc_inf.c | 10 +- src/cm/du_app_rlc_inf.h | 28 ++-- src/du_app/du_f1ap_msg_hdl.c | 107 +++++++-------- src/du_app/du_mgr.h | 20 ++- src/du_app/du_ue_mgr.c | 303 ++++++++++++++++++++++++++++--------------- src/du_app/du_ue_mgr.h | 4 +- 7 files changed, 423 insertions(+), 189 deletions(-) diff --git a/src/5gnrrlc/rlc_msg_hdl.c b/src/5gnrrlc/rlc_msg_hdl.c index 119ac12f1..f10a52017 100644 --- a/src/5gnrrlc/rlc_msg_hdl.c +++ b/src/5gnrrlc/rlc_msg_hdl.c @@ -166,7 +166,6 @@ uint8_t fillLcCfg(RlcCb *gCb, RlcEntCfgInfo *rlcUeCfg, RlcBearerCfg *duRlcUeCfg) memcpy(rlcUeCfg->snssai, duRlcUeCfg->snssai, sizeof(Snssai)); } fillEntModeAndDir(&rlcUeCfg->entMode, &rlcUeCfg->dir, duRlcUeCfg->rlcMode); - rlcUeCfg->cfgType = duRlcUeCfg->configType; switch(rlcUeCfg->entMode) { @@ -213,7 +212,7 @@ uint8_t fillLcCfg(RlcCb *gCb, RlcEntCfgInfo *rlcUeCfg, RlcBearerCfg *duRlcUeCfg) * Function : fillRlcCfg * * Functionality: - * fills LC Cfgs to be Add/Mod/Del in RLC + * fills LC Cfgs to be Add in RLC * * @params[in] * RlcEntCfgInfo pointer @@ -229,16 +228,77 @@ uint8_t fillRlcCfg(RlcCb *gCb, RlcCfgInfo *rlcUeCfg, RlcUeCfg *ueCfg) rlcUeCfg->ueId = ueCfg->ueId; rlcUeCfg->cellId = ueCfg->cellId; - rlcUeCfg->numEnt = ueCfg->numLcs; + rlcUeCfg->numEnt = ueCfg->numLcsToAdd; rlcUeCfg->transId = getTransId(); - for(lcIdx = 0; lcIdx < rlcUeCfg->numEnt; lcIdx++) { - if(fillLcCfg(gCb, &rlcUeCfg->entCfg[lcIdx], &ueCfg->rlcLcCfg[lcIdx]) != ROK) + if(fillLcCfg(gCb, &rlcUeCfg->entCfg[lcIdx], &ueCfg->rlcLcCfgAdd[lcIdx]) != ROK) { DU_LOG("\nERROR --> RLC : fillRlcCfg(): Failed to fill LC configuration"); return RFAILED; } + rlcUeCfg->entCfg[lcIdx].cfgType = CONFIG_ADD; + } + return ROK; +} + +/******************************************************************* + * + * @brief updates LC Cfgs to be Added/Mod/Rel in RLC + * + * @details + * + * Function : updateRlcCfg + * + * Functionality: + * updates LC Cfgs to be Add/Mod/Del in RLC + * + * @params[in] + * RlcEntCfgInfo pointer + * RlcBearerCfg pointer + * @return ROK - Success + * RFAILED - Failure + * + ******************************************************************/ + +uint8_t updateRlcCfg(RlcCb *gCb, RlcCfgInfo *rlcUeCfg, RlcUeRecfg *ueRecfg) +{ + uint8_t lcIdx = 0; + + rlcUeCfg->ueId = ueRecfg->ueId; + rlcUeCfg->cellId = ueRecfg->cellId; + rlcUeCfg->transId = getTransId(); + + rlcUeCfg->numEnt = 0; + for(lcIdx = 0; lcIdx < ueRecfg->numLcsToAdd; lcIdx++) + { + if(fillLcCfg(gCb, &rlcUeCfg->entCfg[rlcUeCfg->numEnt], &ueRecfg->rlcLcCfgAdd[lcIdx]) != ROK) + { + DU_LOG("\nERROR --> RLC : fillRlcCfg(): Failed to fill LC configuration"); + return RFAILED; + } + rlcUeCfg->entCfg[rlcUeCfg->numEnt].cfgType = CONFIG_ADD; + rlcUeCfg->numEnt++; + } + for(lcIdx = 0; lcIdx < ueRecfg->numLcsToMod; lcIdx++) + { + if(fillLcCfg(gCb, &rlcUeCfg->entCfg[rlcUeCfg->numEnt], &ueRecfg->rlcLcCfgMod[lcIdx]) != ROK) + { + DU_LOG("\nERROR --> RLC : fillRlcCfg(): Failed to fill LC configuration"); + return RFAILED; + } + rlcUeCfg->entCfg[rlcUeCfg->numEnt].cfgType = CONFIG_MOD; + rlcUeCfg->numEnt++; + } + for(lcIdx = 0; lcIdx < ueRecfg->numLcsToRel; lcIdx++) + { + if(fillLcCfg(gCb, &rlcUeCfg->entCfg[rlcUeCfg->numEnt], &ueRecfg->rlcLcCfgRel[lcIdx]) != ROK) + { + DU_LOG("\nERROR --> RLC : fillRlcCfg(): Failed to fill LC configuration"); + return RFAILED; + } + rlcUeCfg->entCfg[rlcUeCfg->numEnt].cfgType = CONFIG_DEL; + rlcUeCfg->numEnt++; } return ROK; } @@ -265,15 +325,65 @@ void fillRlcCfgFailureRsp(RlcCfgCfmInfo *cfgRsp, RlcUeCfg *ueCfg) cfgRsp->ueId = ueCfg->ueId; cfgRsp->cellId = ueCfg->cellId; - cfgRsp->numEnt = ueCfg->numLcs; - for(cfgIdx =0; cfgIdxnumLcs; cfgIdx++) + cfgRsp->numEnt = ueCfg->numLcsToAdd; + for(cfgIdx =0; cfgIdxnumLcsToAdd; cfgIdx++) { - cfgRsp->entCfgCfm[cfgIdx].rbId = ueCfg->rlcLcCfg[cfgIdx].rbId; - cfgRsp->entCfgCfm[cfgIdx].rbType = ueCfg->rlcLcCfg[cfgIdx].rbType; + cfgRsp->entCfgCfm[cfgIdx].rbId = ueCfg->rlcLcCfgAdd[cfgIdx].rbId; + cfgRsp->entCfgCfm[cfgIdx].rbType = ueCfg->rlcLcCfgAdd[cfgIdx].rbType; cfgRsp->entCfgCfm[cfgIdx].status.status = RLC_DU_APP_RSP_NOK; cfgRsp->entCfgCfm[cfgIdx].status.reason = CKW_CFG_REAS_NONE; } } + +/******************************************************************* + * + * @brief Fill RlcCfgCfmInfo structure for sending failure response to DU + * + * @details + * + * Function : fillRlcRecfgFailureRsp + * + * Functionality: + * Fill RlcCfgCfmInfo structure for sending failure response to DU + * + * @params[in] RlcCfgCfmInfo *cfgRsp, RlcUeCfg *ueCfg + * + * @return void + * + * ****************************************************************/ +void fillRlcRecfgFailureRsp(RlcCfgCfmInfo *cfgRsp, RlcUeRecfg *ueRecfg) +{ + uint8_t cfgIdx =0; + + cfgRsp->ueId = ueRecfg->ueId; + cfgRsp->cellId = ueRecfg->cellId; + cfgRsp->numEnt = 0; + for(cfgIdx =0; cfgIdxnumLcsToAdd; cfgIdx++) + { + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbId = ueRecfg->rlcLcCfgAdd[cfgIdx].rbId; + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbType = ueRecfg->rlcLcCfgAdd[cfgIdx].rbType; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.status = RLC_DU_APP_RSP_NOK; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.reason = CKW_CFG_REAS_NONE; + cfgRsp->numEnt++; + } + for(cfgIdx =0; cfgIdxnumLcsToMod; cfgIdx++) + { + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbId = ueRecfg->rlcLcCfgMod[cfgIdx].rbId; + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbType = ueRecfg->rlcLcCfgMod[cfgIdx].rbType; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.status = RLC_DU_APP_RSP_NOK; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.reason = CKW_CFG_REAS_NONE; + cfgRsp->numEnt++; + } + for(cfgIdx =0; cfgIdxnumLcsToRel; cfgIdx++) + { + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbId = ueRecfg->rlcLcCfgRel[cfgIdx].rbId; + cfgRsp->entCfgCfm[cfgRsp->numEnt].rbType = ueRecfg->rlcLcCfgRel[cfgIdx].rbType; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.status = RLC_DU_APP_RSP_NOK; + cfgRsp->entCfgCfm[cfgRsp->numEnt].status.reason = CKW_CFG_REAS_NONE; + cfgRsp->numEnt++; + } +} + /******************************************************************* * * @brief Handles Ue Create Request from DU APP @@ -464,7 +574,6 @@ uint8_t RlcProcUlData(Pst *pst, RlcUlData *ulData) bool dLchPduPres; /* PDU received on dedicated logical channel */ RguLchDatInd dLchData[MAX_NUM_LC]; /* PDU info on dedicated logical channel */ RguDDatIndInfo *dLchUlDat; /* UL data on dedicated logical channel */ - RguCDatIndInfo *cLchUlDat; /* UL data on common logical channel */ /* Initializing dedicated logical channel Database */ DU_LOG("\nDEBUG --> RLC: Received UL Data request from MAC"); @@ -569,7 +678,6 @@ uint8_t RlcProcSchedResultRpt(Pst *pst, RlcSchedResultRpt *schRep) uint8_t ret = ROK; uint8_t idx; /* Iterator */ uint8_t nmbDLch = 0; /* Number of dedicated logical channles */ - RguCStaIndInfo *cLchSchInfo; /* Common logical channel scheduling result */ RguDStaIndInfo *dLchSchInfo; /* Dedicated logical channel scheduling result */ DU_LOG("\nDEBUG --> RLC : Received scheduling report from MAC"); @@ -641,7 +749,7 @@ uint8_t RlcProcSchedResultRpt(Pst *pst, RlcSchedResultRpt *schRep) * RFAILED - failure * * ****************************************************************/ -uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) +uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeRecfg *ueRecfg) { uint8_t ret = ROK; RlcCfgInfo *rlcUeCfg = NULLP; //Seed code Rlc cfg struct @@ -649,7 +757,7 @@ uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) RlcCfgCfmInfo cfgRsp; Pst rspPst; - DU_LOG("\nDEBUG --> RLC: UE reconfig request received. CellID[%d] UEID[%d]",ueCfg->cellId, ueCfg->ueId); + DU_LOG("\nDEBUG --> RLC: UE reconfig request received. CellID[%d] UEID[%d]",ueRecfg->cellId, ueRecfg->ueId); rlcUeCb = RLC_GET_RLCCB(pst->dstInst); RLC_ALLOC(rlcUeCb, rlcUeCfg, sizeof(RlcCfgInfo)); @@ -661,12 +769,12 @@ uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) else { memset(rlcUeCfg, 0, sizeof(RlcCfgInfo)); - ret = fillRlcCfg(rlcUeCb, rlcUeCfg, ueCfg); + ret = updateRlcCfg(rlcUeCb, rlcUeCfg, ueRecfg); if(ret != ROK) { DU_LOG("\nERROR --> RLC: Failed to fill configuration at RlcProcUeReconfigReq()"); FILL_PST_RLC_TO_DUAPP(rspPst, RLC_UL_INST, EVENT_RLC_UE_RECONFIG_RSP); - fillRlcCfgFailureRsp(&cfgRsp, ueCfg); + fillRlcRecfgFailureRsp(&cfgRsp, ueRecfg); SendRlcUeCfgRspToDu(&rspPst, &cfgRsp); } else @@ -677,7 +785,7 @@ uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) } } - RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg)); + RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueRecfg, sizeof(RlcUeRecfg)); return ret; } diff --git a/src/cm/du_app_rlc_inf.c b/src/cm/du_app_rlc_inf.c index dd2aae755..2bdcf248a 100644 --- a/src/cm/du_app_rlc_inf.c +++ b/src/cm/du_app_rlc_inf.c @@ -423,7 +423,7 @@ uint8_t unpackRrcDeliveryReportToDu(RlcRrcDeliveryReportToDuFunc func, Pst *pst, * RFAILED - failure * * ****************************************************************/ -uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) +uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeRecfg *ueRecfg) { Buffer *mBuf = NULLP; @@ -435,7 +435,7 @@ uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) return RFAILED; } /* pack the address of the structure */ - CMCHKPK(oduPackPointer,(PTR)ueCfg, mBuf); + CMCHKPK(oduPackPointer,(PTR)ueRecfg, mBuf); } else { @@ -467,11 +467,11 @@ uint8_t unpackRlcUeReconfigReq(DuRlcUeReconfigReq func, Pst *pst, Buffer *mBuf) { if(pst->selector == ODU_SELECTOR_LWLC) { - RlcUeCfg *ueCfg; + RlcUeRecfg *ueRecfg; /* unpack the address of the structure */ - CMCHKUNPK(oduUnpackPointer, (PTR *)&ueCfg, mBuf); + CMCHKUNPK(oduUnpackPointer, (PTR *)&ueRecfg, mBuf); ODU_PUT_MSG_BUF(mBuf); - return (*func)(pst, ueCfg); + return (*func)(pst, ueRecfg); } else { diff --git a/src/cm/du_app_rlc_inf.h b/src/cm/du_app_rlc_inf.h index 593e5a11e..62ea905b4 100644 --- a/src/cm/du_app_rlc_inf.h +++ b/src/cm/du_app_rlc_inf.h @@ -181,7 +181,6 @@ typedef struct umUniDirDlBearerCfg /* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */ typedef struct rlcBearerCfg { - ConfigType configType; uint8_t rbId; RlcRbType rbType; uint8_t lcId; @@ -198,13 +197,24 @@ typedef struct rlcBearerCfg bool isLcAddModRspSent; }RlcBearerCfg; +typedef struct rlcUeRecfg +{ + uint16_t cellId; + uint8_t ueId; + uint8_t numLcsToAdd; + RlcBearerCfg rlcLcCfgAdd[MAX_NUM_LC]; + uint8_t numLcsToMod; + RlcBearerCfg rlcLcCfgMod[MAX_NUM_LC]; + uint8_t numLcsToRel; + RlcBearerCfg rlcLcCfgRel[MAX_NUM_LC]; +}RlcUeRecfg; + typedef struct rlcUeCfg { - uint16_t cellId; - uint8_t ueId; - uint8_t numLcs; - RlcBearerCfg rlcLcCfg[MAX_NUM_LC]; - UeCfgState rlcUeCfgState; /* InActive / Completed */ + uint16_t cellId; + uint8_t ueId; + uint8_t numLcsToAdd; + RlcBearerCfg rlcLcCfgAdd[MAX_NUM_LC]; }RlcUeCfg; typedef struct rlcUeCfgRsp @@ -347,7 +357,7 @@ typedef uint8_t (*RlcRrcDeliveryReportToDuFunc) ARGS(( /* UE Reconfig Request from DU APP to RLC */ typedef uint8_t (*DuRlcUeReconfigReq) ARGS(( Pst *pst, - RlcUeCfg *ueCfg )); + RlcUeRecfg *ueRecfg )); /* UE Delete Request from DU APP to RLC */ typedef uint8_t (*DuRlcUeDeleteReq) ARGS(( @@ -385,7 +395,7 @@ uint8_t packDlRrcMsgToRlc(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo); uint8_t unpackDlRrcMsgToRlc(DuDlRrcMsgToRlcFunc func, Pst *pst, Buffer *mBuf); uint8_t packRrcDeliveryReportToDu(Pst *pst, RrcDeliveryReport *rrcDeliveryReport); uint8_t unpackRrcDeliveryReportToDu(RlcRrcDeliveryReportToDuFunc func,Pst *pst, Buffer *mBuf); -uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg); +uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeRecfg *ueCfg); uint8_t unpackRlcUeReconfigReq(DuRlcUeReconfigReq func, Pst *pst, Buffer *mBuf); uint8_t packRlcDlRrcMsgRspToDu(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsgRsp); uint8_t unpackRlcDlRrcMsgRspToDu(RlcDlRrcMsgRspToDuFunc func, Pst *pst, Buffer *mBuf); @@ -406,7 +416,7 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp); uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo); uint8_t RlcProcDlRrcMsgTransfer(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo); uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport); -uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg); +uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeRecfg *ueCfg); uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg); uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData); uint8_t RlcProcDlUserDataTransfer(Pst *pst, RlcDlUserDataInfo *dlDataMsgInfo); diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index fb864aa0b..170bb65b8 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -210,13 +210,13 @@ uint8_t fetchLcId(uint8_t drbId) { if(duCb.actvCellLst[cellIdx] != NULLP) { - numLcs = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.numLcs; + numLcs = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg.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) + if(duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.rbId == drbId && \ + duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.rbType == RB_TYPE_DRB) { - lcId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg.rlcLcCfg[lcIdx].lcId; + lcId = duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.lcId; return lcId; } } @@ -3377,12 +3377,12 @@ uint8_t BuildRlcBearerToAddModList(DuUeCb *ueCb, struct CellGroupConfigRrc__rlc_ if(ueCb == NULLP) elementCnt = 1; else if(ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) - elementCnt = ueCb->rlcUeCfg.numLcs; + elementCnt = ueCb->duRlcUeCfg.numLcs; else { - for(lcIdx = 0; lcIdxrlcUeCfg.numLcs; lcIdx++) + for(lcIdx = 0; lcIdxduRlcUeCfg.numLcs; lcIdx++) { - if(ueCb->rlcUeCfg.rlcLcCfg[lcIdx].isLcAddModRspSent == false) + if(ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.isLcAddModRspSent == false) elementCnt++; } } @@ -3453,13 +3453,13 @@ uint8_t BuildRlcBearerToAddModList(DuUeCb *ueCb, struct CellGroupConfigRrc__rlc_ else { idx=0; - for(lcIdx=0; lcIdxrlcUeCfg.numLcs; lcIdx++) + for(lcIdx=0; lcIdxduRlcUeCfg.numLcs; lcIdx++) { - if((ueCb->f1UeDb->actionType != UE_CTXT_CFG_QUERY) && (ueCb->rlcUeCfg.rlcLcCfg[lcIdx].isLcAddModRspSent == true)) + if((ueCb->f1UeDb->actionType != UE_CTXT_CFG_QUERY) && (ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.isLcAddModRspSent == true)) continue; /* Fill Logical channel identity */ - rlcBearerList->list.array[idx]->logicalChannelIdentity = ueCb->rlcUeCfg.rlcLcCfg[lcIdx].lcId; + rlcBearerList->list.array[idx]->logicalChannelIdentity = ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.lcId; /* Fill Radio Bearer Id and type (DRB/SRB) for this logical channel */ DU_ALLOC(rlcBearerList->list.array[idx]->servedRadioBearer, sizeof(struct RLC_BearerConfig__servedRadioBearer)); @@ -3469,20 +3469,20 @@ uint8_t BuildRlcBearerToAddModList(DuUeCb *ueCb, struct CellGroupConfigRrc__rlc_ return RFAILED; } rlcBearerList->list.array[idx]->servedRadioBearer->present = \ - covertRbTypeFromIntEnumToRrcEnum(ueCb->rlcUeCfg.rlcLcCfg[lcIdx].rbType); + covertRbTypeFromIntEnumToRrcEnum(ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.rbType); switch(rlcBearerList->list.array[idx]->servedRadioBearer->present) { case RLC_BearerConfig__servedRadioBearer_PR_srb_Identity: - rlcBearerList->list.array[idx]->servedRadioBearer->choice.srb_Identity = ueCb->rlcUeCfg.rlcLcCfg[lcIdx].rbId; + rlcBearerList->list.array[idx]->servedRadioBearer->choice.srb_Identity = ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.rbId; break; case RLC_BearerConfig__servedRadioBearer_PR_drb_Identity: - rlcBearerList->list.array[idx]->servedRadioBearer->choice.drb_Identity = ueCb->rlcUeCfg.rlcLcCfg[lcIdx].rbId; + rlcBearerList->list.array[idx]->servedRadioBearer->choice.drb_Identity = ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.rbId; break; case RLC_BearerConfig__servedRadioBearer_PR_NOTHING: default: break; } - ueCb->rlcUeCfg.rlcLcCfg[lcIdx].isLcAddModRspSent = true; + ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.isLcAddModRspSent = true; rlcBearerList->list.array[idx]->reestablishRLC = NULLP; @@ -3494,7 +3494,7 @@ uint8_t BuildRlcBearerToAddModList(DuUeCb *ueCb, struct CellGroupConfigRrc__rlc_ DU_LOG("\nERROR --> F1AP : Memory allocation failure in BuildRlcBearerToAddModList"); return RFAILED; } - if(BuildRlcConfig(&ueCb->rlcUeCfg.rlcLcCfg[lcIdx], rlcBearerList->list.array[idx]->rlc_Config) != ROK) + if(BuildRlcConfig(&ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg, rlcBearerList->list.array[idx]->rlc_Config) != ROK) { DU_LOG("\nERROR --> F1AP : BuildRlcConfig failed"); return RFAILED; @@ -3510,7 +3510,7 @@ uint8_t BuildRlcBearerToAddModList(DuUeCb *ueCb, struct CellGroupConfigRrc__rlc_ } for(macLcIdx = 0; macLcIdx < ueCb->duMacUeCfg.numLcs; macLcIdx++) { - if(ueCb->duMacUeCfg.lcCfgList[macLcIdx].lcConfig.lcId == ueCb->rlcUeCfg.rlcLcCfg[lcIdx].lcId) + if(ueCb->duMacUeCfg.lcCfgList[macLcIdx].lcConfig.lcId == ueCb->duRlcUeCfg.rlcLcCfg[lcIdx].rlcBearerCfg.lcId) { if(BuildMacLCConfig(&ueCb->duMacUeCfg.lcCfgList[macLcIdx].lcConfig, rlcBearerList->list.array[idx]->mac_LogicalChannelConfig) != ROK) { @@ -9736,7 +9736,7 @@ void freeDuUeCfg(UeCtxtActionType actionType, DuUeCfg *ueCfg) { for(lcIdx = 0; lcIdx < ueCfg->numRlcLcs; lcIdx++) { - freeRlcLcCfg(&ueCfg->rlcLcCfg[lcIdx]); + freeRlcLcCfg(&ueCfg->rlcLcCfg[lcIdx].rlcBearerCfg); } } @@ -10082,30 +10082,30 @@ uint8_t extractDrbSnssaiCfg(SNSSAI_t *RecvSnssai, Snssai **snssaiToBeShared) * ****************************************************************/ void procRlcLcCfg(uint8_t rbId, uint8_t lcId, uint8_t rbType, uint8_t rlcMode,\ - uint8_t configType, RLC_Config_t *f1RlcCfg, RlcBearerCfg *lcCfg, QoSInformation_t *qoSInformation) + uint8_t configType, RLC_Config_t *f1RlcCfg, DuRlcBearerCfg *lcCfg, QoSInformation_t *qoSInformation) { DRB_Information_t *drbInfo; - lcCfg->rbId = rbId; + lcCfg->rlcBearerCfg.rbId = rbId; lcCfg->configType = configType; if(rbType == RB_TYPE_SRB) { - lcCfg->rbType = RB_TYPE_SRB; - lcCfg->lcId = rbId; - lcCfg->lcType = LCH_DCCH; - lcCfg->rlcMode = RLC_AM; + lcCfg->rlcBearerCfg.rbType = RB_TYPE_SRB; + lcCfg->rlcBearerCfg.lcId = rbId; + lcCfg->rlcBearerCfg.lcType = LCH_DCCH; + lcCfg->rlcBearerCfg.rlcMode = RLC_AM; } else if(rbType == RB_TYPE_DRB) { - lcCfg->rbType = RB_TYPE_DRB; - lcCfg->lcId = lcId; - lcCfg->lcType = LCH_DTCH; - lcCfg->rlcMode = rlcMode; + lcCfg->rlcBearerCfg.rbType = RB_TYPE_DRB; + lcCfg->rlcBearerCfg.lcId = lcId; + lcCfg->rlcBearerCfg.lcType = LCH_DTCH; + lcCfg->rlcBearerCfg.rlcMode = rlcMode; } if(f1RlcCfg) /* rlc mode config recived */ { - extractRlcModeCfg(lcCfg->rlcMode, lcCfg, f1RlcCfg); + extractRlcModeCfg(lcCfg->rlcBearerCfg.rlcMode, &lcCfg->rlcBearerCfg, f1RlcCfg); } if(qoSInformation != NULLP) { @@ -10115,7 +10115,7 @@ void procRlcLcCfg(uint8_t rbId, uint8_t lcId, uint8_t rbType, uint8_t rlcMode,\ QoSInformation_ExtIEs__value_PR_DRB_Information) { drbInfo = &qoSInformation->choice.choice_extension->value.choice.DRB_Information; - if(extractDrbSnssaiCfg(&drbInfo->sNSSAI, &lcCfg->snssai) != ROK) + if(extractDrbSnssaiCfg(&drbInfo->sNSSAI, &lcCfg->rlcBearerCfg.snssai) != ROK) { DU_LOG("\nERROR --> DUAPP: Unable to extract Snssai information at procRlcLcCfg()"); return; @@ -10556,7 +10556,7 @@ uint8_t extractRlcCfgToAddMod(struct CellGroupConfigRrc__rlc_BearerToAddModList /* Filling RLC/MAC Config*/ memset(&ueCfgDb->macLcCfg[idx], 0, sizeof(DuLcCfg)); - memset(&ueCfgDb->rlcLcCfg[idx], 0, sizeof(RlcBearerCfg)); + memset(&ueCfgDb->rlcLcCfg[idx], 0, sizeof(DuRlcBearerCfg)); procRlcLcCfg(rbId, lcId, rbType, rlcMode, CONFIG_UNKNOWN, f1RlcCfg, &(ueCfgDb->rlcLcCfg[idx]), NULLP); if(procMacLcCfg(lcId, rbType, CONFIG_UNKNOWN, NULL, NULL, NULL, macUlLcCfg, &ueCfgDb->macLcCfg[idx], NULL) != ROK) { @@ -12964,7 +12964,7 @@ uint8_t extractCuToDuRrcInfoExt(ProtocolExtensionContainer_4624P16_t *protocolIe * @return void * * ****************************************************************/ -uint8_t procSrbListToSetup(SRBs_ToBeSetup_Item_t * srbItem, DuLcCfg *duMacLcToAdd, RlcBearerCfg *rlcLcToAdd) +uint8_t procSrbListToSetup(SRBs_ToBeSetup_Item_t * srbItem, DuLcCfg *duMacLcToAdd, DuRlcBearerCfg *rlcLcToAdd) { /* Filling RLC INFO */ @@ -13004,7 +13004,7 @@ uint8_t extractSrbListToSetup(SRBs_ToBeSetup_List_t *srbCfg, DuUeCfg *ueCfgDb) uint8_t ret = ROK, srbIdx = 0, rlcLcIdx = 0; SRBs_ToBeSetup_Item_t *srbItem = NULLP; DuLcCfg *macLcCtxt = NULLP; - RlcBearerCfg *rlcLcCtxt = NULLP; + DuRlcBearerCfg *rlcLcCtxt = NULLP; if(srbCfg) { @@ -13029,7 +13029,7 @@ uint8_t extractSrbListToSetup(SRBs_ToBeSetup_List_t *srbCfg, DuUeCfg *ueCfgDb) for(rlcLcIdx = 0; rlcLcIdx < ueCfgDb->numMacLcs; rlcLcIdx++) { - if(ueCfgDb->rlcLcCfg[rlcLcIdx].rbId == srbItem->sRBID && ueCfgDb->rlcLcCfg[rlcLcIdx].rbType == RB_TYPE_SRB) + if(ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbId == srbItem->sRBID && ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbType == RB_TYPE_SRB) { macLcCtxt = &ueCfgDb->macLcCfg[rlcLcIdx]; rlcLcCtxt = &ueCfgDb->rlcLcCfg[rlcLcIdx]; @@ -13044,7 +13044,7 @@ uint8_t extractSrbListToSetup(SRBs_ToBeSetup_List_t *srbCfg, DuUeCfg *ueCfgDb) } if(!rlcLcCtxt) { - memset(&ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs], 0, sizeof(RlcBearerCfg)); + memset(&ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs], 0, sizeof(DuRlcBearerCfg)); rlcLcCtxt = &ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs]; ueCfgDb->numRlcLcs++; } @@ -13085,7 +13085,7 @@ uint8_t extractSrbListToSetup(SRBs_ToBeSetup_List_t *srbCfg, DuUeCfg *ueCfgDb) * ****************************************************************/ uint8_t procDrbListToSetupMod(uint8_t lcId, DRBs_ToBeSetup_Item_t *drbItem,\ -DRBs_ToBeSetupMod_Item_t *drbSetupModItem, DRBs_ToBeModified_Item_t *drbModItem, DuLcCfg *macLcToAdd, RlcBearerCfg *rlcLcToAdd, UpTnlCfg *upTnlInfo, RlcUeCfg *storedRlcUeCfg) +DRBs_ToBeSetupMod_Item_t *drbSetupModItem, DRBs_ToBeModified_Item_t *drbModItem, DuLcCfg *macLcToAdd, DuRlcBearerCfg *rlcLcToAdd, UpTnlCfg *upTnlInfo, DuRlcUeCfg *storedRlcUeCfg) { uint8_t cfgIdx = 0; RlcMode rlcModeInfo; @@ -13122,9 +13122,9 @@ DRBs_ToBeSetupMod_Item_t *drbSetupModItem, DRBs_ToBeModified_Item_t *drbModItem, { for(cfgIdx = 0; cfgIdx < storedRlcUeCfg->numLcs; cfgIdx++) { - if(storedRlcUeCfg->rlcLcCfg[cfgIdx].lcId == lcId) + if(storedRlcUeCfg->rlcLcCfg[cfgIdx].rlcBearerCfg.lcId == lcId) { - rlcModeInfo = storedRlcUeCfg->rlcLcCfg[cfgIdx].rlcMode; + rlcModeInfo = storedRlcUeCfg->rlcLcCfg[cfgIdx].rlcBearerCfg.rlcMode; break; } } @@ -13158,7 +13158,7 @@ DRBs_ToBeSetupMod_Item_t *drbSetupModItem, DRBs_ToBeModified_Item_t *drbModItem, * ****************************************************************/ uint8_t extractDrbListToSetupMod(DRBs_ToBeSetup_List_t *drbCfg, DRBs_ToBeSetupMod_List_t *drbSetupModCfg,\ - DRBs_ToBeModified_List_t *drbModCfg, uint8_t drbCount, DuUeCfg *ueCfgDb, uint32_t *drbBitMap, RlcUeCfg *rlcUeCfg) + DRBs_ToBeModified_List_t *drbModCfg, uint8_t drbCount, DuUeCfg *ueCfgDb, uint32_t *drbBitMap, DuRlcUeCfg *rlcUeCfg) { uint8_t ret = ROK; uint8_t drbIdx = 0, rlcLcIdx = 0; @@ -13167,7 +13167,7 @@ uint8_t extractDrbListToSetupMod(DRBs_ToBeSetup_List_t *drbCfg, DRBs_ToBeSetupMo DRBs_ToBeSetupMod_ItemIEs_t *drbSetupModItem = NULLP; DRBs_ToBeModified_ItemIEs_t *drbModItem = NULLP; DuLcCfg *macLcCtxt = NULLP; - RlcBearerCfg *rlcLcCtxt = NULLP; + DuRlcBearerCfg *rlcLcCtxt = NULLP; ret = ROK; if(drbCount > 0) @@ -13205,7 +13205,8 @@ uint8_t extractDrbListToSetupMod(DRBs_ToBeSetup_List_t *drbCfg, DRBs_ToBeSetupMo for(rlcLcIdx = 0; rlcLcIdx < ueCfgDb->numRlcLcs; rlcLcIdx++) { - if(ueCfgDb->rlcLcCfg[rlcLcIdx].rbId == drbId && ueCfgDb->rlcLcCfg[rlcLcIdx].rbType == RB_TYPE_DRB) + if(ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbId == drbId && \ + ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbType == RB_TYPE_DRB) { macLcCtxt = &ueCfgDb->macLcCfg[rlcLcIdx]; rlcLcCtxt = &ueCfgDb->rlcLcCfg[rlcLcIdx]; @@ -13307,14 +13308,14 @@ uint8_t extractDrbListToSetupMod(DRBs_ToBeSetup_List_t *drbCfg, DRBs_ToBeSetupMo * * ****************************************************************/ -uint8_t extractDrbListToRelease(uint8_t ueId, DRBs_ToBeReleased_List_t *drbToRel, uint8_t drbCount, DuUeCfg *ueCfgDb, RlcUeCfg *rlcUeCfg) +uint8_t extractDrbListToRelease(uint8_t ueId, DRBs_ToBeReleased_List_t *drbToRel, uint8_t drbCount, DuUeCfg *ueCfgDb, DuRlcUeCfg *rlcUeCfg) { uint8_t ret = ROK, teIdx = 0; uint8_t drbIdx = 0, rlcLcIdx = 0; uint8_t drbId = 0, lcId = 0; DRBs_ToBeReleased_ItemIEs_t *drbRelItem = NULLP; DuLcCfg *macLcCtxt = NULLP; - RlcBearerCfg *rlcLcCtxt = NULLP; + DuRlcBearerCfg *rlcLcCtxt = NULLP; ret = ROK; if(drbCount > 0) @@ -13337,7 +13338,7 @@ uint8_t extractDrbListToRelease(uint8_t ueId, DRBs_ToBeReleased_List_t *drbToRel for(rlcLcIdx = 0; rlcLcIdx < ueCfgDb->numRlcLcs; rlcLcIdx++) { - if(ueCfgDb->rlcLcCfg[rlcLcIdx].rbId == drbId && ueCfgDb->rlcLcCfg[rlcLcIdx].rbType == RB_TYPE_DRB) + if(ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbId == drbId && ueCfgDb->rlcLcCfg[rlcLcIdx].rlcBearerCfg.rbType == RB_TYPE_DRB) { macLcCtxt = &ueCfgDb->macLcCfg[rlcLcIdx]; rlcLcCtxt = &ueCfgDb->rlcLcCfg[rlcLcIdx]; @@ -13353,7 +13354,7 @@ uint8_t extractDrbListToRelease(uint8_t ueId, DRBs_ToBeReleased_List_t *drbToRel } if(!rlcLcCtxt) { - memset(&ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs], 0, sizeof(RlcBearerCfg)); + memset(&ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs], 0, sizeof(DuRlcBearerCfg)); rlcLcCtxt = &ueCfgDb->rlcLcCfg[ueCfgDb->numRlcLcs]; ueCfgDb->numRlcLcs++; } @@ -13365,7 +13366,7 @@ uint8_t extractDrbListToRelease(uint8_t ueId, DRBs_ToBeReleased_List_t *drbToRel } /* Filling RLC INFO */ - procRlcLcCfg(drbId, lcId, RB_TYPE_DRB, rlcLcCtxt->rlcMode, CONFIG_DEL, NULL, rlcLcCtxt, NULLP); + procRlcLcCfg(drbId, lcId, RB_TYPE_DRB, rlcLcCtxt->rlcBearerCfg.rlcMode, CONFIG_DEL, NULL, rlcLcCtxt, NULLP); /* Filling MAC INFO */ if(procMacLcCfg(lcId, RB_TYPE_DRB, CONFIG_DEL, NULL, NULL, NULL, NULL, macLcCtxt, NULLP) != ROK) { @@ -15717,8 +15718,8 @@ uint8_t BuildSrbSetupModList(SRBs_SetupMod_List_t *srbList, DuUeCfg *ueCfg) srbItemIe->id = ProtocolIE_ID_id_SRBs_SetupMod_Item; srbItemIe->criticality = Criticality_reject; srbItemIe->value.present = SRBs_SetupMod_ItemIEs__value_PR_SRBs_SetupMod_Item; - srbItemIe->value.choice.SRBs_SetupMod_Item.sRBID = ueCfg->rlcLcCfg[srbIdx].rbId; - srbItemIe->value.choice.SRBs_SetupMod_Item.lCID = ueCfg->rlcLcCfg[srbIdx].lcId; + srbItemIe->value.choice.SRBs_SetupMod_Item.sRBID = ueCfg->rlcLcCfg[srbIdx].rlcBearerCfg.rbId; + srbItemIe->value.choice.SRBs_SetupMod_Item.lCID = ueCfg->rlcLcCfg[srbIdx].rlcBearerCfg.lcId; } return ROK; } @@ -16150,12 +16151,12 @@ uint8_t BuildAndSendUeContextModRsp(DuUeCb *ueCb) ueContextModifyRes->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject; ueContextModifyRes->protocolIEs.list.array[ieIdx]->value.present = \ UEContextModificationResponseIEs__value_PR_SRBs_SetupMod_List; - for(rbIdx = 0; rbIdx < ueCb->rlcUeCfg.numLcs; rbIdx++) + for(rbIdx = 0; rbIdx < ueCb->duRlcUeCfg.numLcs; rbIdx++) { - if(ueCb->rlcUeCfg.rlcLcCfg[rbIdx].rbType == RB_TYPE_SRB) + if(ueCb->duRlcUeCfg.rlcLcCfg[rbIdx].rlcBearerCfg.rbType == RB_TYPE_SRB) { - memcpy(&ueCb->f1UeDb->duUeCfg.rlcLcCfg[ueCb->f1UeDb->duUeCfg.numRlcLcs++], &ueCb->rlcUeCfg.rlcLcCfg[rbIdx],\ - sizeof(RlcBearerCfg)); + memcpy(&ueCb->f1UeDb->duUeCfg.rlcLcCfg[ueCb->f1UeDb->duUeCfg.numRlcLcs++], &ueCb->duRlcUeCfg.rlcLcCfg[rbIdx],\ + sizeof(DuRlcBearerCfg)); } } ret = BuildSrbSetupModList(&ueContextModifyRes->protocolIEs.list.array[ieIdx]->value.choice.SRBs_SetupMod_List, \ @@ -16756,7 +16757,7 @@ uint8_t procF1UeContextModificationReq(F1AP_PDU_t *f1apMsg) drbModifiedCfg = &ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.\ choice.DRBs_ToBeModified_List; if(extractDrbListToSetupMod(NULL, NULL, drbModifiedCfg, drbModifiedCfg->list.count,\ - &duUeCb->f1UeDb->duUeCfg, &duUeCb->drbBitMap, &duUeCb->rlcUeCfg)) + &duUeCb->f1UeDb->duUeCfg, &duUeCb->drbBitMap, &duUeCb->duRlcUeCfg)) { DU_LOG("\nERROR --> DU APP : Failed at extractDrbListToSetupMod() for DrbModifiedList"); ret = RFAILED; @@ -16770,7 +16771,7 @@ uint8_t procF1UeContextModificationReq(F1AP_PDU_t *f1apMsg) drbToRelease = &ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.\ choice.DRBs_ToBeReleased_List; if(extractDrbListToRelease(gnbDuUeF1apId, drbToRelease, drbToRelease->list.count,\ - &duUeCb->f1UeDb->duUeCfg, &duUeCb->rlcUeCfg)) + &duUeCb->f1UeDb->duUeCfg, &duUeCb->duRlcUeCfg)) { DU_LOG("\nERROR --> DU APP : Failed at extractDrbListToSetupMod() for DrbModifiedList"); ret = RFAILED; diff --git a/src/du_app/du_mgr.h b/src/du_app/du_mgr.h index a51c30a1f..4cf125567 100644 --- a/src/du_app/du_mgr.h +++ b/src/du_app/du_mgr.h @@ -169,12 +169,28 @@ typedef struct duMacUeCfg #endif }DuMacUeCfg; +typedef struct duRlcBearerCfg +{ + ConfigType configType; + RlcBearerCfg rlcBearerCfg; +}DuRlcBearerCfg; + +typedef struct duRlcUeCfg +{ + uint16_t cellId; + uint8_t ueId; + uint8_t numLcs; + DuRlcBearerCfg rlcLcCfg[MAX_NUM_LC]; + UeCfgState rlcUeCfgState; /* InActive / Completed */ +}DuRlcUeCfg; + + typedef struct duUeCfg { void *cellGrpCfg; void *ueNrCapability; uint8_t numRlcLcs; /* Rlc Ue Cfg */ - RlcBearerCfg rlcLcCfg[MAX_NUM_LC]; + DuRlcBearerCfg rlcLcCfg[MAX_NUM_LC]; uint8_t numMacLcs; /* Mac Ue Cfg */ DuLcCfg macLcCfg[MAX_NUM_LC]; AmbrCfg *ambrCfg; @@ -219,7 +235,7 @@ typedef struct duUeCb UeState ueState; /* UE Active/ Ue Inactive state */ MacCfraResource cfraResource; /* CF-RA resource assigned by MAC/SCH */ DuMacUeCfg duMacUeCfg; /* Mac Ue Cfg */ - RlcUeCfg rlcUeCfg; /* Rlc Ue Cfg */ + DuRlcUeCfg duRlcUeCfg; /* Rlc Ue Cfg */ }DuUeCb; typedef struct slotInfo diff --git a/src/du_app/du_ue_mgr.c b/src/du_app/du_ue_mgr.c index 1d56ab3f6..b690c6bb2 100644 --- a/src/du_app/du_ue_mgr.c +++ b/src/du_app/du_ue_mgr.c @@ -376,7 +376,7 @@ uint8_t duBuildAndSendDlCcchInd(uint16_t *cellId, uint16_t *crnti, \ * RFAILED - failure * * ****************************************************************/ -uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, F1DlRrcMsg *f1DlRrcMsg) +uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, DuRlcUeCfg ueCfg, F1DlRrcMsg *f1DlRrcMsg) { Pst pst; uint8_t ret; @@ -411,7 +411,7 @@ uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, F1DlRrcMsg dlRrcMsgInfo->ueId = ueCfg.ueId; for(lcIdx = 0; lcIdx <= MAX_NUM_LC; lcIdx++) { - if(ueCfg.rlcLcCfg[lcIdx].lcId == f1DlRrcMsg->srbId) + if(ueCfg.rlcLcCfg[lcIdx].rlcBearerCfg.lcId == f1DlRrcMsg->srbId) { dlRrcMsgInfo->lcId = f1DlRrcMsg->srbId; break; @@ -524,7 +524,7 @@ uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg) { ueFound = true; ret = duBuildAndSendDlRrcMsgToRlc(duCb.actvCellLst[cellIdx]->cellId, \ - duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, dlRrcMsg); + duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg, dlRrcMsg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU_APP: duBuildAndSendDlRrcMsgToRlc() Failed for UE ID:%d", dlRrcMsg->gnbDuUeF1apId); @@ -1574,18 +1574,18 @@ uint8_t fillDefaultRlcModeCfg(uint8_t rlcMode, RlcBearerCfg *lcCfg) * *****************************************************************/ -uint8_t fillRlcSrb1LcCfg(RlcBearerCfg *rlcLcCfg) +uint8_t fillRlcSrb1LcCfg(DuRlcBearerCfg *rlcLcCfg) { uint8_t ret = ROK; - rlcLcCfg->rbId = SRB1_LCID; - rlcLcCfg->rbType = RB_TYPE_SRB; - rlcLcCfg->lcId = SRB1_LCID; - rlcLcCfg->lcType = LCH_DCCH; - rlcLcCfg->rlcMode = RLC_AM; + rlcLcCfg->rlcBearerCfg.rbId = SRB1_LCID; + rlcLcCfg->rlcBearerCfg.rbType = RB_TYPE_SRB; + rlcLcCfg->rlcBearerCfg.lcId = SRB1_LCID; + rlcLcCfg->rlcBearerCfg.lcType = LCH_DCCH; + rlcLcCfg->rlcBearerCfg.rlcMode = RLC_AM; rlcLcCfg->configType = CONFIG_ADD; - ret = fillDefaultRlcModeCfg(rlcLcCfg->rlcMode, rlcLcCfg); - rlcLcCfg->isLcAddModRspSent = true; + ret = fillDefaultRlcModeCfg(rlcLcCfg->rlcBearerCfg.rlcMode, &rlcLcCfg->rlcBearerCfg); + rlcLcCfg->rlcBearerCfg.isLcAddModRspSent = true; return ret; } @@ -1606,21 +1606,21 @@ uint8_t fillRlcSrb1LcCfg(RlcBearerCfg *rlcLcCfg) * *****************************************************************/ -uint8_t sendUeRecfgReqToRlc(RlcUeCfg *rlcUeCfg) +uint8_t sendUeRecfgReqToRlc(RlcUeRecfg *rlcUeRecfg) { uint8_t ret; Pst pst; FILL_PST_DUAPP_TO_RLC(pst, RLC_UL_INST, EVENT_RLC_UE_RECONFIG_REQ); - if(rlcUeCfg) + if(rlcUeRecfg) { /* Processing one Ue at a time to RLC */ DU_LOG("\nDEBUG --> DU_APP: Sending Ue Reconfig Request to RLC UL"); - ret = (*packRlcUeReconfigReqOpts[pst.selector])(&pst, rlcUeCfg); + ret = (*packRlcUeReconfigReqOpts[pst.selector])(&pst, rlcUeRecfg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU_APP : Failed to send Ue Reconfig Req to RLC at sendUeRecfgReqToRlc()"); - DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rlcUeCfg, sizeof(RlcUeCfg)); + DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, rlcUeRecfg, sizeof(RlcUeRecfg)); } } else @@ -1682,17 +1682,17 @@ uint8_t fillSnssaiInfo(Snssai *snssaiTobeSend, Snssai *snssaiDb, Snssai **oldSns * * @details * - * Function : fillRlcUeCfg + * Function : updateRlcUeCfg * * Functionality: Fills Rlc Bearer Cfg * * *****************************************************************/ -uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcUeCfg *rlcUeCfg) +uint8_t updateRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, DuRlcUeCfg *rlcUeCfg) { uint8_t ret, dbIdx, lcIdx, cellIdx; bool lcIdFound = false; - RlcUeCfg *duRlcDb = NULLP; + DuRlcUeCfg *duRlcDb = NULLP; ret = ROK; rlcUeCfg->cellId = cellId; @@ -1705,22 +1705,22 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcU if(ret == ROK) rlcUeCfg->numLcs++; else - memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); + memset(rlcUeCfg, 0, sizeof(DuRlcUeCfg)); } else { /* Fetch RlcDb from DuUeCb */ GET_CELL_IDX(cellId, cellIdx); - duRlcDb = &duCb.actvCellLst[cellIdx]->ueCb[rlcUeCfg->ueId-1].rlcUeCfg; + duRlcDb = &duCb.actvCellLst[cellIdx]->ueCb[rlcUeCfg->ueId-1].duRlcUeCfg; duRlcDb->rlcUeCfgState = UE_CFG_INPROGRESS; for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++) { - ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]); + ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcBearerCfg.rlcMode, &ueCfgDb->rlcLcCfg[dbIdx].rlcBearerCfg); if(ret == RFAILED) { DU_LOG("\n ERROR --> DU APP : Failed to fill Rlc Mode at fillRlcUeCfg()"); - memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); + memset(rlcUeCfg, 0, sizeof(DuRlcUeCfg)); return ret; } @@ -1729,7 +1729,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcU /* Fill Rlc Ue Cfg List for ADD/MOD/DEL */ for(lcIdx = 0; lcIdx < duRlcDb->numLcs; lcIdx++) { - if(ueCfgDb->rlcLcCfg[dbIdx].lcId == duRlcDb->rlcLcCfg[lcIdx].lcId) + if(ueCfgDb->rlcLcCfg[dbIdx].rlcBearerCfg.lcId == duRlcDb->rlcLcCfg[lcIdx].rlcBearerCfg.lcId) { lcIdFound = true; if((ueCfgDb->rlcLcCfg[dbIdx].configType == CONFIG_UNKNOWN)|| @@ -1737,9 +1737,9 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcU { /* MOD */ ueCfgDb->rlcLcCfg[dbIdx].configType = CONFIG_MOD; /* update Db for MOD type */ - memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(RlcBearerCfg)); - fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].snssai, ueCfgDb->rlcLcCfg[dbIdx].snssai,\ - &duRlcDb->rlcLcCfg[lcIdx].snssai,false); + memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(DuRlcBearerCfg)); + fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].rlcBearerCfg.snssai, ueCfgDb->rlcLcCfg[dbIdx].rlcBearerCfg.snssai,\ + &duRlcDb->rlcLcCfg[lcIdx].rlcBearerCfg.snssai,false); } } else @@ -1750,8 +1750,8 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcU if(!lcIdFound) { /* ADD/ DEL Config Type */ - memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(RlcBearerCfg)); - fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].snssai, ueCfgDb->rlcLcCfg[dbIdx].snssai, NULL, false); + memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(DuRlcBearerCfg)); + fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].rlcBearerCfg.snssai, ueCfgDb->rlcLcCfg[dbIdx].rlcBearerCfg.snssai, NULL, false); } rlcUeCfg->numLcs++; } @@ -1804,9 +1804,9 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC"); /* Filling Rlc Ue Config */ - memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, 0, sizeof(RlcUeCfg)); + memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg, 0, sizeof(DuRlcUeCfg)); ret = duBuildAndSendUeCreateReqToRlc(ueCcchCtxt->cellId, ueCcchCtxt->gnbDuUeF1apId, NULL, - &duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg); + &duCb.actvCellLst[cellIdx]->ueCb[ueIdx].duRlcUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to RLC"); @@ -1896,6 +1896,41 @@ void fillMacUeCfg(DuMacUeCfg *duMacUeCfg, MacUeCfg *macUeCfg) } } +/********************************************************************************** + * + * @brief Fills Ue Cfg from DU DB to RLCUeCfg + * + * @details + * + * Function : fillRlcUeCfg + * + * Functionality: fills ue Cfg to be sent to RLC + * + * @params[in] DuRlcUeCfg Pointer + * RlcUeCfg Pointer + * + * @return ROK - success + * RFAILED - failure + * *******************************************************************************/ +void fillRlcUeCfg(DuRlcUeCfg *duRlcUeCfg, RlcUeCfg *rlcUeCfg) +{ + uint8_t lcIdx = 0; + + rlcUeCfg->cellId = duRlcUeCfg->cellId; + rlcUeCfg->ueId = duRlcUeCfg->ueId; + + rlcUeCfg->numLcsToAdd = 0; + for(lcIdx = 0; lcIdx < duRlcUeCfg->numLcs; lcIdx++) + { + if(duRlcUeCfg->rlcLcCfg[lcIdx].configType == CONFIG_ADD) + { + memcpy(&rlcUeCfg->rlcLcCfgAdd[rlcUeCfg->numLcsToAdd], &duRlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg, sizeof(RlcBearerCfg)); + rlcUeCfg->numLcsToAdd++; + } + } + return; +} + /****************************************************************** * * @brief Builds and Send UE Create Request to MAC @@ -2191,79 +2226,79 @@ uint8_t duUpdateMacCfg(DuMacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb) * *****************************************************************/ -uint8_t fillRlcCfgToAddMod(RlcBearerCfg *lcCfg, RlcBearerCfg *f1UeDbLcCfg) +uint8_t fillRlcCfgToAddMod(DuRlcBearerCfg *lcCfg, DuRlcBearerCfg *f1UeDbLcCfg) { lcCfg->configType = f1UeDbLcCfg->configType; - lcCfg->rbId = f1UeDbLcCfg->rbId; - lcCfg->rbType = f1UeDbLcCfg->rbType; - lcCfg->lcId = f1UeDbLcCfg->lcId; - lcCfg->lcType = f1UeDbLcCfg->lcType; - lcCfg->rlcMode = f1UeDbLcCfg->rlcMode; + lcCfg->rlcBearerCfg.rbId = f1UeDbLcCfg->rlcBearerCfg.rbId; + lcCfg->rlcBearerCfg.rbType = f1UeDbLcCfg->rlcBearerCfg.rbType; + lcCfg->rlcBearerCfg.lcId = f1UeDbLcCfg->rlcBearerCfg.lcId; + lcCfg->rlcBearerCfg.lcType = f1UeDbLcCfg->rlcBearerCfg.lcType; + lcCfg->rlcBearerCfg.rlcMode = f1UeDbLcCfg->rlcBearerCfg.rlcMode; - switch(lcCfg->rlcMode) + switch(lcCfg->rlcBearerCfg.rlcMode) { case RLC_AM : { - if(!lcCfg->u.amCfg) + if(!lcCfg->rlcBearerCfg.u.amCfg) { - DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg)); - if(!lcCfg->u.amCfg) + DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.amCfg, sizeof(AmBearerCfg)); + if(!lcCfg->rlcBearerCfg.u.amCfg) return RFAILED; } /* DL AM */ - lcCfg->u.amCfg->dlAmCfg.snLenDl = f1UeDbLcCfg->u.amCfg->dlAmCfg.snLenDl; - lcCfg->u.amCfg->dlAmCfg.pollRetxTmr = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollRetxTmr; - lcCfg->u.amCfg->dlAmCfg.pollPdu = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollPdu; - lcCfg->u.amCfg->dlAmCfg.pollByte = f1UeDbLcCfg->u.amCfg->dlAmCfg.pollByte; - lcCfg->u.amCfg->dlAmCfg.maxRetxTh = f1UeDbLcCfg->u.amCfg->dlAmCfg.maxRetxTh; + lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.snLenDl = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.snLenDl; + lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollRetxTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollRetxTmr; + lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollPdu = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollPdu; + lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollByte = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.pollByte; + lcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.maxRetxTh = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->dlAmCfg.maxRetxTh; /* UL AM */ - lcCfg->u.amCfg->ulAmCfg.snLenUl = f1UeDbLcCfg->u.amCfg->ulAmCfg.snLenUl; - lcCfg->u.amCfg->ulAmCfg.reAssemTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.reAssemTmr; - lcCfg->u.amCfg->ulAmCfg.statProhTmr = f1UeDbLcCfg->u.amCfg->ulAmCfg.statProhTmr; + lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.snLenUl = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.snLenUl; + lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.reAssemTmr; + lcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.statProhTmr = f1UeDbLcCfg->rlcBearerCfg.u.amCfg->ulAmCfg.statProhTmr; break; } case RLC_UM_BI_DIRECTIONAL : { - if(!lcCfg->u.umBiDirCfg) + if(!lcCfg->rlcBearerCfg.u.umBiDirCfg) { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); - if(!lcCfg->u.umBiDirCfg) + DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umBiDirCfg, sizeof(UmBiDirBearerCfg)); + if(!lcCfg->rlcBearerCfg.u.umBiDirCfg) return RFAILED; } /* UL UM BI DIR INFO */ - lcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm; - lcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr; + lcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.snLenUlUm; + lcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->ulUmCfg.reAssemTmr; /* DL UM BI DIR INFO */ - lcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm; + lcCfg->rlcBearerCfg.u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->rlcBearerCfg.u.umBiDirCfg->dlUmCfg.snLenDlUm; break; } case RLC_UM_UNI_DIRECTIONAL_UL : { - if(!lcCfg->u.umUniDirUlCfg) + if(!lcCfg->rlcBearerCfg.u.umUniDirUlCfg) { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); - if(!lcCfg->u.umUniDirUlCfg) + DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg)); + if(!lcCfg->rlcBearerCfg.u.umUniDirUlCfg) return RFAILED; } - lcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm; - lcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr; + lcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.snLenUlUm; + lcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirUlCfg->ulUmCfg.reAssemTmr; break; } case RLC_UM_UNI_DIRECTIONAL_DL : { - if(!lcCfg->u.umUniDirDlCfg) + if(!lcCfg->rlcBearerCfg.u.umUniDirDlCfg) { - DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); - if(!lcCfg->u.umUniDirDlCfg) + DU_ALLOC_SHRABL_BUF(lcCfg->rlcBearerCfg.u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg)); + if(!lcCfg->rlcBearerCfg.u.umUniDirDlCfg) return RFAILED; } - lcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm; + lcCfg->rlcBearerCfg.u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->rlcBearerCfg.u.umUniDirDlCfg->dlUmCfg.snLenDlUm; break; } default: - DU_LOG("\nERROR --> DU_APP: Invalid Rlc Mode %d at fillRlcCfgToAddMod()", lcCfg->rlcMode); + DU_LOG("\nERROR --> DU_APP: Invalid Rlc Mode %d at fillRlcCfgToAddMod()", lcCfg->rlcBearerCfg.rlcMode); return RFAILED; } return ROK; @@ -2285,7 +2320,7 @@ uint8_t fillRlcCfgToAddMod(RlcBearerCfg *lcCfg, RlcBearerCfg *f1UeDbLcCfg) * * ****************************************************************/ -uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) +uint8_t duUpdateRlcLcCfg(DuRlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) { uint8_t ret, lcIdx, dbIdx, numLcs, lcDelIdx; @@ -2295,7 +2330,7 @@ uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) numLcs = rlcUeCfg->numLcs; for(lcIdx = 0; lcIdx < numLcs; lcIdx++) { - if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].lcId == rlcUeCfg->rlcLcCfg[lcIdx].lcId) + if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].rlcBearerCfg.lcId == rlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg.lcId) { if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_MOD) { @@ -2305,19 +2340,20 @@ uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) DU_LOG("\nERROR --> DU APP : Failed to modify LC at Idx %d in duUpdateRlcCfg()", lcDelIdx); break; } - fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].snssai, &rlcUeCfg->rlcLcCfg[lcIdx].snssai, true); + fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].rlcBearerCfg.snssai,\ + &rlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg.snssai, true); } else if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_DEL) { /* Free memory at matched lcIdx index */ - freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx]); + freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg); rlcUeCfg->numLcs--; for(lcDelIdx = lcIdx; lcDelIdx < rlcUeCfg->numLcs; lcDelIdx++) { ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcDelIdx], &rlcUeCfg->rlcLcCfg[lcDelIdx+1]); - fillSnssaiInfo(NULL, rlcUeCfg->rlcLcCfg[lcDelIdx+1].snssai, &rlcUeCfg->rlcLcCfg[lcDelIdx].snssai,\ - true); - freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcDelIdx+1]); + fillSnssaiInfo(NULL, rlcUeCfg->rlcLcCfg[lcDelIdx+1].rlcBearerCfg.snssai,\ + &rlcUeCfg->rlcLcCfg[lcDelIdx].rlcBearerCfg.snssai, true); + freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcDelIdx+1].rlcBearerCfg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to delete LC at Idx %d in duUpdateRlcCfg()", lcDelIdx); @@ -2332,8 +2368,8 @@ uint8_t duUpdateRlcLcCfg(RlcUeCfg *rlcUeCfg, F1UeContextSetupDb *f1UeDb) ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]); if(ret == ROK) { - fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].snssai, &rlcUeCfg->rlcLcCfg[ rlcUeCfg->numLcs].snssai,\ - true); + fillSnssaiInfo(NULL, f1UeDb->duUeCfg.rlcLcCfg[dbIdx].rlcBearerCfg.snssai,\ + &rlcUeCfg->rlcLcCfg[rlcUeCfg->numLcs].rlcBearerCfg.snssai, true); rlcUeCfg->numLcs++; } } @@ -2560,9 +2596,9 @@ uint8_t duUpdateDuUeCbCfg(uint8_t ueId, uint8_t cellId) ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1]; /*Filling RLC Ue Cfg */ - ueCb->rlcUeCfg.cellId = cellId; - ueCb->rlcUeCfg.ueId = ueId; - ret = duUpdateRlcLcCfg(&ueCb->rlcUeCfg, ueCb->f1UeDb); + ueCb->duRlcUeCfg.cellId = cellId; + ueCb->duRlcUeCfg.ueId = ueId; + ret = duUpdateRlcLcCfg(&ueCb->duRlcUeCfg, ueCb->f1UeDb); if(ret == ROK) { /*Filling MAC Ue Cfg */ @@ -2622,7 +2658,7 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp) if((duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].ueState == UE_HANDIN_IN_PROGRESS) && (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duMacUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) { if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) { @@ -2693,7 +2729,7 @@ uint8_t DuProcMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *reCfgRsp) { duCb.actvCellLst[cellIdx]->ueCb[reCfgRsp->ueId -1].duMacUeCfg.macUeCfgState = UE_RECFG_COMPLETE; if((duCb.actvCellLst[cellIdx]->ueCb[reCfgRsp->ueId -1].duMacUeCfg.macUeCfgState == UE_RECFG_COMPLETE) && - (duCb.actvCellLst[reCfgRsp->cellId -1]->ueCb[reCfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_RECFG_COMPLETE)) + (duCb.actvCellLst[reCfgRsp->cellId -1]->ueCb[reCfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState == UE_RECFG_COMPLETE)) { if((ret = duUpdateDuUeCbCfg(reCfgRsp->ueId, reCfgRsp->cellId)) == ROK) { @@ -2752,13 +2788,13 @@ uint8_t DuProcMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *reCfgRsp) * *****************************************************************/ -uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t gnbDuUeF1apId, DuUeCfg *ueCfgDb, RlcUeCfg *duRlcUeCfg) +uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t gnbDuUeF1apId, DuUeCfg *ueCfgDb, DuRlcUeCfg *duRlcUeCfg) { uint8_t ret = ROK; RlcUeCfg *rlcUeCfg = NULLP; Pst pst; - ret = fillRlcUeCfg(cellId, gnbDuUeF1apId, ueCfgDb, duRlcUeCfg); + ret = updateRlcUeCfg(cellId, gnbDuUeF1apId, ueCfgDb, duRlcUeCfg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to fill Rlc Ue Cfg at duBuildAndSendUeCreateReqToRlc()"); @@ -2771,7 +2807,8 @@ uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t gnbDuUeF1apId, D if(rlcUeCfg) { memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); - memcpy(rlcUeCfg, duRlcUeCfg, sizeof(RlcUeCfg)); + fillRlcUeCfg(duRlcUeCfg, rlcUeCfg); + /* Processing one Ue at a time to RLC */ DU_LOG("\nDEBUG --> DU_APP: Sending UE create request to RLC UL"); ret = (*packRlcUeCreateReqOpts[pst.selector])(&pst, rlcUeCfg); @@ -2819,11 +2856,11 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) if(pst->event == EVENT_RLC_UE_CREATE_RSP) { DU_LOG("\nINFO --> DU_APP: RLC UE Create Response : SUCCESS [UE IDX:%d]", cfgRsp->ueId); - duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE; if((duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].ueState == UE_HANDIN_IN_PROGRESS) && (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duMacUeCfg.macUeCfgState == UE_CREATE_COMPLETE) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState == UE_CREATE_COMPLETE)) { if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) { @@ -2849,9 +2886,9 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) { DU_LOG("\nINFO --> DU_APP: RLC UE Reconfig Response : SUCCESS [UE IDX:%d]", cfgRsp->ueId); - duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE; + duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE; if((duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duMacUeCfg.macUeCfgState == UE_RECFG_COMPLETE) && - (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].rlcUeCfg.rlcUeCfgState == UE_RECFG_COMPLETE)) + (duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].duRlcUeCfg.rlcUeCfgState == UE_RECFG_COMPLETE)) { if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK) { @@ -2891,6 +2928,57 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) return ret; } +/********************************************************************************** + * + * @brief Fills Ue ReCfg from DU DB to RlcUeRecfg + * + * @details + * + * Function : fillRlcUeRecfg + * + * Functionality: fills ue ReCfg to be sent to RLC + * + * @params[in] DuRlcUeCfg Pointer + * RlcUeRecfg Pointer + * + * @return void + * *******************************************************************************/ +void fillRlcUeRecfg(DuRlcUeCfg *duRlcUeCfg, RlcUeRecfg *rlcUeRecfg) +{ + uint8_t lcIdx = 0; + + rlcUeRecfg->cellId = duRlcUeCfg->cellId; + rlcUeRecfg->ueId = duRlcUeCfg->ueId; + + + if(duRlcUeCfg->numLcs > 0) + { + rlcUeRecfg->numLcsToAdd = 0; + rlcUeRecfg->numLcsToMod = 0; + rlcUeRecfg->numLcsToRel = 0; + + for(lcIdx = 0; lcIdx < duRlcUeCfg->numLcs; lcIdx++) + { + if(duRlcUeCfg->rlcLcCfg[lcIdx].configType == CONFIG_ADD) + { + memcpy(&rlcUeRecfg->rlcLcCfgAdd[rlcUeRecfg->numLcsToAdd], &duRlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg, sizeof(RlcBearerCfg)); + rlcUeRecfg->numLcsToAdd++; + } + if(duRlcUeCfg->rlcLcCfg[lcIdx].configType == CONFIG_MOD) + { + memcpy(&rlcUeRecfg->rlcLcCfgMod[rlcUeRecfg->numLcsToMod], &duRlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg, sizeof(RlcBearerCfg)); + rlcUeRecfg->numLcsToMod++; + } + if(duRlcUeCfg->rlcLcCfg[lcIdx].configType == CONFIG_DEL) + { + memcpy(&rlcUeRecfg->rlcLcCfgRel[rlcUeRecfg->numLcsToRel], &duRlcUeCfg->rlcLcCfg[lcIdx].rlcBearerCfg, sizeof(RlcBearerCfg)); + rlcUeRecfg->numLcsToRel++; + } + } + } + return; +} + /******************************************************************* * * @brief Builds and Send Ue Reconfig Req to RLC @@ -2912,17 +3000,25 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp) uint8_t duBuildAndSendUeRecfgReqToRlc(uint8_t cellId, uint8_t gnbDuUeF1apId, uint8_t crnti, DuUeCfg *ueCfgDb) { uint8_t ret = ROK; - RlcUeCfg *rlcUeCfg = NULLP; + DuRlcUeCfg *duRlcUeCfg = NULLP; + RlcUeRecfg *rlcUeRecfg = NULLP; - DU_ALLOC_SHRABL_BUF(rlcUeCfg, sizeof(RlcUeCfg)); - if(rlcUeCfg) + DU_ALLOC(duRlcUeCfg, sizeof(DuRlcUeCfg)); + DU_ALLOC_SHRABL_BUF(rlcUeRecfg, sizeof(RlcUeRecfg)); + if(duRlcUeCfg && rlcUeRecfg) { - memset(rlcUeCfg, 0, sizeof(RlcUeCfg)); - ret = fillRlcUeCfg(cellId, gnbDuUeF1apId, ueCfgDb, rlcUeCfg); + memset(duRlcUeCfg, 0, sizeof(DuRlcUeCfg)); + memset(rlcUeRecfg, 0, sizeof(RlcUeRecfg)); + + ret = updateRlcUeCfg(cellId, gnbDuUeF1apId, ueCfgDb, duRlcUeCfg); + if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed at duBuildAndSendUeRecfgReqToRlc()"); else - ret = sendUeRecfgReqToRlc(rlcUeCfg); + { + fillRlcUeRecfg(duRlcUeCfg, rlcUeRecfg); + ret = sendUeRecfgReqToRlc(rlcUeRecfg); + } } else { @@ -3039,12 +3135,15 @@ uint8_t duBuildAndSendUeRecfgReqToMac(uint8_t cellId, uint8_t duUeF1apId, uint8_ { memset(duMacUeCfg, 0, sizeof(DuMacUeCfg)); memset(macUeRecfg, 0, sizeof(MacUeRecfg)); + ret = updateDuMacUeCfg(cellId, duUeF1apId, crnti, ueCfgDb, duMacUeCfg); - fillMacUeRecfg(duMacUeCfg, macUeRecfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to fill Mac Ue Cfg at duBuildAndSendUeRecfgReqToMac()"); else + { + fillMacUeRecfg(duMacUeCfg, macUeRecfg); ret = sendUeRecfgReqToMac(macUeRecfg); + } } else { @@ -3052,7 +3151,7 @@ uint8_t duBuildAndSendUeRecfgReqToMac(uint8_t cellId, uint8_t duUeF1apId, uint8_ ret = RFAILED; } DU_FREE(duMacUeCfg, sizeof(DuMacUeCfg)); - + return ret; } @@ -3106,7 +3205,7 @@ uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, DuUeCb *ueCb) if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to MAC"); - ret = duBuildAndSendUeCreateReqToRlc(cellId, ueCb->gnbDuUeF1apId, duUeCfg, &ueCb->rlcUeCfg); + ret = duBuildAndSendUeCreateReqToRlc(cellId, ueCb->gnbDuUeF1apId, duUeCfg, &ueCb->duRlcUeCfg); if(ret == RFAILED) DU_LOG("\nERROR --> DU APP : Failed to send UE create request to RLC"); @@ -3224,7 +3323,7 @@ uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb) if(ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu) { /* Sending DL RRC Message to RLC */ - ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->rlcUeCfg, ueCb->f1UeDb->dlRrcMsg); + ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->duRlcUeCfg, ueCb->f1UeDb->dlRrcMsg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to send DL RRC msg in duProcUeContextSetupRequest()"); @@ -3318,7 +3417,7 @@ uint8_t duProcUeContextModReq(DuUeCb *ueCb) if(ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu) { /* Sending DL RRC Message to RLC */ - ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->rlcUeCfg, ueCb->f1UeDb->dlRrcMsg); + ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->duRlcUeCfg, ueCb->f1UeDb->dlRrcMsg); if(ret == RFAILED) { DU_LOG("\nERROR --> DU APP : Failed to send DL RRC msg in duProcUeContextModReq()"); @@ -3464,11 +3563,11 @@ uint8_t deleteUeCfg(uint16_t cellId, uint8_t ueId) if(duCb.actvCellLst[cellIdx] != NULLP) { if((duCb.actvCellLst[cellIdx]->ueCb[ueId-1].duMacUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\ - &&(duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg.rlcUeCfgState == UE_DELETE_COMPLETE)) + &&(duCb.actvCellLst[cellIdx]->ueCb[ueId-1].duRlcUeCfg.rlcUeCfgState == UE_DELETE_COMPLETE)) { ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1]; deleteMacUeCfg(&ueCb->duMacUeCfg); - deleteRlcUeCfg(&ueCb->rlcUeCfg); + deleteRlcUeCfg(&ueCb->duRlcUeCfg); if(ueCb->f1UeDb !=NULLP) { freeF1UeDb(ueCb->f1UeDb); @@ -3595,7 +3694,7 @@ uint8_t DuProcRlcUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *delRsp) DU_LOG("\nINFO --> DU_APP: RLC UE Delete Response : SUCCESS [UE IDX:%d]", ueId); if(duCb.actvCellLst[cellIdx]!=NULLP) { - duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg.rlcUeCfgState = UE_DELETE_COMPLETE; + duCb.actvCellLst[cellIdx]->ueCb[ueId-1].duRlcUeCfg.rlcUeCfgState = UE_DELETE_COMPLETE; GET_CRNTI(crnti, ueId); if(sendUeDeleteReqToMac(delRsp->cellId, ueId, crnti) == RFAILED) { @@ -3776,7 +3875,7 @@ uint8_t duBuildAndSendUeDeleteReq(uint16_t cellId, uint16_t crnti) * *****************************************************************/ -void deleteRlcUeCfg(RlcUeCfg *ueCfg) +void deleteRlcUeCfg(DuRlcUeCfg *ueCfg) { uint8_t lcIdx = 0; RlcBearerCfg *lcCfg= NULLP; @@ -3784,7 +3883,7 @@ void deleteRlcUeCfg(RlcUeCfg *ueCfg) { for(lcIdx =0 ; lcIdx < ueCfg->numLcs ; lcIdx++) { - lcCfg = &ueCfg->rlcLcCfg[lcIdx]; + lcCfg = &ueCfg->rlcLcCfg[lcIdx].rlcBearerCfg; switch(lcCfg->rlcMode) { case RLC_AM : @@ -3846,7 +3945,7 @@ uint8_t duProcUeContextReleaseCommand(uint16_t cellId, DuUeCb *duUeCb) { if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP) { - ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueId-1].rlcUeCfg,\ + ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueId-1].duRlcUeCfg,\ duUeCb->f1UeDb->dlRrcMsg); if(ret == RFAILED) { diff --git a/src/du_app/du_ue_mgr.h b/src/du_app/du_ue_mgr.h index 0f446250b..5a18a4a23 100644 --- a/src/du_app/du_ue_mgr.h +++ b/src/du_app/du_ue_mgr.h @@ -24,11 +24,11 @@ uint8_t duHdlRlcUlData(Pst *pst, KwuDatIndInfo* datInd, Buffer *mBuf); uint8_t cmPkRlcDatReq(Pst * pst,RlcDatReqInfo* datReq,Buffer * mBuf); uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t duUeF1apId, uint16_t crnti, DuUeCfg *ueCfgDb, DuMacUeCfg *duMacUeCfg); -uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, RlcUeCfg *duRlcUeCfg); +uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t duUeF1apId, DuUeCfg *ueCfgDb, DuRlcUeCfg *duRlcUeCfg); uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId); uint8_t duProcUlCcchInd(UlCcchIndInfo *ulCcchIndInfo); uint8_t duBuildAndSendUeDeleteReq(uint16_t cellId, uint16_t crnti); -void deleteRlcUeCfg(RlcUeCfg *ueCfg); +void deleteRlcUeCfg(DuRlcUeCfg *ueCfg); void freeF1UeDb(F1UeContextSetupDb *f1UeDb); uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueId, uint16_t crnti); uint8_t sendUeDeleteReqToRlc(uint16_t cellId, uint8_t ueId); -- 2.16.6