Optional parameters filling in Du to CU RRC Container
[o-du/l2.git] / src / du_app / du_f1ap_msg_hdl.c
index 381ddca..3dc1763 100644 (file)
 #include "du_cell_mgr.h"
 #include "du_f1ap_msg_hdl.h"
 #include "GNB-DU-System-Information.h"
-static S16 BuildULTnlInforet=RFAILED;
+#include "CellGroupConfigRrc.h"
+#include "MAC-CellGroupConfig.h"
+#include "SchedulingRequestConfig.h"
+#include "SchedulingRequestToAddMod.h"
+#include "BSR-Config.h"
+#include "TAG-Config.h"
+#include "TAG.h"
+#include "PHR-Config.h"
+#include "RLC-Config.h"
+#include "UL-AM-RLC.h"
+#include "DL-AM-RLC.h"
+#include "LogicalChannelConfig.h"
+#include "RLC-BearerConfig.h"
+#include "PhysicalCellGroupConfig.h"
+#include "SpCellConfig.h"
+#include "ServingCellConfig.h"
+#include "ControlResourceSet.h"
+#include "SearchSpace.h"
+#include "PDCCH-Config.h"
+#include "PDSCH-TimeDomainResourceAllocation.h"
+#include "PDSCH-TimeDomainResourceAllocationList.h"
+#include "DMRS-DownlinkConfig.h"
+#include "PDSCH-Config.h"
+#include "BWP-DownlinkDedicated.h"
+#include "PUSCH-TimeDomainResourceAllocation.h"
+#include "PUSCH-TimeDomainResourceAllocationList.h"
+#include "DMRS-UplinkConfig.h"
+#include "PUSCH-Config.h"
+#include "BWP-UplinkDedicated.h"
+#include "PUSCH-ServingCellConfig.h"
+#include "UplinkConfig.h"
+#include "PDSCH-ServingCellConfig.h"
+#include "DUtoCURRCContainer.h"
+
 extern char encBuf[ENC_BUF_MAX_LEN];
 extern DuCfgParams duCfgParam;
+uint8_t BuildULTnlInforet=RFAILED;
+uint8_t ServedCellListreturn=RFAILED;
 S16 sctpSend(Buffer *mBuf, U8 itfType);
+uint8_t Nrcgiret=RFAILED;
+uint8_t SplCellListret=RFAILED;
+uint8_t SRBSetupret=RFAILED;
+uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp);
+
 /*******************************************************************
  *
  * @brief Builds Uplink Info for NR 
@@ -42,9 +82,9 @@ S16 sctpSend(Buffer *mBuf, U8 itfType);
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
+uint8_t BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
 {
-   U8 idx=0;
+   uint8_t idx=0;
    ulnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
                        fdd.ulNrFreqInfo.nrArfcn;
    ulnrfreq->freqBandListNr.list.count = 1;
@@ -83,9 +123,9 @@ S16 BuildULNRInfo(NRFreqInfo_t *ulnrfreq)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
+uint8_t BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
 {
-   U8 idx=0;
+   uint8_t idx=0;
        dlnrfreq->nRARFCN = duCfgParam.srvdCellLst[0].duCellInfo.f1Mode.mode.\
                        fdd.dlNrFreqInfo.nrArfcn;
    dlnrfreq->freqBandListNr.list.count = 1;
@@ -126,14 +166,14 @@ S16 BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildNrcgi(NRCGI_t *nrcgi)
+uint8_t BuildNrcgi(NRCGI_t *nrcgi)
 {
-   S16 ret;
-   U8 unused = 4;
-   U8 byteSize = 5;
-   U8 val = 16;
+   uint8_t ret;
+   uint8_t unused = 4;
+   uint8_t byteSize = 5;
+   uint8_t val = 16;
    /* Allocate Buffer Memory */
-   nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
+   nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(uint8_t);
    DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
    if(nrcgi->pLMN_Identity.buf == NULLP)
        {
@@ -147,7 +187,7 @@ S16 BuildNrcgi(NRCGI_t *nrcgi)
    }
    /*nrCellIdentity*/
    //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
-   nrcgi->nRCellIdentity.size = byteSize * sizeof(U8);
+   nrcgi->nRCellIdentity.size = byteSize * sizeof(uint8_t);
    DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size); 
    if(nrcgi->nRCellIdentity.buf == NULLP)
    {
@@ -175,14 +215,14 @@ S16 BuildNrcgi(NRCGI_t *nrcgi)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildFiveGSTac(Served_Cell_Information_t *servcell)
+uint8_t BuildFiveGSTac(Served_Cell_Information_t *servcell)
 {
    DU_ALLOC(servcell->fiveGS_TAC,sizeof(FiveGS_TAC_t));
    if(servcell->fiveGS_TAC == NULLP)
    {
           return RFAILED;
    }
-   servcell->fiveGS_TAC->size = 3 * sizeof(U8);
+   servcell->fiveGS_TAC->size = 3 * sizeof(uint8_t);
    DU_ALLOC(servcell->fiveGS_TAC->buf,\
          sizeof(servcell->fiveGS_TAC->size));
    if(servcell->fiveGS_TAC->buf == NULLP)
@@ -209,10 +249,10 @@ S16 BuildFiveGSTac(Served_Cell_Information_t *servcell)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildNrMode(NR_Mode_Info_t *mode)
+uint8_t BuildNrMode(NR_Mode_Info_t *mode)
 {
-   S16 BuildDLNRInforet=0;
-       S16 BuildULNRInforet=0; 
+   uint8_t BuildDLNRInforet=0;
+       uint8_t BuildULNRInforet=0; 
    /* FDD Mode */
        mode->present = NR_Mode_Info_PR_fDD;
    if(mode->present == NR_Mode_Info_PR_fDD)
@@ -262,13 +302,13 @@ S16 BuildNrMode(NR_Mode_Info_t *mode)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
+uint8_t BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
 {
-   U8 idx;
-   U8 plmnidx;
-   U8 extensionCnt=1;
-   U8 sliceId=0;
-   U8 sdId;
+   uint8_t idx;
+   uint8_t plmnidx;
+   uint8_t extensionCnt=1;
+   uint8_t sliceId=0;
+   uint8_t sdId;
    DU_ALLOC(*ieExtend,sizeof(ProtocolExtensionContainer_4624P3_t));
    if((*ieExtend) == NULLP)
    {
@@ -315,7 +355,7 @@ S16 BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
             return RFAILED;
     }
    (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
-         list.array[sliceId]->sNSSAI.sST.size = sizeof(U8);
+         list.array[sliceId]->sNSSAI.sST.size = sizeof(uint8_t);
     DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList\
             .list.array[sliceId]->sNSSAI.sST.buf,(*ieExtend)->list.array[idx]->\
             extensionValue.choice.SliceSupportList.\
@@ -335,7 +375,7 @@ S16 BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
           return RFAILED;
    }
    (*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
-         list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(U8);
+         list.array[sliceId]->sNSSAI.sD->size = 3*sizeof(uint8_t);
    DU_ALLOC((*ieExtend)->list.array[idx]->extensionValue.choice.SliceSupportList.\
             list.array[sliceId]->sNSSAI.sD->buf,(*ieExtend)->list.array[idx]->extensionValue.choice.\
             SliceSupportList.list.array[sliceId]->sNSSAI.sD->size);
@@ -370,12 +410,12 @@ S16 BuildExtensions(ProtocolExtensionContainer_4624P3_t **ieExtend)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16  BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
+uint8_t  BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
 {  
-   U8  plmnidx;
-   U8  servPlmnCnt=1;
-       S16 buildPlmnIdret=0;
-       S16 BuildExtensionsret=0;
+   uint8_t  plmnidx;
+   uint8_t  servPlmnCnt=1;
+       uint8_t buildPlmnIdret=0;
+       uint8_t BuildExtensionsret=0;
    srvplmn->list.count = servPlmnCnt;
    srvplmn->list.size = \
                       servPlmnCnt*sizeof(ServedPLMNs_Item_t *);
@@ -393,7 +433,7 @@ S16  BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
                   return RFAILED;
       }  
    }
-       srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(U8);
+       srvplmn->list.array[0]->pLMN_Identity.size = PLMN_SIZE * sizeof(uint8_t);
    DU_ALLOC(srvplmn->list.array[0]->pLMN_Identity.buf, srvplmn->list.array[0]->pLMN_Identity.size);
    buildPlmnIdret = buildPlmnId(duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.nrCgi.plmn,\
          &srvplmn->list.array[0]->pLMN_Identity);
@@ -424,15 +464,15 @@ S16  BuildServedPlmn(ServedPLMNs_List_t *srvplmn)
  *
  * ****************************************************************/
 
-S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
+uint8_t BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
 {
-   S16 BuildNrcgiret=0;
-   S16 BuildFiveGSTacret=0;
-       S16 BuildServedPlmnret=0;
-       S16 BuildNrModeret=0;
-   U8  idx;
-   U8  plmnidx;
-   U8  plmnCnt=1;
+   uint8_t  BuildNrcgiret=0;
+   uint8_t  BuildFiveGSTacret=0;
+       uint8_t  BuildServedPlmnret=0;
+   uint8_t  BuildNrModeret=0;
+   uint8_t  idx;
+   uint8_t  plmnidx;
+   uint8_t  plmnCnt=1;
    GNB_DU_Served_Cells_Item_t *srvCellItem;
    duServedCell->list.size = plmnCnt * sizeof(GNB_DU_Served_Cells_ItemIEs_t *);
    duServedCell->list.count = plmnCnt;
@@ -488,7 +528,7 @@ S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
    }
    /*Measurement timing Config*/
    srvCellItem->served_Cell_Information.measurementTimingConfiguration.\
-      size = sizeof(U8);
+      size = sizeof(uint8_t);
    DU_ALLOC(srvCellItem->served_Cell_Information.\
          measurementTimingConfiguration.buf,srvCellItem->served_Cell_Information.measurementTimingConfiguration.size);
    if(srvCellItem->served_Cell_Information.\
@@ -550,12 +590,12 @@ S16 BuildServedCellList(GNB_DU_Served_Cells_List_t *duServedCell)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildRrcVer(RRC_Version_t *rrcVer)
+uint8_t BuildRrcVer(RRC_Version_t *rrcVer)
 {
-   U8 rrcExt;
-   U8 rrcLatest;
-   rrcVer->latest_RRC_Version.size = sizeof(U8);
-   DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(U8));
+   uint8_t rrcExt;
+   uint8_t rrcLatest;
+   rrcVer->latest_RRC_Version.size = sizeof(uint8_t);
+   DU_ALLOC(rrcVer->latest_RRC_Version.buf,sizeof(uint8_t));
    if(rrcVer->latest_RRC_Version.buf == NULLP)
    {
           return RFAILED;
@@ -587,7 +627,7 @@ S16 BuildRrcVer(RRC_Version_t *rrcVer)
    rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.present =\
               RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
    rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
-             .Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
+             .Latest_RRC_Version_Enhanced.size = 3*sizeof(uint8_t);
    DU_ALLOC(rrcVer->iE_Extensions->list.array[rrcExt]->extensionValue.choice\
         .Latest_RRC_Version_Enhanced.buf,rrcVer->iE_Extensions->list.\
          array[rrcExt]->extensionValue.choice.Latest_RRC_Version_Enhanced.size);
@@ -623,7 +663,7 @@ S16 BuildRrcVer(RRC_Version_t *rrcVer)
 *         RFAILED - failure
 *
 * ****************************************************************/
-S16 SendF1APMsg(Region region, Pool pool)
+uint8_t SendF1APMsg(Region region, Pool pool)
 {
    Buffer *mBuf;
 
@@ -715,12 +755,12 @@ void FreeRrcVer(RRC_Version_t *rrcVer)
 * ****************************************************************/
 void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
 {
-   U8   plmnCnt=1;
-   U8  servId=0;
-       U8 sliceId=0;
-       U8  ieId=0;
-       U8   extensionCnt=1;
-       U8 plmnidx=0;
+   uint8_t   plmnCnt=1;
+   uint8_t  servId=0;
+       uint8_t sliceId=0;
+       uint8_t  ieId=0;
+       uint8_t   extensionCnt=1;
+       uint8_t plmnidx=0;
    GNB_DU_Served_Cells_Item_t *srvCellItem= &duServedCell->list.array[0]->value.choice.GNB_DU_Served_Cells_Item;
    if(duServedCell->list.array!=NULLP)
    {
@@ -823,7 +863,7 @@ void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
                                                                                                               }
                                                                                                          DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->\
                                                                                                               iE_Extensions->list.array[ieId]->extensionValue.choice.SliceSupportList.list.array[sliceId]->\
-                                                                                                                        sNSSAI.sST.buf,sizeof(U8));
+                                                                                                                        sNSSAI.sST.buf,sizeof(uint8_t));
                                                                                                            }
                                                                                                                 DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[servId]->iE_Extensions->list.array[0]->\
                                            extensionValue.choice.SliceSupportList.list.array[sliceId],sizeof(SliceSupportItem_t));
@@ -844,7 +884,7 @@ void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
                                                                     DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.\
                                                                          array[servId]->pLMN_Identity.buf,srvCellItem->served_Cell_Information.\
                                                                          servedPLMNs.list.array[servId]->pLMN_Identity.size
-                                                                         * sizeof(U8));
+                                                                         * sizeof(uint8_t));
                                                                  }
                                                             DU_FREE(srvCellItem->served_Cell_Information.servedPLMNs.list.array[plmnidx],\
                                                                  sizeof(ServedPLMNs_Item_t *));
@@ -859,17 +899,85 @@ void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
                                  }
                             DU_FREE(srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
                                  srvCellItem->served_Cell_Information.nRCGI.nRCellIdentity.size *
-                                 sizeof(U8));
+                                 sizeof(uint8_t));
                          }
                     DU_FREE(srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
                          srvCellItem->served_Cell_Information.nRCGI.pLMN_Identity.size *
-                         sizeof(U8));
+                         sizeof(uint8_t));
                  }
             DU_FREE(duServedCell->list.array[plmnidx],sizeof(GNB_DU_Served_Cells_ItemIEs_t));
          }
      DU_FREE(duServedCell->list.array,plmnCnt*sizeof(GNB_DU_Served_Cells_ItemIEs_t*));
   }
 }
+/*******************************************************************
+ *
+ * @brief  deallocating the memory of function BuildAndSendF1SetupReq()
+ *
+ * @details
+ *
+ *    Function :  FreeF1SetupReq
+ *
+ *    Functionality:  deallocating the memory of function BuildAndSendF1SetupReq
+ *
+ * @params[in] F1AP_PDU_t *f1apMsg
+ *
+ * @return void
+ *
+ * ****************************************************************/
+void FreeF1SetupReq(F1AP_PDU_t *f1apMsg)
+{
+    uint8_t idx =0;
+        uint8_t idx1=1;
+        F1SetupRequest_t           *f1SetupReq=NULLP;
+       
+       
+    if(f1apMsg != NULLP)
+    {
+         if(f1apMsg->choice.initiatingMessage != NULLP)
+         {
+                            f1SetupReq = &f1apMsg->choice.initiatingMessage->value.choice.F1SetupRequest;
+              if(f1SetupReq->protocolIEs.list.array != NULLP)
+                  {
+                                      if(f1SetupReq->protocolIEs.list.array[idx1]!=NULLP)
+                                                {
+                            if(f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.buf !=  NULLP)
+                            {
+                                idx1++;
+                                if(f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_Name.buf != NULLP)
+                                {
+                                     idx1=4;
+                                                                                       if(ServedCellListreturn == ROK)
+                                     {
+                                         FreeRrcVer(&f1SetupReq->protocolIEs.list.array[idx1]->value.choice.RRC_Version);
+                                     }
+                                                                                       idx1--;
+                                     FreeServedCellList(&f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_Served_Cells_List);
+                                     idx1--;
+                                                                                       DU_FREE(f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_Name.buf,
+                                     strlen((char *)duCfgParam.duName));
+                                }
+                                idx1--;
+                                DU_FREE(f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.buf,\
+                                f1SetupReq->protocolIEs.list.array[idx1]->value.choice.GNB_DU_ID.size);
+                                                          }
+                       }
+                       for(idx=0; idx<f1SetupReq->protocolIEs.list.count; idx++)
+                       {
+                            if(f1SetupReq->protocolIEs.list.array[idx]!=NULLP)
+                            {
+                                 DU_FREE(f1SetupReq->protocolIEs.list.array[idx],sizeof(F1SetupRequestIEs_t));
+                             }
+                                        }
+                       DU_FREE(f1SetupReq->protocolIEs.list.array,\
+                            f1SetupReq->protocolIEs.list.size);
+                       }
+                       DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
+                  }
+                  DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
+       }
+
+}
 /*******************************************************************
  *
  * @brief Builds and Send the F1SetupRequest
@@ -884,19 +992,20 @@ void FreeServedCellList( GNB_DU_Served_Cells_List_t *duServedCell)
  *         RFAILED - failure
  *
  ******************************************************************/
-S16 BuildAndSendF1SetupReq()
+uint8_t BuildAndSendF1SetupReq()
 {
-   S16  BuildServedCellListreturn=0;
-       S16  BuildRrcVerreturn=0; 
-   U8   idx=0,idx2=0,i=0;
-   U8   ieId=0;
-   U8   elementCnt=0;
+   uint8_t   idx=0;
+       uint8_t   idx2=0;
+       uint8_t   i=0;
+   uint8_t   elementCnt=0;
    F1AP_PDU_t                 *f1apMsg = NULLP;
    F1SetupRequest_t           *f1SetupReq=NULLP;
    GNB_DU_Served_Cells_List_t *duServedCell=NULLP;
    RRC_Version_t              *rrcVer=NULLP;
    asn_enc_rval_t             encRetVal;        /* Encoder return value */
-       bool ret=false;
+       uint8_t  ret= RFAILED;
+       uint8_t  BuildRrcVerreturn=0;
+       
    DU_LOG("\nF1AP : Building F1 Setup Request\n");
    do
    {
@@ -955,7 +1064,7 @@ S16 BuildAndSendF1SetupReq()
       f1SetupReq->protocolIEs.list.array[idx2]->value.present = \
          F1SetupRequestIEs__value_PR_GNB_DU_ID;
       f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.size =\
-                                                                    sizeof(U8);
+                                                                    sizeof(uint8_t);
 
       DU_ALLOC(f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.buf,\
            f1SetupReq->protocolIEs.list.array[idx2]->value.choice.GNB_DU_ID.size);
@@ -999,12 +1108,11 @@ S16 BuildAndSendF1SetupReq()
                             F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List;
       duServedCell = &f1SetupReq->protocolIEs.list.\
                   array[idx2]->value.choice.GNB_DU_Served_Cells_List;
-      BuildServedCellListreturn = BuildServedCellList(duServedCell);
-      if(BuildServedCellListreturn != ROK)
+      ServedCellListreturn = BuildServedCellList(duServedCell);
+      if(ServedCellListreturn != ROK)
       {
          break;
       }
-
       /*RRC Version*/
       idx2++;
       f1SetupReq->protocolIEs.list.array[idx2]->id = \
@@ -1014,7 +1122,6 @@ S16 BuildAndSendF1SetupReq()
                                     F1SetupRequestIEs__value_PR_RRC_Version;
       rrcVer = &f1SetupReq->protocolIEs.list.array[idx2]->value.choice.RRC_Version;
       BuildRrcVerreturn = BuildRrcVer(rrcVer);
-      ieId = 0;
       if(BuildRrcVerreturn != ROK)
       {
                        break;
@@ -1022,7 +1129,7 @@ S16 BuildAndSendF1SetupReq()
       xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
 
       /* Encode the F1SetupRequest type as APER */
-      cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+      cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
       encBufSize = 0;
       encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
          encBuf);
@@ -1049,60 +1156,14 @@ S16 BuildAndSendF1SetupReq()
            DU_LOG("\nF1AP : Sending F1 Setup request failed");
                          break;
       }
-               ret=true;
+
+               ret=ROK;
       break;
    }while(1);
 
-   if(f1apMsg != NULLP)
-   {
-
-      if(f1apMsg->choice.initiatingMessage != NULLP)
-      {
-         if(f1SetupReq->protocolIEs.list.array != NULLP)
-         {
-            if(idx == elementCnt-1)
-            {
-               if(f1SetupReq->protocolIEs.list.array[1]->value.choice.GNB_DU_ID.buf !=  NULLP)
-               {
-                   if(f1SetupReq->protocolIEs.list.array[2]->value.choice.GNB_DU_Name.buf != NULLP)
-                   {
-                                                    if(BuildServedCellListreturn == ROK)
-                                                         {   
-                                                             FreeRrcVer(rrcVer);
-                                                         }
-                                                         FreeServedCellList(duServedCell);
-                                                         DU_FREE(f1SetupReq->protocolIEs.list.array[2]->value.choice.GNB_DU_Name.buf, strlen((char *)duCfgParam.duName));
-                   }
-                   DU_FREE(f1SetupReq->protocolIEs.list.array[1]->value.choice.GNB_DU_ID.buf, sizeof(U8));
-                }
-                         for(idx=0; idx<elementCnt; idx++)
-                {
-                    DU_FREE(f1SetupReq->protocolIEs.list.array[idx],sizeof(F1SetupRequestIEs_t));
-                }
-            }
-            else
-            {
-                for(ieId=0 ; ieId<idx ;ieId++)
-                {
-                                           if(f1SetupReq->protocolIEs.list.array[ieId]!=NULLP)
-                   {
-                                                    DU_FREE(f1SetupReq->protocolIEs.list.array[ieId],\
-                       sizeof(F1SetupRequestIEs_t));
-                                                }
-                }
-            }
-            DU_FREE(f1SetupReq->protocolIEs.list.array,\
-               elementCnt * sizeof(F1SetupRequestIEs_t *));
-         }
-         DU_FREE(f1apMsg->choice.initiatingMessage, sizeof(InitiatingMessage_t));
-      }
-      DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
-   }
-
-       if(ret==true)
-   return ROK;  
-       else
-       return RFAILED;
+       FreeF1SetupReq(f1apMsg);
+       
+       return ret;
 }/* End of BuildAndSendF1SetupReq */
 
 /*******************************************************************
@@ -1123,24 +1184,24 @@ S16 BuildAndSendF1SetupReq()
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildAndSendDUConfigUpdate()
-{
-   U8 idx;
-       U8 idy;
-       U8 idx1;
-       U8 idy1;
-       U8 idy2;
-   U8 elementCnt;
-       U8 modifyCnt;
-       U8 servPlmnCnt;
-       U8 extensionCnt;
+uint8_t BuildAndSendDUConfigUpdate()
+{
+   uint8_t idx;
+       uint8_t idy;
+       uint8_t idx1;
+       uint8_t idy1;
+       uint8_t idy2;
+   uint8_t elementCnt;
+       uint8_t modifyCnt;
+       uint8_t servPlmnCnt;
+       uint8_t extensionCnt;
    asn_enc_rval_t encRetVal;      /* Encoder return value */
    F1AP_PDU_t *f1apDuCfg = NULL;
    GNBDUConfigurationUpdate_t *duCfgUpdate;
    Served_Cells_To_Modify_List_t  *cellsToModify;
    Served_Cells_To_Modify_Item_t *modifyItem;
-   bool checkvar=false;
-   U8 i;
+   uint8_t ret= RFAILED;
+   uint8_t i;
 
        while(1)
        {
@@ -1544,7 +1605,7 @@ S16 BuildAndSendDUConfigUpdate()
        xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apDuCfg);
    
        /* Encode the DU Config Update type as APER */
-       cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+       cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
        encBufSize = 0;
        encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apDuCfg, PrepFinalEncBuf, encBuf);
 
@@ -1568,65 +1629,102 @@ S16 BuildAndSendDUConfigUpdate()
           DU_LOG("\nF1AP : Sending GND-DU Config Update failed");
                         break;
        }
-                checkvar=true;
+                
+                ret = ROK;
                 break;
-       }
+        }
+        FreeDUConfigUpdate(f1apDuCfg);
+    
+        return ret;
+}
+ /*******************************************************************
+ *
+ * @brief Deallocating memory of BuildAndSendDUConfigUpdate
+ *
+ * @details
+ *
+ *    Function : FreeDUConfigUpdate
+ *
+ *    Functionality: Deallocating memory of variables allocated in
+ *                    BuildAndSendDUConfigUpdate function
+ *
+ * @params[in]  F1AP_PDU_t *f1apDuCfg
+ *
+ * @return ROK     - void
+ *
+ * ****************************************************************/
+void FreeDUConfigUpdate(F1AP_PDU_t *f1apDuCfg)
+{
+   uint8_t  i;
+       uint8_t  idx;
+   GNBDUConfigurationUpdate_t *duCfgUpdate;
+   Served_Cells_To_Modify_List_t  *cellsToModify;
+   Served_Cells_To_Modify_Item_t *modifyItem;
+   idx=0;
+   i=1;
    if(f1apDuCfg != NULLP)
        {
            if(f1apDuCfg->choice.initiatingMessage != NULLP)
                 {
+                    duCfgUpdate = &f1apDuCfg->choice.initiatingMessage->\
+                         value.choice.GNBDUConfigurationUpdate;
                     if(duCfgUpdate->protocolIEs.list.array != NULLP)
                          {
-                             if(idx==elementCnt)
-                                       {
-                                           if(cellsToModify->list.array != NULLP)
-                                                {
-                                                    if(idy==modifyCnt)
-                                                         {
-                                                             if(modifyItem->oldNRCGI.pLMN_Identity.buf != NULLP)
-                           {
+                                   if(duCfgUpdate->protocolIEs.list.array[i] != NULLP)
+                                        {
+                                             cellsToModify = &duCfgUpdate->protocolIEs.list.array[i]->\
+                                                       value.choice.Served_Cells_To_Modify_List;
+                                             if(cellsToModify->list.array != NULLP)
+                                             {
+                                                          if(cellsToModify->list.array[idx] != NULLP)
+                                                               {
+                                                                        modifyItem=&cellsToModify->list.array[idx]->value.choice.\
+                                                                        Served_Cells_To_Modify_Item;
+                                                                        if(modifyItem->oldNRCGI.pLMN_Identity.buf != NULLP)
+                            {
                                                                            if(modifyItem->oldNRCGI.nRCellIdentity.buf != NULLP)
-                                                                                {
+                                                                           {
                                                                                      if(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf != NULLP)
-                                                                                               {
-                                                                                                    if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf
-                                                                                                         != NULLP)
+                                                                                          {
+                                                                                                    if(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf
+                                                                                                    != NULLP)
                                                                                                          { 
                                                                                                              if(modifyItem->served_Cell_Information.servedPLMNs.list.array\
                                                                                                                        != NULLP)
                                                                                                                         {
-                                                                                                                            if(idy1==servPlmnCnt)
+                                                                                                                            if(!modifyItem->served_Cell_Information.servedPLMNs.list.array[idx])
                                                                                                                                  {
-                                                                                                                                     if(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                           array[0]->pLMN_Identity.buf != NULLP)
-                                                      {
+                                                                                                                                      if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+                                                                                                                                           array[idx]->pLMN_Identity.buf != NULLP)
+                                                       {
                                                            if(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                           array[0]->iE_Extensions!= NULLP)
+                                                                                                                                                           array[idx]->iE_Extensions!= NULLP)
                                                                                                                                                                 {
                                                                                                                                                                     if(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                 array[0]->iE_Extensions->list.array != NULLP)
+                                                                 array[idx]->iE_Extensions->list.array != NULLP)
                                                                                                                                                                          {
-                                                                                                                                                                             if(idy2==extensionCnt)
-                                                                                                                                                                                       {
-                                                                                                                                                                                          if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                               iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                               list.array !=NULLP)
+                                                                                                                                                                                          if(modifyItem->served_Cell_Information.servedPLMNs.list.\
+                                                                                                                                                                                               array[idx]->iE_Extensions->list.array[idx])
                                                                                                                                                                                                {
-                                                                                                                                                                                                  if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                        iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                        list.array[0]!=NULLP)
-                                                                                                                                                                                                        {   
-                                                                                                                                                                                                            if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                 list.array[0]->sNSSAI.sST.buf!=NULLP)
-                                                                                                                                                                                                                 {
-                                                                                                                                                                                                                    if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                         iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                         list.array[0]->sNSSAI.sD != NULLP)
-                                                                                                                                                                                                                         {
-                                                                                                                                                                                                                              if(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                                        iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                                         list.array[0]->sNSSAI.sD->buf!=NULLP)
+                                                                                                                                                                                                  if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                  iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                  list.array !=NULLP)
+                                                                                                                                                                                                  {
+                                                                                                                                                                                                     if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                          iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                          list.array[idx]!=NULLP)
+                                                                                                                                                                                                          {   
+                                                                                                                                                                                                             if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                                  iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                  list.array[idx]->sNSSAI.sST.buf!=NULLP)
+                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                     if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                                          iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                          list.array[idx]->sNSSAI.sD != NULLP)
+                                                                                                                                                                                                                          { 
+                                                                                                                                                                                                                              if(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                                                        iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                                         list.array[idx]->sNSSAI.sD->buf!=NULLP)
                                                                                                                                                                                                                                         {
                                                                                                                                                                                                                                             if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.fDD
                                                                                                                                                                                                                                                  !=NULLP)
@@ -1635,26 +1733,28 @@ S16 BuildAndSendDUConfigUpdate()
                                                                                                                                                                                                                                                          fDD->uL_NRFreqInfo.freqBandListNr.list.array!=NULLP)
                                                                                                                                                                                                                                                     {
                                                                                                                                                                                                                                                              if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
-                                                                                                                                                                                                                                                                       fDD->uL_NRFreqInfo.freqBandListNr.list.array[0]!=NULLP)
+                                                                                                                                                                                                                                                                       fDD->uL_NRFreqInfo.freqBandListNr.list.array[idx]!=NULLP)
                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                            if(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
                                                                                                                                                                                                                                                                                 fDD->dL_NRFreqInfo.freqBandListNr.list.array !=NULLP)
                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                    if(modifyItem->served_Cell_Information.nR_Mode_Info.\
                                                                                                                                                                                                                                                                                         choice.fDD->dL_NRFreqInfo.freqBandListNr.list.\
-                                                                                                                                                                                                                                                                                        array[0]!= NULLP)
+                                                                                                                                                                                                                                                                                        array[idx]!= NULLP)
                                                                                                                                                                                                                                                                                         {
                                                                                                                                                                                                                                                                                            if(modifyItem->served_Cell_Information.\
                                                                                                                                                                                                                                                                                                 measurementTimingConfiguration.buf !=NULLP)
                                                                                                                                                                                                                                                                                                 {
-                                                                                                                                                                                                                                                                                                  if(duCfgUpdate->protocolIEs.list.array[2]->value.\
+                                                                                                                                                                                                                                                                                                  idx=2;
+                                                                                                                                                                                                                                                                                                  if(duCfgUpdate->protocolIEs.list.array[idx]->value.\
                                                                                                                                                                                                                                                                                                        choice.GNB_DU_ID.buf!=NULLP)
                                                                                                                {
                                                                                                                                                                                                                                                                                                            DU_FREE(duCfgUpdate->protocolIEs.list.\
-                                                                                                                                                                                                                                                                                                                array[2]->value.choice.GNB_DU_ID.buf,\
-                                                                                                                                                                                                                                                                                                                duCfgUpdate->protocolIEs.list.array[2]->\
+                                                                                                                                                                                                                                                                                                                array[idx]->value.choice.GNB_DU_ID.buf,\
+                                                                                                                                                                                                                                                                                                                duCfgUpdate->protocolIEs.list.array[idx]->\
                                                                                                                                                                                                                                                                                                                 value.choice.GNB_DU_ID.size);
                                                                                                                                                                                                                                                                                                        }
+                                                                                                                                                                                                                                                                                                       idx=0;
                                                                                                                                                                                                                                                                                                   DU_FREE(modifyItem->served_Cell_Information.\
                                                                                                                                                                                                                                                                                                        measurementTimingConfiguration.\
                                                                                                                                                                                                                                                                                                        buf,modifyItem->served_Cell_Information.\
@@ -1662,7 +1762,7 @@ S16 BuildAndSendDUConfigUpdate()
                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.\
                                                                                                                                                                                                                                                                                                nR_Mode_Info.choice.fDD->dL_NRFreqInfo.freqBandListNr.\
-                                                                                                                                                                                                                                                                                          list.array[0],sizeof(FreqBandNrItem_t));
+                                                                                                                                                                                                                                                                                          list.array[idx],sizeof(FreqBandNrItem_t));
                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                         DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info\
                                                                                                                                                                                                                                                                                         .choice.fDD->dL_NRFreqInfo.freqBandListNr.list.array,\
@@ -1671,141 +1771,161 @@ S16 BuildAndSendDUConfigUpdate()
                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                 DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
                                                                                                                                                                                                                                                                                 choice.fDD->uL_NRFreqInfo.freqBandListNr.list.\
-                                                                                                                                                                                                                                                                                array[0],sizeof(FreqBandNrItem_t));
+                                                                                                                                                                                                                                                                                array[idx],sizeof(FreqBandNrItem_t));
                                                                                                                                                                                                                                                                        }
-                                                                                                                                                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
-                                                                                                                                                                                                                                                                 fDD->uL_NRFreqInfo.freqBandListNr.list.\
-                                                                                                                                                                                                                                                                 array,modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
-                                                                                                                                                                                                                                                                 fDD->uL_NRFreqInfo.freqBandListNr.list.size);
-                                                                                                                                                                                                                                                         }
-                                                                                                                                                                                                                                                    DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
-                                                                                                                                                                                                                                                         fDD,sizeof(FDD_Info_t));
-                                                                                                                                                                                                                                                 }
-                                                                                                                                                                                                                                           DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                                                iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                                                 list.array[0]->sNSSAI.sD->buf,modifyItem->served_Cell_Information.\
-                                                                                                                                                                                                                                                servedPLMNs.list.array[0]->iE_Extensions->list.array[0]->\
-                                                                                                                                                                                                                                                extensionValue.choice.SliceSupportList.list.array[0]->sNSSAI.sD->size);
-
-                                                                                                                                                                                                                                        }
-                                                                                                                                                                                                                             DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                                       iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                                       list.array[0]->sNSSAI.sD,sizeof(OCTET_STRING_t));
-                                                                                                                                                                                                                         }
-                                                                                                                                                                                                                    DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                         iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                         list.array[0]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.servedPLMNs.\
-                                                                                                                                                                                                                         list.array[0]->iE_Extensions->list.array[0]->extensionValue.choice.\
-                                                                                                                                                                                                                         SliceSupportList.list.array[0]->sNSSAI.sST.size);
-                                                                                                                                                                                                                 }
-                                                                                                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                                 iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                                 list.array[0],sizeof(SliceSupportItem_t));
-                                                                                                                                                                                                        }
-                                                                                                                                                                                                  DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                       iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.\
-                                                                                                                                                                                                   list.array,\
-                                                                                                                                                                                                        modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->\
-                                                                                                                                                                                                        iE_Extensions->list.array[0]->extensionValue.choice.SliceSupportList.list.size);
-                                                                                                                                                                                               }
-                                                                                                                                                                                          for(i=0;i<extensionCnt;i++)
-                                                                                                                                                                                               {
-                                                                                                                                                                                                   DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                                                                        array[0]->iE_Extensions->list.array[i],\
-                                                                                                                                                                                                        sizeof(ServedPLMNs_ItemExtIEs_t ));
-                                                                                                                                                                                               }
+                                                                                                                                                                                                                                                             DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.\
+                                                                                                                                                                                                                                                                       choice.\
+                                                                                                                                                                                                                                                                  fDD->uL_NRFreqInfo.freqBandListNr.list.\
+                                                                                                                                                                                                                                                                  array,modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+                                                                                                                                                                                                                                                                  fDD->uL_NRFreqInfo.freqBandListNr.list.size);
+                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                     DU_FREE(modifyItem->served_Cell_Information.nR_Mode_Info.choice.\
+                                                                                                                                                                                                                                                          fDD,sizeof(FDD_Info_t));
+                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                             DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+                                                                                                                                                                                                                                                       array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
+                                                                                                                                                                                                                                                       SliceSupportList.\
+                                                                                                                                                                                                                                                  list.array[idx]->sNSSAI.sD->buf,modifyItem->served_Cell_Information.\
+                                                                                                                                                                                                                                                  servedPLMNs.list.array[idx]->iE_Extensions->list.array[idx]->\
+                                                                                                                                                                                                                                                  extensionValue.choice.SliceSupportList.list.array[idx]->\
+                                                                                                                                                                                                                                                       sNSSAI.sD->size);
+
+                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
+                                                                                                                                                                                                                                               array[idx]->\
+                                                                                                                                                                                                                                          iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                                          list.array[idx]->sNSSAI.sD,sizeof(OCTET_STRING_t));
+                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                       DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                                            iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                            list.array[idx]->sNSSAI.sST.buf,modifyItem->served_Cell_Information.\
+                                                                                                                                                                                                                                 servedPLMNs.\
+                                                                                                                                                                                                                            list.array[idx]->iE_Extensions->list.array[idx]->extensionValue.choice.\
+                                                                                                                                                                                                                            SliceSupportList.list.array[idx]->sNSSAI.sST.size);
+                                                                                                                                                                                                                   }
+                                                                                                                                                                                                              DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                                   iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                                   list.array[idx],sizeof(SliceSupportItem_t));
+                                                                                                                                                                                                     }
+                                                                                                                                                                                                     DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                     iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.\
+                                                                                                                                                                                                     list.array,\
+                                                                                                                                                                                                     modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->\
+                                                                                                                                                                                                     iE_Extensions->list.array[idx]->extensionValue.choice.SliceSupportList.list.size);
+                                                                                                                                                                                                }
                                                                                                                                                                                        }
-                                                                                                                                                                                       else
+                                                                                                                                                                                       for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.\
+                                                                                                                                                                                       array[idx]->iE_Extensions->list.count;i++)
                                                                                                                                                                                        {
-                                                                                                                                                                                           for(i=0;i<idy2;i++)
-                                                                                                                                                                                                {
                                                                                                                                                                                                    DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                                                                         array[0]->iE_Extensions->list.array[i],\
-                                                                                                                                                                                                         sizeof(ServedPLMNs_ItemExtIEs_t));
-                                                                                                                                                                                                }
+                                                                                                                                                                                                        array[idx]->iE_Extensions->list.array[i],\
+                                                                                                                                                                                                        sizeof(ServedPLMNs_ItemExtIEs_t ));
                                                                                                                                                                                        }
                                                                                                                                                                              DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                                                  array[0]->iE_Extensions->list.array,modifyItem->served_Cell_Information.servedPLMNs.
-                                                                                                                                                                                       list.array[0]->iE_Extensions->list.size);
+                                                                                                                                                                                  array[idx]->iE_Extensions->list.array,modifyItem->served_Cell_Information.servedPLMNs.
+                                                                                                                                                                                       list.array[idx]->iE_Extensions->list.size);
                                                                                                                                                                          }
                                                                                                                                                                     DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                                           array[0]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
+                                                                                                                                                                           array[idx]->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P3_t));
                                                                                                                                                                 }
                                                                                                                                               DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.\
-                                                                                                                                                   array[0]->pLMN_Identity.buf,
-                                                                                                                                                        modifyItem->served_Cell_Information.servedPLMNs.list.array[0]->pLMN_Identity.size);
-                                                                                                                                               }
-                                                      for(i=0;i<idy1;i++)
-                                                                                                                                               {
-                                                                                                                                                  DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
-                                                                                                                                                       sizeof(ServedPLMNs_Item_t));
-                                                                                                                                               }
-                                                                                                                                 }
-                                                                                                                                 else
-                                                                                                                                 {
-                                                                                                                                    for(i=0;i<idy1;i++)
-                                                                                                                                         {
-                                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
-                                                                                                                                                 sizeof(ServedPLMNs_Item_t));
-                                                                                                                                         }
-                                                                                                                                 }
-                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
-                                                                                                                                 modifyItem->served_Cell_Information.servedPLMNs.list.size);
-                                                                                                                        }
-                                                                                                              DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
+                                                                                                                                                   array[idx]->pLMN_Identity.buf,
+                                                                                                                                                        modifyItem->served_Cell_Information.servedPLMNs.list.array[idx]->pLMN_Identity.size);
+                                                                                                                                                }
+                                                    }
+                                                    for(i=0;i<modifyItem->served_Cell_Information.servedPLMNs.list.count;i++)
+                                                                                                                                        {
+                                                                                                                                                   if(modifyItem->served_Cell_Information.servedPLMNs.list.array[i]
+                                                                                                                                                        != NULLP)
+                                                                                                                                                   {
+                                                                                                                                                            DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array[i],\
+                                                                                                                                                            sizeof(ServedPLMNs_Item_t));
+                                                                                                                                                        }
+                                                                                                                                        }
+                                                                                                                              DU_FREE(modifyItem->served_Cell_Information.servedPLMNs.list.array,\
+                                                                                                                                   modifyItem->served_Cell_Information.servedPLMNs.list.size);
+                                                                                                                         }
+                                                                                                               DU_FREE(modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.buf,\
                                                                                                                          modifyItem->served_Cell_Information.nRCGI.nRCellIdentity.size);               
                                                                                                          }
                                                                                                    DU_FREE(modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.buf,\
                                                                                                          modifyItem->served_Cell_Information.nRCGI.pLMN_Identity.size);
                                                                                                }
-                                                                                    DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
+                                                                                     DU_FREE(modifyItem->oldNRCGI.nRCellIdentity.buf,\
                                                                                             modifyItem->oldNRCGI.nRCellIdentity.size);
-                               }
-                                                                           DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,\
-                                                                                 modifyItem->oldNRCGI.pLMN_Identity.size);
-                                                                       }
-                                                                        for(int iy=0; iy<modifyCnt ;iy++)
-                                                                        {
-                                                                           DU_FREE(cellsToModify->list.array[iy],\
-                                                                                 sizeof(Served_Cells_To_Modify_ItemIEs_t));
-                                                                        }
-                                                         }
-                                                         else
-                                                         {
-                                                            for(int iy=0; iy<idy ;iy++)
+                                 }
+                                                                             DU_FREE(modifyItem->oldNRCGI.pLMN_Identity.buf,\
+                                                                                  modifyItem->oldNRCGI.pLMN_Identity.size);
+                                                                     }
+                          }
+                                                                 for(i=0; i<cellsToModify->list.count ;i++)
                                                                  {
-                                                                    DU_FREE(cellsToModify->list.array[iy],\
-                                                                          sizeof(Served_Cells_To_Modify_ItemIEs_t));
-                                                                 }     
-                                                         }
-                                                    DU_FREE(cellsToModify->list.array,cellsToModify->list.size);
+                                                                           if(cellsToModify->list.array[i] != NULLP)
+                                                                                {
+                                                                                   DU_FREE(cellsToModify->list.array[i],\
+                                                                                   sizeof(Served_Cells_To_Modify_ItemIEs_t));
+                                                                                } 
+                                                                 }
+                                                       DU_FREE(cellsToModify->list.array,cellsToModify->list.size);
+                                                    }
                                                 }
-                                           for(i=0;i<elementCnt;i++)
+                                           for(i=0;i<duCfgUpdate->protocolIEs.list.count;i++)
                                                 {
-                                              DU_FREE(duCfgUpdate->protocolIEs.list.array[i],\
-                                                          sizeof(GNBDUConfigurationUpdateIEs_t));
+                                                     if(duCfgUpdate->protocolIEs.list.array[i] !=NULLP)
+                                                               {
+                                                    DU_FREE(duCfgUpdate->protocolIEs.list.array[i],\
+                                                              sizeof(GNBDUConfigurationUpdateIEs_t));
+                                                               }
                                                 }
-                                       }
-                                       else
-                                       {
-                                          for(i=0;i<idx;i++)
-                                               {
-                                                  DU_FREE(duCfgUpdate->protocolIEs.list.array[i],\
-                                                        sizeof(GNBDUConfigurationUpdateIEs_t));
-                                               }
-                                       }
-               DU_FREE(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
-                         }
-                          DU_FREE(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
-                }
+                   DU_FREE(duCfgUpdate->protocolIEs.list.array,duCfgUpdate->protocolIEs.list.size);
+                           }
+                           DU_FREE(f1apDuCfg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+                 }
                  DU_FREE(f1apDuCfg, (Size)sizeof(F1AP_PDU_t));
        }
-   if(checkvar==true)
-      return ROK;
-       else 
-          return RFAILED;
-}/* End of BuildAndSendDUConfigUpdate */
+}
+ /*******************************************************************
+ *
+ * @brief free the ULRRCMessageTransfer
+ *
+ * @details
+ *
+ *    Function : FreeULRRCMessageTransfer
+ *
+ *    Functionality: Deallocating the memory of variable allocated in
+ *                      FreeULRRCMessageTransfer
+ *
+ * @params[in]
+ *
+ * @return ROK     - void
+ *
+ ******************************************************************/
+void FreeULRRCMessageTransfer( F1AP_PDU_t *f1apMsg)
+{
+     uint8_t idx1;
+     ULRRCMessageTransfer_t  *ulRRCMsg;
 
+     if(f1apMsg != NULLP)
+     { 
+         if(f1apMsg->choice.initiatingMessage != NULLP)
+         {
+             ulRRCMsg = &f1apMsg->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
+                                if(ulRRCMsg->protocolIEs.list.array != NULLP)
+             {
+                 for(idx1=0;idx1<ulRRCMsg->protocolIEs.list.count;idx1++)
+                 {
+                     if(ulRRCMsg->protocolIEs.list.array[idx1] != NULLP)
+                     {
+                         DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1],sizeof(ULRRCMessageTransferIEs_t));
+                     }
+                 }
+                 DU_FREE(ulRRCMsg->protocolIEs.list.array,ulRRCMsg->protocolIEs.list.size );
+             }
+             DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+         }
+         DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
+      }
+}
 /*******************************************************************
  *
  * @brief Builds and sends the ULRRCMessageTransfer 
@@ -1823,15 +1943,15 @@ S16 BuildAndSendDUConfigUpdate()
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildAndSendULRRCMessageTransfer()
+uint8_t BuildAndSendULRRCMessageTransfer()
 {
-       U8   elementCnt;
-       U8   idx1;
-       U8   idx;
+       uint8_t   elementCnt;
+       uint8_t   idx1;
+       uint8_t   idx;
        F1AP_PDU_t                              *f1apMsg = NULL;
    ULRRCMessageTransfer_t      *ulRRCMsg;
        asn_enc_rval_t                          encRetVal;        /* Encoder return value */
-   bool checkvar=false;
+   uint8_t ret =RFAILED;
        while(1)
        {
           DU_LOG("\n F1AP : Building UL RRC Message Transfer Message\n");
@@ -1912,7 +2032,7 @@ S16 BuildAndSendULRRCMessageTransfer()
           xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
 
           /* Encode the F1SetupRequest type as APER */
-          cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+          cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
           encBufSize = 0;
           encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
                        encBuf);
@@ -1938,152 +2058,2292 @@ S16 BuildAndSendULRRCMessageTransfer()
                    DU_LOG("\n F1AP : Sending   UL RRC Message Transfer Failed");
                         break;
                }
-      checkvar=true;
+      ret = ROK;
                break;
        }
+   FreeULRRCMessageTransfer(f1apMsg);
 
-       if(f1apMsg != NULLP)
+       return ret;
+}/* End of BuildAndSendULRRCMessageTransfer*/
+
+/*******************************************************************
+*
+* @brief Builds tag config 
+*
+* @details
+*
+*    Function : BuildTagConfig 
+*
+*    Functionality: Builds tag config in MacCellGroupConfig
+*
+* @params[in] TAG_Config *tag_Config
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildTagConfig(struct TAG_Config *tagConfig)
+{
+       struct TAG_Config__tag_ToAddModList *tagList;
+   uint8_t                     idx, elementCnt;
+
+   tagConfig->tag_ToReleaseList = NULLP;
+   tagConfig->tag_ToAddModList = NULLP;
+   DU_ALLOC(tagConfig->tag_ToAddModList, sizeof(struct TAG_Config__tag_ToAddModList));
+       if(!tagConfig->tag_ToAddModList)
        {
-          if(f1apMsg->choice.initiatingMessage != NULLP) 
-          {
-                  if(ulRRCMsg->protocolIEs.list.array != NULLP)
-                       {
-                                for(idx1=0;idx1<idx;idx1++)
-                                {
-                                     if(ulRRCMsg->protocolIEs.list.array[idx1] != NULLP)
-                                         {
-                                                 DU_FREE(ulRRCMsg->protocolIEs.list.array[idx1],sizeof(ULRRCMessageTransferIEs_t));
-                                         }
-                                }
-                           DU_FREE(ulRRCMsg->protocolIEs.list.array,ulRRCMsg->protocolIEs.list.size ); 
-                       }
-                  DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+               DU_LOG("\nF1AP : Memory allocation failure in BuildTagConfig");
+               return RFAILED;
+       }
+
+       elementCnt = 1; //ODU_VALUE_ONE;
+       tagList = tagConfig->tag_ToAddModList;
+       tagList->list.count = elementCnt;
+       tagList->list.size  =  elementCnt * sizeof(struct TAG *);
+
+   tagList->list.array = NULLP;
+       DU_ALLOC(tagList->list.array, tagList->list.size);
+       if(!tagList->list.array)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildTagConfig");
+               return RFAILED;
+       }
+
+       for(idx=0; idx<tagList->list.count; idx++)
+       {
+          tagList->list.array[idx] = NULLP;
+               DU_ALLOC(tagList->list.array[idx], sizeof(struct TAG));
+               if(!tagList->list.array[idx])
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildTagConfig");
+                       return RFAILED;
                }
-          DU_FREE(f1apMsg,sizeof(F1AP_PDU_t));
        }
 
-       if(checkvar==true)
-      return ROK;
-       else
-          return RFAILED;
-}/* End of BuildAndSendULRRCMessageTransfer*/
+       idx = 0;
+       tagList->list.array[idx]->tag_Id = TAG_ID;
+       tagList->list.array[idx]->timeAlignmentTimer = TIME_ALIGNMENT_TMR;
+
+   return ROK;
+}
 
 /*******************************************************************
- *
- * @brief Builds and sends the InitialULRRCMessage 
- *
- * @details
- *
- *    Function : BuildAndSendRRCSetupReq
- *
- *    Functionality: Constructs the Initial UL RRC Message Transfer and sends
- *                   it to the CU through SCTP.
- *
- * @params[in] 
- *
- * @return ROK     - success
- *         RFAILED - failure
- *
- * ****************************************************************/
-S16 BuildAndSendRRCSetupReq()
+*
+* @brief Builds PHR Config 
+*
+* @details
+*
+*    Function : BuildPhrConfig
+*
+*    Functionality: Builds phrConfig in MacCellGroupConfig
+*
+* @params[in] PHR Config *
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildPhrConfig(struct MAC_CellGroupConfig__phr_Config *phrConfig)
 {
-   S16  ret;
-       U8   elementCnt;
-   U8   ieId;
-       U8   idx;
-       U8   idx1;
-       F1AP_PDU_t  *f1apMsg = NULLP;
-       InitialULRRCMessageTransfer_t *initULRRCMsg=NULLP;
-   asn_enc_rval_t                encRetVal;
-       bool  checkvar=false;
-       while(1)
+
+   phrConfig->present = MAC_CellGroupConfig__phr_Config_PR_setup;
+       phrConfig->choice.setup = NULLP;
+       DU_ALLOC(phrConfig->choice.setup, sizeof(struct PHR_Config));
+       if(!phrConfig->choice.setup)
        {
-            DU_LOG("\n F1AP : Building RRC Setup Request\n");
-                 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
-                 if(f1apMsg == NULLP)
-                 {
-                     DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
-                          break;
-                 }
-                 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
-                 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
-                 if(f1apMsg->choice.initiatingMessage == NULLP)
-                 {
-                    DU_LOG(" F1AP : Memory allocation for  F1AP-PDU failed");
-                         break;
-                 }
-                 f1apMsg->choice.initiatingMessage->procedureCode =\
-                        ProcedureCode_id_InitialULRRCMessageTransfer;
-                 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
-                 f1apMsg->choice.initiatingMessage->value.present = \
-                        InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
-                 initULRRCMsg =\
-                        &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
-        elementCnt = 3;
-                 initULRRCMsg->protocolIEs.list.count = elementCnt;
-                 initULRRCMsg->protocolIEs.list.size = \
-                        elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
-                 /* Initialize the F1Setup members */
-                  DU_ALLOC(initULRRCMsg->protocolIEs.list.array,initULRRCMsg->protocolIEs.list.size);
-                  if(initULRRCMsg->protocolIEs.list.array == NULLP)
-                  {
-                     DU_LOG(" F1AP : Memory allocation for\
-                               RRCSetupRequestMessageTransferIEs failed");
-                               break;
-                  }
-                  for(idx=0; idx<elementCnt; idx++)
-             {
-                          DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
-                                sizeof(InitialULRRCMessageTransferIEs_t));
-                                if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
-                                {
-                                    break;
-                                }
-                  }
-                  idx1 = 0;
-                  /*GNB DU UE F1AP ID*/
-                  initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
-                                     ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality  = Criticality_reject;
-                  initULRRCMsg->protocolIEs.list.array[idx1]->value.present = \
-                                     InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
-                  initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_DU_UE_F1AP_ID= DU_ID;
-                       /*NRCGI*/
-                       idx1++;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
-                                ProtocolIE_ID_id_NRCGI;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality  =Criticality_reject;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present = \
-                       InitialULRRCMessageTransferIEs__value_PR_NRCGI;
-                  
-                       ret =\
-                       BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.NRCGI);
-             if(ret!=ROK)
-                       {
-                           break;
-                       }
-                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
-                                      ProtocolIE_ID_id_C_RNTI;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality  =Criticality_reject;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\
-                                InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
-                       initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.C_RNTI =CRNTI;
-         /*RRCContainer*/
-                       // Need to fill this.
+               DU_LOG("\nF1AP : Memory allocation failure in BuildPhrConfig");
+               return RFAILED;
+       }
+
+       phrConfig->choice.setup->phr_PeriodicTimer        = PHR_PERIODIC_TMR;
+       phrConfig->choice.setup->phr_ProhibitTimer        = PHR_PROHIBHIT_TMR;
+   phrConfig->choice.setup->phr_Tx_PowerFactorChange = PHR_PWR_FACTOR_CHANGE;
+       phrConfig->choice.setup->multiplePHR              = false;
+       phrConfig->choice.setup->dummy                    = false;
+       phrConfig->choice.setup->phr_Type2OtherCell       = false;
+       phrConfig->choice.setup->phr_ModeOtherCG          = PHR_MODE_OTHER_CG;
+
+       return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds BSR Config 
+*
+* @details
+*
+*    Function : BuildBsrConfig
+*
+*    Functionality: Builds BuildBsrConfig in MacCellGroupConfig
+*
+* @params[in] BSR_Config *bsrConfig
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildBsrConfig(struct BSR_Config *bsrConfig)
+{
+   bsrConfig->periodicBSR_Timer = PERIODIC_BSR_TMR;
+       bsrConfig->retxBSR_Timer     = RETX_BSR_TMR;
+       bsrConfig->logicalChannelSR_DelayTimer = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds scheduling request config 
+*
+* @details
+*
+*    Function : BuildSchedulingReqConfig 
+*
+*    Functionality: Builds BuildSchedulingReqConfig in MacCellGroupConfig
+*
+* @params[in] SchedulingRequestConfig *schedulingRequestConfig
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildSchedulingReqConfig(struct SchedulingRequestConfig *schedulingRequestConfig)
+{
+       struct SchedulingRequestConfig__schedulingRequestToAddModList *schReqList;
+   uint8_t                     idx, elementCnt;
+
+   schedulingRequestConfig->schedulingRequestToAddModList = NULLP;
+       DU_ALLOC(schedulingRequestConfig->schedulingRequestToAddModList,
+                       sizeof(struct SchedulingRequestConfig__schedulingRequestToAddModList));
+       if(!schedulingRequestConfig->schedulingRequestToAddModList)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSchedulingReqConfig");
+               return RFAILED;
+       }
+
+       elementCnt = 1; //ODU_VALUE_ONE;
+       schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
+       schReqList->list.count = elementCnt;
+   schReqList->list.size  = elementCnt * sizeof(struct SchedulingRequestToAddMod *);
+
+   schReqList->list.array = NULLP;
+   DU_ALLOC(schReqList->list.array, schReqList->list.size);
+       if(!schReqList->list.array)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSchedulingReqConfig");
+               return RFAILED;
+       }
+
+   for(idx=0;idx<schReqList->list.count; idx++)
+       {
+          schReqList->list.array[idx] = NULLP;
+               DU_ALLOC(schReqList->list.array[idx], sizeof(struct SchedulingRequestToAddMod));
+               if(!schReqList->list.array[idx])
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildSchedulingReqConfig");
+                       return RFAILED;
+               }
+       }
+
+       idx = 0;
+       schReqList->list.array[idx]->schedulingRequestId = SCH_REQ_ID;
+
+   schReqList->list.array[idx]->sr_ProhibitTimer = NULLP;
+       DU_ALLOC(schReqList->list.array[idx]->sr_ProhibitTimer, sizeof(long));
+       if(!schReqList->list.array[idx]->sr_ProhibitTimer)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSchedulingReqConfig");
+               return RFAILED;
+       }
+   *(schReqList->list.array[idx]->sr_ProhibitTimer) = SR_PROHIBIT_TMR;
+       schReqList->list.array[idx]->sr_TransMax = SR_TRANS_MAX;
+       schedulingRequestConfig->schedulingRequestToReleaseList = NULLP;
+
+       return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds RLC Config
+*
+* @details
+*
+*    Function : BuildRlcConfig
+*
+*    Functionality: Builds RLC Config in BuildRlcBearerToAddModList 
+*
+* @params[in] RLC_Config *rlcConfig
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildRlcConfig(struct RLC_Config *rlcConfig)
+{
+
+   rlcConfig->present = RLC_Config_PR_am;
+
+   rlcConfig->choice.am = NULLP;
+   DU_ALLOC(rlcConfig->choice.am, sizeof(struct RLC_Config__am));
+       if(!rlcConfig->choice.am)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcConfig");
+               return RFAILED;
+       }
+
+   /* UL */
+       rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength = NULLP;
+   DU_ALLOC(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t));
+       if(!rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcConfig");
+               return RFAILED;
+       }
+   *(rlcConfig->choice.am->ul_AM_RLC.sn_FieldLength) = SN_FIELD_LEN;
+       rlcConfig->choice.am->ul_AM_RLC.t_PollRetransmit  = T_POLL_RETRANSMIT;
+       rlcConfig->choice.am->ul_AM_RLC.pollPDU           = POLL_PDU;
+       rlcConfig->choice.am->ul_AM_RLC.pollByte          = POLL_BYTE;
+       rlcConfig->choice.am->ul_AM_RLC.maxRetxThreshold  = MAX_RETX_THRESHOLD;
+
+   /* DL */
+   rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength = NULLP;
+   DU_ALLOC(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength, sizeof(SN_FieldLengthAM_t)); 
+       if(!rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcConfig");
+               return RFAILED;
+       }
+       *(rlcConfig->choice.am->dl_AM_RLC.sn_FieldLength) = SN_FIELD_LEN;
+   rlcConfig->choice.am->dl_AM_RLC.t_Reassembly      = T_REASSEMBLY;
+       rlcConfig->choice.am->dl_AM_RLC.t_StatusProhibit  = T_STATUS_PROHIBHIT;
+       
+   return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds MAC LC Config
+*
+* @details
+*
+*    Function : BuildMacLCConfig 
+*
+*    Functionality: Builds MAC LC Config in BuildRlcBearerToAddModList 
+*
+* @params[in] struct LogicalChannelConfig macLcConfig
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildMacLCConfig(struct LogicalChannelConfig *macLcConfig)
+{
+
+   macLcConfig->ul_SpecificParameters = NULLP;
+   DU_ALLOC(macLcConfig->ul_SpecificParameters, sizeof(struct LogicalChannelConfig__ul_SpecificParameters));
+       if(!macLcConfig->ul_SpecificParameters)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacLCConfig");
+               return RFAILED;
+       }
+
+   macLcConfig->ul_SpecificParameters->priority = MAC_LC_PRIORITY;
+       macLcConfig->ul_SpecificParameters->prioritisedBitRate =        PRIORTISIED_BIT_RATE;
+       macLcConfig->ul_SpecificParameters->bucketSizeDuration =        BUCKET_SIZE_DURATION;
+   macLcConfig->ul_SpecificParameters->allowedServingCells = NULLP;
+       macLcConfig->ul_SpecificParameters->allowedSCS_List = NULLP;
+       macLcConfig->ul_SpecificParameters->maxPUSCH_Duration = NULLP;
+   macLcConfig->ul_SpecificParameters->configuredGrantType1Allowed = NULLP;
+
+   macLcConfig->ul_SpecificParameters->logicalChannelGroup = NULLP;
+   DU_ALLOC(macLcConfig->ul_SpecificParameters->logicalChannelGroup,   sizeof(long));
+   if(!macLcConfig->ul_SpecificParameters->logicalChannelGroup)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacLCConfig");
+               return RFAILED;
+       }
+   *(macLcConfig->ul_SpecificParameters->logicalChannelGroup) = LC_GRP;
+
+   macLcConfig->ul_SpecificParameters->schedulingRequestID = NULLP;
+       DU_ALLOC(macLcConfig->ul_SpecificParameters->schedulingRequestID,       sizeof(SchedulingRequestId_t));
+       if(!macLcConfig->ul_SpecificParameters->schedulingRequestID)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacLCConfig");
+               return RFAILED;
+       }
+   *(macLcConfig->ul_SpecificParameters->schedulingRequestID) = SCH_REQ_ID;
+
+       macLcConfig->ul_SpecificParameters->logicalChannelSR_Mask = false;
+       macLcConfig->ul_SpecificParameters->logicalChannelSR_DelayTimerApplied = false;
+       macLcConfig->ul_SpecificParameters->bitRateQueryProhibitTimer = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds RLC Bearer to Add/Mod list
+*
+* @details
+*
+*    Function :BuildRlcBearerToAddModList 
+*
+*    Functionality: Builds RLC Bearer to Add/Mod list in DuToCuRrcContainer
+*
+* @params[in] rlc_BearerToAddModList
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildRlcBearerToAddModList(struct CellGroupConfigRrc__rlc_BearerToAddModList *rlcBearerList)
+{
+   uint8_t                     idx, elementCnt;
+
+   elementCnt = 1;
+   rlcBearerList->list.count = elementCnt;
+       rlcBearerList->list.size  = elementCnt * sizeof(struct RLC_BearerConfig *);
+
+   rlcBearerList->list.array = NULLP;
+       DU_ALLOC(rlcBearerList->list.array, rlcBearerList->list.size);
+       if(!rlcBearerList->list.array)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcBearerToAddModList");
+               return RFAILED;
+       }
+
+   for(idx=0; idx<rlcBearerList->list.count; idx++)
+       {
+          rlcBearerList->list.array[idx] = NULLP;
+               DU_ALLOC(rlcBearerList->list.array[idx], sizeof(struct RLC_BearerConfig));
+               if(!rlcBearerList->list.array[idx])
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildRlcBearerToAddModList");
+                       return RFAILED;
+               }
+       }
+
+   idx = 0;
+       rlcBearerList->list.array[idx]->logicalChannelIdentity = RLC_LCID;
+
+       DU_ALLOC(rlcBearerList->list.array[idx]->servedRadioBearer, sizeof(struct RLC_BearerConfig__servedRadioBearer));
+       if(!rlcBearerList->list.array[idx]->servedRadioBearer)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcBearerToAddModList");
+               return RFAILED;
+       }
+
+       rlcBearerList->list.array[idx]->servedRadioBearer->present = RLC_BearerConfig__servedRadioBearer_PR_srb_Identity;
+   rlcBearerList->list.array[idx]->servedRadioBearer->choice.srb_Identity = SRB_ID_1;
+
+   rlcBearerList->list.array[idx]->reestablishRLC = NULLP;
+   rlcBearerList->list.array[idx]->rlc_Config = NULLP;
+   DU_ALLOC(rlcBearerList->list.array[idx]->rlc_Config, sizeof(struct RLC_Config));
+       if(!rlcBearerList->list.array[idx]->rlc_Config)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcBearerToAddModList");
+               return RFAILED;
+       }
+
+   if(BuildRlcConfig(rlcBearerList->list.array[idx]->rlc_Config) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildRlcConfig failed");
+               return RFAILED;
+       }
+
+   rlcBearerList->list.array[idx]->mac_LogicalChannelConfig = NULLP;
+   DU_ALLOC(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig, sizeof(struct LogicalChannelConfig));
+       if(!rlcBearerList->list.array[idx]->mac_LogicalChannelConfig)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildRlcBearerToAddModList");
+               return RFAILED;
+       }
+
+       if(BuildMacLCConfig(rlcBearerList->list.array[idx]->mac_LogicalChannelConfig) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildMacLCConfig failed");
+               return RFAILED;
+       }
+
+       return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Build Control resource set to add/modify list 
+ *
+ * @details
+ *
+ *    Function : BuildControlRSetToAddModList
+ *
+ *    Functionality: Build Control resource set to add/modify list
+ *
+ * @params[in] 
+ * struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildControlRSetToAddModList
+(
+struct PDCCH_Config__controlResourceSetToAddModList *controlRSetList
+)
+{
+   uint8_t idx;
+   uint8_t elementCnt;
+       uint8_t numBytes;
+       uint8_t byteIdx;
+       uint8_t bitsUnused;
+   struct ControlResourceSet *controlRSet;
+
+   elementCnt = 1;
+   controlRSetList->list.count = elementCnt;
+   controlRSetList->list.size = \
+       elementCnt * sizeof(struct ControlResourceSet *);
+
+   controlRSetList->list.array = NULLP;
+   DU_ALLOC(controlRSetList->list.array, controlRSetList->list.size);
+   if(!controlRSetList->list.array)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+      return RFAILED;
+   }
+
+   for(idx = 0; idx < elementCnt; idx++)
+   {
+          controlRSetList->list.array[idx] = NULLP;
+      DU_ALLOC(controlRSetList->list.array[idx], sizeof(struct ControlResourceSet));
+      if(!controlRSetList->list.array[idx])
+      {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+         return RFAILED;
+      }
+   }
+
+   idx=0;
+   controlRSet = controlRSetList->list.array[idx];
+
+   controlRSet->controlResourceSetId = PDCCH_CTRL_RSRC_SET_ONE_ID;
+
+       /* Values taken from reference logs :
+        * size 6 bytes
+        * 3 LSBs unsued
+        * Bit string stored ff0000000000
+        */
+       numBytes = 6;
+   bitsUnused = 3;
+   controlRSet->frequencyDomainResources.size = numBytes * sizeof(uint8_t);
+
+   controlRSet->frequencyDomainResources.buf = NULLP;
+       DU_ALLOC(controlRSet->frequencyDomainResources.buf, \
+          controlRSet->frequencyDomainResources.size);
+       if(!controlRSet->frequencyDomainResources.buf)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+               return RFAILED;
+   }
+   byteIdx = 0;
+       controlRSet->frequencyDomainResources.buf[byteIdx] = 255; /* setting 8 MSBs i.e. ff */
+   for(byteIdx = 1; byteIdx < numBytes; byteIdx++)
+       {
+          controlRSet->frequencyDomainResources.buf[byteIdx] = 0;
+       }
+       controlRSet->frequencyDomainResources.bits_unused = bitsUnused;
+
+   controlRSet->duration = PDCCH_CTRL_RSRC_SET_ONE_DURATION;
+   controlRSet->cce_REG_MappingType.present = \
+      ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved;
+
+   controlRSet->precoderGranularity = PDCCH_CTRL_RSRC_SET_ONE_PRECOD_GRANULARITY;
+   controlRSet->tci_StatesPDCCH_ToAddList = NULLP;
+       controlRSet->tci_StatesPDCCH_ToReleaseList = NULLP;
+       controlRSet->tci_PresentInDCI = NULLP;
+#if 0
+   uint8_t tciStateIdx;
+
+   DU_ALLOC(controlRset->tci_StatesPDCCH_ToAddList, \
+      sizeof(struct ControlResourceSet__tci_StatesPDCCH_ToAddList));
+   if(!controlRset->tci_StatesPDCCH_ToAddList)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+      return RFAILED;
+   }
+
+   elementCnt = 1;
+   controlRset->tci_StatesPDCCH_ToAddList->list.count = elementCnt;
+   controlRset->tci_StatesPDCCH_ToAddList->list.size = elementCnt * sizeof(TCI_StateId_t *);
+   DU_ALLOC(controlRset->tci_StatesPDCCH_ToAddList->list.array, \
+      controlRset->tci_StatesPDCCH_ToAddList->list.size)
+   if(!controlRset->tci_StatesPDCCH_ToAddList->list.array)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+      return RFAILED;
+   }
+   
+   for(tciStateIdx = 0; tciStateIdx <elementCntl; tciStateIdx++)
+   {
+      DU_ALLOC(controlRset->tci_StatesPDCCH_ToAddList->list.array[tciStateIdx], sizeof(TCI_StateId_t));
+      if(!controlRset->tci_StatesPDCCH_ToAddList->list.array[tciStateIdx])
+      {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+         return RFAILED;
+      }
+   }
+
+   tciStateIdx = 0;
+   /* TODO */
+   *(controlRset->tci_StatesPDCCH_ToAddList->list.array[tciStateIdx]);
+
+   DU_ALLOC(controlRset->tci_PresentInDCI, sizeof(long));
+   if(!controlRset->tci_PresentInDCI)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+      return RFAILED;
+   }
+   /* TODO */
+   *(controlRset->tci_PresentInDCI);
+#endif
+
+   controlRSet->pdcch_DMRS_ScramblingID = NULLP;
+   DU_ALLOC(controlRSet->pdcch_DMRS_ScramblingID, sizeof(long));
+   if(!controlRSet->pdcch_DMRS_ScramblingID)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildControlRSetToAddModList");
+      return RFAILED;
+   }
+   *(controlRSet->pdcch_DMRS_ScramblingID) = SCRAMBLING_ID;
+
+   return ROK;
+} /* End BuildControlRSetToAddModList */
+
+/*******************************************************************
+ *
+ * @brief Build search space to add/modify list
+ *
+ * @details
+ *
+ *    Function : BuildSearchSpcToAddModList
+ *
+ *    Functionality: Build search space to add/modify list
+ *
+ * @params[in] 
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildSearchSpcToAddModList
+(
+struct PDCCH_Config__searchSpacesToAddModList *searchSpcList
+)
+{
+   uint8_t idx;
+       uint8_t numBytes;
+       uint8_t byteIdx;
+       uint8_t bitsUnused;
+   uint8_t elementCnt;
+   struct SearchSpace *searchSpc;
+
+   elementCnt = 1;
+   searchSpcList->list.count = elementCnt;
+   searchSpcList->list.size = elementCnt * sizeof(struct SearchSpace *);
+
+       searchSpcList->list.array = NULLP;
+   DU_ALLOC(searchSpcList->list.array, searchSpcList->list.size);
+   if(!searchSpcList->list.array)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+      return RFAILED;
+   }
+
+   for(idx = 0; idx < elementCnt; idx++)
+   {
+          searchSpcList->list.array[idx] = NULLP;
+      DU_ALLOC(searchSpcList->list.array[idx], sizeof(struct SearchSpace));
+      if(!searchSpcList->list.array[idx])
+      {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+         return RFAILED;
+      }
+   }
+
+   idx = 0;
+   searchSpc = searchSpcList->list.array[idx];
+
+   searchSpc->searchSpaceId = PDCCH_SRCH_SPC_TWO_ID;
+
+   searchSpc->controlResourceSetId = NULLP;
+   DU_ALLOC(searchSpc->controlResourceSetId, sizeof(ControlResourceSetId_t));
+   if(!searchSpc->controlResourceSetId)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+      return RFAILED;
+   }
+   *(searchSpc->controlResourceSetId) = PDCCH_CTRL_RSRC_SET_ONE_ID;
+
+   searchSpc->monitoringSlotPeriodicityAndOffset = NULLP;
+   DU_ALLOC(searchSpc->monitoringSlotPeriodicityAndOffset, \
+      sizeof(struct SearchSpace__monitoringSlotPeriodicityAndOffset));
+   if(!searchSpc->monitoringSlotPeriodicityAndOffset)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+               return RFAILED;
+       }
+   searchSpc->monitoringSlotPeriodicityAndOffset->present = \
+          SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
+  
+   searchSpc->duration = NULLP;
+   searchSpc->monitoringSymbolsWithinSlot = NULLP;
+       DU_ALLOC(searchSpc->monitoringSymbolsWithinSlot, sizeof(BIT_STRING_t));
+       if(!searchSpc->monitoringSymbolsWithinSlot)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+               return RFAILED;
+       }
+   
+       /* Values taken from reference logs :
+        * size 2 bytes
+        * 2 LSBs unsued
+        * Bit string stores 8000
+        */
+   numBytes = 2;
+       bitsUnused = 2;
+
+   searchSpc->monitoringSymbolsWithinSlot->size = numBytes * sizeof(uint8_t);
+       searchSpc->monitoringSymbolsWithinSlot->buf = NULLP;
+       DU_ALLOC(searchSpc->monitoringSymbolsWithinSlot->buf, \
+          searchSpc->monitoringSymbolsWithinSlot->size);
+       if(!searchSpc->monitoringSymbolsWithinSlot->buf)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+               return RFAILED;
+       }
+
+       byteIdx = 0;
+       searchSpc->monitoringSymbolsWithinSlot->buf[byteIdx++] = 128 /* setting MSB to 128 i.e. 0x80 */;
+       searchSpc->monitoringSymbolsWithinSlot->buf[byteIdx++] = 0;
+       searchSpc->monitoringSymbolsWithinSlot->bits_unused = bitsUnused;
+
+   searchSpc->nrofCandidates = NULLP;
+   DU_ALLOC(searchSpc->nrofCandidates, sizeof(struct SearchSpace__nrofCandidates));
+   if(!searchSpc->nrofCandidates)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+      return RFAILED;
+   }
+
+   searchSpc->nrofCandidates->aggregationLevel1 = \
+          PDCCH_SRCH_SPC_TWO_AGG_LVL1_CANDIDATE;
+   searchSpc->nrofCandidates->aggregationLevel2 = \
+          PDCCH_SRCH_SPC_TWO_AGG_LVL2_CANDIDATE;
+   searchSpc->nrofCandidates->aggregationLevel4 = \
+          PDCCH_SRCH_SPC_TWO_AGG_LVL4_CANDIDATE;
+   searchSpc->nrofCandidates->aggregationLevel8 = \
+          PDCCH_SRCH_SPC_TWO_AGG_LVL8_CANDIDATE;
+   searchSpc->nrofCandidates->aggregationLevel16 = \
+          PDCCH_SRCH_SPC_TWO_AGG_LVL16_CANDIDATE;
+
+   searchSpc->searchSpaceType = NULLP;
+   DU_ALLOC(searchSpc->searchSpaceType, sizeof(struct SearchSpace__searchSpaceType));
+   if(!searchSpc->searchSpaceType)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+      return RFAILED;
+   }
+   
+   searchSpc->searchSpaceType->present = SearchSpace__searchSpaceType_PR_ue_Specific;
+
+   searchSpc->searchSpaceType->choice.ue_Specific = NULLP;
+   DU_ALLOC(searchSpc->searchSpaceType->choice.ue_Specific, \
+      sizeof(struct SearchSpace__searchSpaceType__ue_Specific));
+   if(!searchSpc->searchSpaceType->choice.ue_Specific)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildSearchSpcToAddModList");
+      return RFAILED;
+   }  
+   searchSpc->searchSpaceType->choice.ue_Specific->dci_Formats = \
+          PDCCH_SRCH_SPC_TWO_UE_SPEC_DCI_FORMAT;
+
+   return ROK;
+}/* End BuildSearchSpcToAddModList */
+
+/*******************************************************************
+ *
+ * @brief Builds BWP DL dedicated PDCCH config
+ *
+ * @details
+ *
+ *    Function : BuildBWPDlDedPdcchCfg
+ *
+ *    Functionality: Builds BWP DL dedicated PDCCH config
+ *
+ * @params[in] struct PDCCH_Config *pdcchCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPDlDedPdcchCfg(struct PDCCH_Config *pdcchCfg)
+{
+   pdcchCfg->controlResourceSetToAddModList = NULLP;
+   DU_ALLOC(pdcchCfg->controlResourceSetToAddModList, \
+      sizeof(struct PDCCH_Config__controlResourceSetToAddModList));
+   if(!pdcchCfg->controlResourceSetToAddModList)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdcchCfg");
+      return RFAILED;
+   }
+
+       if(BuildControlRSetToAddModList(pdcchCfg->controlResourceSetToAddModList) != ROK)
+       {
+          return RFAILED;
+       }
+  
+   pdcchCfg->controlResourceSetToReleaseList = NULLP;
+
+   pdcchCfg->searchSpacesToAddModList = NULLP;
+       DU_ALLOC(pdcchCfg->searchSpacesToAddModList, \
+          sizeof(struct PDCCH_Config__searchSpacesToAddModList));
+       if(!pdcchCfg->searchSpacesToAddModList)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdcchCfg");
+               return RFAILED;
+       }
+  
+       if(BuildSearchSpcToAddModList(pdcchCfg->searchSpacesToAddModList) != ROK)
+       {
+          return RFAILED;
+       }
+   
+   pdcchCfg->searchSpacesToReleaseList = NULLP;
+       pdcchCfg->downlinkPreemption = NULLP;
+       pdcchCfg->tpc_PUSCH = NULLP;
+       pdcchCfg->tpc_PUCCH = NULLP;
+       pdcchCfg->tpc_SRS = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds DMRS DL PDSCH Mapping type A
+ *
+ * @details
+ *
+ *    Function : BuildDMRSDLPdschMapTypeA
+ *
+ *    Functionality: Builds DMRS DL PDSCH Mapping type A
+ *
+ * @params[in]
+ * struct PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA *dmrsDlCfg
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildDMRSDLPdschMapTypeA
+(
+struct PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA *dmrsDlCfg
+)
+{
+   dmrsDlCfg->present = PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA_PR_setup;
+       dmrsDlCfg->choice.setup = NULLP;
+   DU_ALLOC(dmrsDlCfg->choice.setup, sizeof(struct DMRS_DownlinkConfig));
+   if(!dmrsDlCfg->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdschCfg");
+      return RFAILED;
+   }
+        
+       dmrsDlCfg->choice.setup->dmrs_Type = NULLP;
+       dmrsDlCfg->choice.setup->dmrs_AdditionalPosition = NULLP;
+   DU_ALLOC(dmrsDlCfg->choice.setup->dmrs_AdditionalPosition, sizeof(long));
+   if(!dmrsDlCfg->choice.setup->dmrs_AdditionalPosition)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildDMRSDLPdschMapTypeA");
+      return RFAILED;
+   }
+   *(dmrsDlCfg->choice.setup->dmrs_AdditionalPosition) = DMRS_ADDITIONAL_POS;
+         
+       dmrsDlCfg->choice.setup->maxLength = NULLP;
+       dmrsDlCfg->choice.setup->scramblingID0 = NULLP;
+       dmrsDlCfg->choice.setup->scramblingID1 = NULLP;
+       dmrsDlCfg->choice.setup->phaseTrackingRS = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds TCI states to add/modify list
+ *
+ * @details
+ *
+ *    Function : BuildTCIStatesToAddModList
+ *
+ *    Functionality:Builds TCI states to add/modify list
+ *
+ * @params[in] 
+ * struct PDSCH_Config__tci_StatesToAddModList *tciStatesList
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildTCIStatesToAddModList(struct PDSCH_Config__tci_StatesToAddModList *tciStatesList)
+{
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PDSCH time domain allocation list
+ *
+ * @details
+ *
+ *    Function : BuildPdschTimeDomAllocList
+ *
+ *    Functionality: Builds PDSCH time domain allocation list
+ *
+ * @params[in] 
+ * struct PDSCH_Config__pdsch_TimeDomainAllocationList *timeDomAllocList
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPdschTimeDomAllocList
+(
+struct PDSCH_Config__pdsch_TimeDomainAllocationList *timeDomAllocList
+)
+{
+   uint8_t idx;
+   uint8_t elementCnt;
+       struct PDSCH_TimeDomainResourceAllocation *timeDomAlloc;
+
+   timeDomAllocList->present = \
+          PDSCH_Config__pdsch_TimeDomainAllocationList_PR_setup;
+
+   timeDomAllocList->choice.setup = NULLP;
+   DU_ALLOC(timeDomAllocList->choice.setup, \
+          sizeof(struct PDSCH_TimeDomainResourceAllocationList));
+   if(!timeDomAllocList->choice.setup)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+               return RFAILED;
+       }
+         
+       elementCnt = 1;
+       timeDomAllocList->choice.setup->list.count = elementCnt;
+       timeDomAllocList->choice.setup->list.size = \
+          elementCnt * sizeof(struct PDSCH_TimeDomainResourceAllocation *);
+
+       timeDomAllocList->choice.setup->list.array = NULLP;
+       DU_ALLOC(timeDomAllocList->choice.setup->list.array, \
+          timeDomAllocList->choice.setup->list.size);
+       if(!timeDomAllocList->choice.setup->list.array)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+               return RFAILED;
+       }
+
+       for(idx = 0; idx < elementCnt; idx++)
+       {
+          timeDomAllocList->choice.setup->list.array[idx] = NULLP;
+          DU_ALLOC(timeDomAllocList->choice.setup->list.array[idx], \
+                  sizeof(struct PDSCH_TimeDomainResourceAllocation));
+               if(!timeDomAllocList->choice.setup->list.array[idx])
+               {
+                  DU_LOG("\nF1AP : Memory allocation failed in BuildPdschTimeDomAllocList");
+                       return RFAILED;
+               }
+       }
+
+       idx = 0;
+       timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+
+   timeDomAlloc->k0 = NULLP;
+       timeDomAlloc->mappingType = PDSCH_MAPPING_TYPE_A;
+       timeDomAlloc->startSymbolAndLength = \
+          calcSliv(PDSCH_START_SYMBOL, PDSCH_LENGTH_SYMBOL);
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PDSCH PRB Bundling type
+ *
+ * @details
+ *
+ *    Function : BuildPdschPrbBundlingType
+ *
+ *    Functionality: Builds PDSCH PRB Bundling type
+ *
+ * @params[in] 
+ * struct PDSCH_Config__prb_BundlingType *prbBndlType
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPdschPrbBundlingType
+(
+struct PDSCH_Config__prb_BundlingType *prbBndlType
+)
+{
+   prbBndlType->present = PDSCH_Config__prb_BundlingType_PR_staticBundling;
+
+   prbBndlType->choice.staticBundling = NULLP;
+       DU_ALLOC(prbBndlType->choice.staticBundling, \
+          sizeof(struct PDSCH_Config__prb_BundlingType__staticBundling));
+       if(!prbBndlType->choice.staticBundling)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildPdschPrbBundlingType");
+               return RFAILED;
+       }
+       prbBndlType->choice.staticBundling->bundleSize = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds BWP DL dedicated PDSCH config 
+ *
+ * @details
+ *
+ *    Function : BuildBWPDlDedPdschCfg
+ *
+ *    Functionality: Builds BWP DL dedicated PDSCH config
+ *
+ * @params[in] struct PDSCH_Config *pdschCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPDlDedPdschCfg(struct PDSCH_Config *pdschCfg)
+{
+   pdschCfg->dataScramblingIdentityPDSCH = NULLP;
+
+   pdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA = NULLP;
+   DU_ALLOC(pdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA, \
+      sizeof(struct PDSCH_Config__dmrs_DownlinkForPDSCH_MappingTypeA));
+   if(!pdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdschCfg");
+      return RFAILED;
+   }
+
+   if(BuildDMRSDLPdschMapTypeA(pdschCfg->dmrs_DownlinkForPDSCH_MappingTypeA) != ROK)
+   {
+      return RFAILED;
+   }
+
+   pdschCfg->dmrs_DownlinkForPDSCH_MappingTypeB = NULLP;
+   pdschCfg->tci_StatesToAddModList = NULLP;
+   pdschCfg->tci_StatesToReleaseList = NULLP;
+       pdschCfg->vrb_ToPRB_Interleaver = NULLP;
+#if 0
+   DU_ALLOC(pdschCfg->tci_StatesToAddModList, sizeof(struct PDSCH_Config__tci_StatesToAddModList));
+   if(!pdschCfg->tci_StatesToAddModList)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdschCfg");
+      return RFAILED;
+   }
+   if(BuildTCIStatesToAddModList(pdschCfg->tci_StatesToAddModList) != ROK)
+   {
+      return RFAILED;
+   }
+#endif
+
+       pdschCfg->resourceAllocation = RES_ALLOC_TYPE;
+
+   pdschCfg->pdsch_TimeDomainAllocationList = NULLP;
+       DU_ALLOC(pdschCfg->pdsch_TimeDomainAllocationList, \
+          sizeof(struct PDSCH_Config__pdsch_TimeDomainAllocationList));
+   if(!pdschCfg->pdsch_TimeDomainAllocationList)
+       {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdschCfg");
+               return RFAILED;
+       }
+
+       if(BuildPdschTimeDomAllocList(pdschCfg->pdsch_TimeDomainAllocationList) != ROK)
+       {
+          return RFAILED;
+       }
+
+   pdschCfg->pdsch_AggregationFactor = NULLP;
+       pdschCfg->rateMatchPatternToAddModList = NULLP;
+       pdschCfg->rateMatchPatternToReleaseList = NULLP;
+       pdschCfg->rateMatchPatternGroup1 = NULLP;
+       pdschCfg->rateMatchPatternGroup2 = NULLP;
+       pdschCfg->rbg_Size = PDSCH_RBG_SIZE;
+       pdschCfg->mcs_Table = NULLP;
+
+       pdschCfg->maxNrofCodeWordsScheduledByDCI = NULLP;
+       DU_ALLOC(pdschCfg->maxNrofCodeWordsScheduledByDCI, sizeof(long));
+       if(!pdschCfg->maxNrofCodeWordsScheduledByDCI)
+       {
+          DU_LOG("\nF1AP : Memory allocation failed in BuildBWPDlDedPdschCfg");
+               return RFAILED;
+       }
+       *(pdschCfg->maxNrofCodeWordsScheduledByDCI) = PDSCH_MAX_CODEWORD_SCH_BY_DCI;
+       
+       if(BuildPdschPrbBundlingType(&pdschCfg->prb_BundlingType) != ROK)
+       {
+          return RFAILED;
+       }
+
+       pdschCfg->zp_CSI_RS_ResourceToAddModList = NULLP;
+       pdschCfg->zp_CSI_RS_ResourceToReleaseList = NULLP;
+       pdschCfg->aperiodic_ZP_CSI_RS_ResourceSetsToAddModList = NULLP;
+       pdschCfg->aperiodic_ZP_CSI_RS_ResourceSetsToReleaseList = NULLP;
+       pdschCfg->sp_ZP_CSI_RS_ResourceSetsToAddModList = NULLP;
+       pdschCfg->sp_ZP_CSI_RS_ResourceSetsToReleaseList = NULLP;
+   pdschCfg->p_ZP_CSI_RS_ResourceSet = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds intitial DL BWP
+ * @details
+ *
+ *    Function : BuildInitialDlBWP 
+ *
+ *    Functionality: Builds intitial DL BWP in spCellCfgDed
+ *
+ * @params[in] BWP_DownlinkDedicated_t *dlBwp
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildInitialDlBWP(BWP_DownlinkDedicated_t *dlBwp)
+{
+   dlBwp->pdcch_Config = NULLP;
+   DU_ALLOC(dlBwp->pdcch_Config, sizeof(struct BWP_DownlinkDedicated__pdcch_Config));
+       if(!dlBwp->pdcch_Config)
+       {
+          DU_LOG("\nF1AP : Memory Allocation failure in BuildInitialDlBWP");
+      return RFAILED;
+       }
+       dlBwp->pdcch_Config->present = BWP_DownlinkDedicated__pdcch_Config_PR_setup; 
+
+   dlBwp->pdcch_Config->choice.setup = NULLP;
+       DU_ALLOC(dlBwp->pdcch_Config->choice.setup, sizeof(struct PDCCH_Config));
+   if(!dlBwp->pdcch_Config->choice.setup)
+   {
+          DU_LOG("\nF1AP : Memory Allocation failure in BuildInitialDlBWP");
+               return RFAILED;
+       }
+   if(BuildBWPDlDedPdcchCfg(dlBwp->pdcch_Config->choice.setup) != ROK)
+       {
+          return RFAILED;
+       }
+
+   dlBwp->pdsch_Config = NULLP;
+       DU_ALLOC(dlBwp->pdsch_Config, sizeof(struct BWP_DownlinkDedicated__pdsch_Config));
+       if(!dlBwp->pdsch_Config)
+       {
+          DU_LOG("\nF1AP : Memory Allocation failure in BuildInitialDlBWP");
+               return RFAILED;
+       }
+       dlBwp->pdsch_Config->present = BWP_DownlinkDedicated__pdsch_Config_PR_setup;
+
+   dlBwp->pdsch_Config->choice.setup = NULLP;
+   DU_ALLOC(dlBwp->pdsch_Config->choice.setup, sizeof(struct PDSCH_Config));
+   if(!dlBwp->pdsch_Config->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory Allocation failure in BuildInitialDlBWP");
+               return RFAILED;
+       }
+
+   if(BuildBWPDlDedPdschCfg(dlBwp->pdsch_Config->choice.setup) != ROK)
+       {
+          return RFAILED;
+       }
+
+   dlBwp->sps_Config = NULLP;
+   dlBwp->radioLinkMonitoringConfig = NULLP; 
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds DMRS UL Pusch Mapping type A
+ *
+ * @details
+ *
+ *    Function : BuildDMRSULPuschMapTypeA
+ *
+ *    Functionality: Builds DMRS UL Pusch Mapping type A
+ *
+ * @params[in] 
+ *    struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA *dmrsUlCfg
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildDMRSULPuschMapTypeA
+(
+struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA *dmrsUlCfg
+)
+{
+   dmrsUlCfg->present = PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA_PR_setup;
+   dmrsUlCfg->choice.setup= NULLP;
+   DU_ALLOC(dmrsUlCfg->choice.setup, sizeof(DMRS_UplinkConfig_t));
+   if(!dmrsUlCfg->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildDMRSULPuschMapTypeA");
+      return RFAILED;
+   }
+         
+   dmrsUlCfg->choice.setup->dmrs_Type = NULLP;
+       dmrsUlCfg->choice.setup->dmrs_AdditionalPosition = NULLP;
+   DU_ALLOC(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition, sizeof(long));
+   if(!dmrsUlCfg->choice.setup->dmrs_AdditionalPosition)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildDMRSULPuschMapTypeA");
+      return RFAILED;
+   }
+   *(dmrsUlCfg->choice.setup->dmrs_AdditionalPosition) = DMRS_ADDITIONAL_POS; 
+
+       dmrsUlCfg->choice.setup->phaseTrackingRS = NULLP;
+       dmrsUlCfg->choice.setup->maxLength = NULLP;
+   dmrsUlCfg->choice.setup->transformPrecodingDisabled = NULLP;
+   DU_ALLOC(dmrsUlCfg->choice.setup->transformPrecodingDisabled, \
+      sizeof(struct DMRS_UplinkConfig__transformPrecodingDisabled));
+   if(!dmrsUlCfg->choice.setup->transformPrecodingDisabled)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildDMRSULPuschMapTypeA");
+      return RFAILED;
+   }
+
+   dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0 = NULLP;
+   DU_ALLOC(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0,\
+      sizeof(long));
+   if(!dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildDMRSULPuschMapTypeA");
+      return RFAILED;
+   }
+   *(dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID0) = SCRAMBLING_ID;
+
+       dmrsUlCfg->choice.setup->transformPrecodingDisabled->scramblingID1 = NULLP;
+       dmrsUlCfg->choice.setup->transformPrecodingEnabled = NULLP;
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Build PUSCH time domain allocation list
+ *
+ * @details
+ *
+ *    Function : BuildPuschTimeDomAllocList
+ *
+ *    Functionality: Build PUSCH time domain allocation list
+ *
+ * @params[in] 
+ * struct PUSCH_Config__pusch_TimeDomainAllocationList *timeDomAllocList
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPuschTimeDomAllocList
+(
+struct PUSCH_Config__pusch_TimeDomainAllocationList *timeDomAllocList
+)
+{
+   uint8_t idx;
+   uint8_t elementCnt;
+   PUSCH_TimeDomainResourceAllocation_t  *timeDomAlloc;
+
+   timeDomAllocList->present = PUSCH_Config__pusch_TimeDomainAllocationList_PR_setup;
+   timeDomAllocList->choice.setup = NULLP;
+   DU_ALLOC(timeDomAllocList->choice.setup, \
+      sizeof(struct PUSCH_TimeDomainResourceAllocationList));
+   if(!timeDomAllocList->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+      return RFAILED;
+   }
+         
+   elementCnt = 1;
+   timeDomAllocList->choice.setup->list.count = elementCnt;
+   timeDomAllocList->choice.setup->list.size = \
+      elementCnt * sizeof(PUSCH_TimeDomainResourceAllocation_t *);
+       timeDomAllocList->choice.setup->list.array = NULLP;
+   DU_ALLOC(timeDomAllocList->choice.setup->list.array, \
+      timeDomAllocList->choice.setup->list.size);
+   if(!timeDomAllocList->choice.setup->list.array)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+      return RFAILED;
+   }
+
+   for(idx = 0; idx < elementCnt; idx++)
+   {
+          timeDomAllocList->choice.setup->list.array[idx] = NULLP;
+      DU_ALLOC(timeDomAllocList->choice.setup->list.array[idx],\
+         sizeof(PUSCH_TimeDomainResourceAllocation_t));
+      if(!timeDomAllocList->choice.setup->list.array[idx])
+      {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+         return RFAILED;
+      }
+   }
+
+   idx = 0;
+   timeDomAlloc = timeDomAllocList->choice.setup->list.array[idx];
+   DU_ALLOC(timeDomAlloc->k2, sizeof(long));
+   if(!timeDomAlloc->k2)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschTimeDomAllocList");
+      return RFAILED;
+   }
+   *(timeDomAlloc->k2) = PUSCH_K2;
+   timeDomAlloc->mappingType = PUSCH_MAPPING_TYPE_A;
+   timeDomAlloc->startSymbolAndLength = calcSliv(PUSCH_START_SYMBOL, PUSCH_LENGTH_SYMBOL);
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds BWP UL dedicated PUSCH Config
+ *
+ * @details
+ *
+ *    Function : BuildBWPUlDedPuschCfg
+ *
+ *    Functionality:
+ *      Builds BWP UL dedicated PUSCH Config
+ *
+ * @params[in] : PUSCH_Config_t *puschCfg
+ *    
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildBWPUlDedPuschCfg(PUSCH_Config_t *puschCfg)
+{
+   puschCfg->dataScramblingIdentityPUSCH = NULLP;
+   DU_ALLOC(puschCfg->dataScramblingIdentityPUSCH, sizeof(long));
+   if(!puschCfg->dataScramblingIdentityPUSCH)
+   {
+      DU_LOG("\nF1AP: Memory allocation failed in BuildBWPUlDedPuschCfg");
+      return RFAILED;
+   }
+   *(puschCfg->dataScramblingIdentityPUSCH) = SCRAMBLING_ID;
+
+   puschCfg->txConfig = NULLP;
+       puschCfg->dmrs_UplinkForPUSCH_MappingTypeA = NULLP;
+   DU_ALLOC(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA, \
+      sizeof(struct PUSCH_Config__dmrs_UplinkForPUSCH_MappingTypeA));
+   if(!puschCfg->dmrs_UplinkForPUSCH_MappingTypeA)
+   {
+      DU_LOG("\nF1AP: Memory allocation failed in BuildBWPUlDedPuschCfg");
+      return RFAILED;
+   }
+
+   if(BuildDMRSULPuschMapTypeA(puschCfg->dmrs_UplinkForPUSCH_MappingTypeA) != ROK)
+   {
+      return RFAILED;
+   }
+
+   puschCfg->dmrs_UplinkForPUSCH_MappingTypeB = NULLP;
+       puschCfg->pusch_PowerControl = NULLP;
+       puschCfg->frequencyHopping = NULLP;
+       puschCfg->frequencyHoppingOffsetLists = NULLP;
+   puschCfg->resourceAllocation = RES_ALLOC_TYPE;
+
+   puschCfg->pusch_TimeDomainAllocationList = NULLP;
+   DU_ALLOC(puschCfg->pusch_TimeDomainAllocationList, \
+      sizeof(struct PUSCH_Config__pusch_TimeDomainAllocationList));
+   if(!puschCfg->pusch_TimeDomainAllocationList)
+   {
+      DU_LOG("\nF1AP: Memory allocation failed in BuildBWPUlDedPuschCfg");
+      return RFAILED;
+   }
+
+   if(BuildPuschTimeDomAllocList(puschCfg->pusch_TimeDomainAllocationList) != ROK)
+   {
+      return RFAILED;
+   }
+
+   puschCfg->pusch_AggregationFactor = NULLP;
+       puschCfg->mcs_Table = NULLP;
+       puschCfg->mcs_TableTransformPrecoder = NULLP;
+   puschCfg->transformPrecoder = NULLP;
+   DU_ALLOC(puschCfg->transformPrecoder, sizeof(long));
+   if(!puschCfg->transformPrecoder)
+   {
+      DU_LOG("\nF1AP: Memory allocation failed in BuildBWPUlDedPuschCfg");
+      return RFAILED;
+   }
+   *(puschCfg->transformPrecoder) = PUSCH_TRANSFORM_PRECODER;
+
+       puschCfg->codebookSubset = NULLP;
+       puschCfg->maxRank = NULLP;
+       puschCfg->rbg_Size = NULLP;
+       puschCfg->uci_OnPUSCH = NULLP;
+       puschCfg->tp_pi2BPSK = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds inital UL BWP
+ *
+ * @details
+ *
+ *    Function : BuildInitialUlBWP
+ *
+ *    Functionality: Builds initial UL BWP
+ *
+ * @params[in] BWP_UplinkDedicated_t *ulBwp
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildInitialUlBWP(BWP_UplinkDedicated_t *ulBwp)
+{
+   ulBwp->pucch_Config = NULLP;
+       ulBwp->pusch_Config = NULLP;
+   DU_ALLOC(ulBwp->pusch_Config, sizeof(struct BWP_UplinkDedicated__pusch_Config));
+   if(!ulBwp->pusch_Config)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+   
+   ulBwp->pusch_Config->present = BWP_UplinkDedicated__pusch_Config_PR_setup;
+   ulBwp->pusch_Config->choice.setup = NULLP;
+   DU_ALLOC(ulBwp->pusch_Config->choice.setup, sizeof(PUSCH_Config_t));
+   if(!ulBwp->pusch_Config->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildInitialUlBWP");
+      return RFAILED;
+   }
+
+   if(BuildBWPUlDedPuschCfg(ulBwp->pusch_Config->choice.setup) != ROK)
+   {
+      return RFAILED;
+   }
+
+       ulBwp->configuredGrantConfig = NULLP;
+       ulBwp->srs_Config = NULLP;
+       ulBwp->beamFailureRecoveryConfig = NULLP;
+   
+   return ROK;
+}
+
+/*******************************************************************
+*
+* @brief Builds Pusch Serving cell Config
+*
+* @details
+*
+*    Function : BuildPuschSrvCellCfg
+*
+*    Functionality: Builds Pusch Serving cell Config
+*
+* @params[in] struct UplinkConfig__pusch_ServingCellConfig *puschCfg
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildPuschSrvCellCfg(struct UplinkConfig__pusch_ServingCellConfig *puschCfg)
+{
+   puschCfg->present = UplinkConfig__pusch_ServingCellConfig_PR_setup;
+   puschCfg->choice.setup = NULLP;
+   DU_ALLOC(puschCfg->choice.setup, sizeof(struct PUSCH_ServingCellConfig));
+   if(!puschCfg->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschSrvCellCfg");
+      return RFAILED;
+   }
+
+   puschCfg->choice.setup->codeBlockGroupTransmission = NULLP;
+       puschCfg->choice.setup->rateMatching = NULLP;
+       puschCfg->choice.setup->xOverhead = NULLP;
+   puschCfg->choice.setup->ext1 = NULLP;
+   DU_ALLOC(puschCfg->choice.setup->ext1, sizeof(struct PUSCH_ServingCellConfig__ext1));
+   if(!puschCfg->choice.setup->ext1)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschSrvCellCfg");
+      return RFAILED;
+   }
+
+   puschCfg->choice.setup->ext1->maxMIMO_Layers = NULLP;
+   DU_ALLOC(puschCfg->choice.setup->ext1->maxMIMO_Layers, sizeof(long));
+   if(!puschCfg->choice.setup->ext1->maxMIMO_Layers)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschSrvCellCfg");
+      return RFAILED;
+   }
+   *(puschCfg->choice.setup->ext1->maxMIMO_Layers) = PUSCH_MAX_MIMO_LAYERS;
+
+   puschCfg->choice.setup->ext1->processingType2Enabled= NULLP;
+   DU_ALLOC(puschCfg->choice.setup->ext1->processingType2Enabled,sizeof(BOOLEAN_t));
+   if(!puschCfg->choice.setup->ext1->processingType2Enabled)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPuschSrvCellCfg");
+      return RFAILED;
+   }
+   *(puschCfg->choice.setup->ext1->processingType2Enabled) = PUSCH_PROCESS_TYPE2_ENABLED;
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds UL config
+ * @details
+ *
+ *    Function : BuildUlCfg 
+ *
+ *    Functionality: Builds UL config in spCellCfgDed
+ *
+ * @params[in] UplinkConfig_t *ulCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildUlCfg(UplinkConfig_t *ulCfg)
+{
+   ulCfg->initialUplinkBWP = NULLP;
+   DU_ALLOC(ulCfg->initialUplinkBWP, sizeof(BWP_UplinkDedicated_t));
+       if(!ulCfg->initialUplinkBWP)
+       {
+          DU_LOG("\nF1AP : Memory Allocation failed in BuildUlCfg");
+               return RFAILED;
+       }
+
+   if(BuildInitialUlBWP(ulCfg->initialUplinkBWP) != ROK)
+       {
+          return RFAILED;
+       }
+
+   ulCfg->uplinkBWP_ToReleaseList = NULLP;
+       ulCfg->uplinkBWP_ToAddModList = NULLP;
+       ulCfg->firstActiveUplinkBWP_Id = NULLP;
+   DU_ALLOC(ulCfg->firstActiveUplinkBWP_Id, sizeof(BWP_Id_t));
+   if(!ulCfg->firstActiveUplinkBWP_Id)
+   {
+      DU_LOG("\nF1AP : Memory Allocation failed in BuildUlCfg");
+      return RFAILED;
+   }
+   *(ulCfg->firstActiveUplinkBWP_Id) = ACTIVE_UL_BWP_ID;
+
+   ulCfg->pusch_ServingCellConfig = NULLP;
+   DU_ALLOC(ulCfg->pusch_ServingCellConfig, \
+      sizeof(struct UplinkConfig__pusch_ServingCellConfig));
+   if(!ulCfg->pusch_ServingCellConfig)
+   {
+      DU_LOG("\nF1AP : Memory Allocation failed in BuildUlCfg");
+      return RFAILED;
+   }
+
+   if(BuildPuschSrvCellCfg(ulCfg->pusch_ServingCellConfig) != ROK)
+   {
+      return RFAILED;
+   }
+   
+       ulCfg->carrierSwitching = NULLP;
+       ulCfg->ext1 = NULLP;
+       return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds PDSCH serving cell config
+ * @details
+ *
+ *    Function : BuildPdschSrvCellCfg
+ *
+ *    Functionality: Builds PDSCH serving cell config in spCellCfgDed
+ *
+ * @params[in] struct ServingCellConfig__pdsch_ServingCellConfig *pdschCfg 
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildPdschSrvCellCfg(struct ServingCellConfig__pdsch_ServingCellConfig *pdschCfg)
+{
+   pdschCfg->present =  ServingCellConfig__pdsch_ServingCellConfig_PR_setup;
+   pdschCfg->choice.setup = NULLP;
+   DU_ALLOC(pdschCfg->choice.setup, sizeof( struct PDSCH_ServingCellConfig));
+   if(!pdschCfg->choice.setup)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPdschSrvCellCfg");
+      return RFAILED;
+   }
+
+   pdschCfg->choice.setup->codeBlockGroupTransmission = NULLP;
+       pdschCfg->choice.setup->xOverhead = NULLP;
+   pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH = NULLP;
+   DU_ALLOC(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH, sizeof(long));
+   if(!pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH)
+   {
+      DU_LOG("\nF1AP : Memory allocation failed in BuildPdschSrvCellCfg");
+      return RFAILED;
+   }
+   *(pdschCfg->choice.setup->nrofHARQ_ProcessesForPDSCH)= PDSCH_NUM_HARQ_PROC;
+       pdschCfg->choice.setup->pucch_Cell = NULLP;
+       pdschCfg->choice.setup->ext1 = NULLP;
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds CSI Meas config
+ * @details
+ *
+ *    Function : BuildCsiMeasCfg 
+ *
+ *    Functionality: Builds CSI Meas config in spCellCfgDed
+ *
+ * @params[in] struct ServingCellConfig__csi_MeasConfig *csiMeasCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildCsiMeasCfg(struct ServingCellConfig__csi_MeasConfig *csiMeasCfg)
+{
+
+   return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds Spcell config dedicated
+ * @details
+ *
+ *    Function : BuildSpCellCfgDed
+ *
+ *    Functionality: Builds sp cell config dedicated in spCellCfg
+ *
+ * @params[in] ServingCellConfig_t srvCellCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildSpCellCfgDed(ServingCellConfig_t *srvCellCfg)
+{
+   srvCellCfg->tdd_UL_DL_ConfigurationDedicated = NULLP;
+
+   srvCellCfg->initialDownlinkBWP = NULLP;
+   DU_ALLOC(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
+       if(!srvCellCfg->initialDownlinkBWP)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+
+   if(BuildInitialDlBWP(srvCellCfg->initialDownlinkBWP) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildInitialDlBWP failed");
+               return RFAILED;
+       }
+
+   srvCellCfg->downlinkBWP_ToReleaseList = NULLP;
+       srvCellCfg->downlinkBWP_ToAddModList = NULLP;
+
+   srvCellCfg->firstActiveDownlinkBWP_Id = NULLP;
+       DU_ALLOC(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
+       if(!srvCellCfg->firstActiveDownlinkBWP_Id)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+       *(srvCellCfg->firstActiveDownlinkBWP_Id) = ACTIVE_DL_BWP_ID;
+
+       srvCellCfg->bwp_InactivityTimer = NULLP;
+
+   srvCellCfg->defaultDownlinkBWP_Id = NULLP;
+       DU_ALLOC(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
+       if(!srvCellCfg->defaultDownlinkBWP_Id)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+       *(srvCellCfg->defaultDownlinkBWP_Id) = ACTIVE_DL_BWP_ID;
+
+   srvCellCfg->uplinkConfig = NULLP;
+   DU_ALLOC(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));
+       if(!srvCellCfg->uplinkConfig)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+
+   if(BuildUlCfg(srvCellCfg->uplinkConfig) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildUlCfg failed");
+               return RFAILED;
+       }
+
+       srvCellCfg->supplementaryUplink = NULLP;
+       srvCellCfg->pdcch_ServingCellConfig = NULLP;
+
+   srvCellCfg->pdsch_ServingCellConfig = NULLP;
+       DU_ALLOC(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct     ServingCellConfig__pdsch_ServingCellConfig));
+       if(!srvCellCfg->pdsch_ServingCellConfig)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+
+   if(BuildPdschSrvCellCfg(srvCellCfg->pdsch_ServingCellConfig) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildPdschSrvCellCfg failed");
+               return RFAILED;
+       }
+
+   srvCellCfg->csi_MeasConfig = NULLP;
+#if 0
+       DU_ALLOC(srvCellCfg->csi_MeasConfig, sizeof(struct      ServingCellConfig__csi_MeasConfig))
+       if(!srvCellCfg->csi_MeasConfig)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfgDed");
+               return RFAILED;
+       }
+
+   if(BuildCsiMeasCfg(srvCellCfg->csi_MeasConfig) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildCsiMeasCfg failed");
+               return RFAILED;
+       }
+#endif
+   srvCellCfg->sCellDeactivationTimer = NULLP;
+       srvCellCfg->crossCarrierSchedulingConfig = NULLP;
+       srvCellCfg->tag_Id = TAG_ID;
+   srvCellCfg->dummy = NULLP;
+   srvCellCfg->pathlossReferenceLinking = NULLP;
+   srvCellCfg->servingCellMO = NULLP;
+   srvCellCfg->ext1 = NULLP;
+
+       return ROK;
+}
+/*******************************************************************
+ *
+ * @brief Builds Spcell config 
+ *
+ * @details
+ *
+ *    Function : BuildSpCellCfg 
+ *
+ *    Functionality: Builds sp cell config in DuToCuRrcContainer
+ *
+ * @params[in] SpCellConfig_t spCellCfg
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildSpCellCfg(SpCellConfig_t *spCellCfg)
+{
+
+   spCellCfg->servCellIndex = NULLP;
+       DU_ALLOC(spCellCfg->servCellIndex, sizeof(long));
+       if(!spCellCfg->servCellIndex)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfg");
+               return RFAILED;
+       }
+   *(spCellCfg->servCellIndex) = SERV_CELL_IDX;
+
+   spCellCfg->reconfigurationWithSync = NULLP;
+       spCellCfg->rlf_TimersAndConstants = NULLP;
+   spCellCfg->rlmInSyncOutOfSyncThreshold = NULLP;
+       DU_ALLOC(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
+       if(!spCellCfg->rlmInSyncOutOfSyncThreshold)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfg");
+               return RFAILED;
+       }
+   *(spCellCfg->rlmInSyncOutOfSyncThreshold) = RLM_SYNC_OUT_SYNC_THRESHOLD;
+
+   spCellCfg->spCellConfigDedicated = NULLP;
+   DU_ALLOC(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
+       if(!spCellCfg->spCellConfigDedicated)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildSpCellCfg");
+               return RFAILED;
+       }
+   if(BuildSpCellCfgDed(spCellCfg->spCellConfigDedicated) != ROK)
+       {
+               DU_LOG("\nF1AP : BuildSpCellCfgDed failed");
+               return RFAILED;
+       }
+       return ROK;
+}
+/*******************************************************************
+*
+* @brief Builds Phy cell group config 
+*
+* @details
+*
+*    Function : BuildPhyCellGrpCfg 
+*
+*    Functionality: Builds Phy cell group config in DuToCuRrcContainer
+*
+* @params[in] PhysicalCellGroupConfig_t *phyCellGrpCfg 
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildPhyCellGrpCfg(PhysicalCellGroupConfig_t *phyCellGrpCfg)
+{
+   phyCellGrpCfg->harq_ACK_SpatialBundlingPUCCH = NULLP;
+       phyCellGrpCfg->harq_ACK_SpatialBundlingPUSCH = NULLP;
+
+   phyCellGrpCfg->p_NR_FR1 = NULLP;
+       DU_ALLOC(phyCellGrpCfg->p_NR_FR1, sizeof(long));
+       if(!phyCellGrpCfg->p_NR_FR1)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildPhyCellGrpCfg");
+               return RFAILED;
+       }
+   *(phyCellGrpCfg->p_NR_FR1)             = P_NR_FR1;
+       phyCellGrpCfg->pdsch_HARQ_ACK_Codebook = PDSCH_HARQ_ACK_CODEBOOK;
+       phyCellGrpCfg->tpc_SRS_RNTI = NULLP;
+       phyCellGrpCfg->tpc_PUCCH_RNTI = NULLP;
+       phyCellGrpCfg->tpc_PUSCH_RNTI = NULLP;
+       phyCellGrpCfg->sp_CSI_RNTI = NULLP;
+       phyCellGrpCfg->cs_RNTI = NULLP;
+       phyCellGrpCfg->ext1 = NULLP;
+       phyCellGrpCfg->ext2 = NULLP;
+
+       return ROK;
+}
+/*******************************************************************
+*
+* @brief Builds Mac cell group config 
+*
+* @details
+*
+*    Function : BuildMacCellGrpCfg 
+*
+*    Functionality: Builds Mac cell group config in DuToCuRrcContainer
+*
+* @params[in] MAC_CellGroupConfig_t *macCellGrpCfg
+*
+* @return ROK     - success
+*         RFAILED - failure
+*
+* ****************************************************************/
+uint8_t BuildMacCellGrpCfg(MAC_CellGroupConfig_t *macCellGrpCfg)
+{
+   macCellGrpCfg->drx_Config = NULLP;
+   macCellGrpCfg->schedulingRequestConfig = NULLP;
+       DU_ALLOC(macCellGrpCfg->schedulingRequestConfig, sizeof(struct SchedulingRequestConfig));
+       if(!macCellGrpCfg->schedulingRequestConfig)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacCellGrpCfg");
+               return RFAILED;
+       }
+
+       if(BuildSchedulingReqConfig(macCellGrpCfg->schedulingRequestConfig) != ROK)
+       {
+          DU_LOG("\nF1AP : BuildSchedulingReqConfig failed");
+               return RFAILED;
+       }
+
+   macCellGrpCfg->bsr_Config = NULLP;
+   DU_ALLOC(macCellGrpCfg->bsr_Config, sizeof(struct BSR_Config));
+       if(!macCellGrpCfg->bsr_Config)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacCellGrpCfg");
+               return RFAILED;
+       }
+
+   if(BuildBsrConfig(macCellGrpCfg->bsr_Config) != ROK)
+       {
+      DU_LOG("\nF1AP : BuildBsrConfig failed");
+          return RFAILED;
+       }
+
+   macCellGrpCfg->tag_Config = NULLP;
+   DU_ALLOC(macCellGrpCfg->tag_Config, sizeof(struct TAG_Config));
+       if(!macCellGrpCfg->tag_Config)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacCellGrpCfg");
+               return RFAILED;
+       }
+
+   if(BuildTagConfig(macCellGrpCfg->tag_Config) != ROK)
+       {
+          DU_LOG("\nF1AP : BuildTagConfig failed");
+          return RFAILED;
+   }
+
+   macCellGrpCfg->phr_Config = NULLP;
+   DU_ALLOC(macCellGrpCfg->phr_Config, sizeof(struct MAC_CellGroupConfig__phr_Config));
+       if(!macCellGrpCfg->phr_Config)
+       {
+               DU_LOG("\nF1AP : Memory allocation failure in BuildMacCellGrpCfg");
+               return RFAILED;
+       }
+
+   if(BuildPhrConfig(macCellGrpCfg->phr_Config) != ROK)
+       {
+          DU_LOG("\nF1AP : BuildPhrConfig failed");
+          return RFAILED;
+   }
+
+   macCellGrpCfg->skipUplinkTxDynamic = false;
+       macCellGrpCfg->ext1 = NULLP;
+
+       return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Frees emmory allocated for DUToCURRCContainer 
+ *
+ * @details
+ *
+ *    Function : FreeMemDuToCuRrcCont
+ *
+ *    Functionality: Builds DuToCuRrcContainer
+ *
+ * @params[in] DuToCuRRCContainer, DuToCuRRCContainer
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+* ****************************************************************/
+uint8_t FreeMemDuToCuRrcCont(CellGroupConfigRrc_t *cellGrpCfg)
+{
+   uint8_t idx;
+       struct CellGroupConfigRrc__rlc_BearerToAddModList *rlcBearerList;
+       struct RLC_Config *rlcConfig;
+       struct LogicalChannelConfig *macLcConfig;
+       MAC_CellGroupConfig_t *macCellGrpCfg;
+       struct SchedulingRequestConfig *schedulingRequestConfig;
+       struct SchedulingRequestConfig__schedulingRequestToAddModList *schReqList;
+       struct TAG_Config *tagConfig;
+       struct TAG_Config__tag_ToAddModList *tagList;
+       struct MAC_CellGroupConfig__phr_Config *phrConfig;
+       PhysicalCellGroupConfig_t *phyCellGrpCfg;
+       SpCellConfig_t *spCellCfg;
+       ServingCellConfig_t *srvCellCfg;
+
+       rlcBearerList = cellGrpCfg->rlc_BearerToAddModList;
+       if(rlcBearerList)
+       {
+               if(rlcBearerList->list.array)
+               {
+                       for(idx=0; idx<rlcBearerList->list.count; 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));
+       }
+
+       macCellGrpCfg = cellGrpCfg->mac_CellGroupConfig;
+       if(macCellGrpCfg)
+       {
+               schedulingRequestConfig = macCellGrpCfg->schedulingRequestConfig; 
+               schReqList = schedulingRequestConfig->schedulingRequestToAddModList;
+
+      if(schedulingRequestConfig)
+               {
+                  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));
+               }
+
+               tagConfig = macCellGrpCfg->tag_Config;
+               tagList = tagConfig->tag_ToAddModList;
+               if(tagConfig)
+               {
+                  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(macCellGrpCfg, sizeof(MAC_CellGroupConfig_t));
+       }
+
+       phyCellGrpCfg = cellGrpCfg->physicalCellGroupConfig;
+       if(phyCellGrpCfg)
+       {
+               DU_FREE(phyCellGrpCfg->p_NR_FR1, sizeof(long));
+               DU_FREE(phyCellGrpCfg, sizeof(PhysicalCellGroupConfig_t));
+       }
+
+       spCellCfg = cellGrpCfg->spCellConfig;
+       if(spCellCfg)
+       {
+               DU_FREE(spCellCfg->servCellIndex, sizeof(long));
+      DU_FREE(spCellCfg->rlmInSyncOutOfSyncThreshold, sizeof(long));
+
+               srvCellCfg = spCellCfg->spCellConfigDedicated;
+      if(srvCellCfg)
+               {
+                  DU_FREE(srvCellCfg->initialDownlinkBWP, sizeof(BWP_DownlinkDedicated_t));
+                  DU_FREE(srvCellCfg->firstActiveDownlinkBWP_Id, sizeof(long));
+                  DU_FREE(srvCellCfg->defaultDownlinkBWP_Id, sizeof(long));
+                  DU_FREE(srvCellCfg->uplinkConfig, sizeof(UplinkConfig_t));
+                  DU_FREE(srvCellCfg->pdsch_ServingCellConfig, sizeof(struct   ServingCellConfig__pdsch_ServingCellConfig));
+                  DU_FREE(srvCellCfg->csi_MeasConfig, sizeof(struct ServingCellConfig__csi_MeasConfig));
+                  DU_FREE(spCellCfg->spCellConfigDedicated, sizeof(ServingCellConfig_t));
+               }
+               DU_FREE(spCellCfg, sizeof(SpCellConfig_t));
+       }
+       return ROK;
+}
+/*******************************************************************
+ *
+ * @brief Builds DU To CU RRC Container 
+ *
+ * @details
+ *
+ *    Function : BuildDuToCuRrcContainer 
+ *
+ *    Functionality: Builds DuToCuRrcContainer
+ *
+ * @params[in] idx, index in F1AP msg
+ *             DuToCuRRCContainer, DuToCuRRCContainer
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildDuToCuRrcContainer(DUtoCURRCContainer_t *duToCuRrcContainer)
+{
+       CellGroupConfigRrc_t  cellGrpCfg;
+       asn_enc_rval_t        encRetVal;
+       uint8_t               ret = RFAILED;
+
+       while(1)
+       {
+               cellGrpCfg.cellGroupId = CELL_GRP_ID;
+
+               cellGrpCfg.rlc_BearerToAddModList = NULLP;
+               DU_ALLOC(cellGrpCfg.rlc_BearerToAddModList, sizeof(struct CellGroupConfigRrc__rlc_BearerToAddModList));
+               if(!cellGrpCfg.rlc_BearerToAddModList)
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildDuToCuRrcContainer");
+                       break;
+               }
+               if(BuildRlcBearerToAddModList(cellGrpCfg.rlc_BearerToAddModList) != ROK)
+               {
+                       DU_LOG("\nF1AP : BuildRlcBearerToAddModList failed");
+                       break;
+               }
+
+      cellGrpCfg.rlc_BearerToReleaseList = NULLP;
+               cellGrpCfg.mac_CellGroupConfig = NULLP;
+               DU_ALLOC(cellGrpCfg.mac_CellGroupConfig, sizeof(MAC_CellGroupConfig_t));
+               if(!cellGrpCfg.mac_CellGroupConfig)
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildDuToCuRrcContainer");
+                       break;
+               }
+               if(BuildMacCellGrpCfg(cellGrpCfg.mac_CellGroupConfig) != ROK)
+               {
+                       DU_LOG("\nF1AP : BuildMacCellGrpCfg failed");
+                       break;
+               }
+
+
+               cellGrpCfg.physicalCellGroupConfig = NULLP;
+               DU_ALLOC(cellGrpCfg.physicalCellGroupConfig, sizeof(PhysicalCellGroupConfig_t));
+               if(!cellGrpCfg.physicalCellGroupConfig)
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildDuToCuRrcContainer");
+                       break;
+               }
+               if(BuildPhyCellGrpCfg(cellGrpCfg.physicalCellGroupConfig) != ROK)
+               {
+                       DU_LOG("\nF1AP : BuildPhyCellGrpCfg failed");
+                       break;
+               }
+
+               cellGrpCfg.spCellConfig = NULLP;
+               DU_ALLOC(cellGrpCfg.spCellConfig, sizeof(SpCellConfig_t));
+               if(!cellGrpCfg.spCellConfig)
+               {
+                       DU_LOG("\nF1AP : Memory allocation failure in BuildDuToCuRrcContainer");
+                       break;
+               }
+               if(BuildSpCellCfg(cellGrpCfg.spCellConfig) != ROK)
+               {
+                       DU_LOG("\nF1AP : BuildSpCellCfg failed");
+                       break;
+               }
+
+      cellGrpCfg.sCellToAddModList = NULLP;
+               cellGrpCfg.sCellToReleaseList = NULLP;
+               cellGrpCfg.ext1 = NULLP;
+
+               /* encode cellGrpCfg into duToCuRrcContainer */
+               xer_fprint(stdout, &asn_DEF_CellGroupConfigRrc, &cellGrpCfg);
+               cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
+               encBufSize = 0;
+               encRetVal = aper_encode(&asn_DEF_CellGroupConfigRrc, 0, &cellGrpCfg, PrepFinalEncBuf, encBuf);
+               /* Encode results */
+               if(encRetVal.encoded == ENCODE_FAIL)
+               {
+                       DU_LOG( "\n F1AP : Could not encode DuToCuRrcContainer (at %s)\n",\
+                                       encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+                       break;
+               }
+               else
+               {
+                       DU_LOG("\n F1AP : Created APER encoded buffer for DuToCuRrcContainer\n");
+                       for(int i=0; i< encBufSize; i++)
+                       {
+                               printf("%x",encBuf[i]);
+                       }
+               }
+
+          duToCuRrcContainer->size = encBufSize;
+               DU_ALLOC(duToCuRrcContainer->buf, duToCuRrcContainer->size);
+               if(!duToCuRrcContainer->buf)
+               {
+         DU_LOG("\nF1AP : Memory allocation failed in BuildDuToCuRrcContainer");
+                       break;
+               }
+               memcpy(duToCuRrcContainer->buf, encBuf, duToCuRrcContainer->size);
+               ret = ROK;
+               break;
+       }
+   FreeMemDuToCuRrcCont(&cellGrpCfg);
+       return ret;
+}
+
+/*******************************************************************
+ *
+ * @brief Builds and sends the InitialULRRCMessage 
+ *
+ * @details
+ *
+ *    Function : BuildAndSendInitialRrcMsgTransfer 
+ *
+ *    Functionality: Constructs the Initial UL RRC Message Transfer and sends
+ *                   it to the CU through SCTP.
+ *
+ * @params[in] 
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t BuildAndSendInitialRrcMsgTransfer(uint32_t gnbDuUeF1apId, uint16_t crnti,
+               uint8_t *rrcContainer)
+{
+   uint8_t   ret;
+       uint8_t   elementCnt;
+   uint8_t   ieId;
+       uint8_t   idx;
+       uint8_t   idx1;
+       F1AP_PDU_t  *f1apMsg = NULLP;
+       InitialULRRCMessageTransfer_t *initULRRCMsg=NULLP;
+   asn_enc_rval_t                encRetVal;
+       bool  checkvar=false;
+       while(1)
+       {
+            DU_LOG("\n F1AP : Building RRC Setup Request\n");
+                 DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
+                 if(f1apMsg == NULLP)
+                 {
+                     DU_LOG(" F1AP : Memory allocation for F1AP-PDU failed");
+                          break;
+                 }
+                 f1apMsg->present = F1AP_PDU_PR_initiatingMessage;
+                 DU_ALLOC(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+                 if(f1apMsg->choice.initiatingMessage == NULLP)
+                 {
+                    DU_LOG(" F1AP : Memory allocation for  F1AP-PDU failed");
+                         break;
+                 }
+                 f1apMsg->choice.initiatingMessage->procedureCode =\
+                        ProcedureCode_id_InitialULRRCMessageTransfer;
+                 f1apMsg->choice.initiatingMessage->criticality = Criticality_ignore;
+                 f1apMsg->choice.initiatingMessage->value.present = \
+                        InitiatingMessage__value_PR_InitialULRRCMessageTransfer;
+                 initULRRCMsg =\
+                        &f1apMsg->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer;
+        elementCnt = 5;
+                 initULRRCMsg->protocolIEs.list.count = elementCnt;
+                 initULRRCMsg->protocolIEs.list.size = \
+                        elementCnt * sizeof(InitialULRRCMessageTransferIEs_t *);
+                 /* Initialize the F1Setup members */
+                  DU_ALLOC(initULRRCMsg->protocolIEs.list.array,initULRRCMsg->protocolIEs.list.size);
+                  if(initULRRCMsg->protocolIEs.list.array == NULLP)
+                  {
+                     DU_LOG(" F1AP : Memory allocation for\
+                               RRCSetupRequestMessageTransferIEs failed");
+                               break;
+                  }
+                  for(idx=0; idx<elementCnt; idx++)
+             {
+                          DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx],\
+                                sizeof(InitialULRRCMessageTransferIEs_t));
+                                if(initULRRCMsg->protocolIEs.list.array[idx] == NULLP)
+                                {
+                                    break;
+                                }
+                  }
+                  idx1 = 0;
+                  /*GNB DU UE F1AP ID*/
+                  initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
+                                     ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality  = Criticality_reject;
+                  initULRRCMsg->protocolIEs.list.array[idx1]->value.present = \
+                                     InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
+                  initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.GNB_DU_UE_F1AP_ID = gnbDuUeF1apId;
+
+
+                       /*NRCGI*/
+                       idx1++;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
+                                ProtocolIE_ID_id_NRCGI;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality  =Criticality_reject;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present = \
+                       InitialULRRCMessageTransferIEs__value_PR_NRCGI;
+                  
+                       ret =\
+                       BuildNrcgi(&initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.NRCGI);
+             if(ret!=ROK)
+                       {
+                           break;
+                       }
+
+                       /*CRNTI*/
+                       idx1++;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
+                                      ProtocolIE_ID_id_C_RNTI;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\
+                                InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.C_RNTI = crnti;
+
+         /*RRCContainer*/
+                       idx1++;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
+                                      ProtocolIE_ID_id_RRCContainer;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\
+                                InitialULRRCMessageTransferIEs__value_PR_RRCContainer;
+                                                               
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size =\
+                                                     strlen((const char*)rrcContainer);
+         DU_ALLOC(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf,
+                                       initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size)
+                       if(!initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf)
+                       {
+                     DU_LOG(" F1AP : Memory allocation for RRCSetupRequestMessageTransferIEs failed");
+                               break;
+
+                       }
+         memcpy(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf, rrcContainer,
+                                       initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size);
+
+
+                       /*DUtoCURRCContainer*/
+                       idx1++;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->id  = \
+                                      ProtocolIE_ID_id_DUtoCURRCContainer;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->criticality = Criticality_reject;
+                       initULRRCMsg->protocolIEs.list.array[idx1]->value.present =\
+                                InitialULRRCMessageTransferIEs__value_PR_DUtoCURRCContainer;
+
+                       ret = BuildDuToCuRrcContainer(&initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer);
+         if(ret != ROK)
+                       {
+                          break;
+                       }
 
-                       /*DUtoCURRCContainer*/
-                       //Need to fill this too.
                        xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
+
                        /* Encode the F1SetupRequest type as APER */
-                       cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+                       cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
                        encBufSize = 0;
-                       encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg,\
-                       PrepFinalEncBuf,encBuf);
+                       encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf, encBuf);
                        /* Encode results */
                        if(encRetVal.encoded == ENCODE_FAIL)
                        {
                            DU_LOG( "\n F1AP : Could not encode Initial UL RRC Message Transfer\
-                                structure (at %s)\n",encRetVal.failed_type ? encRetVal.failed_type->name : "unknown");
+                                   structure (at %s)\n",encRetVal.failed_type ? \
+                                        encRetVal.failed_type->name : "unknown");
                                 break;
                        }
                        else
@@ -2125,6 +4385,20 @@ S16 BuildAndSendRRCSetupReq()
                                                DU_FREE(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.NRCGI.pLMN_Identity.buf,\
                                                 initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.NRCGI.pLMN_Identity.size);
                                        }
+
+                                                 idx1=3;
+                                                 if(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf)
+                                                 {
+                                                         DU_FREE(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.buf,
+                                                                         initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.RRCContainer.size)
+                                                 }
+
+                                                 idx1 = 4;
+                                                 if(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.buf)
+                                                 {
+                                                    DU_FREE(initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.buf,
+                                                         initULRRCMsg->protocolIEs.list.array[idx1]->value.choice.DUtoCURRCContainer.size);
+                                                 }
                                        for(ieId=0; ieId<elementCnt; ieId++)
                                        {
                                           DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],sizeof(InitialULRRCMessageTransferIEs_t));
@@ -2136,18 +4410,18 @@ S16 BuildAndSendRRCSetupReq()
                                              {
                                                  DU_FREE(initULRRCMsg->protocolIEs.list.array[ieId],sizeof(InitialULRRCMessageTransferIEs_t));
                                              }
-                               }
-                            DU_FREE(initULRRCMsg->protocolIEs.list.array,initULRRCMsg->protocolIEs.list.size);
+                              }
+                                        DU_FREE(initULRRCMsg->protocolIEs.list.array,initULRRCMsg->protocolIEs.list.size);
                         }
                         DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
                 }
-                DU_ALLOC(f1apMsg, sizeof(F1AP_PDU_t));
+                DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
        }
        if(checkvar==true)
           return ROK;
        else
           return RFAILED;
-}/* End of BuildAndSendRRCSetupReq*/
+}/* End of BuildAndSendInitialRrcMsgTransfer*/
 
 /*******************************************************************
  *
@@ -2165,11 +4439,11 @@ S16 BuildAndSendRRCSetupReq()
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
+uint8_t BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
 {
-       U8  cellCnt;
-       U8  idx;
-       S16 ret;
+       uint8_t  cellCnt;
+       uint8_t  idx;
+       uint8_t  ret;
        cellCnt = 1;
        spCellLst->list.count = cellCnt;
        spCellLst->list.size = cellCnt * sizeof(SCell_ToBeSetup_ItemIEs_t *);
@@ -2218,10 +4492,10 @@ S16 BuildSplCellList(SCell_ToBeSetup_List_t *spCellLst)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
+uint8_t BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
 {
-       U8 idx;
-       U8 srbCnt;
+       uint8_t idx;
+       uint8_t srbCnt;
        srbCnt = 1;
        srbSet->list.count = srbCnt;
        srbSet->list.size = srbCnt*sizeof(SRBs_ToBeSetup_ItemIEs_t *);
@@ -2263,7 +4537,7 @@ S16 BuildSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
+uint8_t BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
 {
        /* NonDynamic5QIDescriptor */
        drbQos->qoS_Characteristics.present = QoS_Characteristics_PR_non_Dynamic_5QI;
@@ -2321,11 +4595,11 @@ S16 BuildQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildSNSSAI(SNSSAI_t *snssai)
+uint8_t BuildSNSSAI(SNSSAI_t *snssai)
 {
        /*SNSSAI*/
          /*ssT*/
-       snssai->sST.size = sizeof(U8);
+       snssai->sST.size = sizeof(uint8_t);
        DU_ALLOC(snssai->sST.buf,snssai->sST.size);
        if(snssai->sST.buf == NULLP)
        {
@@ -2338,7 +4612,7 @@ S16 BuildSNSSAI(SNSSAI_t *snssai)
        {
                return RFAILED;
        }
-       snssai->sD->size = 3*sizeof(U8);
+       snssai->sD->size = 3*sizeof(uint8_t);
        DU_ALLOC(snssai->sD->buf,snssai->sD->size);
        if(snssai->sD->buf == NULLP)
        {
@@ -2366,11 +4640,11 @@ S16 BuildSNSSAI(SNSSAI_t *snssai)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
+uint8_t BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
 {
-       S16 ret;
-       U8  idx;
-       U8 flowCnt;
+       uint8_t  ret;
+       uint8_t  idx;
+       uint8_t  flowCnt;
        flowCnt = 1;
        flowMap->list.count = flowCnt;
        flowMap->list.size = flowCnt * sizeof(Flows_Mapped_To_DRB_Item_t *);
@@ -2413,10 +4687,10 @@ S16 BuildFlowsMap(Flows_Mapped_To_DRB_List_t *flowMap)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
+uint8_t BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
 {
-       U8 idx;
-       U8 ulCnt;
+       uint8_t idx;
+       uint8_t ulCnt;
        ulCnt = 1;
        ulInfo->list.count = ulCnt;
        ulInfo->list.size = ulCnt * sizeof(ULUPTNLInformation_ToBeSetup_Item_t *);
@@ -2444,7 +4718,7 @@ S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
                return RFAILED;
        }
        ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
-               transportLayerAddress.size      = 4*sizeof(U8);
+               transportLayerAddress.size      = 4*sizeof(uint8_t);
    DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
                transportLayerAddress.buf,ulInfo->list.array[idx]->\
                uLUPTNLInformation.choice.gTPTunnel->transportLayerAddress.size);
@@ -2465,7 +4739,7 @@ S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
                transportLayerAddress.bits_unused = 0;
        /*GTP TEID*/
        ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->gTP_TEID.size\
-                                       = 4 * sizeof(U8);
+                                       = 4 * sizeof(uint8_t);
        DU_ALLOC(ulInfo->list.array[idx]->uLUPTNLInformation.choice.gTPTunnel->\
                                gTP_TEID.buf,ulInfo->list.array[idx]->uLUPTNLInformation.choice.\
                                gTPTunnel->gTP_TEID.size);
@@ -2502,13 +4776,13 @@ S16 BuildULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
+uint8_t BuildDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
 {
-       S16 BuildQOSInforet;
-       S16 BuildSNSSAIret;
-       S16 BuildFlowsMapret;
-       U8       idx;
-       U8  drbCnt;
+       uint8_t BuildQOSInforet;
+       uint8_t BuildSNSSAIret;
+       uint8_t BuildFlowsMapret;
+       uint8_t idx;
+       uint8_t drbCnt;
        DRBs_ToBeSetup_Item_t *drbSetItem;
        drbCnt = 1;
        drbSet->list.count = drbCnt;
@@ -2629,7 +4903,7 @@ void FreeNrcgi(NRCGI_t *nrcgi)
 * *****************************************************************/
 void FreeSplCellList(SCell_ToBeSetup_List_t *spCellLst)
 {
-    U8  cellidx;
+    uint8_t  cellidx;
     if(spCellLst->list.array != NULLP)
         {
              for(cellidx=0; cellidx<spCellLst->list.count; cellidx++)
@@ -2664,7 +4938,7 @@ void FreeSplCellList(SCell_ToBeSetup_List_t *spCellLst)
  * ******************************************************************/
 void FreeSRBSetup(SRBs_ToBeSetup_List_t *srbSet)
 {
-    U8 srbidx;
+    uint8_t srbidx;
         if(srbSet->list.array != NULLP)
         {
             for(srbidx=0; srbidx<srbSet->list.count; srbidx++)
@@ -2728,7 +5002,7 @@ void FreeQOSInfo(QoSFlowLevelQoSParameters_t *drbQos)
  * ****************************************************************/
 void FreeULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
 {
-    U8 ulidx=0;
+    uint8_t ulidx=0;
         if(ulInfo->list.array != NULLP)
         {
             for(ulidx=0; ulidx<ulInfo->list.count; ulidx++)
@@ -2781,8 +5055,8 @@ void FreeULTnlInfo(ULUPTNLInformation_ToBeSetup_List_t *ulInfo)
 void FreeDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
 {
     DRBs_ToBeSetup_Item_t *drbSetItem;
-        U8  flowidx;
-        U8  drbidx;
+        uint8_t  flowidx;
+        uint8_t  drbidx;
     if(drbSet->list.array == NULLP)
         {
             for(drbidx=0; drbidx<drbSet->list.count; drbidx++)
@@ -2887,6 +5161,78 @@ void FreeDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
             DU_FREE(drbSet->list.array,drbSet->list.size);
         }
 }
+/*******************************************************************
+ *
+ * @brief Free the UE Setup Request
+ *
+ * @details
+ *
+ *    Function : FreeUESetReq
+ *
+ *    Functionality: Deallocate the memory of BuildUESetReq
+ *
+ * @params[in]  F1AP_PDU_t  *f1apMsg
+ *
+ * @return void
+ *
+ *
+ * ****************************************************************/
+ void FreeUESetReq(F1AP_PDU_t  *f1apMsg)
+{
+    uint8_t idx=2;
+    uint8_t ieId;
+    UEContextSetupRequest_t       *ueSetReq;
+    if(f1apMsg != NULLP)
+    {
+              if(f1apMsg->choice.initiatingMessage != NULLP)
+          {
+                            ueSetReq = &f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
+                  if(ueSetReq->protocolIEs.list.array != NULLP)
+              {
+                 if(ueSetReq->protocolIEs.list.array[idx])
+                                         {
+                                              if(Nrcgiret==ROK )
+                      {
+                                                             idx=6;
+                                                             if(ueSetReq->protocolIEs.list.array[idx])
+                                                                       {
+                                if(SplCellListret==ROK)
+                                {
+                                                                                     idx++;
+                                    if(ueSetReq->protocolIEs.list.array[idx])
+                                                                                               {
+                                                                                              if(SRBSetupret == ROK)
+                                        {
+                                           idx=8;
+                                                                                         FreeDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.DRBs_ToBeSetup_List);
+                                        }   
+                                        idx--;
+                                        FreeSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SRBs_ToBeSetup_List);
+                                                                                               }        
+                                                                  }
+                                idx--;
+                                FreeSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List);
+                                                                       }
+                      }
+                      idx=2;
+                      FreeNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
+                                               }
+                  for(ieId=0; ieId<ueSetReq->protocolIEs.list.count; ieId++)
+                  {
+                      if(ueSetReq->protocolIEs.list.array[ieId] != NULLP)
+                      {
+                           DU_FREE(ueSetReq->protocolIEs.list.array[ieId],sizeof(UEContextSetupRequestIEs_t));
+                       }
+                  }
+                   DU_FREE(ueSetReq->protocolIEs.list.array,ueSetReq->protocolIEs.list.size);
+              }
+              DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
+        }
+        DU_FREE(f1apMsg, sizeof(F1AP_PDU_t));
+     }
+ }
+
 /*******************************************************************
  *
  * @brief Builds and sends the UE Setup Request 
@@ -2904,20 +5250,17 @@ void FreeDRBSetup(DRBs_ToBeSetup_List_t *drbSet)
  *         RFAILED - failure
  *
  * ****************************************************************/
-S16 BuildAndSendUESetReq()
-{
-       S16  ret;
-       U8   elementCnt;
-       S16  BuildNrcgiret;
-       S16  BuildSplCellListret;
-       S16  BuildSRBSetupret;
-       U8   idx;
-       U8   idx1;
-       U8   ieId;
+uint8_t BuildAndSendUESetReq()
+{
+       
+       uint8_t  elementCnt;
+       uint8_t   idx;
+       uint8_t   idx1;
        F1AP_PDU_t                                              *f1apMsg = NULL;
    UEContextSetupRequest_t                     *ueSetReq;
        asn_enc_rval_t                                          encRetVal;        /* Encoder return value */
-   bool checkvar=false;
+   uint8_t ret= RFAILED;
+       uint8_t ret1;
        while(1)
        {
            DU_LOG("\n F1AP : Building UE Context Setup Request\n");
@@ -2993,8 +5336,8 @@ S16 BuildAndSendUESetReq()
            ueSetReq->protocolIEs.list.array[idx]->criticality  =       Criticality_reject;
            ueSetReq->protocolIEs.list.array[idx]->value.present = \
                                                                UEContextSetupRequestIEs__value_PR_NRCGI;
-           BuildNrcgiret = BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
-           if(BuildNrcgiret != ROK)
+           Nrcgiret = BuildNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);
+           if(Nrcgiret != ROK)
            {
                    break;
            }
@@ -3035,8 +5378,8 @@ S16 BuildAndSendUESetReq()
             ueSetReq->protocolIEs.list.array[idx]->criticality =       Criticality_ignore;
             ueSetReq->protocolIEs.list.array[idx]->value.present = \
                                                UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
-            BuildSplCellListret = BuildSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List);
-            if(BuildSplCellListret != ROK)
+            SplCellListret = BuildSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List);
+            if(SplCellListret != ROK)
             {  
                     break;
             }
@@ -3047,8 +5390,8 @@ S16 BuildAndSendUESetReq()
             ueSetReq->protocolIEs.list.array[idx]->criticality =       Criticality_reject;
             ueSetReq->protocolIEs.list.array[idx]->value.present = \
                                                UEContextSetupRequestIEs__value_PR_SRBs_ToBeSetup_List;
-            BuildSRBSetupret = BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SRBs_ToBeSetup_List);
-            if(BuildSRBSetupret != ROK)
+            SRBSetupret =      BuildSRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SRBs_ToBeSetup_List);
+            if(SRBSetupret != ROK)
             {        
                     break;
             }
@@ -3059,8 +5402,8 @@ S16 BuildAndSendUESetReq()
             ueSetReq->protocolIEs.list.array[idx]->criticality =       Criticality_reject;
             ueSetReq->protocolIEs.list.array[idx]->value.present = \
                                                UEContextSetupRequestIEs__value_PR_DRBs_ToBeSetup_List;
-            ret = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.DRBs_ToBeSetup_List);
-            if(ret != ROK)
+            ret1 = BuildDRBSetup(&ueSetReq->protocolIEs.list.array[idx]->value.choice.DRBs_ToBeSetup_List);
+            if(ret1 != ROK)
             {  
                     break;
             }
@@ -3068,7 +5411,7 @@ S16 BuildAndSendUESetReq()
             xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
 
             /* Encode the F1SetupRequest type as APER */
-            cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+            cmMemset((uint8_t *)encBuf, 0, ENC_BUF_MAX_LEN);
             encBufSize = 0;
             encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf,\
                        encBuf);
@@ -3094,56 +5437,12 @@ S16 BuildAndSendUESetReq()
                DU_LOG("\n F1AP : Sending       UE Context Setup Request Failed");
                      break;
            }
-                checkvar=true;
+                ret = ROK;
                 break;
    }
-   if(f1apMsg != NULLP)
-       {
-           if(f1apMsg->choice.initiatingMessage != NULLP)
-                {
-                     if(ueSetReq->protocolIEs.list.array != NULLP)
-                               {
-                              if(idx1==elementCnt)
-                                        {
-                                                 if(BuildNrcgiret==ROK)
-                                                 {
-                                                                if(BuildSplCellListret==ROK)
-                                                                {
-                                                                          if(BuildSRBSetupret == ROK)
-                                                                               {
-                                                                                  FreeDRBSetup(&ueSetReq->protocolIEs.list.array[idx--]->value.choice.DRBs_ToBeSetup_List); 
-                                                                               }
-                                                                               FreeSRBSetup(&ueSetReq->protocolIEs.list.array[idx--]->value.choice.SRBs_ToBeSetup_List);
-                                                                }    
-                                                                FreeSplCellList(&ueSetReq->protocolIEs.list.array[idx]->value.choice.SCell_ToBeSetup_List); 
-                                                 }
-                                                 idx=2;
-                                                 FreeNrcgi(&ueSetReq->protocolIEs.list.array[idx]->value.choice.NRCGI);   
-                                                 for(ieId=0; ieId<idx1; ieId++)
-                                                 {
-                                                     DU_FREE(ueSetReq->protocolIEs.list.array[ieId],sizeof(UEContextSetupRequestIEs_t));
-                                                 }
-                                        }
-                                        else
-                                        {
-                                            for(ieId=0; ieId<idx; ieId++)
-                                                 {
-                                                     if(ueSetReq->protocolIEs.list.array[ieId] != NULLP)
-                                                               {
-                                                         DU_FREE(ueSetReq->protocolIEs.list.array[ieId],sizeof(UEContextSetupRequestIEs_t));
-                                                               }
-                                                 }
-                                        }
-                                        DU_FREE(ueSetReq->protocolIEs.list.array,ueSetReq->protocolIEs.list.size);        
-                               }
-                     DU_FREE(f1apMsg->choice.initiatingMessage,sizeof(InitiatingMessage_t));
-                }
-           DU_FREE(f1apMsg, sizeof(F1AP_PDU_t)); 
-       }
-       if(checkvar==true)
-        return ROK;
-       else
-            return RFAILED;
+       FreeUESetReq(f1apMsg);
+
+       return ret;
 }/* End of BuildAndSendUESetReq*/
 
 /*******************************************************************
@@ -3237,7 +5536,26 @@ void F1APMsgHdlr(Buffer *mBuf)
          }/* End of switch(successfulOutcome) */
          break;
       }
-      
+               case F1AP_PDU_PR_initiatingMessage:
+               {
+                       switch(f1apMsg->choice.initiatingMessage->value.present)
+                       {
+                               case InitiatingMessage__value_PR_DLRRCMessageTransfer:
+                                       {
+                                               procDlRrcMsgTrans(f1apMsg);
+                                               break;
+                                       }
+
+                               default:
+                                       {
+                                               DU_LOG("\nF1AP : Invalid type of initiating message[%d]",
+                                                               f1apMsg->choice.initiatingMessage->value.present);
+                                               return;
+                                       }
+                       }/* End of switch(initiatingMessage) */
+                       break;
+               }
+
       default:
       {
          DU_LOG("\nF1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
@@ -3248,40 +5566,6 @@ void F1APMsgHdlr(Buffer *mBuf)
  
 } /* End of F1APMsgHdlr */
  
-/*******************************************************************
- *
- * @brief Processes GNB DU config update ack
- *
- * @details
- *
- *    Function : procGNBDUCfgUpdAck
- *
- *    Functionality: Processes GNB DU config update ack
- *
- * @params[in] F1AP_PDU_t ASN decoded F1AP message
- * @return ROK     - success
- *         RFAILED - failure
- *
- * ****************************************************************/
-
-S16 procGNBDUCfgUpdAck(F1AP_PDU_t *f1apMsg)
-{
-  
-
-   DU_LOG("\nF1AP : GNB-DU config update acknowledgment received");
-
-    
-   /* TODO :Check the deallocation */
-#if 0
-   SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(gNBDuCfgAck->protocolIEs.list.array),\
-           (Size)elementCnt * sizeof(GNBDUConfigurationUpdateAcknowledgeIEs_t *));
-   SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&(f1apMsg->choice.successfulOutcome),\
-           (Size)sizeof(SuccessfulOutcome_t));
-   SPutSBuf(DU_APP_MEM_REGION,DU_POOL,(Data *)&f1apMsg,(Size)sizeof(F1AP_PDU_t));
-#endif
-    return ROK;
-}
-
 /**********************************************************************
   End of file
  **********************************************************************/