#ifdef O1_ENABLE
#include "AlarmInterface.h"
-#include "ConfigInterface.h"
+#include "CmInterface.h"
#endif
DuMacDlCcchInd packMacDlCcchIndOpts[] =
packDuRlcUeDeleteReq /* Light weight-loose coupling */
};
-
-/******************************************************************
- *
- * @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)
- {
- 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 Function to return Drb LcId
uint8_t fillDlUserDataInfo(uint32_t teId, RlcDlUserDataInfo *dlDataMsgInfo)
{
- uint8_t drbIdx;
+ uint8_t teIdx = 0;
- for(drbIdx = 0; drbIdx < duCb.numDrb; drbIdx++)
+ /*Traversing the duCb to find the CellId, UeId, LCID corresponding to TEID*/
+ for(teIdx = 0; teIdx < duCb.numTeId; teIdx++)
{
- if(duCb.upTnlCfg[drbIdx] && (duCb.upTnlCfg[drbIdx]->tnlCfg1 != NULLP))
+ if(duCb.upTnlCfg[teIdx] && (duCb.upTnlCfg[teIdx]->tnlCfg1 != NULLP))
{
- if(duCb.upTnlCfg[drbIdx]->tnlCfg1->teId == teId)
- {
- dlDataMsgInfo->cellId = duCb.upTnlCfg[drbIdx]->cellId;
- dlDataMsgInfo->ueIdx = duCb.upTnlCfg[drbIdx]->ueIdx;
- dlDataMsgInfo->rbId = duCb.upTnlCfg[drbIdx]->drbId;
- return ROK;
- }
+ if(duCb.upTnlCfg[teIdx]->tnlCfg1->teId == teId)
+ {
+ dlDataMsgInfo->cellId = duCb.upTnlCfg[teIdx]->cellId;
+ dlDataMsgInfo->ueId = duCb.upTnlCfg[teIdx]->ueIdx;
+ dlDataMsgInfo->rbId = duCb.upTnlCfg[teIdx]->drbId;
+ return ROK;
+ }
}
}
return RFAILED;
if(duBuildAndSendDlUserDataToRlc(msgLen, egtpMsg) != ROK)
{
DU_LOG("\nERROR --> DU_APP : Failed to build DL USer Data in duHdlEgtpDlData()");
- DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, egtpMsg->msg, msgLen);
return RFAILED;
}
return ROK;
/* Filling up the RRC msg info */
dlRrcMsgInfo->cellId = cellId;
- dlRrcMsgInfo->ueIdx = ueCfg.ueIdx;
+ dlRrcMsgInfo->ueId = ueCfg.ueId;
for(lcIdx = 0; lcIdx <= MAX_NUM_LC; lcIdx++)
{
if(ueCfg.rlcLcCfg[lcIdx].lcId == f1DlRrcMsg->srbId)
coreset1StartPrb = coreset0EndPrb +6;
coreset1NumPrb = CORESET1_NUM_PRB;
/* calculate the PRBs */
- freqDomRscAllocType0(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
+ fillCoresetFeqDomAllocMap(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
memcpy(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, freqDomainResource,
FREQ_DOM_RSRC_SIZE);
void fillDefaultModulation(MacUeCfg *ueCfg)
{
ueCfg->dlModInfo.modOrder = MOD_ORDER_QPSK;
- ueCfg->dlModInfo.mcsIndex = SIB1_MCS;
+ ueCfg->dlModInfo.mcsIndex = DEFAULT_MCS;
ueCfg->dlModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */
ueCfg->ulModInfo.modOrder = MOD_ORDER_QPSK;
- ueCfg->ulModInfo.mcsIndex = SIB1_MCS;
+ ueCfg->ulModInfo.mcsIndex = DEFAULT_MCS;
ueCfg->ulModInfo.mcsTable = MCS_TABLE_QAM64; /* Spec 38.214-Table 5.1.3.1-1 */
}
(ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD))
{
ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD;
- ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx], &duMacDb->lcCfgList[lcIdx], FALSE);
+ ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx],\
+ &duMacDb->lcCfgList[lcIdx], FALSE);
}
}
else
return ret;
}
+/******************************************************************
+ *
+ * @brief Fills Snssai information
+ *
+ * @details
+ *
+ * Function : fillSnssaiInfo
+ *
+ * Functionality: Fills Snssai information
+ *
+ * @params[in] LcCfg *snssaiTobeSend, LcCfg *snssaiDb, LcCfg *oldSnssai,
+ * Bool toUpdateg
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ *****************************************************************/
+uint8_t fillSnssaiInfo(Snssai *snssaiTobeSend, Snssai *snssaiDb, Snssai **oldSnssai, Bool toUpdate)
+{
+ if(!toUpdate)
+ {
+ if(snssaiDb)
+ snssaiTobeSend = snssaiDb;
+ else if(oldSnssai)
+ snssaiTobeSend = *oldSnssai;
+ else
+ snssaiTobeSend = NULL;
+ }
+ else
+ {
+ if(snssaiDb)
+ {
+ if(*oldSnssai)
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, *oldSnssai, sizeof(Snssai));
+
+ DU_ALLOC_SHRABL_BUF(*oldSnssai, sizeof(Snssai));
+ if(*oldSnssai == NULL)
+ {
+ DU_LOG("\nERROR --> DU APP : Memory Alloc Failed at fillSnssaiInfo()");
+ return RFAILED;
+ }
+ memcpy(*oldSnssai, snssaiDb, sizeof(Snssai));
+ }
+ }
+ return ROK;
+}
/******************************************************************
*
* @brief Fills RlcBearerCfg structure
{
/* Initial RB being Added */
rlcUeCfg->cellId = cellId;
- rlcUeCfg->ueIdx = ueIdx;
+ rlcUeCfg->ueId = ueIdx;
ret = fillRlcSrb1LcCfg(&rlcUeCfg->rlcLcCfg[0]);
if(ret == ROK)
rlcUeCfg->numLcs++;
else
- memset(rlcUeCfg, 0, sizeof(RlcUeCfg));
+ memset(rlcUeCfg, 0, sizeof(RlcUeCfg));
}
else
{
duRlcDb->rlcUeCfgState = UE_CFG_INPROGRESS;
/*Filling RlcUeCfg */
rlcUeCfg->cellId = cellId;
- rlcUeCfg->ueIdx = ueIdx;
+ rlcUeCfg->ueId = ueIdx;
for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++)
{
ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]);
/* 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);
}
}
else
{
/* ADD/ DEL Config Type */
memcpy(&rlcUeCfg->rlcLcCfg[dbIdx], &ueCfgDb->rlcLcCfg[dbIdx], sizeof(RlcBearerCfg));
+ fillSnssaiInfo(rlcUeCfg->rlcLcCfg[dbIdx].snssai, ueCfgDb->rlcLcCfg[dbIdx].snssai, NULL, false);
}
rlcUeCfg->numLcs++;
}
lcCfg->lcId = f1UeDbLcCfg->lcId;
lcCfg->lcType = f1UeDbLcCfg->lcType;
lcCfg->rlcMode = f1UeDbLcCfg->rlcMode;
+
switch(lcCfg->rlcMode)
{
case RLC_AM :
- {
- if(!lcCfg->u.amCfg)
- {
- DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg));
+ {
if(!lcCfg->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;
-
- /* 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;
- break;
- }
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->u.amCfg, sizeof(AmBearerCfg));
+ if(!lcCfg->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;
+
+ /* 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;
+ break;
+ }
case RLC_UM_BI_DIRECTIONAL :
- {
- if(!lcCfg->u.umBiDirCfg)
- {
- DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg));
- if(!lcCfg->u.umBiDirCfg)
- return RFAILED;
+ {
+ if(!lcCfg->u.umBiDirCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->u.umBiDirCfg, sizeof(UmBiDirBearerCfg));
+ if(!lcCfg->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;
+ /* DL UM BI DIR INFO */
+ lcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm;
+ break;
}
- /* 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;
- /* DL UM BI DIR INFO */
- lcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm;
- break;
- }
case RLC_UM_UNI_DIRECTIONAL_UL :
- {
- if(!lcCfg->u.umUniDirUlCfg)
- {
- DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg));
- if(!lcCfg->u.umUniDirUlCfg)
- return RFAILED;
- }
- lcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm;
- lcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr;
- break;
+ {
+ if(!lcCfg->u.umUniDirUlCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirUlCfg, sizeof(UmUniDirUlBearerCfg));
+ if(!lcCfg->u.umUniDirUlCfg)
+ return RFAILED;
+ }
+ lcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.snLenUlUm;
+ lcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr = f1UeDbLcCfg->u.umUniDirUlCfg->ulUmCfg.reAssemTmr;
+ break;
- }
+ }
case RLC_UM_UNI_DIRECTIONAL_DL :
- {
- if(!lcCfg->u.umUniDirDlCfg)
- {
- DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg));
- if(!lcCfg->u.umUniDirDlCfg)
- return RFAILED;
+ {
+ if(!lcCfg->u.umUniDirDlCfg)
+ {
+ DU_ALLOC_SHRABL_BUF(lcCfg->u.umUniDirDlCfg, sizeof(UmUniDirDlBearerCfg));
+ if(!lcCfg->u.umUniDirDlCfg)
+ return RFAILED;
+ }
+ lcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm;
+ break;
}
- lcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm = f1UeDbLcCfg->u.umUniDirDlCfg->dlUmCfg.snLenDlUm;
- break;
- }
default:
DU_LOG("\nERROR --> DU_APP: Invalid Rlc Mode %d at fillRlcCfgToAddMod()", lcCfg->rlcMode);
- return RFAILED;
+ return RFAILED;
}
return ROK;
}
numLcs = rlcUeCfg->numLcs;
for(lcIdx = 0; lcIdx < numLcs; lcIdx++)
{
- if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].lcId == rlcUeCfg->rlcLcCfg[lcIdx].lcId)
- {
- if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_MOD)
- {
- ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]);
- }
- else if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_DEL)
- {
- /* Free memory at matched lcIdx index */
- freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx]);
- rlcUeCfg->numLcs--;
- for(lcDelIdx = lcIdx; lcDelIdx < rlcUeCfg->numLcs; lcDelIdx++)
- {
- ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcDelIdx], &rlcUeCfg->rlcLcCfg[lcDelIdx+1]);
- freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcDelIdx+1]);
- if(ret == RFAILED)
- {
+ if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].lcId == rlcUeCfg->rlcLcCfg[lcIdx].lcId)
+ {
+ if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_MOD)
+ {
+ ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]);
+ if(ret == RFAILED)
+ {
+ 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);
+ }
+ else if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_DEL)
+ {
+ /* Free memory at matched lcIdx index */
+ freeRlcLcCfg(&rlcUeCfg->rlcLcCfg[lcIdx]);
+ 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]);
+ if(ret == RFAILED)
+ {
DU_LOG("\nERROR --> DU APP : Failed to delete LC at Idx %d in duUpdateRlcCfg()", lcDelIdx);
- break;
- }
- }
- }
- }
+ break;
+ }
+ }
+ }
+ }
}
if(f1UeDb->duUeCfg.rlcLcCfg[dbIdx].configType == CONFIG_ADD)
{
- ret = fillRlcCfgToAddMod(&rlcUeCfg->rlcLcCfg[lcIdx], &f1UeDb->duUeCfg.rlcLcCfg[dbIdx]);
- if(ret == ROK)
- rlcUeCfg->numLcs++;
+ 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);
+ rlcUeCfg->numLcs++;
+ }
}
}
return ret;
}
-
/*******************************************************************
*
* @brief Function to fill Tunnel Config to Add/Mod
{
if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_ADD, NULLP, f1TnlCfg->tnlCfg1) == ROK)
{
- if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numDrb], f1TnlCfg) == ROK)
+ if(fillTnlCfgToAddMod(&duCb.upTnlCfg[duCb.numTeId], f1TnlCfg) == ROK)
{
- duCb.numDrb++;
+ duCb.numTeId++;
ret = ROK;
}
}
if(duSendEgtpTnlMgmtReq(EGTP_TNL_MGMT_DEL, duTnlCfg->tnlCfg1->teId, f1TnlCfg->tnlCfg1) == ROK)
{
/* Free memory at drbIdx */
- duCb.numDrb--;
- for(delIdx = ueCbIdx; delIdx < duCb.numDrb; delIdx++)
+ duCb.numTeId--;
+ for(delIdx = ueCbIdx; delIdx < duCb.numTeId; delIdx++)
{
/* moving all elements one index ahead */
ret = fillTnlCfgToAddMod(&duCb.upTnlCfg[delIdx], duCb.upTnlCfg[delIdx+1]);
uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
{
- uint8_t ret = ROK, drbIdx, duCbDrbIdx;
+ uint8_t ret = ROK, drbIdx, teIdx;
bool drbFound = false;
/*If Add/Mod tunnels request for that DRB is successful in EGTP */
{
duUeCfg->upTnlInfo[drbIdx].cellId = cellId;
duUeCfg->upTnlInfo[drbIdx].ueIdx = ueIdx;
- for(duCbDrbIdx = 0; duCbDrbIdx < duCb.numDrb; duCbDrbIdx++)
+ for(teIdx = 0; teIdx < duCb.numTeId; teIdx++)
{
- if(duCb.upTnlCfg[duCbDrbIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId)
- {
- drbFound = true; /* existing DRB */
- if(duProcEgtpTunnelCfg(duCbDrbIdx, duCb.upTnlCfg[duCbDrbIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK)
- {
- DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]",
- duUeCfg->upTnlInfo[drbIdx].drbId);
- ret = RFAILED;
- }
- break;
- }
- else
- drbFound = false;
+ if((duCb.upTnlCfg[teIdx]->ueIdx == duUeCfg->upTnlInfo[drbIdx].ueIdx) && \
+ (duCb.upTnlCfg[teIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId))
+ {
+ drbFound = true; /* existing DRB */
+ if(duProcEgtpTunnelCfg(teIdx, duCb.upTnlCfg[teIdx], &duUeCfg->upTnlInfo[drbIdx]) != ROK)
+ {
+ DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to modify tunnel req for Drb id[%d]",
+ duUeCfg->upTnlInfo[drbIdx].drbId);
+ ret = RFAILED;
+ }
+ break;
+ }
+ else
+ drbFound = false;
}
+
if(!drbFound && ret == ROK)/* new DRB to Add */
{
- if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK)
- {
+ if(duProcEgtpTunnelCfg(NULLP, NULLP, &duUeCfg->upTnlInfo[drbIdx]) != ROK)
+ {
DU_LOG("\nERROR -> DU_APP : duUpdateTunnelCfgDb: Failed to add tunnel req for Drb id[%d]",
- duUeCfg->upTnlInfo[drbIdx].drbId);
- ret = RFAILED;
- break;
- }
+ duUeCfg->upTnlInfo[drbIdx].drbId);
+ ret = RFAILED;
+ break;
+ }
}
else
break;
/*Filling RLC Ue Cfg */
ueCb->rlcUeCfg.cellId = cellId;
- ueCb->rlcUeCfg.ueIdx = ueIdx;
+ ueCb->rlcUeCfg.ueId = ueIdx;
ret = duUpdateRlcLcCfg(&ueCb->rlcUeCfg, ueCb->f1UeDb);
if(ret == ROK)
{
{
if(pst->event == EVENT_RLC_UE_CREATE_RSP)
{
- DU_LOG("\nINFO --> DU_APP: RLC UE Create Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx);
- duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+ 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;
}
else if(pst->event == EVENT_RLC_UE_RECONFIG_RSP)
{
- DU_LOG("\nINFO --> DU_APP: RLC UE Reconfig Response : SUCCESS [UE IDX:%d]", cfgRsp->ueIdx);
- duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+ 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;
- if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+ if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
{
- BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueIdx);
+ BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
}
}
}
else
{
DU_LOG("\nERROR --> DU_APP: RLC UE CFG Response for EVENT[%d] : FAILED [UE IDX : %d, REASON :%d]",\
- pst->event, cfgRsp->ueIdx, cfgRsp->reason);
+ pst->event, cfgRsp->ueId, cfgRsp->reason);
if((pst->event == EVENT_RLC_UE_RECONFIG_RSP))
{
//TODO: update failure case in ue Context setup Response
{
freeF1UeDb(ueCb->f1UeDb);
}
- for(tnlIdx = 0; tnlIdx < duCb.numDrb; )
+ for(tnlIdx = 0; tnlIdx < duCb.numTeId; )
{
if(duCb.upTnlCfg[tnlIdx]->ueIdx == ueIdx)
{
break;
}
}
+ DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, lcCfg->snssai, sizeof(Snssai));
}
memset(ueCfg, 0, sizeof(RlcUeCfg));
}
cellId = duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->cellId;
crnti = duUeCb->crnti;
+ GET_UE_IDX(crnti, ueIdx);
+
/* Send DL RRC msg for RRC release */
if(duUeCb->f1UeDb->dlRrcMsg)
{
if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP)
{
- ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx].rlcUeCfg,\
+ ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx-1].rlcUeCfg,\
duUeCb->f1UeDb->dlRrcMsg);
if(ret == RFAILED)
{