Merge "Fixes in current code for Multi-UE support [Issue-ID: ODUHIGH-354]"
authorHarshita Lal <harshita.lal@radisys.com>
Mon, 23 Aug 2021 08:45:56 +0000 (08:45 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Mon, 23 Aug 2021 08:45:56 +0000 (08:45 +0000)
1  2 
src/5gnrmac/mac_slot_ind.c
src/cu_stub/cu_f1ap_msg_hdl.c
src/du_app/du_f1ap_msg_hdl.c

@@@ -54,12 -54,10 +54,13 @@@ MacSchSlotIndFunc macSchSlotIndOpts[] 
   **/
  uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
  {
+    uint8_t   ueIdx;
     uint16_t  cellIdx;
     MacDlSlot *currDlSlot = NULLP;
  
 +#ifdef CALL_FLOW_DEBUG_LOG
 +   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_DL_SCH_INFO\n");
 +#endif
     if(dlSchedInfo != NULLP)
     {
        GET_CELL_IDX(dlSchedInfo->cellId, cellIdx);
           /* Check if the downlink pdu is msg4 */
           if(dlSchedInfo->dlMsgAlloc->dlMsgInfo.isMsg4Pdu)
           {
-             macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize = dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize;
+             GET_UE_IDX(dlSchedInfo->dlMsgAlloc->dlMsgInfo.crnti, ueIdx);
+             ueIdx = ueIdx -1;
+             macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize = \
+                dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize;
           }
           else
           {
@@@ -148,8 -149,8 +152,8 @@@ void fillMsg4Pdu(uint16_t cellId, DlMsg
  
     if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu != NULLP)
     {
-       MAC_ALLOC(msg4DlData.pduInfo[ueIdx].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen);
-       if(msg4DlData.pduInfo[ueIdx].dlPdu != NULLP)
+       MAC_ALLOC(msg4DlData.pduInfo[msg4DlData.numPdu].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen);
+       if(msg4DlData.pduInfo[msg4DlData.numPdu].dlPdu != NULLP)
        {
           msg4TxPduLen = macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize - TX_PAYLOAD_HDR_LEN;
  
              DU_LOG("\nERROR  -->  MAC: Failed allocating memory for msg4TxPdu");
           }
           /* Free memory allocated */
-          MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen);
+          MAC_FREE(msg4DlData.pduInfo[msg4DlData.numPdu-1].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen);
+          msg4DlData.numPdu--;
        }
     }
  
@@@ -72,7 -72,6 +72,7 @@@
  #include "SRS-Resource.h"
  #include "SRS-ResourceSet.h"
  #include "SRS-Config.h"
 +#include "PUCCH-Config.h"
  #include "BWP-UplinkDedicated.h"
  #include "PUSCH-ServingCellConfig.h"
  #include "UplinkConfig.h"
  #define PDSCH_MAPPING_TYPE_B 1
  
  /* MACRO Define for PUSCH Configuration */
 -#define PUSCH_K2  3
 +#define PUSCH_K2_CFG1  3
 +#define PUSCH_K2_CFG2  4
  
  #define PUSCH_MSG3_DELTA_PREAMBLE 0
  #define PUSCH_P0_NOMINAL_WITH_GRANT -70
@@@ -1021,18 -1019,18 +1021,18 @@@ uint8_t fillSrbCfg(uint8_t srbId, SRB_T
   *
   * ****************************************************************/
  
- uint8_t fillMasterCellGroup(OCTET_STRING_t *masterCellGroup)
+ uint8_t fillMasterCellGroup(uint8_t ueId, OCTET_STRING_t *masterCellGroup)
  {
     uint8_t ret = ROK;
     masterCellGroup->buf = NULLP;
-    if(f1apMsgDb.duToCuContainer.buf)
+    if(ueCb[ueId-1].f1apMsgDb.duToCuContainer.buf)
     {
-       masterCellGroup->size = f1apMsgDb.duToCuContainer.size;
+       masterCellGroup->size = ueCb[ueId-1].f1apMsgDb.duToCuContainer.size;
        CU_ALLOC(masterCellGroup->buf, masterCellGroup->size);
        if(masterCellGroup->buf != NULLP)
        {
-        memcpy(masterCellGroup->buf, f1apMsgDb.duToCuContainer.buf,\
-              masterCellGroup->size);
+          memcpy(masterCellGroup->buf, ueCb[ueId-1].f1apMsgDb.duToCuContainer.buf,\
+                masterCellGroup->size);
        }
        else
        {
   *
   * ****************************************************************/
  
- uint8_t fillRRCSetupIE(RRCSetup_IEs_t *rrcSetupIE)
+ uint8_t fillRRCSetupIE(uint8_t ueId, RRCSetup_IEs_t *rrcSetupIE)
  {
     uint8_t ret = ROK;
     if(rrcSetupIE)
        }               
        if(ret == ROK)
        {
-        ret = fillMasterCellGroup(&rrcSetupIE->masterCellGroup);
+          ret = fillMasterCellGroup(ueId, &rrcSetupIE->masterCellGroup);
        }
        else
        {
   *
   * ****************************************************************/
  
- uint8_t fillDlCcchRrcMsg(RRCContainer_t *rrcContainer)
+ uint8_t fillDlCcchRrcMsg(uint8_t ueId, RRCContainer_t *rrcContainer)
  {
     uint8_t ret = ROK;
     uint16_t idx2;
        CU_ALLOC(dl_CCCH_Msg.message.choice.c1 , sizeof(DL_CCCH_MessageType_t));
        if(dl_CCCH_Msg.message.choice.c1 != NULLP)
        {
-        dl_CCCH_Msg.message.choice.c1->present = DL_CCCH_MessageType__c1_PR_rrcSetup;
-        CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup, sizeof(RRCSetup_t));
-        if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup != NULLP)
-        {
-           dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->rrc_TransactionIdentifier = 0;
-           dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->criticalExtensions.\
-              present = RRCSetup__criticalExtensions_PR_rrcSetup;
-           /* Fill RRC Setup IE */
-           CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
-                 criticalExtensions.choice.rrcSetup, sizeof(RRCSetup_IEs_t));
-           if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
-                 criticalExtensions.choice.rrcSetup != NULLP)
-           {
-              ret = fillRRCSetupIE(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
-                    criticalExtensions.choice.rrcSetup);
+          dl_CCCH_Msg.message.choice.c1->present = DL_CCCH_MessageType__c1_PR_rrcSetup;
+          CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup, sizeof(RRCSetup_t));
+          if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup != NULLP)
+          {
+             dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->rrc_TransactionIdentifier = 0;
+             dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->criticalExtensions.\
+                present = RRCSetup__criticalExtensions_PR_rrcSetup;
+             /* Fill RRC Setup IE */
+             CU_ALLOC(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
+                   criticalExtensions.choice.rrcSetup, sizeof(RRCSetup_IEs_t));
+             if(dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
+                   criticalExtensions.choice.rrcSetup != NULLP)
+             {
+                ret = fillRRCSetupIE(ueId, dl_CCCH_Msg.message.choice.c1->choice.rrcSetup->\
+                      criticalExtensions.choice.rrcSetup);
  
-              if(ret == ROK)
-              {
-                 /* encode DL-CCCH message into RRC Container */
-                 xer_fprint(stdout, &asn_DEF_DL_CCCH_MessageType, &dl_CCCH_Msg);
-                 memset(encBuf, 0, ENC_BUF_MAX_LEN);
-                 encBufSize = 0;
-                 encRetVal = aper_encode(&asn_DEF_DL_CCCH_MessageType, 0, &dl_CCCH_Msg, PrepFinalEncBuf, encBuf);
-                 /* Encode results */
-                 if(encRetVal.encoded == ENCODE_FAIL)
-                 {
-                    DU_LOG( "\nERROR  -->  F1AP : Could not encode RRCContainer for DL-CCCH Msg(at %s)\n",\
-                          encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
-                    return RFAILED;
-                 }
-                 else
-                 {
-                    DU_LOG("\nDEBUG  -->  F1AP : Created APER encoded buffer for RRCContainer for DL-CCCH Msg\n");
-                    for(int i = 0; i< encBufSize; i++)
-                    {
-                       DU_LOG("%x",encBuf[i]);
-                    }
-                    rrcContainer->size = encBufSize;
-                    CU_ALLOC(rrcContainer->buf, rrcContainer->size);
-                    if(rrcContainer->buf != NULLP)
-                    {
-                       memset(rrcContainer->buf, 0, encBufSize);
-                       for(idx2 = 0; idx2 < encBufSize; idx2++)
-                       {
-                          rrcContainer->buf[idx2] =    encBuf[idx2];
-                       }
-                    }
-                 }
-              }
-              else
-              {
-                 ret = RFAILED;
-              }
-           }
-           else
-           {
-              DU_LOG("\nERROR  -->  F1AP: Memory Alloc failed for RRC Setup Msg at fillDlCcchRrcMsg()");
-              ret = RFAILED;
-           }
-        }
-        else
-        {
-           DU_LOG("\nERROR  -->  F1AP: Memory Alloc failed for RRC Msg at fillDlCcchRrcMsg()");
-           ret = RFAILED;
-        }
+                if(ret == ROK)
+                {
+                   /* encode DL-CCCH message into RRC Container */
+                   xer_fprint(stdout, &asn_DEF_DL_CCCH_MessageType, &dl_CCCH_Msg);
+                   memset(encBuf, 0, ENC_BUF_MAX_LEN);
+                   encBufSize = 0;
+                   encRetVal = aper_encode(&asn_DEF_DL_CCCH_MessageType, 0, &dl_CCCH_Msg, PrepFinalEncBuf, encBuf);
+                   /* Encode results */
+                   if(encRetVal.encoded == ENCODE_FAIL)
+                   {
+                      DU_LOG( "\nERROR  -->  F1AP : Could not encode RRCContainer for DL-CCCH Msg(at %s)\n",\
+                            encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+                      return RFAILED;
+                   }
+                   else
+                   {
+                      DU_LOG("\nDEBUG  -->  F1AP : Created APER encoded buffer for RRCContainer for DL-CCCH Msg\n");
+                      for(int i = 0; i< encBufSize; i++)
+                      {
+                         DU_LOG("%x",encBuf[i]);
+                      }
+                      rrcContainer->size = encBufSize;
+                      CU_ALLOC(rrcContainer->buf, rrcContainer->size);
+                      if(rrcContainer->buf != NULLP)
+                      {
+                         memset(rrcContainer->buf, 0, encBufSize);
+                         for(idx2 = 0; idx2 < encBufSize; idx2++)
+                         {
+                            rrcContainer->buf[idx2] =  encBuf[idx2];
+                         }
+                      }
+                   }
+                }
+                else
+                {
+                   ret = RFAILED;
+                }
+             }
+             else
+             {
+                DU_LOG("\nERROR  -->  F1AP: Memory Alloc failed for RRC Setup Msg at fillDlCcchRrcMsg()");
+                ret = RFAILED;
+             }
+          }
+          else
+          {
+             DU_LOG("\nERROR  -->  F1AP: Memory Alloc failed for RRC Msg at fillDlCcchRrcMsg()");
+             ret = RFAILED;
+          }
        }
        else
        {
@@@ -1529,14 -1527,14 +1529,14 @@@ uint8_t fillDlDcchRrcMsg(RRCContainer_
   *
   * ****************************************************************/
  
- uint8_t       BuildDLRRCContainer(uint8_t rrcMsgType, RRCContainer_t *rrcContainer)
+ uint8_t       BuildDLRRCContainer(uint8_t ueId, uint8_t rrcMsgType, RRCContainer_t *rrcContainer)
  {
     uint8_t ret, bufLen;
  
     ret =ROK;
     if(rrcMsgType == RRC_SETUP)
     { 
-       ret = fillDlCcchRrcMsg(rrcContainer);
+       ret = fillDlCcchRrcMsg(ueId, rrcContainer);
        if(ret == RFAILED)
         DU_LOG("\nERROR  -->  F1AP: Failed to fill DL-CCCH Msg at RRC SETUP");
     }
   *         RFAILED - failure
   *
   * ****************************************************************/
- uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType)
+ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t ueId, uint8_t srbId, uint8_t rrcMsgType)
  {
     uint8_t   elementCnt = 0;
     uint8_t  ieId;
     dlRRCMsg->protocolIEs.list.array[idx]->id  = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
     dlRRCMsg->protocolIEs.list.array[idx]->criticality  =   Criticality_reject;
     dlRRCMsg->protocolIEs.list.array[idx]->value.present = \
-                                                         DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
-    dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = CU_ID;
+                                                           DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
+    dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_CU_UE_F1AP_ID = ueId;
  
     /* GNB DU UE F1AP ID */
     idx++;
                                                ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
     dlRRCMsg->protocolIEs.list.array[idx]->criticality  =   Criticality_reject;
     dlRRCMsg->protocolIEs.list.array[idx]->value.present = \
-                                                         DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
-    dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = DU_ID;
+                                                           DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
+    dlRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID = ueId;
  
     /* SRBID */
     idx++;
     dlRRCMsg->protocolIEs.list.array[idx]->id  = ProtocolIE_ID_id_RRCContainer;
     dlRRCMsg->protocolIEs.list.array[idx]->criticality   = Criticality_reject;
     dlRRCMsg->protocolIEs.list.array[idx]->value.present = \
-                                                         DLRRCMessageTransferIEs__value_PR_RRCContainer;
-    BuildDLRRCContainer(rrcMsgType, &dlRRCMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer);
+                                                           DLRRCMessageTransferIEs__value_PR_RRCContainer;
+    BuildDLRRCContainer(ueId, rrcMsgType, &dlRRCMsg->protocolIEs.list.array[idx]->value.choice.RRCContainer);
  
     xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
  
   *
   * ****************************************************************/
  
- uint8_t setDlRRCMsgType()
+ uint8_t setDlRRCMsgType(uint8_t ueId)
  {
     uint8_t rrcMsgType = 0;
-    switch(f1apMsgDb.dlRrcMsgCount)
+    switch(ueCb[ueId -1].f1apMsgDb.dlRrcMsgCount)
     {
        case RRC_SETUP:
         rrcMsgType = RRC_SETUP;
  
  uint8_t procInitULRRCMsg(F1AP_PDU_t *f1apMsg)
  {
-    uint8_t idx, rrcMsgType;
+    uint8_t idx, rrcMsgType, gnbDuUeF1apId;
     uint8_t ret =ROK;
     InitialULRRCMessageTransfer_t *initULRRCMsg = NULLP;
     DU_LOG("\nINFO -->  F1AP : filling the required values in DB in procInitULRRCMsg");
     {
        switch(initULRRCMsg->protocolIEs.list.array[idx]->id)
        {
-        case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID:
-           break;
-        case ProtocolIE_ID_id_NRCGI:
-           break;
-        case ProtocolIE_ID_id_C_RNTI:
-           break;
-        case ProtocolIE_ID_id_RRCContainer:
-           break;
-        case ProtocolIE_ID_id_DUtoCURRCContainer:
-           {
-              if((initULRRCMsg->protocolIEs.list.array[idx]->value.choice\
-                       .DUtoCURRCContainer.size > 0) && (initULRRCMsg->protocolIEs\
-                          .list.array[idx]->value.choice.DUtoCURRCContainer.buf != NULLP))
-              {
-                 DU_LOG("\nINFO  -->  Received Du to Cu RRC Container ");
-                 f1apMsgDb.duToCuContainer.size = initULRRCMsg->protocolIEs\
-                                                  .list.array[idx]->value.choice.DUtoCURRCContainer.size;
-                 CU_ALLOC(f1apMsgDb.duToCuContainer.buf, \
-                       f1apMsgDb.duToCuContainer.size);
-                 if(f1apMsgDb.duToCuContainer.buf != NULLP)
-                 { 
-                    memcpy(f1apMsgDb.duToCuContainer.buf, initULRRCMsg->protocolIEs\
-                          .list.array[idx]->value.choice.DUtoCURRCContainer.buf, f1apMsgDb\
-                          .duToCuContainer.size);
-                 }
-              }
-              else
-              {
-                 DU_LOG("\nERROR  -->  Failed to receive Du to Cu RRC Container ");
-                 ret = RFAILED;
-              }
-              break;
-           }
-        default:
-           DU_LOG("\nERROR  -->  Invalid Event %ld", initULRRCMsg->protocolIEs.list.array[idx]->id);
-           break;
+          case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID:
+             gnbDuUeF1apId = initULRRCMsg->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID;
+             break;
+          case ProtocolIE_ID_id_NRCGI:
+             break;
+          case ProtocolIE_ID_id_C_RNTI:
+             break;
+          case ProtocolIE_ID_id_RRCContainer:
+             break;
+          case ProtocolIE_ID_id_DUtoCURRCContainer:
+             {
+                if((initULRRCMsg->protocolIEs.list.array[idx]->value.choice\
+                         .DUtoCURRCContainer.size > 0) && (initULRRCMsg->protocolIEs\
+                            .list.array[idx]->value.choice.DUtoCURRCContainer.buf != NULLP))
+                {
+                   DU_LOG("\nINFO  -->  Received Du to Cu RRC Container ");
+                   ueCb[gnbDuUeF1apId-1].ueId = gnbDuUeF1apId;
+                   ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.size = initULRRCMsg->protocolIEs\
+                          .list.array[idx]->value.choice.DUtoCURRCContainer.size;
+                   CU_ALLOC(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf, \
+                         ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.size);
+                   if(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf != NULLP)
+                   { 
+                      memcpy(ueCb[gnbDuUeF1apId-1].f1apMsgDb.duToCuContainer.buf, initULRRCMsg->protocolIEs\
+                            .list.array[idx]->value.choice.DUtoCURRCContainer.buf, ueCb[gnbDuUeF1apId-1].f1apMsgDb\
+                            .duToCuContainer.size);
+                   }
+                }
+                else
+                {
+                   DU_LOG("\nERROR  -->  Failed to receive Du to Cu RRC Container ");
+                   ret = RFAILED;
+                }
+                break;
+             }
+          default:
+             DU_LOG("\nERROR  -->  Invalid Event %ld", initULRRCMsg->protocolIEs.list.array[idx]->id);
+             break;
        }
     }
     if(ret == ROK)
     {
-       f1apMsgDb.dlRrcMsgCount++;
-       rrcMsgType = setDlRRCMsgType();
-       ret = BuildAndSendDLRRCMessageTransfer(SRB0, rrcMsgType);
+       ueCb[gnbDuUeF1apId-1].f1apMsgDb.dlRrcMsgCount++;
+       rrcMsgType = setDlRRCMsgType(gnbDuUeF1apId);
+       ret = BuildAndSendDLRRCMessageTransfer(gnbDuUeF1apId, SRB0, rrcMsgType);
     }
     return ret;
  }
@@@ -2238,7 -2238,7 +2240,7 @@@ uint8_t BuildULTnlInfo(ULUPTNLInformati
     ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
        gTP_TEID.buf[2] = 0;
     ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
-       gTP_TEID.buf[3] = 1;
+       gTP_TEID.buf[3] = cuCfgParams.egtpParams.currTunnelId++;
  
     return ROK;
  }/*End of BuildULTnlInfo*/
@@@ -3197,7 -3197,7 +3199,7 @@@ uint8_t BuildTCIStatesToAddModList(stru
        return RFAILED;
     }
  
 -   elementCnt = 1;
 +   elementCnt = 2;
     timeDomAllocList->choice.setup->list.count = elementCnt;
     timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(struct PDSCH_TimeDomainResourceAllocation *);
  
     idx = 0;
     timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 +   CU_ALLOC(timeDomAlloc->k0, sizeof(long));
 +   if(!timeDomAlloc->k0)
 +   {
 +       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
 +       return RFAILED;
 +   }
 +   *(timeDomAlloc->k0) = 0;
 +   timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
 +   timeDomAlloc->startSymbolAndLength = 66;
  
 -   timeDomAlloc->k0 = NULLP;
 +   idx++;
 +   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 +   CU_ALLOC(timeDomAlloc->k0, sizeof(long));
 +   if(!timeDomAlloc->k0)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
 +      return RFAILED;
 +   }
 +   *(timeDomAlloc->k0) = 1;
     timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
     timeDomAlloc->startSymbolAndLength = 66;
  
@@@ -3552,7 -3535,7 +3554,7 @@@ uint8_t BuildInitialDlBWP(BWP_DownlinkD
        return RFAILED;
     }
  
 -   elementCnt = 1;
 +   elementCnt = 2;
     timeDomAllocList->choice.setup->list.count = elementCnt;
     timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
        DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
        return RFAILED;
     }
 -   *(timeDomAlloc->k2) = PUSCH_K2;
 +   *(timeDomAlloc->k2) = PUSCH_K2_CFG1;
     timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
     timeDomAlloc->startSymbolAndLength = 66; 
 +
 +   idx++;
 +   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 +   CU_ALLOC(timeDomAlloc->k2, sizeof(long));
 +   if(!timeDomAlloc->k2)
 +   {
 +       DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
 +       return RFAILED;
 +   }
 +   *(timeDomAlloc->k2) = PUSCH_K2_CFG2;
 +   timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
 +   timeDomAlloc->startSymbolAndLength = 66;
 +
     return ROK;
  }
  
@@@ -3688,61 -3658,6 +3690,61 @@@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Con
     return ROK;
  }
  
 +/*******************************************************************
 + *
 + * @brief Builds BWP UL dedicated PUCCH Config
 + *
 + * @details
 + *
 + *    Function : BuildBWPUlDedPucchCfg
 + *
 + *    Functionality:
 + *      Builds BWP UL dedicated PUCCH Config
 + *
 + * @params[in] : PUCCH_Config_t *pucchCfg
 + *
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg)
 +{
 +   uint8_t arrIdx, elementCnt;
 +
 +   CU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
 +   if(pucchCfg->dl_DataToUL_ACK == NULLP)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +      return RFAILED;
 +   }
 +
 +   elementCnt = 2;
 +   pucchCfg->dl_DataToUL_ACK->list.count = elementCnt;
 +   pucchCfg->dl_DataToUL_ACK->list.size = elementCnt * sizeof(long *);
 +   CU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
 +   if(pucchCfg->dl_DataToUL_ACK->list.array == NULLP)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +      return RFAILED;
 +   }
 +
 +   for(arrIdx = 0; arrIdx <  pucchCfg->dl_DataToUL_ACK->list.count; arrIdx++)
 +   {
 +      CU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx], sizeof(long));
 +      if(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx] == NULLP)
 +      {
 +          DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +          return RFAILED;
 +      }
 +   }
 +
 +   arrIdx = 0;
 +   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 1;
 +   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 2;
 +
 +   return ROK;
 +}
 +
  /*******************************************************************
   *
   * @brief Fills SRS resource to add/modify list 
@@@ -4017,27 -3932,6 +4019,27 @@@ uint8_t BuildBWPUlDedSrsCfg(SRS_Config_
  uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
  {
     ulBwp->pucch_Config = NULLP;
 +   ulBwp->pucch_Config = NULLP;
 +   CU_ALLOC(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
 +   if(!ulBwp->pucch_Config)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
 +      return RFAILED;
 +   }
 +
 +   ulBwp->pucch_Config->present = BWP_UplinkDedicated__pucch_Config_PR_setup;
 +   ulBwp->pucch_Config->choice.setup = NULLP;
 +   CU_ALLOC(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
 +   if(!ulBwp->pucch_Config->choice.setup)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
 +      return RFAILED;
 +   }
 +
 +   if(BuildBWPUlDedPucchCfg(ulBwp->pucch_Config->choice.setup) != ROK)
 +   {
 +      return RFAILED;
 +   }
  
     /* Fill BWP UL dedicated PUSCH config */
     ulBwp->pusch_Config = NULLP;
@@@ -6573,6 -6467,27 +6575,27 @@@ uint8_t BuildAndSendUeContextSetupReq(u
     return ret;
  }/* End of BuildAndSendUeContextSetupReq*/
  
+ uint8_t procUeContextSetupResponse(F1AP_PDU_t *f1apMsg)
+ {
+    uint8_t idx, duUeF1apId;
+    UEContextSetupResponse_t *ueCtxtSetupRsp;
+    ueCtxtSetupRsp = &f1apMsg->choice.successfulOutcome->value.choice.UEContextSetupResponse;
+    
+    for(idx=0; idx < ueCtxtSetupRsp->protocolIEs.list.count; idx++)
+    {
+       switch(ueCtxtSetupRsp->protocolIEs.list.array[idx]->id)
+       {
+           case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID:
+              {
+                 duUeF1apId = ueCtxtSetupRsp->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID;
+                 break;
+              }
+       }
+    }
+    ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */
+ }
  /****************************************************************
   * @brief Function to process Ul Rrc Msg received from DU 
   *
@@@ -6638,12 -6553,12 +6661,12 @@@ uint8_t procUlRrcMsg(F1AP_PDU_t *f1apMs
     }
     if(srbId == 1)
     {
-       f1apMsgDb.dlRrcMsgCount++;
-       rrcMsgType = setDlRRCMsgType();
+       ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++;
+       rrcMsgType = setDlRRCMsgType(duUeF1apId);
        if(rrcMsgType == REGISTRATION_ACCEPT)
        {
-        DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Registration Accept"); 
-        ret = BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType);
+          DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Registration Accept"); 
+          ret = BuildAndSendDLRRCMessageTransfer(duUeF1apId, srbId, rrcMsgType);
        }
        if(rrcMsgType == UE_CONTEXT_SETUP_REQ)
        {
        }
        if(rrcMsgType == SECURITY_MODE_COMPLETE)
        {
-        /* To trigger the DL RRC Msg for RRC Reconfig */
-        f1apMsgDb.dlRrcMsgCount++;
-        rrcMsgType = setDlRRCMsgType();
-        if(rrcMsgType == RRC_RECONFIG)
-        {
-           DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Reconfig");
-           BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType);
-        }
+          /* To trigger the DL RRC Msg for RRC Reconfig */
+          ueCb[duUeF1apId-1].f1apMsgDb.dlRrcMsgCount++;
+          rrcMsgType = setDlRRCMsgType(duUeF1apId);
+          if(rrcMsgType == RRC_RECONFIG)
+          {
+             DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Reconfig");
+             BuildAndSendDLRRCMessageTransfer(duUeF1apId, srbId, rrcMsgType);
+          }
        }
        if(rrcMsgType == UE_CONTEXT_MOD_REQ)
        {
           DU_LOG("\nINFO  -->  F1AP: Sending UE Context Modification Request");
-        BuildAndSendUeContextModificationReq();
+          BuildAndSendUeContextModificationReq(duUeF1apId);
        }
     }
     return ret;
@@@ -6953,7 -6868,7 +6976,7 @@@ uint8_t BuildUlTnlInfoforDrb2(ULUPTNLIn
     ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->\
        gTP_TEID.buf[2] = 0;
     ulInfo->list.array[arrIdx]->uLUPTNLInformation.choice.gTPTunnel->\
-       gTP_TEID.buf[3] = 2;
+       gTP_TEID.buf[3] = cuCfgParams.egtpParams.currTunnelId++;
  
     return ROK;
  }/*End of BuildULTnlInfo*/
@@@ -7347,7 -7262,7 +7370,7 @@@ void FreeUeContextModicationRequest(F1A
   *         RFAILED - failure
   *
   * ****************************************************************/
- uint8_t BuildAndSendUeContextModificationReq()
+ uint8_t BuildAndSendUeContextModificationReq(uint8_t ueId)
  {
     uint8_t    ieIdx = 0;
     uint8_t    elementCnt = 0;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present = \
-       UEContextModificationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
-       ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_CU_UE_F1AP_ID =CU_ID;
+                                                                          UEContextModificationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID;
+       ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_CU_UE_F1AP_ID = ueId;
  
        ieIdx++;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present=\
-       UEContextModificationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
-       ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID =DU_ID;
-      
+                                                                        UEContextModificationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
+       ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID = ueId;
        ieIdx++;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeSetupMod_List;
        ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
@@@ -7726,7 -7641,7 +7749,7 @@@ uint8_t procUeContextReleaseReq(F1AP_PD
  uint8_t procGnbDuUpdate(F1AP_PDU_t *f1apMsg)
  {
     bool cellToBeDelete = false;
-    uint8_t ieIdx = 0;
+    uint8_t ieIdx = 0, ueIdx = 0;
     GNBDUConfigurationUpdate_t *duCfgUpdate = NULLP;
  
     duCfgUpdate = &f1apMsg->choice.initiatingMessage->value.choice.GNBDUConfigurationUpdate;
     }
     else
     {
-       memset(&f1apMsgDb, 0, sizeof(F1apMsgDb));
+       for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++)
+       {
+          CU_FREE(ueCb[ueIdx].f1apMsgDb.duToCuContainer.buf, ueCb[ueIdx].f1apMsgDb.duToCuContainer.size);
+          memset(&ueCb[ueIdx], 0, sizeof(UeCb));
+       }
     }
  
     return ROK;
@@@ -7908,7 -7827,7 +7935,7 @@@ void F1APMsgHdlr(Buffer *mBuf
                 case SuccessfulOutcome__value_PR_UEContextSetupResponse:
                    {
                       DU_LOG("\nINFO  -->  F1AP : UE ContextSetupResponse received");
-                      f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */
+                      procUeContextSetupResponse(f1apMsg);
                       break;
                    }
                 case SuccessfulOutcome__value_PR_UEContextModificationResponse:
@@@ -3752,7 -3752,7 +3752,7 @@@ uint8_t BuildTCIStatesToAddModList(stru
        return RFAILED;
     }
  
 -   elementCnt = 1;
 +   elementCnt = 2;
     timeDomAllocList->choice.setup->list.count = elementCnt;
     timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(struct PDSCH_TimeDomainResourceAllocation *);
  
     idx = 0;
     timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 -
 -   timeDomAlloc->k0 = NULLP;
 +   DU_ALLOC(timeDomAlloc->k0, sizeof(long));
 +   if(!timeDomAlloc->k0)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
 +      return RFAILED;
 +   }
 +   *(timeDomAlloc->k0) = 0;
     timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
     timeDomAlloc->startSymbolAndLength = \
                                        calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
  
 +   idx++;
 +   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 +   DU_ALLOC(timeDomAlloc->k0, sizeof(long));
 +   if(!timeDomAlloc->k0)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
 +      return RFAILED;
 +   }
 +   *(timeDomAlloc->k0) = 1;
 +   timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
 +   timeDomAlloc->startSymbolAndLength = calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
 +
     return ROK;
  }
  
@@@ -4110,7 -4093,7 +4110,7 @@@ uint8_t BuildInitialDlBWP(BWP_DownlinkD
        return RFAILED;
     }
  
 -   elementCnt = 1;
 +   elementCnt = 2;
     timeDomAllocList->choice.setup->list.count = elementCnt;
     timeDomAllocList->choice.setup->list.size = \
                                               elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
        DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
        return RFAILED;
     }
 -   *(timeDomAlloc->k2) = PUSCH_K2;
 +   *(timeDomAlloc->k2) = PUSCH_K2_CFG1;
     timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
     timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
 +
 +   idx++;
 +   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
 +   DU_ALLOC(timeDomAlloc->k2, sizeof(long));
 +   if(!timeDomAlloc->k2)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
 +      return RFAILED;
 +   }
 +   *(timeDomAlloc->k2) = PUSCH_K2_CFG2;
 +   timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
 +   timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
 +
     return ROK;
  }
  
@@@ -4246,60 -4216,6 +4246,60 @@@ uint8_t BuildBWPUlDedPuschCfg(PUSCH_Con
     return ROK;
  }
  
 +/*******************************************************************
 + *
 + * @brief Builds BWP UL dedicated PUCCH Config
 + *
 + * @details
 + *
 + *    Function : BuildBWPUlDedPucchCfg
 + *
 + *    Functionality:
 + *      Builds BWP UL dedicated PUCCH Config
 + *
 + * @params[in] : PUCCH_Config_t *pucchCfg
 + *
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t BuildBWPUlDedPucchCfg(PUCCH_Config_t *pucchCfg)
 +{
 +   uint8_t arrIdx, elementCnt;
 +
 +   DU_ALLOC(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
 +   if(pucchCfg->dl_DataToUL_ACK == NULLP)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +      return RFAILED;
 +   }
 +   
 +   elementCnt = 2;
 +   pucchCfg->dl_DataToUL_ACK->list.count = elementCnt;
 +   pucchCfg->dl_DataToUL_ACK->list.size = elementCnt * sizeof(long *);
 +   DU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
 +   if(pucchCfg->dl_DataToUL_ACK->list.array == NULLP)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +      return RFAILED;
 +   }   
 +
 +   for(arrIdx = 0; arrIdx <  pucchCfg->dl_DataToUL_ACK->list.count; arrIdx++)
 +   {
 +      DU_ALLOC(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx], sizeof(long));
 +      if(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx] == NULLP)
 +      {
 +          DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildBWPUlDedPucchCfg");
 +          return RFAILED;
 +      }   
 +   }
 +   
 +   arrIdx = 0;
 +   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx++]) = 1;
 +   *(pucchCfg->dl_DataToUL_ACK->list.array[arrIdx]) = 2;
 +   return ROK;
 +}
 +
  /*******************************************************************
   *
   * @brief Fills SRS resource to add/modify list 
@@@ -4634,26 -4550,6 +4634,26 @@@ uint8_t BuildPuschSrvCellCfg(struct Upl
  uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
  {
     ulBwp->pucch_Config = NULLP;
 +   DU_ALLOC(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
 +   if(!ulBwp->pucch_Config)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
 +      return RFAILED;
 +   }
 +
 +   ulBwp->pucch_Config->present = BWP_UplinkDedicated__pucch_Config_PR_setup;
 +   ulBwp->pucch_Config->choice.setup = NULLP;
 +   DU_ALLOC(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
 +   if(!ulBwp->pucch_Config->choice.setup)
 +   {
 +      DU_LOG("\nERROR  -->  F1AP : Memory allocation failed in BuildInitialUlBWP");
 +      return RFAILED;
 +   }
 +
 +   if(BuildBWPUlDedPucchCfg(ulBwp->pucch_Config->choice.setup) != ROK)
 +   {
 +      return RFAILED;
 +   }
  
     /* Fill BWP UL dedicated PUSCH config */
     ulBwp->pusch_Config = NULLP;
@@@ -5201,7 -5097,7 +5201,7 @@@ void FreeSearchSpcToAddModList(struct P
   *
   * @return void
   *
 - 4221 * ****************************************************************/
 + * ****************************************************************/
  void FreePdschTimeDomAllocList( struct PDSCH_Config__pdsch_TimeDomainAllocationList *timeDomAllocList)
  {
     uint8_t idx1=0;
     {
        if(timeDomAllocList->choice.setup->list.array)
        {
 -       for(idx1 = 0; idx1 <timeDomAllocList->choice.setup->list.count ; idx1++)
 -       {
 -          DU_FREE(timeDomAllocList->choice.setup->list.array[idx1],
 -                sizeof(struct PDSCH_TimeDomainResourceAllocation));
 -       }
 -       DU_FREE(timeDomAllocList->choice.setup->list.array, \
 -             timeDomAllocList->choice.setup->list.size);
 +         for(idx1 = 0; idx1 <timeDomAllocList->choice.setup->list.count ; idx1++)
 +         {
 +            DU_FREE(timeDomAllocList->choice.setup->list.array[idx1]->k0, sizeof(long));
 +            DU_FREE(timeDomAllocList->choice.setup->list.array[idx1],
 +                  sizeof(struct PDSCH_TimeDomainResourceAllocation));
 +         }
 +         DU_FREE(timeDomAllocList->choice.setup->list.array, \
 +               timeDomAllocList->choice.setup->list.size);
        }
        DU_FREE(timeDomAllocList->choice.setup,\
 -          sizeof(struct PDSCH_TimeDomainResourceAllocationList));
 +            sizeof(struct PDSCH_TimeDomainResourceAllocationList));
     }
  }
  /*******************************************************************
@@@ -5286,145 -5181,122 +5286,145 @@@ void FreePuschTimeDomAllocList(PUSCH_Co
   * ****************************************************************/
  void FreeInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
  {
 -   uint8_t  rSetIdx, rsrcIdx;
 +   uint8_t  rSetIdx, rsrcIdx, k1Idx;
     SRS_Config_t   *srsCfg = NULLP;
     PUSCH_Config_t *puschCfg = NULLP;
 +   PUCCH_Config_t *pucchCfg = NULLP;
     struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA *dmrsUlCfg = NULLP;
     struct SRS_Config__srs_ResourceSetToAddModList *rsrcSetList = NULLP;
     struct SRS_ResourceSet__srs_ResourceIdList *rsrcIdList = NULLP;
     struct SRS_Config__srs_ResourceToAddModList *resourceList = NULLP;
  
 +   if(ulBwp->pucch_Config)
 +   {
 +      if(ulBwp->pucch_Config->choice.setup)
 +      {
 +          pucchCfg = ulBwp->pucch_Config->choice.setup;
 +          if(pucchCfg->dl_DataToUL_ACK)
 +          {
 +             if(pucchCfg->dl_DataToUL_ACK->list.array)
 +             {
 +                for(k1Idx = 0; k1Idx < pucchCfg->dl_DataToUL_ACK->list.count; k1Idx++)
 +                {
 +                   DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array[k1Idx], sizeof(long));
 +                }
 +                DU_FREE(pucchCfg->dl_DataToUL_ACK->list.array, pucchCfg->dl_DataToUL_ACK->list.size);
 +             }
 +             DU_FREE(pucchCfg->dl_DataToUL_ACK, sizeof(struct PUCCH_Config__dl_DataToUL_ACK));
 +          }
 +          DU_FREE(ulBwp->pucch_Config->choice.setup, sizeof(PUCCH_Config_t));
 +      }
 +      DU_FREE(ulBwp->pucch_Config, sizeof(struct BWP_UplinkDedicated__pucch_Config));
 +   }
 +
     if(ulBwp->pusch_Config)
     {
        if(ulBwp->pusch_Config->choice.setup)
        {
 -       puschCfg=ulBwp->pusch_Config->choice.setup;
 -       if(puschCfg->dataScramblingIdentityPUSCH)
 -       {
 -          if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
 -          {
 -             FreePuschTimeDomAllocList(puschCfg);
 -             dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA;
 -             if(dmrsUlCfg->choice.setup)
 -             {
 -                if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition)
 -                {
 -                   if(dmrsUlCfg->choice.setup->transformPrecodingDisabled)
 -                   {
 -                      DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\
 -                            sizeof(long));
 -                      DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled,
 -                            sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled));
 -                   }
 -                   DU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition,
 -                         sizeof(long));
 -                }
 -                DU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t));
 -             }
 -             DU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \
 -                   sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
 -          }
 -          DU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
 -       }
 -       DU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t));
 +         puschCfg=ulBwp->pusch_Config->choice.setup;
 +         if(puschCfg->dataScramblingIdentityPUSCH)
 +         {
 +            if(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
 +            {
 +               FreePuschTimeDomAllocList(puschCfg);
 +               dmrsUlCfg=puschCfg->dmrs_UplinkForPUSCH_MappingTypeA;
 +               if(dmrsUlCfg->choice.setup)
 +               {
 +                  if(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition)
 +                  {
 +                     if(dmrsUlCfg->choice.setup->transformPrecodingDisabled)
 +                     {
 +                        DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\
 +                              sizeof(long));
 +                        DU_FREE(dmrsUlCfg->choice.setup->transformPrecodingDisabled,
 +                              sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled));
 +                     }
 +                     DU_FREE(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition,
 +                           sizeof(long));
 +                  }
 +                  DU_FREE(dmrsUlCfg->choice.setup,sizeof(DMRS_UplinkConfig_t));
 +               }
 +               DU_FREE(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \
 +                     sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
 +            }
 +            DU_FREE(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
 +         }
 +         DU_FREE(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t));
        }
        DU_FREE(ulBwp->pusch_Config, sizeof(struct BWP_UplinkDedicated__pusch_Config));
  
        /* Free SRS-Config */
        if(ulBwp->srs_Config)
        {
 -       if(ulBwp->srs_Config->choice.setup)
 -       {
 -          srsCfg = ulBwp->srs_Config->choice.setup;
 +         if(ulBwp->srs_Config->choice.setup)
 +         {
 +            srsCfg = ulBwp->srs_Config->choice.setup;
  
 -          /* Free Resource Set to add/mod list */
 -          if(srsCfg->srs_ResourceSetToAddModList)
 -          {
 -             rsrcSetList = srsCfg->srs_ResourceSetToAddModList;
 -             if(rsrcSetList->list.array)
 -             {
 -                rSetIdx = 0;
 +            /* Free Resource Set to add/mod list */
 +            if(srsCfg->srs_ResourceSetToAddModList)
 +            {
 +               rsrcSetList = srsCfg->srs_ResourceSetToAddModList;
 +               if(rsrcSetList->list.array)
 +               {
 +                  rSetIdx = 0;
  
 -                /* Free SRS resource Id list in this SRS resource set */
 -                if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList)
 -                {
 -                   rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList;
 +                  /* Free SRS resource Id list in this SRS resource set */
 +                  if(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList)
 +                  {
 +                     rsrcIdList = rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList;
  
 -                   if(rsrcIdList->list.array)
 -                   {
 -                      for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++)
 -                      {
 -                         DU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t));
 -                      }
 -                      DU_FREE(rsrcIdList->list.array, rsrcIdList->list.size);
 -                   }
 -                   DU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\
 -                         sizeof(struct SRS_ResourceSet__srs_ResourceIdList));
 -                }
 +                     if(rsrcIdList->list.array)
 +                     {
 +                        for(rsrcIdx = 0; rsrcIdx < rsrcIdList->list.count; rsrcIdx++)
 +                        {
 +                           DU_FREE(rsrcIdList->list.array[rsrcIdx], sizeof(SRS_ResourceId_t));
 +                        }
 +                        DU_FREE(rsrcIdList->list.array, rsrcIdList->list.size);
 +                     }
 +                     DU_FREE(rsrcSetList->list.array[rSetIdx]->srs_ResourceIdList,\
 +                           sizeof(struct SRS_ResourceSet__srs_ResourceIdList));
 +                  }
  
 -                /* Free resource type info for this SRS resource set */
 -                DU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \
 -                      sizeof(struct SRS_ResourceSet__resourceType__aperiodic));
 +                  /* Free resource type info for this SRS resource set */
 +                  DU_FREE(rsrcSetList->list.array[rSetIdx]->resourceType.choice.aperiodic, \
 +                        sizeof(struct SRS_ResourceSet__resourceType__aperiodic));
  
 -                /* Free memory for each resource set */
 -                for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++)
 -                {
 -                   DU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t));
 -                }
 -                DU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); 
 -             }
 -             DU_FREE(srsCfg->srs_ResourceSetToAddModList, \
 -                   sizeof(struct SRS_Config__srs_ResourceSetToAddModList));
 -          }
 +                  /* Free memory for each resource set */
 +                  for(rSetIdx = 0; rSetIdx < rsrcSetList->list.count; rSetIdx++)
 +                  {
 +                     DU_FREE(rsrcSetList->list.array[rSetIdx], sizeof(SRS_ResourceSet_t));
 +                  }
 +                  DU_FREE(rsrcSetList->list.array, rsrcSetList->list.size); 
 +               }
 +               DU_FREE(srsCfg->srs_ResourceSetToAddModList, \
 +                     sizeof(struct SRS_Config__srs_ResourceSetToAddModList));
 +            }
  
 -          /* Free resource to add/modd list */
 -          if(srsCfg->srs_ResourceToAddModList)
 -          {
 -             resourceList = srsCfg->srs_ResourceToAddModList;
 -             if(resourceList->list.array)
 -             {
 -                rsrcIdx = 0;
 -                DU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\
 -                      sizeof(struct SRS_Resource__transmissionComb__n2));
 -                DU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\
 -                      sizeof(struct SRS_Resource__resourceType__aperiodic));
 +            /* Free resource to add/modd list */
 +            if(srsCfg->srs_ResourceToAddModList)
 +            {
 +               resourceList = srsCfg->srs_ResourceToAddModList;
 +               if(resourceList->list.array)
 +               {
 +                  rsrcIdx = 0;
 +                  DU_FREE(resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2,\
 +                        sizeof(struct SRS_Resource__transmissionComb__n2));
 +                  DU_FREE(resourceList->list.array[rsrcIdx]->resourceType.choice.aperiodic,\
 +                        sizeof(struct SRS_Resource__resourceType__aperiodic));
  
 -                for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++)
 -                {
 -                   DU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t));
 -                }
 -                DU_FREE(resourceList->list.array, resourceList->list.size);
 -             }
 -             DU_FREE(srsCfg->srs_ResourceToAddModList, \
 -                   sizeof(struct SRS_Config__srs_ResourceToAddModList));
 -          }
 +                  for(rsrcIdx = 0; rsrcIdx < resourceList->list.count; rsrcIdx++)
 +                  {
 +                     DU_FREE(resourceList->list.array[rsrcIdx], sizeof(SRS_Resource_t));
 +                  }
 +                  DU_FREE(resourceList->list.array, resourceList->list.size);
 +               }
 +               DU_FREE(srsCfg->srs_ResourceToAddModList, \
 +                     sizeof(struct SRS_Config__srs_ResourceToAddModList));
 +            }
  
 -          DU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t));
 -       }
 -       DU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config));
 +            DU_FREE(ulBwp->srs_Config->choice.setup, sizeof(SRS_Config_t));
 +         }
 +         DU_FREE(ulBwp->srs_Config, sizeof(struct BWP_UplinkDedicated__srs_Config));
        }
     }
  }     
@@@ -5636,37 -5508,37 +5636,37 @@@ uint8_t FreeMemDuToCuRrcCont(CellGroupC
     {
        if(rlcBearerList->list.array)
        {
 -       for(idx=0; idx<rlcBearerList->list.count; idx++)
 -       {
 -          if(rlcBearerList->list.array[idx])
 -          {  
 -             rlcConfig   = rlcBearerList->list.array[idx]->rlc_Config;
 -             macLcConfig = rlcBearerList->list.array[idx]->mac_LogicalChannelConfig;
 -             if(rlcConfig)
 -             {
 -                if(rlcConfig->choice.am)
 -                {
 -                   DU_FREE(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t));
 -                   DU_FREE(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
 -                   DU_FREE(rlcConfig->choice.am, sizeof(struct RLC_Config__am));
 -                }     
 -                DU_FREE(rlcConfig, sizeof(struct RLC_Config));
 -             }
 -             DU_FREE(rlcBearerList->list.array[idx]->servedRadioBearer, sizeof(struct RLC_BearerConfig__servedRadioBearer));
 -             if(macLcConfig)
 -             {
 -                if(macLcConfig->ul_SpecificParameters)
 -                {
 -                   DU_FREE(macLcConfig->ul_SpecificParameters->schedulingRequestID,   sizeof(SchedulingRequestId_t));
 -                   DU_FREE(macLcConfig->ul_SpecificParameters->logicalChannelGroup,   sizeof(long));
 -                   DU_FREE(macLcConfig->ul_SpecificParameters, sizeof(struct LogicalChannelConfig__ul_SpecificParameters));
 -                }
 -                DU_FREE(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig, sizeof(struct LogicalChannelConfig));
 -             }
 -             DU_FREE(rlcBearerList->list.array[idx], sizeof(struct RLC_BearerConfig));
 -          }   
 -       }
 -       DU_FREE(rlcBearerList->list.array, rlcBearerList->list.size);
 +         for(idx=0; idx<rlcBearerList->list.count; idx++)
 +         {
 +            if(rlcBearerList->list.array[idx])
 +            {  
 +               rlcConfig   = rlcBearerList->list.array[idx]->rlc_Config;
 +               macLcConfig = rlcBearerList->list.array[idx]->mac_LogicalChannelConfig;
 +               if(rlcConfig)
 +               {
 +                  if(rlcConfig->choice.am)
 +                  {
 +                     DU_FREE(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t));
 +                     DU_FREE(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
 +                     DU_FREE(rlcConfig->choice.am, sizeof(struct RLC_Config__am));
 +                  }   
 +                  DU_FREE(rlcConfig, sizeof(struct RLC_Config));
 +               }
 +               DU_FREE(rlcBearerList->list.array[idx]->servedRadioBearer, sizeof(struct RLC_BearerConfig__servedRadioBearer));
 +               if(macLcConfig)
 +               {
 +                  if(macLcConfig->ul_SpecificParameters)
 +                  {
 +                     DU_FREE(macLcConfig->ul_SpecificParameters->schedulingRequestID, sizeof(SchedulingRequestId_t));
 +                     DU_FREE(macLcConfig->ul_SpecificParameters->logicalChannelGroup, sizeof(long));
 +                     DU_FREE(macLcConfig->ul_SpecificParameters, sizeof(struct LogicalChannelConfig__ul_SpecificParameters));
 +                  }
 +                  DU_FREE(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig, sizeof(struct LogicalChannelConfig));
 +               }
 +               DU_FREE(rlcBearerList->list.array[idx], sizeof(struct RLC_BearerConfig));
 +            } 
 +         }
 +         DU_FREE(rlcBearerList->list.array, rlcBearerList->list.size);
        }
        DU_FREE(cellGrpCfg->rlc_BearerToAddModList, sizeof(struct CellGroupConfigRrc__rlc_BearerToAddModList));
     }
        schedulingRequestConfig = macCellGrpCfg->schedulingRequestConfig; 
        if(schedulingRequestConfig)
        {
 -       schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
 -       if(schReqList)
 -       {
 -          if(schReqList->list.array)
 -          {
 -             for(idx=0;idx<schReqList->list.count; idx++)
 -             {
 -                if(schReqList->list.array[idx])
 -                {
 -                   DU_FREE(schReqList->list.array[idx]->sr_ProhibitTimer, sizeof(long));
 -                   DU_FREE(schReqList->list.array[idx], sizeof(struct SchedulingRequestToAddMod));
 -                }
 -             }
 -             DU_FREE(schReqList->list.array, schReqList->list.size);
 -          }
 -          DU_FREE(schedulingRequestConfig->schedulingRequestToAddModList,\
 -                sizeof(struct SchedulingRequestConfig__schedulingRequestToAddModList));    }
 -          DU_FREE(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
 +         schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
 +         if(schReqList)
 +         {
 +            if(schReqList->list.array)
 +            {
 +               for(idx=0;idx<schReqList->list.count; idx++)
 +               {
 +                  if(schReqList->list.array[idx])
 +                  {
 +                     DU_FREE(schReqList->list.array[idx]->sr_ProhibitTimer, sizeof(long));
 +                     DU_FREE(schReqList->list.array[idx], sizeof(struct SchedulingRequestToAddMod));
 +                  }
 +               }
 +               DU_FREE(schReqList->list.array, schReqList->list.size);
 +            }
 +            DU_FREE(schedulingRequestConfig->schedulingRequestToAddModList,\
 +                  sizeof(struct SchedulingRequestConfig__schedulingRequestToAddModList));    }
 +            DU_FREE(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
        }
        if(macCellGrpCfg->bsr_Config)
        {
 -       DU_FREE(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
 +         DU_FREE(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
        }
        tagConfig = macCellGrpCfg->tag_Config;
        if(tagConfig)
        {
 -       tagList = tagConfig->tag_ToAddModList;
 -       if(tagList)
 -       {
 -          if(tagList->list.array)
 -          {
 -             for(idx=0; idx<tagList->list.count; idx++)
 -             {
 -                DU_FREE(tagList->list.array[idx], sizeof(struct TAG));
 -             }
 -             DU_FREE(tagList->list.array, tagList->list.size);
 -          }
 -          DU_FREE(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
 -       }
 -       DU_FREE(tagConfig, sizeof(struct TAG_Config));
 +         tagList = tagConfig->tag_ToAddModList;
 +         if(tagList)
 +         {
 +            if(tagList->list.array)
 +            {
 +               for(idx=0; idx<tagList->list.count; idx++)
 +               {
 +                  DU_FREE(tagList->list.array[idx], sizeof(struct TAG));
 +               }
 +               DU_FREE(tagList->list.array, tagList->list.size);
 +            }
 +            DU_FREE(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
 +         }
 +         DU_FREE(tagConfig, sizeof(struct TAG_Config));
        }
  
        phrConfig = macCellGrpCfg->phr_Config;
        if(phrConfig)
        {
 -       DU_FREE(phrConfig->choice.setup, sizeof(struct PHR_Config));
 -       DU_FREE(phrConfig, sizeof(struct MAC_CellGroupConfig__phr_Config));
 +         DU_FREE(phrConfig->choice.setup, sizeof(struct PHR_Config));
 +         DU_FREE(phrConfig, sizeof(struct MAC_CellGroupConfig__phr_Config));
        }
  
        DU_FREE(macCellGrpCfg, sizeof(MAC_CellGroupConfig_t));
     {
        if(spCellCfg->servCellIndex)
        {
 -       if(spCellCfg->rlmInSyncOutOfSyncThreshold)
 -       {
 -          if(spCellCfg->spCellConfigDedicated)
 -          {
 -             srvCellCfg = spCellCfg->spCellConfigDedicated;
 -             if(srvCellCfg->tdd_UL_DL_ConfigurationDedicated)
 -             {
 -                if(srvCellCfg->initialDownlinkBWP)
 -                {
 -                   dlBwp = srvCellCfg->initialDownlinkBWP;
 -                   if(srvCellCfg->firstActiveDownlinkBWP_Id)
 -                   {
 -                      if(srvCellCfg->defaultDownlinkBWP_Id)
 -                      {
 -                         if(srvCellCfg->uplinkConfig)
 -                         {
 -                            if(srvCellCfg->pdsch_ServingCellConfig)
 -                            {
 -                               pdschCfg= srvCellCfg->pdsch_ServingCellConfig;
 -                               if(pdschCfg->choice.setup)
 -                               {
 -                                  DU_FREE(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH,sizeof(long));
 -                                  DU_FREE(pdschCfg->choice.setup, sizeof( struct PDSCH_ServingCellConfig));
 -                               }
 -                               DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct
 -                                     ServingCellConfig__pdsch_ServingCellConfig));
 -                            }  
 -                            FreeinitialUplinkBWP(srvCellCfg->uplinkConfig);
 -                            DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));        
 -                         }
 -                         DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
 -                      }
 -                      DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
 -                   }
 -                   if(dlBwp->pdcch_Config)
 -                   {
 -                      if(dlBwp->pdsch_Config)
 -                      {
 -                         FreeBWPDlDedPdschCfg(dlBwp);
 -                         DU_FREE(dlBwp->pdsch_Config, sizeof(struct BWP_DownlinkDedicated__pdsch_Config));
 -                      }
 -                      FreeBWPDlDedPdcchCfg(dlBwp);
 -                      DU_FREE(dlBwp->pdcch_Config, sizeof(struct BWP_DownlinkDedicated__pdcch_Config));
 -                  }
 -                  DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
 -                }
 -                DU_FREE(srvCellCfg->tdd_UL_DL_ConfigurationDedicated, sizeof(TDD_UL_DL_ConfigDedicated_t));
 -             }
 -             DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
 -          }
 -          DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
 -       }
 -       DU_FREE(spCellCfg->servCellIndex, sizeof(long));
 +         if(spCellCfg->rlmInSyncOutOfSyncThreshold)
 +         {
 +            if(spCellCfg->spCellConfigDedicated)
 +            {
 +               srvCellCfg = spCellCfg->spCellConfigDedicated;
 +               if(srvCellCfg->tdd_UL_DL_ConfigurationDedicated)
 +               {
 +                  if(srvCellCfg->initialDownlinkBWP)
 +                  {
 +                     dlBwp = srvCellCfg->initialDownlinkBWP;
 +                     if(srvCellCfg->firstActiveDownlinkBWP_Id)
 +                     {
 +                        if(srvCellCfg->defaultDownlinkBWP_Id)
 +                        {
 +                           if(srvCellCfg->uplinkConfig)
 +                           {
 +                              if(srvCellCfg->pdsch_ServingCellConfig)
 +                              {
 +                                 pdschCfg= srvCellCfg->pdsch_ServingCellConfig;
 +                                 if(pdschCfg->choice.setup)
 +                                 {
 +                                    DU_FREE(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH,sizeof(long));
 +                                    DU_FREE(pdschCfg->choice.setup, sizeof( struct PDSCH_ServingCellConfig));
 +                                 }
 +                                 DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct
 +                                          ServingCellConfig__pdsch_ServingCellConfig));
 +                              }  
 +                              FreeinitialUplinkBWP(srvCellCfg->uplinkConfig);
 +                              DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));      
 +                           }
 +                           DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
 +                        }
 +                        DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
 +                     }
 +                     if(dlBwp->pdcch_Config)
 +                     {
 +                        if(dlBwp->pdsch_Config)
 +                        {
 +                           FreeBWPDlDedPdschCfg(dlBwp);
 +                           DU_FREE(dlBwp->pdsch_Config, sizeof(struct BWP_DownlinkDedicated__pdsch_Config));
 +                        }
 +                        FreeBWPDlDedPdcchCfg(dlBwp);
 +                        DU_FREE(dlBwp->pdcch_Config, sizeof(struct BWP_DownlinkDedicated__pdcch_Config));
 +                     }
 +                     DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
 +                  }
 +                  DU_FREE(srvCellCfg->tdd_UL_DL_ConfigurationDedicated, sizeof(TDD_UL_DL_ConfigDedicated_t));
 +               }
 +               DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
 +            }
 +            DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
 +         }
 +         DU_FREE(spCellCfg->servCellIndex, sizeof(long));
        }
        DU_FREE(spCellCfg,sizeof(SpCellConfig_t));
     }
@@@ -7822,27 -7694,11 +7822,27 @@@ void freeMacPdschServCellInfo(PdschServ
   * ****************************************************************/
  void freeMacServingCellInfo(ServCellCfgInfo *srvCellCfg)
  {
 +   uint8_t timeDomRsrcIdx;
 +
 +   if(srvCellCfg->initDlBwp.pdschPresent)
 +   {
 +      for(timeDomRsrcIdx = 0; timeDomRsrcIdx < srvCellCfg->initDlBwp.pdschCfg.numTimeDomRsrcAlloc; timeDomRsrcIdx++)
 +      {
 +         DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, \
 +            srvCellCfg->initDlBwp.pdschCfg.timeDomRsrcAllociList[timeDomRsrcIdx].k0, sizeof(uint8_t));
 +      }
 +   }
 +
     freeMacPdschServCellInfo(&srvCellCfg->pdschServCellCfg);
     if(srvCellCfg->bwpInactivityTmr)
     {
        DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, srvCellCfg->bwpInactivityTmr, sizeof(uint8_t));
     }
 +
 +   if(srvCellCfg->initUlBwp.pucchPresent)
 +   {
 +      DU_FREE_SHRABL_BUF(DU_APP_MEM_REGION, DU_POOL, srvCellCfg->initUlBwp.pucchCfg.dlDataToUlAck, sizeof(PucchDlDataToUlAck));
 +   }
  }
  
  /*******************************************************************
@@@ -8139,13 -7995,13 +8139,13 @@@ void extractPdschCfg(PDSCH_Config_t *cu
     if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA)
     {
        if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->present == \
 -         PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA_PR_setup)
 +            PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA_PR_setup)
        {
           if(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup)
 -       {
 +         {
              macPdschCfg->dmrsDlCfgForPdschMapTypeA.addPos = \
 -             *(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition);
 -       }
 +               *(cuPdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition);
 +         }
        }
     }
     macPdschCfg->resourceAllocType = cuPdschCfg->resourceAllocation;
     {
        timeDomAlloc = cuPdschCfg->pdsch_TimeDomainAllocationList;
        if(timeDomAlloc->present ==\
 -         PDSCH_Config__pdsch_TimeDomainAllocationList_PR_setup)
 +            PDSCH_Config__pdsch_TimeDomainAllocationList_PR_setup)
        {
           if(timeDomAlloc->choice.setup)
 -       {
 -          macPdschCfg->numTimeDomRsrcAlloc  = timeDomAlloc->choice.setup->list.count;
 +         {
 +            macPdschCfg->numTimeDomRsrcAlloc  = timeDomAlloc->choice.setup->list.count;
              for(timeDomIdx = 0; timeDomIdx < timeDomAlloc->choice.setup->list.count; timeDomIdx++)
              {
 -             macPdschCfg->timeDomRsrcAllociList[timeDomIdx].mappingType = \
 -                timeDomAlloc->choice.setup->list.array[timeDomIdx]->mappingType;
 -             macPdschCfg->timeDomRsrcAllociList[timeDomIdx].startSymbolAndLength = \
 -                timeDomAlloc->choice.setup->list.array[timeDomIdx]->startSymbolAndLength;
 -          }
 -       }
 +               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0 = NULLP;
 +               if(timeDomAlloc->choice.setup->list.array[timeDomIdx]->k0)
 +               {
 +                  if(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0 == NULL)
 +                  {
 +                     DU_ALLOC_SHRABL_BUF(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0, sizeof(uint8_t));
 +                     if(!macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0)
 +                     {
 +                        DU_LOG("\nERROR  -->  DU APP : Memory allocation failed for k0 at extractPdschCfg()");
 +                        return RFAILED;
 +                     }
 +                  }
 +                  *(macPdschCfg->timeDomRsrcAllociList[timeDomIdx].k0) = \
 +                       *(timeDomAlloc->choice.setup->list.array[timeDomIdx]->k0);
 +               }
 +               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].mappingType = \
 +                  timeDomAlloc->choice.setup->list.array[timeDomIdx]->mappingType;
 +               macPdschCfg->timeDomRsrcAllociList[timeDomIdx].startSymbolAndLength = \
 +                  timeDomAlloc->choice.setup->list.array[timeDomIdx]->startSymbolAndLength;
 +            }
 +         }
        }
     }
     macPdschCfg->rbgSize = cuPdschCfg->rbg_Size;
        if(cuPdschCfg->prb_BundlingType.choice.staticBundling)
        {
           if(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize)
 -       {
 +         {
              macPdschCfg->bundlingInfo.StaticBundling.size = \
 -             *(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize);
 -       }
 +               *(cuPdschCfg->prb_BundlingType.choice.staticBundling->bundleSize);
 +         }
        }
     }
     else if(cuPdschCfg->prb_BundlingType.present == PDSCH_Config__prb_BundlingType_PR_dynamicBundling)
@@@ -9567,7 -9408,7 +9567,7 @@@ void freeAperDecodeDRBSetup(DRBs_ToBeSe
   * @return void 
   *
   * ****************************************************************/
 -uint8_t procUeReCfgCellInfo(MacUeCfg *macUeCfg, void *cellInfo)
 +uint8_t procUeReCfgCellInfo(MacUeCfg *macUeCfgToSend, void *cellInfo)
  {
     uint8_t ret = ROK;
     CellGroupConfigRrc_t *cellGrp = NULLP;
     if(cellInfo)
     {
        cellGrp = (CellGroupConfigRrc_t *)cellInfo;
 -      ret = extractUeReCfgCellInfo(cellGrp, macUeCfg);
 +      ret = extractUeReCfgCellInfo(cellGrp, macUeCfgToSend);
        if(ret == RFAILED)
           DU_LOG("\nERROR  -->  F1AP : Failed at procUeReCfgCellInfo()");
     }
     if(ret == RFAILED)
     {
 -      freeUeReCfgCellGrpInfo(macUeCfg);
 +      freeUeReCfgCellGrpInfo(macUeCfgToSend);
     }
     return ret;
  }
@@@ -10257,6 -10098,7 +10257,7 @@@ uint8_t procF1UeContextSetupReq(F1AP_PD
                          DU_LOG("\nERROR  -->  F1AP: Memory Alloc Failed at procF1UeContextSetupReq()");
                          ret = RFAILED;
                       }
+                      break;
                    }
                    else
                       ueCbFound = false;
@@@ -12726,12 -12568,13 +12727,13 @@@ uint8_t procF1UeContextModificationReq(
                                }
                             }
                          }
+                         break;
                       }
-                      else
-                      {
-                         DU_LOG("\nERROR  -->  DU APP : wrong values of gnbCuUeF1apId and gnbDuUeF1apId ");
-                         ret = RFAILED;
-                      }
+                   }
+                   if(ueIdx >= duCb.actvCellLst[cellIdx]->numActvUes)
+                   {
+                      DU_LOG("\nERROR  -->  DU APP : wrong values of gnbCuUeF1apId and gnbDuUeF1apId ");
+                      ret = RFAILED;
                    }
                 }
                 break;