#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 && \
- 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 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->ueIdx = 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;
{
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;
{
freeF1UeDb(ueCb->f1UeDb);
}
- for(tnlIdx = 0; tnlIdx < duCb.numDrb; )
+ for(tnlIdx = 0; tnlIdx < duCb.numTeId; )
{
if(duCb.upTnlCfg[tnlIdx]->ueIdx == ueIdx)
{
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)
{