[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-423] UE context setup request from CU to...
[o-du/l2.git] / src / du_app / du_ue_mgr.c
index aae4869..fd4052a 100644 (file)
@@ -170,7 +170,7 @@ uint8_t fillDlUserDataInfo(uint32_t teId, RlcDlUserDataInfo *dlDataMsgInfo)
          if(duCb.upTnlCfg[teIdx]->tnlCfg1->teId == teId)
          {
             dlDataMsgInfo->cellId = duCb.upTnlCfg[teIdx]->cellId;
-            dlDataMsgInfo->ueIdx = duCb.upTnlCfg[teIdx]->ueIdx;
+            dlDataMsgInfo->ueId = duCb.upTnlCfg[teIdx]->ueId;
             dlDataMsgInfo->rbId = duCb.upTnlCfg[teIdx]->drbId;
             return ROK;
          }
@@ -386,7 +386,7 @@ uint8_t duBuildAndSendDlRrcMsgToRlc(uint16_t cellId, RlcUeCfg ueCfg, F1DlRrcMsg
    
    /* 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)
@@ -462,46 +462,54 @@ uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg)
       ret = duBuildAndSendDlCcchInd(&cellId, &crnti, RRC_SETUP, dlRrcMsg->rrcMsgSize, dlRrcMsg->rrcMsgPdu);
       if(ret == RFAILED)
       {
-        DU_LOG("\nERROR  -->  DU APP : Failed to build DlCcch Ind at procDlRrcMsgTrans()");
+         DU_LOG("\nERROR  -->  DU APP : Failed to build DlCcch Ind at procDlRrcMsgTrans()");
       }
       else
       {
-        if(duCb.actvCellLst[cellId-1]->numActvUes < MAX_NUM_UE)
-        {
-           ret = duCreateUeCb(&duCb.ueCcchCtxt[ueIdx], dlRrcMsg->gnbCuUeF1apId);
-           if(ret == RFAILED)
-           {
-              DU_LOG("\nERROR  -->  DU APP : Failed to createUeCb for cellId [%d] at procDlRrcMsgTrans()", \
-                    duCb.ueCcchCtxt[ueIdx].cellId);
-           }
-        }
-        else
-        {
-           DU_LOG("\nERROR   -->  DU_APP: Max Active UEs has reached at procDlRrcMsgTrans()");
-           ret = RFAILED;
-        }
+         if(duCb.actvCellLst[cellId-1] == NULLP)
+         {
+            DU_LOG("\nERROR  -->  DU APP : cellId [%d] does not exist", cellId);
+            ret = RFAILED;
+         }
+         if(duCb.actvCellLst[cellId-1]->numActvUes < MAX_NUM_UE)
+         {
+            ret = duCreateUeCb(&duCb.ueCcchCtxt[ueIdx], dlRrcMsg->gnbCuUeF1apId);
+            if(ret == RFAILED)
+            {
+               DU_LOG("\nERROR  -->  DU APP : Failed to createUeCb for cellId [%d] at procDlRrcMsgTrans()", \
+                     duCb.ueCcchCtxt[ueIdx].cellId);
+            }
+         }
+         else
+         {
+            DU_LOG("\nERROR   -->  DU_APP: Max Active UEs has reached at procDlRrcMsgTrans()");
+            ret = RFAILED;
+         }
       }
    }
    else
    {
       for(cellIdx = 0; cellIdx < MAX_NUM_CELL; cellIdx++)
       {
-        for(ueIdx = 0 ; ueIdx < MAX_NUM_UE; ueIdx++)
-        {
-           if((dlRrcMsg->gnbCuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId)
-                 && (dlRrcMsg->gnbDuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId))
-           {
-              ueFound = true;
-              ret = duBuildAndSendDlRrcMsgToRlc(duCb.actvCellLst[cellIdx]->cellId, \
-                    duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, dlRrcMsg);
-              break; 
-           }
-        }
-        if(ueFound)
-           break;
+         for(ueIdx = 0 ; ueIdx < MAX_NUM_UE; ueIdx++)
+         {
+            if(duCb.actvCellLst[cellIdx] && (dlRrcMsg->gnbCuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId)
+                  && (dlRrcMsg->gnbDuUeF1apId == duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId))
+            {
+               ueFound = true;
+               ret = duBuildAndSendDlRrcMsgToRlc(duCb.actvCellLst[cellIdx]->cellId, \
+                     duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, dlRrcMsg);
+               break; 
+            }
+         }
+         if(ueFound)
+            break;
       }
       if(!ueFound)
-        ret = RFAILED;
+      {
+         DU_LOG("\nERROR   -->  DU_APP: UE ID [%d] not found", dlRrcMsg->gnbDuUeF1apId);
+         ret = RFAILED;
+      }
    }
    return ret;
 }
@@ -527,7 +535,7 @@ int32_t genGnbDuUeF1apId(uint8_t cellId)
     GET_CELL_IDX(cellId, cellIdx);
     if(duCb.actvCellLst[cellIdx])
     {
-       return  ++duCb.actvCellLst[cellIdx]->gnbDuUeF1apIdGenerator;
+       return  ++duCb.gnbDuUeF1apIdGenerator;
     }
     else
     {
@@ -619,102 +627,100 @@ void fillDefaultUlLcCfg(UlLcCfg *ulLcCfg)
  *    Functionality: Fills Initial DL Bandwidth Part
  *
  * @params[in]  InitialDlBwp *initDlBwp
- * @return void
+ * @return ROK - success
+ *         RFAILED - failure
  *
  *****************************************************************/
-void fillDefaultInitDlBwp(InitialDlBwp *initDlBwp)
+uint8_t fillDefaultInitDlBwp(InitialDlBwp *initDlBwp)
 {
    uint8_t idx = 0;
    uint8_t freqDomainResource[FREQ_DOM_RSRC_SIZE] = {0};
    uint8_t coreset0EndPrb, coreset1StartPrb, coreset1NumPrb;
 
-
    if(initDlBwp)
    {
       /* Filling PDCCH Config */
       initDlBwp->pdcchPresent = TRUE;
       if(initDlBwp->pdcchPresent)
       {
-        initDlBwp->pdcchCfg.numCRsetToAddMod = PDCCH_CTRL_RSRC_SET_ONE_ID;
-        memset(initDlBwp->pdcchCfg.cRSetToAddModList, 0, MAX_NUM_CRSET);
-        if(initDlBwp->pdcchCfg.numCRsetToAddMod <= MAX_NUM_CRSET)
-        {
-           initDlBwp->pdcchCfg.cRSetToAddModList[idx].cRSetId = \
-              PDCCH_CTRL_RSRC_SET_ONE_ID;
-           memset(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, 0,\
-              FREQ_DOM_RSRC_SIZE); 
-           coreset0EndPrb = CORESET0_END_PRB;
-           coreset1StartPrb = coreset0EndPrb +6;
-           coreset1NumPrb = CORESET1_NUM_PRB;
-           /* calculate the PRBs */
-           fillCoresetFeqDomAllocMap(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
-           memcpy(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, freqDomainResource,
-              FREQ_DOM_RSRC_SIZE);
-
-           initDlBwp->pdcchCfg.cRSetToAddModList[idx].duration = \
-              PDCCH_CTRL_RSRC_SET_ONE_DURATION;
-           initDlBwp->pdcchCfg.cRSetToAddModList[idx].cceRegMappingType = \
-              CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED;
-           initDlBwp->pdcchCfg.cRSetToAddModList[idx].precoderGranularity = \
-              ALL_CONTIGUOUS_RBS;
-           initDlBwp->pdcchCfg.cRSetToAddModList[idx].dmrsScramblingId = \
-              SCRAMBLING_ID;
-        }
-        initDlBwp->pdcchCfg.numCRsetToRel = 0;
-        /* Filling Serach Space */
-        initDlBwp->pdcchCfg.numSearchSpcToAddMod = PDCCH_CTRL_RSRC_SET_ONE_ID;
-        memset(initDlBwp->pdcchCfg.searchSpcToAddModList, 0, MAX_NUM_CRSET);
-        if(initDlBwp->pdcchCfg.numSearchSpcToAddMod <= MAX_NUM_CRSET)
-        {
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].searchSpaceId =\
-              PDCCH_SRCH_SPC_TWO_ID;
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].cRSetId = \
-              PDCCH_CTRL_RSRC_SET_ONE_ID;
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].\
-              mSlotPeriodicityAndOffset = SLOTPERIODICITYANDOFFSET_PR_SL1;
-           memset(initDlBwp->pdcchCfg.searchSpcToAddModList[idx].mSymbolsWithinSlot, 0,\
-              MONITORING_SYMB_WITHIN_SLOT_SIZE);
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].mSymbolsWithinSlot[idx] =\
-              PDCCH_SYMBOL_WITHIN_SLOT;
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel1 =\
-              AGGREGATIONLEVEL_N8; 
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel2 =\
-              AGGREGATIONLEVEL_N8; 
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel4 =\
-              AGGREGATIONLEVEL_N4; 
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel8 =\
-              AGGREGATIONLEVEL_N2; 
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel16 =\
-              AGGREGATIONLEVEL_N1;
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].searchSpaceType = \
-              SEARCHSPACETYPE_PR_UE_SPECIFIC;
-           initDlBwp->pdcchCfg.searchSpcToAddModList[idx].ueSpecificDciFormat =\
-              PDCCH_SRCH_SPC_TWO_UE_SPEC_DCI_FORMAT;
-
-           initDlBwp->pdcchCfg.numSearchSpcToRel = 0;
+         initDlBwp->pdcchCfg.numCRsetToAddMod = PDCCH_CTRL_RSRC_SET_ONE_ID;
+         memset(initDlBwp->pdcchCfg.cRSetToAddModList, 0, MAX_NUM_CRSET);
+         if(initDlBwp->pdcchCfg.numCRsetToAddMod <= MAX_NUM_CRSET)
+         {
+            initDlBwp->pdcchCfg.cRSetToAddModList[idx].cRSetId = PDCCH_CTRL_RSRC_SET_ONE_ID;
+            memset(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, 0, FREQ_DOM_RSRC_SIZE); 
+            coreset0EndPrb = CORESET0_END_PRB;
+            coreset1StartPrb = coreset0EndPrb +6;
+            coreset1NumPrb = CORESET1_NUM_PRB;
+            /* calculate the PRBs */
+            fillCoresetFeqDomAllocMap(((coreset1StartPrb)/6), (coreset1NumPrb/6), freqDomainResource);
+            memcpy(initDlBwp->pdcchCfg.cRSetToAddModList[idx].freqDomainRsrc, freqDomainResource, FREQ_DOM_RSRC_SIZE);
+
+            initDlBwp->pdcchCfg.cRSetToAddModList[idx].duration = PDCCH_CTRL_RSRC_SET_ONE_DURATION;
+            initDlBwp->pdcchCfg.cRSetToAddModList[idx].cceRegMappingType = CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED;
+            initDlBwp->pdcchCfg.cRSetToAddModList[idx].precoderGranularity = ALL_CONTIGUOUS_RBS;
+            initDlBwp->pdcchCfg.cRSetToAddModList[idx].dmrsScramblingId = SCRAMBLING_ID;
+         }
+         initDlBwp->pdcchCfg.numCRsetToRel = 0;
 
-        }
+         /* Filling Serach Space */
+         initDlBwp->pdcchCfg.numSearchSpcToAddMod = PDCCH_CTRL_RSRC_SET_ONE_ID;
+         memset(initDlBwp->pdcchCfg.searchSpcToAddModList, 0, MAX_NUM_CRSET);
+         if(initDlBwp->pdcchCfg.numSearchSpcToAddMod <= MAX_NUM_CRSET)
+         {
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].searchSpaceId = PDCCH_SRCH_SPC_TWO_ID;
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].cRSetId = PDCCH_CTRL_RSRC_SET_ONE_ID;
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].mSlotPeriodicityAndOffset = SLOTPERIODICITYANDOFFSET_PR_SL1;
+            memset(initDlBwp->pdcchCfg.searchSpcToAddModList[idx].mSymbolsWithinSlot, 0, MONITORING_SYMB_WITHIN_SLOT_SIZE);
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].mSymbolsWithinSlot[idx] = PDCCH_SYMBOL_WITHIN_SLOT;
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel1 = AGGREGATIONLEVEL_N8; 
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel2 = AGGREGATIONLEVEL_N8; 
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel4 = AGGREGATIONLEVEL_N4; 
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel8 = AGGREGATIONLEVEL_N2; 
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].numCandidatesAggLevel16 = AGGREGATIONLEVEL_N1;
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].searchSpaceType = SEARCHSPACETYPE_PR_UE_SPECIFIC;
+            initDlBwp->pdcchCfg.searchSpcToAddModList[idx].ueSpecificDciFormat = PDCCH_SRCH_SPC_TWO_UE_SPEC_DCI_FORMAT;
+         }
+         initDlBwp->pdcchCfg.numSearchSpcToRel = 0;
       }
+
       /* Filling PDSCH Config */
       initDlBwp->pdschPresent = TRUE;
       if(initDlBwp->pdschPresent)
       {
-        initDlBwp->pdschCfg.dmrsDlCfgForPdschMapTypeA.addPos = ADDITIONALPOSITION_POS0;
-        initDlBwp->pdschCfg.resourceAllocType = RESOURCEALLOCATION_TYPE1;
-        initDlBwp->pdschCfg.numTimeDomRsrcAlloc = 1;
-        initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].mappingType = \
-           MAPPING_TYPEA;
-        initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbol = PDSCH_START_SYMBOL; 
-        initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].symbolLength = PDSCH_LENGTH_SYMBOL;
-        initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbolAndLength = \
-           calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
-        initDlBwp->pdschCfg.rbgSize = RBG_SIZE_CONFIG1;
-        initDlBwp->pdschCfg.numCodeWordsSchByDci = CODEWORDS_SCHED_BY_DCI_N1;
-        initDlBwp->pdschCfg.bundlingType = TYPE_STATIC_BUNDLING;
-        initDlBwp->pdschCfg.bundlingInfo.StaticBundling.size = 0;
+         initDlBwp->pdschCfg.dmrsDlCfgForPdschMapTypeA.addPos = ADDITIONALPOSITION_POS0;
+         initDlBwp->pdschCfg.resourceAllocType = RESOURCEALLOCATION_TYPE1;
+
+         initDlBwp->pdschCfg.numTimeDomRsrcAlloc = NUM_TIME_DOM_RSRC_ALLOC;
+
+         idx = 0; 
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].mappingType = MAPPING_TYPEA;
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbol = PDSCH_START_SYMBOL; 
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].symbolLength = PDSCH_LENGTH_SYMBOL;
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbolAndLength = calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
+
+         idx++;
+         DU_ALLOC_SHRABL_BUF(initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].k0, sizeof(uint8_t));
+         if(initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].k0 == NULLP)
+         {
+            DU_LOG("\nERROR  -->  DUAPP : Failed to allocate memory to K0 in fillDefaultInitDlBwp");
+            return RFAILED;
+         }
+         if(initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].k0)
+            *(initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].k0) = 1;
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].mappingType = MAPPING_TYPEA;
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbol = PDSCH_START_SYMBOL; 
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].symbolLength = PDSCH_LENGTH_SYMBOL;
+         initDlBwp->pdschCfg.timeDomRsrcAllociList[idx].startSymbolAndLength = calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
+
+         initDlBwp->pdschCfg.rbgSize = RBG_SIZE_CONFIG1;
+         initDlBwp->pdschCfg.numCodeWordsSchByDci = CODEWORDS_SCHED_BY_DCI_N1;
+         initDlBwp->pdschCfg.bundlingType = TYPE_STATIC_BUNDLING;
+         initDlBwp->pdschCfg.bundlingInfo.StaticBundling.size = 0;
       }
    }
 
+   return ROK;
 }
 
 /******************************************************************
@@ -787,10 +793,11 @@ void fillDefaultInitUlBwp(InitialUlBwp *initUlBwp)
  *    Functionality: Fills Sp Cell Group Info
  *
  * @params[in]  MacUeCfg *macUeCfg
- * @return void
+ * @return ROK - Success
+ *         RFAILED - Failure
  *
  *****************************************************************/
-void fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
+uint8_t fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
 {
    SpCellCfg *spCell = NULL;
 
@@ -803,7 +810,11 @@ void fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
 
       spCell->servCellIdx = SERV_CELL_IDX;
       /* Filling Initial Dl Bwp */
-      fillDefaultInitDlBwp(&spCell->servCellCfg.initDlBwp);
+      if((fillDefaultInitDlBwp(&spCell->servCellCfg.initDlBwp)) != ROK)
+      {
+         DU_LOG("\nERROR  -->  DUAPP : Failed in fillDefaultInitDlBwp");
+         return RFAILED;
+      }
 
       spCell->servCellCfg.numDlBwpToAdd    = 0; 
       spCell->servCellCfg.firstActvDlBwpId = ACTIVE_DL_BWP_ID;
@@ -813,8 +824,8 @@ void fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
       spCell->servCellCfg.pdschServCellCfg.maxCodeBlkGrpPerTb = NULLP;
       spCell->servCellCfg.pdschServCellCfg.codeBlkGrpFlushInd = NULLP;
       spCell->servCellCfg.pdschServCellCfg.xOverhead = NULLP;
-      spCell->servCellCfg.pdschServCellCfg.numHarqProcForPdsch =\
-         NUM_HARQ_PROC_FOR_PDSCH_N_16;
+      spCell->servCellCfg.pdschServCellCfg.numHarqProcForPdsch = NUM_HARQ_PROC_FOR_PDSCH_N_16;
+
       /* Filling Initial UL Bwp*/
       fillDefaultInitUlBwp(&spCell->servCellCfg.initUlBwp);
       spCell->servCellCfg.numUlBwpToAdd     = 0; 
@@ -823,7 +834,9 @@ void fillDefaultSpCellGrpInfo(MacUeCfg *macUeCfg)
    else
    {
       DU_LOG("\nERROR  -->  DU APP : Memory is NULL for SpCellGrp");
+      return RFAILED;
    }
+   return ROK;
 }
 
 /******************************************************************
@@ -1169,14 +1182,13 @@ uint8_t sendUeReCfgReqToMac(MacUeCfg *macUeCfg)
  *
  *    Functionality: Fills MacUeCfg
  *
- * @params[in]  cellId, ueIdx, crnti, 
+ * @params[in]  cellId, ueId, crnti, 
  *              DuUeCfg  pointer,
  *              MacUeCfg pointer
  * @return ROK/RFAILED
  *
  *****************************************************************/
-uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \
-   DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg)
+uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueId, uint16_t crnti, DuUeCfg *ueCfgDb, MacUeCfg *macUeCfg)
 {
    uint8_t ret, dbIdx, lcIdx, cellIdx;
    bool lcIdFound = false;
@@ -1187,12 +1199,18 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \
    if(!ueCfgDb)
    {
       macUeCfg->cellId       = cellId;
-      macUeCfg->ueIdx        = ueIdx;
+      macUeCfg->ueId         = ueId;
       macUeCfg->crnti        = crnti;
 
       fillDefaultMacCellGrpInfo(macUeCfg);
       fillDefaultPhyCellGrpInfo(macUeCfg);
-      fillDefaultSpCellGrpInfo(macUeCfg);
+
+      if((fillDefaultSpCellGrpInfo(macUeCfg)) != ROK)
+      {
+         DU_LOG("\nERROR  --> DUAPP : Failed in fillDefaultSpCellGrpInfo");
+         return RFAILED;
+      }
+
       macUeCfg->ambrCfg = NULLP;
       fillDefaultModulation(macUeCfg);
       fillMacSrb1LcCfg(&macUeCfg->lcCfgList[0]);
@@ -1202,11 +1220,17 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \
    {
       /* Fetching MacDb from DuUeCb */
       GET_CELL_IDX(cellId, cellIdx);
-      duMacDb = &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg;
+      if(duCb.actvCellLst[cellIdx])
+         duMacDb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg;
+      else
+      {
+         DU_LOG("\nERROR  -->  DU APP : Cell Id [%d] does not exist", cellId);
+         return RFAILED;
+      }
       duMacDb->macUeCfgState = UE_CFG_INPROGRESS;
       /* Fetching MaUeCfg List for ADD/MOD/DEL */
       macUeCfg->cellId       = cellId;
-      macUeCfg->ueIdx        = ueIdx;
+      macUeCfg->ueId         = ueId;
       macUeCfg->crnti        = crnti;
       ret = procUeReCfgCellInfo(macUeCfg, duMacDb, ueCfgDb->cellGrpCfg);
       if(ret == ROK)
@@ -1487,6 +1511,7 @@ uint8_t fillRlcSrb1LcCfg(RlcBearerCfg *rlcLcCfg)
    rlcLcCfg->rlcMode = RLC_AM;
    rlcLcCfg->configType = CONFIG_ADD;
    ret = fillDefaultRlcModeCfg(rlcLcCfg->rlcMode, rlcLcCfg);
+   rlcLcCfg->isLcAddModRspSent = true;
    return ret;
 }
 
@@ -1589,8 +1614,7 @@ uint8_t fillSnssaiInfo(Snssai *snssaiTobeSend, Snssai *snssaiDb, Snssai **oldSns
  *
  *
  *****************************************************************/
-uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\
-   DuUeCfg *ueCfgDb, RlcUeCfg *rlcUeCfg)
+uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueId, DuUeCfg *ueCfgDb, RlcUeCfg *rlcUeCfg)
 {
    uint8_t ret, dbIdx, lcIdx, cellIdx;
    bool lcIdFound = false;
@@ -1601,7 +1625,7 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\
    {
       /* Initial RB being Added */ 
       rlcUeCfg->cellId       = cellId;
-      rlcUeCfg->ueIdx        = ueIdx;
+      rlcUeCfg->ueId         = ueId;
       ret = fillRlcSrb1LcCfg(&rlcUeCfg->rlcLcCfg[0]);
       if(ret == ROK)
          rlcUeCfg->numLcs++;
@@ -1612,11 +1636,11 @@ uint8_t fillRlcUeCfg(uint16_t cellId, uint8_t ueIdx,\
    {
       /* Fetch RlcDb from DuUeCb */ 
       GET_CELL_IDX(cellId, cellIdx);
-      duRlcDb = &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg;
+      duRlcDb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg;
       duRlcDb->rlcUeCfgState = UE_CFG_INPROGRESS;
       /*Filling RlcUeCfg */
       rlcUeCfg->cellId       = cellId;
-      rlcUeCfg->ueIdx        = ueIdx;
+      rlcUeCfg->ueId         = ueId;
       for(dbIdx = 0; (dbIdx < ueCfgDb->numRlcLcs && ret == ROK); dbIdx++)
       {
          ret = fillDefaultRlcModeCfg(ueCfgDb->rlcLcCfg[dbIdx].rlcMode, &ueCfgDb->rlcLcCfg[dbIdx]);
@@ -1677,39 +1701,40 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId)
 {
    uint8_t cellIdx = 0;
    uint8_t ret     = ROK;
-   uint8_t ueIdx;
+   uint8_t ueId = 0, ueIdx = 0;
 
    for(cellIdx = 0; cellIdx < MAX_NUM_CELL; cellIdx++)
    {
-      if(ueCcchCtxt->cellId == duCb.actvCellLst[cellIdx]->cellId)
+      if(duCb.actvCellLst[cellIdx] && (ueCcchCtxt->cellId == duCb.actvCellLst[cellIdx]->cellId))
       {
-        GET_UE_IDX(ueCcchCtxt->crnti, ueIdx);
-        DU_LOG("\nDEBUG   -->  DU_APP: Filling UeCb for ueIdx [%d]", ueIdx);
-
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].f1UeDb        = NULLP;
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].crnti         = ueCcchCtxt->crnti;
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbDuUeF1apId = ueCcchCtxt->gnbDuUeF1apId;
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].gnbCuUeF1apId = gnbCuUeF1apId;
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].drbBitMap     = NULLP;
-        duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].ueState       = UE_ACTIVE;
-
-        /* Filling Mac Ue Config */ 
-        memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg, 0, sizeof(MacUeCfg));
-         ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueIdx, ueCcchCtxt->crnti,\
-                &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg);
+         GET_UE_ID(ueCcchCtxt->crnti, ueId);
+         DU_LOG("\nDEBUG   -->  DU_APP: Filling UeCb for ueId [%d]", ueId);
+
+         ueIdx = ueId-1;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].f1UeDb        = NULLP;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].crnti         = ueCcchCtxt->crnti;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbDuUeF1apId = ueCcchCtxt->gnbDuUeF1apId;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].gnbCuUeF1apId = gnbCuUeF1apId;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].drbBitMap     = NULLP;
+         duCb.actvCellLst[cellIdx]->ueCb[ueIdx].ueState       = UE_ACTIVE;
+
+         /* Filling Mac Ue Config */ 
+         memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg, 0, sizeof(MacUeCfg));
+         ret = duBuildAndSendUeCreateReqToMac(ueCcchCtxt->cellId, ueId, ueCcchCtxt->crnti,\
+               &duCb.actvCellLst[cellIdx]->ueCb[ueIdx].macUeCfg);
          if(ret == RFAILED)
             DU_LOG("\nERROR  -->  DU APP : Failed to send UE create request to MAC");
-         
-        /* Filling Rlc Ue Config */
-         memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg, 0, sizeof(RlcUeCfg));
-         ret = duBuildAndSendUeCreateReqToRlc(ueCcchCtxt->cellId, ueIdx, \
-                &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg);
+
+         /* Filling Rlc Ue Config */
+         memset(&duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg, 0, sizeof(RlcUeCfg));
+         ret = duBuildAndSendUeCreateReqToRlc(ueCcchCtxt->cellId, ueId, \
+               &duCb.actvCellLst[cellIdx]->ueCb[ueIdx].rlcUeCfg);
          if(ret == RFAILED)
             DU_LOG("\nERROR  -->  DU APP : Failed to send UE create request to RLC");
 
-        duCb.actvCellLst[cellIdx]->numActvUes++;
-        memset(ueCcchCtxt, 0, sizeof(UeCcchCtxt));
-    duCb.numUe--;
+         duCb.actvCellLst[cellIdx]->numActvUes++;
+         memset(ueCcchCtxt, 0, sizeof(UeCcchCtxt));
+         duCb.numUe--;
       }
    }
    return ret;
@@ -1726,14 +1751,15 @@ uint8_t duCreateUeCb(UeCcchCtxt *ueCcchCtxt, uint32_t gnbCuUeF1apId)
  *    Functionality: Builds and Send UE Create Request to MAC
  *
  * @Params[in]  cellId,
- *              ueIdx
+ *              ueId,
+ *              crnti,
+ *              UE config
  * @return ROK     - success
  *         RFAILED - failure
  *
  * ****************************************************************/
 
-uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueIdx,\
-   uint16_t crnti, MacUeCfg *duMacUeCfg)
+uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueId, uint16_t crnti, MacUeCfg *duMacUeCfg)
 {
    uint8_t  ret = ROK;
    MacUeCfg *macUeCfg = NULLP;
@@ -1741,7 +1767,7 @@ uint8_t duBuildAndSendUeCreateReqToMac(uint16_t cellId, uint8_t ueIdx,\
    memset(&pst, 0, sizeof(Pst));
 
 
-   ret = fillMacUeCfg(cellId, ueIdx, crnti, NULL, duMacUeCfg);
+   ret = fillMacUeCfg(cellId, ueId, crnti, NULL, duMacUeCfg);
    if(ret == RFAILED)
    {
       DU_LOG("\nERROR  -->  DU APP : Failed to fill MacUeCfg at duBuildAndSendUeCreateReqToMac()");
@@ -1796,7 +1822,12 @@ uint8_t duUpdateMacCfg(MacUeCfg *macUeCfg, F1UeContextSetupDb *f1UeDb)
    ret = ROK;
    
    GET_CELL_IDX(macUeCfg->cellId, cellIdx);
-   oldMacUeCfg = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueIdx-1].macUeCfg;
+   if(duCb.actvCellLst[cellIdx] == NULLP)
+   {
+      DU_LOG("\nERROR  --> DU APP: CellId[%d] not found", macUeCfg->cellId);
+      return RFAILED;
+   }
+   oldMacUeCfg = &duCb.actvCellLst[cellIdx]->ueCb[macUeCfg->ueId-1].macUeCfg;
 
    /*Filling Cell Group Cfg*/
    ret =  procUeReCfgCellInfo(macUeCfg, &f1UeDb->duUeCfg.copyOfmacUeCfg, f1UeDb->duUeCfg.cellGrpCfg);
@@ -2063,7 +2094,7 @@ uint8_t fillTnlCfgToAddMod(UpTnlCfg **ueCbTnlCfg, UpTnlCfg *f1TnlCfg)
    memset(*ueCbTnlCfg, 0, sizeof(UpTnlCfg));
    (*ueCbTnlCfg)->configType = f1TnlCfg->configType;
    (*ueCbTnlCfg)->cellId    = f1TnlCfg->cellId;
-   (*ueCbTnlCfg)->ueIdx     = f1TnlCfg->ueIdx;
+   (*ueCbTnlCfg)->ueId      = f1TnlCfg->ueId;
    (*ueCbTnlCfg)->drbId     = f1TnlCfg->drbId;
    if(f1TnlCfg->tnlCfg1)
    {
@@ -2169,13 +2200,13 @@ uint8_t duProcEgtpTunnelCfg(uint8_t ueCbIdx, UpTnlCfg *duTnlCfg, UpTnlCfg *f1Tnl
  *    Functionality: Function to fill tunnel Config
  *                   and sends tunnel Cfg Req to EGTP
  *
- * @params[in] ueIdx, cellId, DuUeCfg 
+ * @params[in] ueId, cellId, DuUeCfg 
  * @return ROK     - success
  *         RFAILED - failure
  *
  * ****************************************************************/
 
-uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
+uint8_t duUpdateTunnelCfgDb(uint8_t ueId, uint8_t cellId, DuUeCfg *duUeCfg)
 {
    uint8_t ret = ROK, drbIdx, teIdx;
    bool drbFound = false;
@@ -2185,10 +2216,10 @@ uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
    for(drbIdx=0; drbIdx < duUeCfg->numDrb; drbIdx++)
    {
       duUeCfg->upTnlInfo[drbIdx].cellId = cellId;
-      duUeCfg->upTnlInfo[drbIdx].ueIdx = ueIdx;
+      duUeCfg->upTnlInfo[drbIdx].ueId = ueId;
       for(teIdx = 0; teIdx < duCb.numTeId; teIdx++)
       {
-         if((duCb.upTnlCfg[teIdx]->ueIdx == duUeCfg->upTnlInfo[drbIdx].ueIdx) && \
+         if((duCb.upTnlCfg[teIdx]->ueId == duUeCfg->upTnlInfo[drbIdx].ueId) && \
             (duCb.upTnlCfg[teIdx]->drbId == duUeCfg->upTnlInfo[drbIdx].drbId))
          {
             drbFound = true; /* existing DRB */
@@ -2231,43 +2262,41 @@ uint8_t duUpdateTunnelCfgDb(uint8_t ueIdx, uint8_t cellId, DuUeCfg *duUeCfg)
  *
  *    Functionality: update DuUeCb Mac and Rlc Ue Cfg
  *
- * @params[in] ueIdx, cellIdx 
+ * @params[in] ueId, cellIdx 
  * @return ROK     - success
  *         RFAILED - failure
  *
  * ****************************************************************/
 
-uint8_t duUpdateDuUeCbCfg(uint8_t ueIdx, uint8_t cellId)
+uint8_t duUpdateDuUeCbCfg(uint8_t ueId, uint8_t cellId)
 {
    uint8_t ret = ROK, cellIdx = 0, crnti=0;
    DuUeCb *ueCb = NULLP;
 
    GET_CELL_IDX(cellId, cellIdx);
    
-   if((duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg. \
-         macUeCfgState == UE_RECFG_COMPLETE) &&
-      (duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg. \
-         rlcUeCfgState == UE_RECFG_COMPLETE))
+   if(duCb.actvCellLst[cellIdx] && (duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg.macUeCfgState == UE_RECFG_COMPLETE) &&
+      (duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg.rlcUeCfgState == UE_RECFG_COMPLETE))
    {
-      ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1];
+      ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1];
 
       /*Filling RLC Ue Cfg */
       ueCb->rlcUeCfg.cellId = cellId;
-      ueCb->rlcUeCfg.ueIdx  = ueIdx;
+      ueCb->rlcUeCfg.ueId   = ueId;
       ret = duUpdateRlcLcCfg(&ueCb->rlcUeCfg, ueCb->f1UeDb);
       if(ret == ROK)
       {
          /*Filling MAC Ue Cfg */
-         GET_CRNTI(crnti, ueIdx);
+         GET_CRNTI(crnti, ueId);
          ueCb->macUeCfg.cellId = cellId;
-         ueCb->macUeCfg.ueIdx  = ueIdx;
+         ueCb->macUeCfg.ueId  = ueId;
          ueCb->macUeCfg.crnti  = crnti;
          ret = duUpdateMacCfg(&ueCb->macUeCfg, ueCb->f1UeDb);
          if(ret == RFAILED)
             DU_LOG("\nERROR  -->  DU APP : Failed while updating MAC LC Config at duUpdateDuUeCbCfg()");
          else
         {
-           if(duUpdateTunnelCfgDb(ueIdx, cellId, &ueCb->f1UeDb->duUeCfg) != ROK)
+           if(duUpdateTunnelCfgDb(ueId, cellId, &ueCb->f1UeDb->duUeCfg) != ROK)
            {
                DU_LOG("\nERROR  -->  DU_APP : Failed to establish tunnel in duUpdateDuUeCbCfg()");
                    return RFAILED;
@@ -2307,24 +2336,23 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
       {
          if(pst->event == EVENT_MAC_UE_CREATE_RSP)
          {
-            DU_LOG("\nINFO   -->  DU APP : MAC UE Create Response : SUCCESS [UE IDX : %d]", cfgRsp->ueIdx);
-            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+            DU_LOG("\nINFO   -->  DU APP : MAC UE Create Response : SUCCESS [UE IDX : %d]", cfgRsp->ueId);
+            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].\
                macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
          }
          else if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
          {
-            DU_LOG("\nINFO   -->  DU APP : MAC UE Reconfig Response : SUCCESS [UE IDX : %d]", cfgRsp->ueIdx);
-            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
-               macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
-            if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+            DU_LOG("\nINFO   -->  DU APP : MAC UE Reconfig Response : SUCCESS [UE IDX : %d]", cfgRsp->ueId);
+            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueId -1].macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
+            if((ret = duUpdateDuUeCbCfg(cfgRsp->ueId, cfgRsp->cellId)) == ROK)
             {
-               BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueIdx);
+               BuildAndSendUeCtxtRsp(cfgRsp->cellId, cfgRsp->ueId);
             }
          }
       }
       else
       {
-         DU_LOG("\nERROR  -->  DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [UE IDX : %d]", pst->event, cfgRsp->ueIdx);
+         DU_LOG("\nERROR  -->  DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [UE IDX : %d]", pst->event, cfgRsp->ueId);
          if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
          {
             //TODO: Send the failure case in Ue Context Setup Response
@@ -2354,21 +2382,20 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
  *     Processes UE create Req to RLC UL
  * 
  *  @params[in]  cellId,
- *               ueIdx,
+ *               ueId,
  *               Pointer to RlcUeCfg
  *  @return ROK     - success
  *          RFAILED - failure
  * 
  *****************************************************************/
 
-uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t ueIdx,\
-   RlcUeCfg *duRlcUeCfg)
+uint8_t duBuildAndSendUeCreateReqToRlc(uint16_t cellId, uint8_t ueId, RlcUeCfg *duRlcUeCfg)
 {
    uint8_t  ret = ROK;
    RlcUeCfg *rlcUeCfg = NULLP;
    Pst       pst;
   
-   ret = fillRlcUeCfg(cellId, ueIdx, NULL, duRlcUeCfg);
+   ret = fillRlcUeCfg(cellId, ueId, NULL, duRlcUeCfg);
    if(ret == RFAILED)
    {
       DU_LOG("\nERROR  -->  DU APP : Failed to fill Rlc Ue Cfg at duBuildAndSendUeCreateReqToRlc()");
@@ -2428,25 +2455,25 @@ 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->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
@@ -2483,15 +2510,15 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp)
 
 uint8_t duBuildAndSendUeReCfgReqToRlc(uint8_t cellId, uint8_t crnti, DuUeCfg *ueCfgDb)
 {
-   uint8_t ret = ROK, ueIdx = 0;
+   uint8_t ret = ROK, ueId = 0;
    RlcUeCfg *rlcUeCfg = NULLP;
 
-   GET_UE_IDX(crnti, ueIdx);
+   GET_UE_ID(crnti, ueId);
    DU_ALLOC_SHRABL_BUF(rlcUeCfg, sizeof(RlcUeCfg));
    if(rlcUeCfg)
    {
       memset(rlcUeCfg, 0, sizeof(RlcUeCfg));
-      ret = fillRlcUeCfg(cellId, ueIdx, ueCfgDb, rlcUeCfg);
+      ret = fillRlcUeCfg(cellId, ueId, ueCfgDb, rlcUeCfg);
       if(ret == RFAILED)
          DU_LOG("\nERROR  -->  DU APP : Failed at duBuildAndSendUeReCfgReqToRlc()");
       else
@@ -2525,17 +2552,17 @@ uint8_t duBuildAndSendUeReCfgReqToRlc(uint8_t cellId, uint8_t crnti, DuUeCfg *ue
 
 uint8_t duBuildAndSendUeReCfgReqToMac(uint8_t cellId, uint8_t crnti, DuUeCfg *ueCfgDb)
 {
-   uint8_t ret, ueIdx = 0;
+   uint8_t ret, ueId = 0;
    MacUeCfg *macUeCfg = NULLP;
 
    ret = ROK;
-   GET_UE_IDX(crnti, ueIdx);
+   GET_UE_ID(crnti, ueId);
 
    DU_ALLOC_SHRABL_BUF(macUeCfg, sizeof(MacUeCfg));
    if(macUeCfg)
    {
       memset(macUeCfg, 0, sizeof(MacUeCfg));
-      ret = fillMacUeCfg(cellId, ueIdx, crnti, ueCfgDb, macUeCfg);
+      ret = fillMacUeCfg(cellId, ueId, crnti, ueCfgDb, macUeCfg);
       if(ret == RFAILED)
          DU_LOG("\nERROR  -->  DU APP : Failed to fill Mac Ue Cfg at duBuildAndSendUeReCfgReqToMac()");
       else
@@ -2605,7 +2632,7 @@ uint8_t duBuildAndSendUeContextSetupReq(uint16_t cellId, uint16_t crnti, DuUeCfg
  *****************************************************************/
 uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg)
 {
-   uint8_t ret = ROK, ueIdx = 0;
+   uint8_t ret = ROK, ueId = 0;
    uint16_t cellId, crnti;
    DuUeCb *ueCb = NULLP;
    DlMsgState state;
@@ -2617,8 +2644,8 @@ uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg)
 
    if(state == TRANSMISSION_COMPLETE)
    {
-      GET_UE_IDX(crnti, ueIdx);
-      ueCb = &duCb.actvCellLst[cellId -1]->ueCb[ueIdx -1];
+      GET_UE_ID(crnti, ueId);
+      ueCb = &duCb.actvCellLst[cellId -1]->ueCb[ueId -1];
 
       if(ueCb->f1UeDb && ueCb->f1UeDb->dlRrcMsgPres)
       {
@@ -2785,19 +2812,30 @@ uint8_t duProcUeContextModReq(DuUeCb *ueCb)
             }
          }
       }
-      else
+      else if(ueCb->f1UeDb->actionType == UE_CTXT_MOD)
       {
          ret = duBuildAndSendUeContextModReq(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg);
          if(ret == RFAILED)
          {
             DU_LOG("\nERROR  -->  DU APP : Failed to build ue context setup Req in duProcUeContextModReq()");
+            return RFAILED;
+         }
+      }
+      else if((ueCb->f1UeDb->actionType == UE_CTXT_CFG_QUERY) || (ueCb->f1UeDb->actionType == UE_CTXT_RRC_RECFG_COMPLETE))
+      {
+         if((BuildAndSendUeContextModRsp(ueCb) != ROK))
+         {
+            DU_LOG("\nERROR  -->  DU APP : Failed to build UE Context modification response");
+            return RFAILED;
          }
       }
    }
    else
    {
       //TODO: To send the failure cause in UeContextModRsp
+      
       DU_LOG("ERROR  -->  DU APP : Failed to process UE CNTXT MOD REQ at duProcUeContextModReq()");
+      return RFAILED;
    }
    return ROK;
 }
@@ -2867,22 +2905,22 @@ void deleteMacUeCfg(MacUeCfg *ueCfg)
 *
 *    Functionality: delete UE Configuration of a particular UE 
 *
-* @params[in] uint16_t cellIdx, uint8_t ueIdx
+* @params[in] uint16_t cellIdx, uint8_t ueId
 * @return ROK     - success
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx)
+uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueId)
 {
    uint8_t tnlIdx = 0;
    DuUeCb *ueCb = NULLP;
    
    if(duCb.actvCellLst[cellIdx] != NULLP)
    {
-      if((duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].macUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\
-            &&(duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].rlcUeCfg.rlcUeCfgState == UE_DELETE_COMPLETE))
+      if((duCb.actvCellLst[cellIdx]->ueCb[ueId-1].macUeCfg.macUeCfgState == UE_DELETE_COMPLETE)\
+            &&(duCb.actvCellLst[cellIdx]->ueCb[ueId-1].rlcUeCfg.rlcUeCfgState == UE_DELETE_COMPLETE))
       {
-         ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1];
+         ueCb = &duCb.actvCellLst[cellIdx]->ueCb[ueId-1];
          deleteMacUeCfg(&ueCb->macUeCfg);
          deleteRlcUeCfg(&ueCb->rlcUeCfg);
          if(ueCb->f1UeDb !=NULLP)
@@ -2891,7 +2929,7 @@ uint8_t  deleteUeCfg(uint16_t cellIdx, uint8_t ueIdx)
          }
          for(tnlIdx = 0; tnlIdx < duCb.numTeId; )
          {
-            if(duCb.upTnlCfg[tnlIdx]->ueIdx == ueIdx)
+            if(duCb.upTnlCfg[tnlIdx]->ueId == ueId)
             {
                duCb.upTnlCfg[tnlIdx]->configType = CONFIG_DEL;
                duProcEgtpTunnelCfg(tnlIdx, duCb.upTnlCfg[tnlIdx], duCb.upTnlCfg[tnlIdx]);
@@ -3147,7 +3185,7 @@ uint8_t duBuildAndSendUeDeleteReq(uint16_t cellId, uint16_t crnti)
 
    DU_LOG("\nDEBUG  -->  DU_APP: Processing UE Delete Request ");
    GET_CELL_IDX(cellId, cellIdx);
-   GET_UE_IDX(crnti, ueId);
+   GET_UE_ID(crnti, ueId);
 
    if(duCb.actvCellLst[cellIdx] != NULLP)
    {
@@ -3244,50 +3282,44 @@ void deleteRlcUeCfg(RlcUeCfg *ueCfg)
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t duProcUeContextReleaseCommand(DuUeCb *duUeCb)
+uint8_t duProcUeContextReleaseCommand(uint16_t cellId, DuUeCb *duUeCb)
 {
-   uint8_t ret =ROK, ueIdx=0;
-   uint16_t cellId=0,crnti =0;
-   if(duUeCb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand() : duUeCb is null");
-      return RFAILED;
-   }
-   if(duUeCb->f1UeDb == NULLP)
-   {
-      DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand() : f1UeDb is null");
-      return RFAILED;
-   }
-   
-   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)
+   uint8_t ret =ROK, ueId=0;
+   uint16_t crnti = 0;
+
+   if(duUeCb != NULLP)
    {
-      if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP)
+      crnti = duUeCb->crnti;
+      GET_UE_ID(crnti, ueId);
+      
+      if(duUeCb->f1UeDb)
       {
-         ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueIdx-1].rlcUeCfg,\
-               duUeCb->f1UeDb->dlRrcMsg);
-         if(ret == RFAILED)
+         /* Send DL RRC msg for RRC release */
+         if(duUeCb->f1UeDb->dlRrcMsg)
          {
-            DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand() : Failed to send DL RRC msg");
-            DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\
-                  duUeCb->f1UeDb->dlRrcMsg->rrcMsgSize);
-            DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg));
+            if(duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu != NULLP)
+            {
+               ret = duBuildAndSendDlRrcMsgToRlc(cellId, duCb.actvCellLst[duUeCb->f1UeDb->cellIdx]->ueCb[ueId-1].rlcUeCfg,\
+                     duUeCb->f1UeDb->dlRrcMsg);
+               if(ret == RFAILED)
+               {
+                  DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand() : Failed to send DL RRC msg");
+                  DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\
+                        duUeCb->f1UeDb->dlRrcMsg->rrcMsgSize);
+                  DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, duUeCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg));
+               }
+            }
          }
       }
-   }
-   else
-   {
-      ret = duBuildAndSendUeDeleteReq(cellId,crnti);
-      if(ret == RFAILED)
+      else
       {
-         DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand(): Failed to build and send Ue Delete request");
+         ret = duBuildAndSendUeDeleteReq(cellId,crnti);
+         if(ret == RFAILED)
+         {
+            DU_LOG("\nERROR  -->  DU APP : duProcUeContextReleaseCommand(): Failed to build and send Ue Delete request");
+         }
       }
    }
-
    return ret;
 }