Merge "Implementation of UE context release command JIRA ID = ODUHIGH-330"
[o-du/l2.git] / src / du_app / du_ue_mgr.c
index 748f71a..1381cda 100644 (file)
@@ -83,6 +83,14 @@ DuRlcDlUserDataToRlcFunc duSendRlcDlUserDataToRlcOpts[] =
    packRlcDlUserDataToRlc         /* Light weight-loose coupling */
 };
 
+DuMacUeDeleteReq packMacUeDeleteReqOpts[] =
+{
+   packDuMacUeDeleteReq,       /* Loose coupling */
+   MacProcUeDeleteReq,         /* TIght coupling */
+   packDuMacUeDeleteReq        /* Light weight-loose coupling */
+};
+
+
 /*******************************************************************
  *
  * @brief Function to fillDlUserDataInfo
@@ -1130,59 +1138,64 @@ uint8_t fillMacUeCfg(uint16_t cellId, uint8_t ueIdx, uint16_t crnti, \
       ret = procUeReCfgCellInfo(macUeCfg, ueCfgDb->cellGrpCfg);
       if(ret == ROK)
       {
-         if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent)
-        {
-           fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\
-              &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL);
-        }
-        if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent)
+         if(macUeCfg->spCellCfgPres == true)
          {
-            fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
-              NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg);
+            if(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschPresent)
+            {
+               fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg.numTimeDomRsrcAlloc,\
+                     &macUeCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, NULL);
+            }
+            if(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschPresent)
+            {
+               fillStartSymbolAndLen(macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\
+                     NULL, &macUeCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg);
+            }
+         }
+         ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg);
+         if(ueCfgDb->ueNrCapability != NULLP)
+         {
+            duFillModulationDetails(macUeCfg, duMacDb, ueCfgDb->ueNrCapability);
          }
-        ret = fillAmbr(&macUeCfg->ambrCfg, ueCfgDb->ambrCfg);
-        
-         duFillModulationDetails(macUeCfg, duMacDb, ueCfgDb->ueNrCapability);
       }
 
       /* Filling LC Context */
       for(dbIdx = 0; (dbIdx < ueCfgDb->numMacLcs && ret == ROK); dbIdx++)
       {
-        if(!ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres)
-        {
-           /* Filling default UL LC config in MAC if not present */
-           ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres = true;
-           fillDefaultUlLcCfg(&ueCfgDb->macLcCfg[dbIdx].ulLcCfg);
-        }
-        for(lcIdx = 0; lcIdx < duMacDb->numLcs; lcIdx++)
-        {
-           if(ueCfgDb->macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId)
-           {
-              lcIdFound = true;
-              if((ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) ||
-                    (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD))
-              {
-                 ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD;
-                 ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]);
-              }
-           }
-           else
-              lcIdFound = false;
-        }
-        if(!lcIdFound)
-        {
-           /* ADD/DEL CONFIG */
-           ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]);
-        }
-        if(ret == ROK)
-        {
-           macUeCfg->numLcs++;
-        }
-        else
-        {
-           DU_LOG("\nERROR  -->  DU APP : Failed to add Lc at Idx %d in fillMacUeCfg()", dbIdx); 
-           break;
-        }
+         if(!ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres)
+         {
+            /* Filling default UL LC config in MAC if not present */
+            ueCfgDb->macLcCfg[dbIdx].ulLcCfgPres = true;
+            fillDefaultUlLcCfg(&ueCfgDb->macLcCfg[dbIdx].ulLcCfg);
+         }
+         for(lcIdx = 0; lcIdx < duMacDb->numLcs; lcIdx++)
+         {
+            if(ueCfgDb->macLcCfg[dbIdx].lcId == duMacDb->lcCfgList[lcIdx].lcId)
+            {
+               lcIdFound = true;
+               if((ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_UNKNOWN) ||
+                     (ueCfgDb->macLcCfg[dbIdx].configType == CONFIG_MOD))
+               {
+                  ueCfgDb->macLcCfg[dbIdx].configType = CONFIG_MOD;
+                  ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]);
+               }
+            }
+            else
+               lcIdFound = false;
+         }
+         if(!lcIdFound)
+         {
+            /* ADD/DEL CONFIG */
+            ret = fillMacLcCfgToAddMod(&macUeCfg->lcCfgList[dbIdx], &ueCfgDb->macLcCfg[dbIdx]);
+         }
+         if(ret == ROK)
+         {
+            macUeCfg->numLcs++;
+         }
+         else
+         {
+            DU_LOG("\nERROR  -->  DU APP : Failed to add Lc at Idx %d in fillMacUeCfg()", dbIdx); 
+            break;
+         }
       }/*End of Outer FOR loop */
    }
    return ret;
@@ -2143,27 +2156,31 @@ uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp)
       if(cfgRsp->result == MAC_DU_APP_RSP_OK)
       {
          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].\
-              macUeCfg.macUeCfgState = UE_CREATE_COMPLETE;
-        }
+               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;
+               macUeCfg.macUeCfgState = UE_RECFG_COMPLETE;
             if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+            {
                BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId);
+               duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+                  macUeCfg.macUeCfgState = 0;
+            }
          }
       }
       else
       {
          DU_LOG("\nERROR  -->  DU APP : MAC UE CFG Response for EVENT[%d]: FAILURE [UE IDX : %d]", pst->event, cfgRsp->ueIdx);
-        if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
-        {
-           //TODO: Send the failure case in Ue Context Setup Response
-        }
+         if(pst->event == EVENT_MAC_UE_RECONFIG_RSP)
+         {
+            //TODO: Send the failure case in Ue Context Setup Response
+         }
          ret = RFAILED;
       }
       DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(MacUeCfgRsp));
@@ -2262,29 +2279,33 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp)
       if(cfgRsp->result == RLC_DU_APP_RSP_OK)
       {
          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].\
-              rlcUeCfg.rlcUeCfgState = UE_CREATE_COMPLETE;
-        }
-        else if(pst->event == EVENT_RLC_UE_RECONFIG_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].\
+               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].\
-              rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE;
-           if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+            duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+               rlcUeCfg.rlcUeCfgState = UE_RECFG_COMPLETE;
+            if((ret = duUpdateDuUeCbCfg(cfgRsp->ueIdx, cfgRsp->cellId)) == ROK)
+            {
                BuildAndSendUeCtxtRsp(cfgRsp->ueIdx, cfgRsp->cellId);
-        }
+               duCb.actvCellLst[cfgRsp->cellId -1]->ueCb[cfgRsp->ueIdx -1].\
+                  rlcUeCfg.rlcUeCfgState = 0;
+            }   
+         }
       }
       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);
-        if((pst->event == EVENT_RLC_UE_RECONFIG_RSP))
-        {
+               pst->event, cfgRsp->ueIdx, cfgRsp->reason);
+         if((pst->event == EVENT_RLC_UE_RECONFIG_RSP))
+         {
             //TODO: update failure case in ue Context setup Response
-        }
-        ret = RFAILED;
+         }
+         ret = RFAILED;
       }
       DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, cfgRsp, sizeof(RlcUeCfgRsp));
    }
@@ -2296,8 +2317,6 @@ uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp)
    return ret;
 }
 
-
-
 /*******************************************************************
  *
  * @brief Builds and Send Ue Reconfig Req to RLC
@@ -2447,11 +2466,20 @@ uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg)
    {
       GET_UE_IDX(dlRrcMsg->crnti, ueIdx);
       ueCb = &duCb.actvCellLst[dlRrcMsg->cellId -1]->ueCb[ueIdx -1];
-      if(ueCb->f1UeDb && ueCb->f1UeDb->actionType == UE_CTXT_SETUP)
+      if(ueCb->f1UeDb && ueCb->f1UeDb->dlRrcMsgPres)
       {
-        ret = duBuildAndSendUeContextSetupReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg);
-       if(ret == RFAILED)
-          DU_LOG("\nERROR  -->  DU APP : Failed to process UE Context Setup Request in DuProcRlcDlRrcMsgRsp()");
+         if(ueCb->f1UeDb->actionType == UE_CTXT_SETUP)
+         {
+            ret = duBuildAndSendUeContextSetupReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg);
+            if(ret == RFAILED)
+               DU_LOG("\nERROR  -->  DU APP : Failed to process UE Context Setup Request in DuProcRlcDlRrcMsgRsp()");
+         }
+         if(ueCb->f1UeDb->actionType == UE_CTXT_MOD)
+         {
+            ret = duBuildAndSendUeContextModReq(dlRrcMsg->cellId, dlRrcMsg->crnti, &ueCb->f1UeDb->duUeCfg);
+            if(ret == RFAILED)
+               DU_LOG("\nERROR  -->  DU APP : Failed to process UE Context Mod Request in DuProcRlcDlRrcMsgRsp()");
+         }
       }
    }
    else
@@ -2479,7 +2507,7 @@ uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg)
 uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb)
 {
    uint8_t ret, cellId;
-   
+
    ret = ROK;
    if(ueCb)
    {
@@ -2495,7 +2523,7 @@ uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb)
             {
                DU_LOG("\nERROR  -->  DU APP : Failed to send DL RRC msg in duProcUeContextSetupRequest()");
                DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\
-                  ueCb->f1UeDb->dlRrcMsg->rrcMsgSize);
+                     ueCb->f1UeDb->dlRrcMsg->rrcMsgSize);
                DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg));
             }
          }
@@ -2503,10 +2531,10 @@ uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb)
       else if(ueCb->f1UeDb->actionType == UE_CTXT_SETUP)
       {
          ret = duBuildAndSendUeContextSetupReq(cellId, ueCb->crnti, &ueCb->f1UeDb->duUeCfg);
-        if(ret == RFAILED)
-        {
+         if(ret == RFAILED)
+         {
             DU_LOG("\nERROR  -->  DU APP : Failed to build ue context setup Req in duProcUeContextSetupRequest()");
-        }
+         }
       }
    }
    else
@@ -2516,27 +2544,366 @@ uint8_t duProcUeContextSetupRequest(DuUeCb *ueCb)
    }
    return ret;
 }
+
+/*******************************************************************
+ *
+ * @brief Build and Send Ue context mod request
+ *
+ * @details
+ *
+ *
+ *    Function : duBuildAndSendUeContextModReq
+ *
+ *    Functionality: 
+ *     Build and Send Ue context mod request
+ * 
+ *  @params[in]  cellId, crnti, DuUeCfg pointer
+ *  @return ROK     - success
+ *          RFAILED - failure
+ * 
+ *****************************************************************/
+
+uint8_t duBuildAndSendUeContextModReq(uint16_t cellId, uint16_t crnti, DuUeCfg *duUeCfg)
+{
+   uint8_t ret = ROK;
+
+   DU_LOG("\nDEBUG   -->  DU_APP: Processing Ue Context Mod Request for cellId [%d]", cellId);
+   /* Filling RLC Ue Reconfig */ 
+   ret = duBuildAndSendUeReCfgReqToRlc(cellId, crnti, duUeCfg);
+   if(ret == RFAILED)
+      DU_LOG("\nERROR  -->  DU APP : Failed to build ctxt setup req for RLC at duBuildAndSendUeContextModReq()");
+   
+   /* Filling MAC Ue Reconfig */
+   ret = duBuildAndSendUeReCfgReqToMac(cellId, crnti, duUeCfg);
+   if(ret == RFAILED)
+      DU_LOG("\nERROR  -->  DU APP : Failed at build ctxt setup req for MAC at duBuildAndSendUeContextModReq()");
+
+   return ret;
+}
+/*******************************************************************
+ *
+ * @brief Processing Ue context mod request
+ *
+ * @details
+ *
+ *
+ *    Function : duProcUeContextModReq 
+ *
+ *    Functionality:
+ *        Processing  Ue context mod request
+ *
+ *  @params[in] DuUeCb *ueCb 
+ *  @return ROK     - success
+ *          RFAILED - failure
+ *
+ *****************************************************************/
+
+uint8_t duProcUeContextModReq(DuUeCb *ueCb)
+{
+   uint8_t ret, cellId;
+
+   ret = ROK;
+   if(ueCb)
+   {
+      cellId = duCb.actvCellLst[ueCb->f1UeDb->cellIdx]->cellId;
+      /* Send DL RRC msg for security Mode */
+      if(ueCb->f1UeDb->dlRrcMsg)
+      {
+         if(ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu)
+         {
+            /* Sending DL RRC Message to RLC */
+            ret = duBuildAndSendDlRrcMsgToRlc(cellId, ueCb->rlcUeCfg, ueCb->f1UeDb->dlRrcMsg);
+            if(ret == RFAILED)
+            {
+               DU_LOG("\nERROR  -->  DU APP : Failed to send DL RRC msg in duProcUeContextModReq()");
+               DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg->rrcMsgPdu,\
+                     ueCb->f1UeDb->dlRrcMsg->rrcMsgSize);
+               DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueCb->f1UeDb->dlRrcMsg, sizeof(F1DlRrcMsg));
+            }
+         }
+      }
+      else
+      {
+         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()");
+         }
+      }
+   }
+   else
+   {
+      //TODO: To send the failure cause in UeContextModRsp
+      DU_LOG("ERROR  -->  DU APP : Failed to process UE CNTXT MOD REQ at duProcUeContextModReq()");
+   }
+   return ROK;
+}
+/*******************************************************************
+*
+* @brief Function to delete Pdsch ServCellCfg
+*
+* @details
+*
+*    Function : deletePdschServCellCfg
+*
+*    Functionality: Function to delete Pdsch ServCellCfg
+*
+* @params[in] PdschServCellCfg *pdschServCellCfg
+* @return void
+*
+* ****************************************************************/
+void deletePdschServCellCfg(PdschServCellCfg *pdschServCellCfg)
+{
+   DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->maxMimoLayers, sizeof(uint8_t));
+   DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->maxCodeBlkGrpPerTb, sizeof(MaxCodeBlkGrpPerTB));
+   DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->codeBlkGrpFlushInd, sizeof(bool));
+   DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,pdschServCellCfg->xOverhead, sizeof(PdschXOverhead));
+}
+
+/*******************************************************************
+ *
+* @brief delete MacUeCfg from duCb
+*
+* @details
+*
+*    Function : deleteMacUeCfg 
+*
+*    Functionality: delete MacUeCfg from duCb
+*
+* @params[in] Pointer to MacUeCfg 
+* @return ROK     - success
+*         RFAILED - failure
+*
+*******************************************************************/
+void deleteMacUeCfg(MacUeCfg *ueCfg)
+{
+   uint8_t lcCfgIdx;
+   uint8_t resrcIdx;
+   ServCellCfgInfo *servCellCfg;
+   PucchResrcInfo *resrcToAddModList;
+
+   if(ueCfg)
+   {
+      DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->ambrCfg, sizeof(AmbrCfg));
+      if(ueCfg->spCellCfgPres)
+      {
+         servCellCfg = &ueCfg->spCellCfg.servCellCfg;
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->bwpInactivityTmr, sizeof(uint8_t));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.resrcSet,\
+         sizeof(PucchResrcSetCfg));
+         if(servCellCfg->initUlBwp.pucchCfg.resrc)
+         {
+            /*freeing the PucchResrcCfg*/
+            for(resrcIdx= 0; resrcIdx< servCellCfg->initUlBwp.pucchCfg.resrc->resrcToAddModListCount; resrcIdx++)
+            {
+               resrcToAddModList=&servCellCfg->initUlBwp.pucchCfg.resrc->resrcToAddModList[resrcIdx];
+               switch(resrcToAddModList->pucchFormat)
+               {
+                  case PUCCH_FORMAT_0:
+                     {
+                        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format0 ,\
+                        sizeof(PucchFormat0));
+                        break;
+                     }
+                  case PUCCH_FORMAT_1:
+                     {
+                        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format1 ,\
+                        sizeof(PucchFormat1));
+                        break;
+                     }
+                  case PUCCH_FORMAT_2:
+                     {
+                        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format2 ,\
+                        sizeof(PucchFormat2_3));
+                        break;
+                     }
+                  case PUCCH_FORMAT_3:
+                     {
+                        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format3 ,\
+                        sizeof(PucchFormat2_3));
+                        break;
+                     }
+                  case PUCCH_FORMAT_4:
+                     {
+                        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,resrcToAddModList->PucchFormat.format4 ,\
+                        sizeof(PucchFormat4));
+                        break;
+                     }
+               }
+            }
+            DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.resrc,\
+            sizeof(PucchResrcCfg));
+         }
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format1,\
+         sizeof(PucchFormatCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format2,\
+         sizeof(PucchFormatCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format3,\
+         sizeof(PucchFormatCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.format4,\
+         sizeof(PucchFormatCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.schedReq,\
+         sizeof(PucchSchedReqCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.multiCsiCfg,\
+         sizeof(PucchMultiCsiCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.spatialInfo,\
+         sizeof(PucchSpatialCfg));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.dlDataToUlAck ,\
+         sizeof(PucchDlDataToUlAck));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,servCellCfg->initUlBwp.pucchCfg.powerControl,\
+         sizeof(PucchPowerControl));
+         deletePdschServCellCfg(&servCellCfg->pdschServCellCfg);
+      }
+      for(lcCfgIdx=0; lcCfgIdx< ueCfg->numLcs; lcCfgIdx++)
+      {
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->lcCfgList[lcCfgIdx].drbQos, sizeof(DrbQosInfo));
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL,ueCfg->lcCfgList[lcCfgIdx].snssai, sizeof(Snssai));
+      }
+   }
+   memset(ueCfg, 0, sizeof(MacUeCfg));
+}
+/*******************************************************************
+*
+* @brief Handle UE delete response from MAC
+*
+* @details
+*
+*    Function : DuProcMacUeDeleteRsp
+*
+*    Functionality: Handle UE delete response from MAC
+*
+* @params[in] Pointer to MacUeDeleteRsp and Pst
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp)
+{
+   uint16_t cellIdx=0;
+   if(deleteRsp)
+   {
+      if(deleteRsp->result == SUCCESS)
+      {
+         DU_LOG("\nINFO   -->  DU APP : MAC UE Delete Response : SUCCESS [UE IDX : %d]", deleteRsp->ueIdx);
+         GET_CELL_IDX(deleteRsp->cellId, cellIdx);
+         if(duCb.actvCellLst[cellIdx])
+         {
+           deleteMacUeCfg(&duCb.actvCellLst[cellIdx]->ueCb[deleteRsp->ueIdx -1].macUeCfg);
+         }
+      }
+      else
+      {
+         DU_LOG("\nERROR  -->  DU APP : DuProcMacUeDeleteRsp(): MAC UE Delete Response : FAILURE [UE IDX : %d]",\
+         deleteRsp->ueIdx);
+         return RFAILED;
+      }
+      DU_FREE_SHRABL_BUF(pst->region, pst->pool, deleteRsp, sizeof(MacUeDeleteRsp));
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  DU APP : DuProcMacUeDeleteRsp(): MAC UE Delete Response is null");
+      return RFAILED;
+   }
+   return ROK;
+}
+/*******************************************************************
+*
+* @brief Sending UE Delete Req To Mac
+*
+* @details
+*
+*    Function : sendUeDeleteReqToMac
+*
+*    Functionality:
+*     sending UE Delete Req To Mac
+*
+*  @params[in]    uint8_t cellId, uint8_t ueId 
+*  @return ROK     - success
+*          RFAILED - failure
+*
+*****************************************************************/
+
+uint8_t sendUeDeleteReqToMac(uint16_t cellId, uint8_t ueIdx, uint16_t crnti)
+{
+   Pst pst;
+   uint8_t ret=ROK;
+   MacUeDelete *ueDelete = NULLP;
+   
+   DU_ALLOC_SHRABL_BUF(ueDelete, sizeof(MacUeDelete));
+   if(ueDelete)
+   {
+      ueDelete->cellId = cellId;
+      ueDelete->ueIdx  = ueIdx;
+      ueDelete->crnti  = crnti;
+      FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_UE_DELETE_REQ);
+
+      /* Processing one Ue at a time to MAC */
+      DU_LOG("\nDEBUG  -->  DU_APP: Sending UE delete Request to MAC ");
+      ret = (*packMacUeDeleteReqOpts[pst.selector])(&pst, ueDelete);
+      if(ret == RFAILED)
+      {
+         DU_LOG("\nERROR  -->  DU_APP: sendUeDeleteReqToMac(): Failed to send UE delete Req to MAC");
+         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, ueDelete, sizeof(MacUeDelete));
+      }
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->   DU_APP: sendUeDeleteReqToMac(): Failed to allocate memory"); 
+      ret = RFAILED;
+   }
+   return ret;
+}
+
 /*******************************************************************
 *
-* @brief Process UE context modification request from CU
+* @brief Du preocess Ue Delete Req to MAC and RLC
 *
 * @details
 *
-*    Function : duProcUeContextModReq
+*    Function : duProcUeDeleteReq
 *
-*    Functionality: Process UE context modification request from CU
+*    Functionality: Du process Ue Delete Req to MAC and RLC
 *
-* @params[in] DuUeCb *ueCb
+* @params[in] cellId, crnti 
 * @return ROK     - success
 *         RFAILED - failure
 *
 * ****************************************************************/
-uint8_t duProcUeContextModReq(DuUeCb *ueCb)
+uint8_t duProcUeDeleteReq(uint16_t cellId, uint16_t crnti)
 {
-    
-    //TODO:After RB configuration are done Mod Response is triggered 
-    return ROK;
+   uint16_t cellIdx = 0;
+   uint8_t ueIdx   = 0;
+
+   DU_LOG("\nDEBUG   -->  DU_APP: Processing UE Delete Request ");
+   GET_CELL_IDX(cellId, cellIdx);
+   GET_UE_IDX(crnti, ueIdx);
+
+   if(duCb.actvCellLst[cellIdx] != NULLP)
+   {
+      if(duCb.actvCellLst[cellIdx]->ueCb[ueIdx-1].crnti == crnti)
+      {
+         if(sendUeDeleteReqToMac(cellId, ueIdx, crnti) == RFAILED)
+         {
+            DU_LOG("\nERROR  -->  DU APP : duProcUeDeleteReq(): Failed to build UE  delete req for MAC ");
+            return RFAILED;
+         }
+
+      }
+      else
+      {
+         DU_LOG("\nERROR  -->  DU APP : duProcUeDeleteReq(): crnti is not found");
+         return RFAILED;
+      }
+   }
+   else
+   {
+      DU_LOG("\nERROR  -->  DU APP : duProcUeDeleteReq(): Cell Id is not found");
+      return RFAILED;
+   }
+
+   return ROK;
 }
+
 /**********************************************************************
   End of file
  ***********************************************************************/