JIRA ID:[ODUHIGH-301]:implement Mu 1 for SSB
[o-du/l2.git] / src / du_app / du_cfg.c
index 3e82104..c61f548 100644 (file)
 #include "BWP-DownlinkCommon.h"
 #include "BWP-UplinkCommon.h"
 
-extern DuCfgParams duCfgParam;
-extern char encBuf[ENC_BUF_MAX_LEN];
+#ifdef O1_ENABLE
+
+#include "Config.h"
+extern StartupConfig g_cfg;
+
+#endif
+
+DuCfgParams duCfgParam;
+char encBuf[ENC_BUF_MAX_LEN];
 
 
 /* Filling Slot configuration as :
@@ -61,10 +68,15 @@ extern char encBuf[ENC_BUF_MAX_LEN];
  *   0   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
  *   1   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
  *   2   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
- *   3   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    GD    GD    GD    UL
- *   4   UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL
+     3   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
+     4   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
+     5   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
+     6   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
+     7   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    F     UL
+     8   UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL
+     9   UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL    UL  
  */
-
+#ifdef NR_TDD
 /*******************************************************************
  *
  * @brief Fills the Slot configuration 
@@ -82,27 +94,35 @@ extern char encBuf[ENC_BUF_MAX_LEN];
  * ****************************************************************/
 void FillSlotConfig()
 {
-   uint8_t slot;
-   uint8_t symbol;
-
-   for(slot = 0; slot <= 3; slot++)
+   uint8_t slot = 0;
+   uint8_t symbol =0;
+   
+   memset(duCfgParam.macCellCfg.tddCfg.slotCfg, 0, sizeof(duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol]* \
+                          MAX_TDD_PERIODICITY_SLOTS*MAX_SYMB_PER_SLOT));
+   
+   //Filling the DL Slots and initializing flexi slot
+   for(slot = 0; slot <= NUM_DL_SLOTS; slot++)
    {
-      for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
+      for(symbol =0; symbol < MAX_SYMB_PER_SLOT; symbol++)
+      {
         duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
+      }
    }
-
-   duCfgParam.macCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT;
-   duCfgParam.macCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT;
-   duCfgParam.macCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT;
-   duCfgParam.macCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT;
-
-   for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
-      duCfgParam.macCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
+  
+   //Filling UL Slots
+   for(slot = NUM_DL_SLOTS+1; slot <= NUM_DL_SLOTS+NUM_UL_SLOTS; slot++)
+   {
+      for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
+        duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol] = UL_SLOT;
+   } 
+   //Updating Flexi Slot
+   slot = NUM_DL_SLOTS;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[slot][12] = FLEXI_SLOT;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[slot][13] = UL_SLOT;
 
 }
-
+#endif
 /*******************************************************************
- *
  * @brief Reads the CL Configuration.
  *
  * @details
@@ -128,18 +148,23 @@ uint8_t readMacCfg()
    /* Cell configuration */
    duCfgParam.macCellCfg.cellId = NR_CELL_ID;
    duCfgParam.macCellCfg.phyCellId = NR_PCI;
+   duCfgParam.macCellCfg.numerology = NR_NUMEROLOGY;
    duCfgParam.macCellCfg.dupType = DUPLEX_MODE;
 
    /* DL carrier configuration */
    duCfgParam.macCellCfg.dlCarrCfg.pres = TRUE;
-   duCfgParam.macCellCfg.dlCarrCfg.bw = BANDWIDTH;
+#ifdef NR_TDD
+   duCfgParam.macCellCfg.dlCarrCfg.bw = BANDWIDTH_100MHZ;
+#else
+   duCfgParam.macCellCfg.dlCarrCfg.bw = BANDWIDTH_20MHZ;
+#endif
    duCfgParam.macCellCfg.dlCarrCfg.freq = NR_DL_ARFCN;
    duCfgParam.macCellCfg.dlCarrCfg.k0[0] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.k0[1] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.k0[2] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.k0[3] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.k0[4] = 1;
-   duCfgParam.macCellCfg.dlCarrCfg.gridSize[0] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[0] = 273;
    duCfgParam.macCellCfg.dlCarrCfg.gridSize[1] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.gridSize[2] = 1;
    duCfgParam.macCellCfg.dlCarrCfg.gridSize[3] = 1;
@@ -148,7 +173,11 @@ uint8_t readMacCfg()
 
    /* UL Carrier configuration */
    duCfgParam.macCellCfg.ulCarrCfg.pres = TRUE;
-   duCfgParam.macCellCfg.ulCarrCfg.bw = BANDWIDTH;
+#ifdef NR_TDD
+   duCfgParam.macCellCfg.dlCarrCfg.bw = BANDWIDTH_100MHZ;
+#else
+   duCfgParam.macCellCfg.ulCarrCfg.bw = BANDWIDTH_20MHZ;
+#endif
    duCfgParam.macCellCfg.ulCarrCfg.freq = NR_UL_ARFCN;
    duCfgParam.macCellCfg.ulCarrCfg.k0[0] = 1;
    duCfgParam.macCellCfg.ulCarrCfg.k0[1] = 1;
@@ -167,16 +196,20 @@ uint8_t readMacCfg()
    /* SSB configuration */
    duCfgParam.macCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR;
    duCfgParam.macCellCfg.ssbCfg.bchPayloadFlag = BCH_PAYLOAD;
-   duCfgParam.macCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING;
+#ifdef NR_TDD
+   duCfgParam.macCellCfg.ssbCfg.scsCmn = SCS_30KHZ;
+#else
+   duCfgParam.macCellCfg.ssbCfg.scsCmn = SCS_15KHZ;
+#endif
    duCfgParam.macCellCfg.ssbCfg.ssbOffsetPointA = OFFSET_TO_POINT_A;
    duCfgParam.macCellCfg.ssbCfg.betaPss = BETA_PSS;
-   duCfgParam.macCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITY_20MS;
+   duCfgParam.macCellCfg.ssbCfg.ssbPeriod = SSB_PRDCTY_MS_20;
    duCfgParam.macCellCfg.ssbCfg.ssbScOffset = SSB_SUBCARRIER_OFFSET;
    duCfgParam.macCellCfg.ssbCfg.ssbMask[0] = 1; /* only one SSB is transmitted */
    duCfgParam.macCellCfg.ssbCfg.ssbMask[1] = 0;
    if(BuildMibPdu() != ROK)
    {
-      DU_LOG("\nFailed to build MIB PDU");
+      DU_LOG("\nERROR  -->  Failed to build MIB PDU");
       memset(&duCfgParam.macCellCfg.ssbCfg.mibPdu, 0, 3*sizeof(uint8_t));
    }
    else
@@ -200,7 +233,7 @@ uint8_t readMacCfg()
    duCfgParam.macCellCfg.prachCfg.rootSeqLen    = ROOT_SEQ_LEN;
    duCfgParam.macCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX;
    duCfgParam.macCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ;
-   duCfgParam.macCellCfg.prachCfg.fdm[0].k1 = 1;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].k1 = 0;
    duCfgParam.macCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
    duCfgParam.macCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ;
    if(duCfgParam.macCellCfg.prachCfg.fdm[0].numUnusedRootSeq != 0)
@@ -209,7 +242,7 @@ uint8_t readMacCfg()
        NUM_UNUSED_ROOT_SEQ * sizeof(uint8_t));
         if(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq == NULLP)
        {
-           DU_LOG("\nDU_APP : Memory allocation failed");
+           DU_LOG("\nERROR  -->  DU_APP : Memory allocation failed at readMacCfg");
            return RFAILED;
        }
        *(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ;
@@ -220,12 +253,14 @@ uint8_t readMacCfg()
    duCfgParam.macCellCfg.prachCfg.rsrpThreshSsb = RSRP_THRESHOLD_SSB;
    duCfgParam.macCellCfg.prachCfg.raRspWindow = RA_RSP_WINDOW;
    duCfgParam.macCellCfg.prachCfg.prachRestrictedSet = PRACH_RESTRICTED_SET;
+#ifdef NR_TDD   
    /* TDD configuration */
    duCfgParam.macCellCfg.tddCfg.pres = TRUE;
    duCfgParam.macCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
 
    FillSlotConfig();
 
+#endif
    /* RSSI Measurement configuration */
    duCfgParam.macCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
 
@@ -243,8 +278,12 @@ uint8_t readMacCfg()
 
    /* fill Intial DL BWP */
    duCfgParam.macCellCfg.initialDlBwp.bwp.firstPrb = 0;
-   duCfgParam.macCellCfg.initialDlBwp.bwp.numPrb = TOTAL_PRB_BW; /* configured to total BW */
-   duCfgParam.macCellCfg.initialDlBwp.bwp.scs = SUBCARRIER_SPACING; /* numerology is 0, 15Khz */
+   duCfgParam.macCellCfg.initialDlBwp.bwp.numPrb = TOTAL_PRB_20MHZ_MU0; /* configured to total BW */
+#ifdef NR_TDD
+   duCfgParam.macCellCfg.initialDlBwp.bwp.scs = SCS_30KHZ; /* numerology is 1, 30Khz */
+#else
+   duCfgParam.macCellCfg.initialDlBwp.bwp.scs = SCS_15KHZ; /* numerology is 0, 15Khz */
+#endif
    duCfgParam.macCellCfg.initialDlBwp.bwp.cyclicPrefix = NORMAL_CYCLIC_PREFIX;
    duCfgParam.macCellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId = SEARCHSPACE_1_INDEX;
    duCfgParam.macCellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.coresetId = CORESET_0_INDEX;
@@ -275,8 +314,12 @@ uint8_t readMacCfg()
 
    /* fill Intial UL BWP */
    duCfgParam.macCellCfg.initialUlBwp.bwp.firstPrb = 0;
-   duCfgParam.macCellCfg.initialUlBwp.bwp.numPrb = TOTAL_PRB_BW; /* configured to total BW */
-   duCfgParam.macCellCfg.initialUlBwp.bwp.scs = SUBCARRIER_SPACING; /* numerology is 0, 15Khz */
+   duCfgParam.macCellCfg.initialUlBwp.bwp.numPrb = TOTAL_PRB_20MHZ_MU0; /* configured to total BW */
+#ifdef NR_TDD
+   duCfgParam.macCellCfg.initialUlBwp.bwp.scs = SCS_30KHZ; /* numerology is 1, 30Khz */
+#else
+   duCfgParam.macCellCfg.initialUlBwp.bwp.scs = SCS_15KHZ; /* numerology is 0, 15Khz */
+#endif
    duCfgParam.macCellCfg.initialUlBwp.bwp.cyclicPrefix = NORMAL_CYCLIC_PREFIX;
    duCfgParam.macCellCfg.initialUlBwp.puschCommon.k2 = PUSCH_K2;
    duCfgParam.macCellCfg.initialUlBwp.puschCommon.mappingType = 
@@ -291,10 +334,6 @@ uint8_t readMacCfg()
    duCfgParam.macCellCfg.initialUlBwp.pucchCommon.pucchResourceCommon = PUCCH_RSRC_COMMON;
    duCfgParam.macCellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_GROUP_HOPPING;
 
-   /* This should be calculated based on
-      (number of mandatory parameters) + (number of otional parameters being filled) */
-   duCfgParam.macCellCfg.numTlv = 40;
-
    return ROK;
 }
 
@@ -316,9 +355,14 @@ uint8_t readMacCfg()
  * ****************************************************************/
 uint8_t fillDuPort(uint16_t *duPort)
 {
+
+#ifdef O1_ENABLE
+   duPort[F1_INTERFACE]   = g_cfg.DU_Port;
+   duPort[E2_INTERFACE]   = g_cfg.RIC_Port;
+#else
    duPort[F1_INTERFACE]   = DU_PORT;     /* DU Port idx  0 38472 */
    duPort[E2_INTERFACE]   = RIC_PORT;    /* RIC Port idx 1 38482 */
-
+#endif
    return ROK;
 }
 
@@ -381,17 +425,22 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
    TddUlDlCfgCommon   tddCfg;
 
    /* Configuring DL Config Common for SIB1*/
-   srvCellCfgComm->dlCfg.freqBandInd = NR_FREQ_BAND_IND
+   srvCellCfgComm->dlCfg.freqBandInd = NR_FREQ_BAND; 
    srvCellCfgComm->dlCfg.offsetToPointA = OFFSET_TO_POINT_A;
    srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET;
-   srvCellCfgComm->dlCfg.dlScsCarrier.scs = SUBCARRIER_SPACING;
-   srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = SCS_CARRIER_BANDWIDTH;
+#ifdef NR_TDD
+   srvCellCfgComm->dlCfg.dlScsCarrier.scs = SCS_30KHZ;
+   srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = BANDWIDTH_100MHZ;
+#else
+   srvCellCfgComm->dlCfg.dlScsCarrier.scs = SCS_15KHZ;
+   srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = BANDWIDTH_20MHZ;
+#endif
    srvCellCfgComm->dlCfg.locAndBw = FREQ_LOC_BW;
 
    /* Configuring PDCCH Config Common For SIB1 */
    pdcchCfg.present = BWP_DownlinkCommon__pdcch_ConfigCommon_PR_setup;
-   pdcchCfg.ctrlRsrcSetZero = PDCCH_CTRL_RSRC_SET_ZERO;
-   pdcchCfg.searchSpcZero = PDCCH_SEARCH_SPACE_ZERO;
+   pdcchCfg.ctrlRsrcSetZero = CORESET_0_INDEX;
+   pdcchCfg.searchSpcZero = SEARCHSPACE_0_INDEX;
    pdcchCfg.searchSpcId = PDCCH_SEARCH_SPACE_ID;
    pdcchCfg.ctrlRsrcSetId = PDCCH_CTRL_RSRC_SET_ID;
    pdcchCfg.monitorSlotPrdAndOffPresent = \
@@ -425,7 +474,7 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
       BCCH_Config__modificationPeriodCoeff_n16;
 
    /* Configuring PCCH Config for SIB1 */
-   pcchCfg.dfltPagingCycle = PagingCycle_rf64;
+   pcchCfg.dfltPagingCycle = PagingCycle_rf256;
    pcchCfg.nAndPagingFrmOffPresent = PCCH_Config__nAndPagingFrameOffset_PR_oneT;
    pcchCfg.numPagingOcc = PCCH_Config__ns_four;
    srvCellCfgComm->dlCfg.pcchCfg = pcchCfg;
@@ -433,8 +482,13 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
 
    /* Configuring UL Config Common */
    srvCellCfgComm->ulCfg.ulScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET;
-   srvCellCfgComm->ulCfg.ulScsCarrier.scs = SUBCARRIER_SPACING;
-   srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = SCS_CARRIER_BANDWIDTH;
+#ifdef NR_TDD
+   srvCellCfgComm->ulCfg.ulScsCarrier.scs = SCS_30KHZ;
+   srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = BANDWIDTH_100MHZ;
+#else
+   srvCellCfgComm->ulCfg.ulScsCarrier.scs = SCS_15KHZ;
+   srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = BANDWIDTH_20MHZ;
+#endif
    srvCellCfgComm->ulCfg.pMax = UL_P_MAX;
    srvCellCfgComm->ulCfg.locAndBw = FREQ_LOC_BW;
    srvCellCfgComm->ulCfg.timeAlignTimerComm = TimeAlignmentTimer_infinity;
@@ -479,7 +533,7 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
 
    /* Configuring TDD UL DL config common */
    tddCfg.refScs = SubcarrierSpacing_kHz30;
-   tddCfg.txPrd = TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms2p5;
+   tddCfg.txPrd = TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5;
    tddCfg.numDlSlots = NUM_DL_SLOTS;
    tddCfg.numDlSymbols = NUM_DL_SYMBOLS;
    tddCfg.numUlSlots = NUM_UL_SLOTS;
@@ -518,9 +572,26 @@ uint8_t readCfg()
    MibParams mib;
    Sib1Params sib1;    
 
+#ifdef O1_ENABLE
+   if( getStartupConfig(&g_cfg) != ROK )
+   {
+      RETVALUE(RFAILED);
+   }
+   cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du);
+   cmInetAddr((S8*)g_cfg.CU_IPV4_Addr, &ipv4_cu);
+   cmInetAddr((S8*)g_cfg.RIC_IPV4_Addr, &ipv4_ric);
+
+   duCfgParam.sctpParams.cuPort = g_cfg.CU_Port;
+   duCfgParam.sctpParams.ricPort = g_cfg.RIC_Port;
+#else   
    cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
    cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
    cmInetAddr((S8*)RIC_IP_V4_ADDR, &ipv4_ric);
+
+   duCfgParam.sctpParams.cuPort = CU_PORT;
+   duCfgParam.sctpParams.ricPort = RIC_PORT;
+#endif
+
    fillDuPort(duCfgParam.sctpParams.duPort);
 
    /* F1 DU IP Address and Port*/
@@ -528,11 +599,10 @@ uint8_t readCfg()
 
    /* F1 CU IP Address and Port*/
    duCfgParam.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
-   duCfgParam.sctpParams.cuPort = CU_PORT;
 
    /* Fill RIC Params */
    duCfgParam.sctpParams.ricIpAddr.ipV4Addr = ipv4_ric;
-   duCfgParam.sctpParams.ricPort            = RIC_PORT;
+
    /* EGTP Parameters */
    duCfgParam.egtpParams.localIp.ipV4Pres = TRUE;
    duCfgParam.egtpParams.localIp.ipV4Addr = ipv4_du;
@@ -553,20 +623,20 @@ uint8_t readCfg()
    mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60;
    mib.ssb_SubcarrierOffset = SSB_SC_OFFSET; 
    mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2;
-   mib.controlResourceSetZero = CORESET_ZERO;
-   mib.searchSpaceZero = SEARCH_SPACE_ZERO;
-   mib.cellBarred = MIB__cellBarred_barred;
+   mib.controlResourceSetZero = CORESET_0_INDEX;
+   mib.searchSpaceZero = SEARCHSPACE_0_INDEX;
+   mib.cellBarred = MIB__cellBarred_notBarred;
    mib.intraFreqReselection =
       MIB__intraFreqReselection_notAllowed;
    duCfgParam.mibParams = mib;
 
    /* SIB1 Params */
+   memset(&sib1.plmn, 0, sizeof(Plmn));
    sib1.plmn.mcc[0] = PLMN_MCC0;
    sib1.plmn.mcc[1] = PLMN_MCC1;
    sib1.plmn.mcc[2] = PLMN_MCC2;
    sib1.plmn.mnc[0] = PLMN_MNC0;
    sib1.plmn.mnc[1] = PLMN_MNC1;
-   sib1.plmn.mnc[2] = PLMN_MNC2;
    sib1.tac = DU_TAC;
    sib1.ranac = DU_RANAC;
    sib1.cellIdentity = CELL_IDENTITY;
@@ -588,12 +658,12 @@ uint8_t readCfg()
 
    for(i=0; i<DEFAULT_CELLS; i++)
    { 
+      memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn, 0, sizeof(Plmn));
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[0] = PLMN_MCC0;
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[1] = PLMN_MCC1;
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[2] = PLMN_MCC2;
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[0] = PLMN_MNC0;
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[1] = PLMN_MNC1;
-      duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[2] = PLMN_MNC2;
 
       /*Cell ID */
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.cellId = NR_CELL_ID;
@@ -602,22 +672,22 @@ uint8_t readCfg()
       /* List of Available PLMN */
       for(j=0;j<MAX_PLMN;j++)
       {
+        memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j], 0, sizeof(Plmn));
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[0] = PLMN_MCC0;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[1] = PLMN_MCC1;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[2] = PLMN_MCC2;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[0] = PLMN_MNC0;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[1] = PLMN_MNC1;
-        duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[2] = PLMN_MNC2;
       }
       /* List of Extended PLMN */
       for(j=0;j<MAX_PLMN;j++)
       {
+        memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j], 0, sizeof(Plmn));
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[0] = PLMN_MCC0;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[1] = PLMN_MCC1;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[2] = PLMN_MCC2;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[0] = PLMN_MNC0;
         duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[1] = PLMN_MNC1;
-        duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[2] = PLMN_MNC2;
       } 
 
       /* TAC and EPSTAC */
@@ -626,15 +696,15 @@ uint8_t readCfg()
       /* NR Mode info */
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = NR_UL_ARFCN;
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_120;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_66;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
 
 #if 0
       /* NR Mode info */
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_ARFCN;
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;          
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_160;          
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;          
 
       for(j=0;j<MAXNRCELLBANDS;j++)
       {
@@ -655,8 +725,8 @@ uint8_t readCfg()
       }
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.nrArfcn = NR_DL_ARFCN;
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_120;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_66;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
       for(j=0;j<MAXNRCELLBANDS;j++)
       {
         duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
@@ -666,15 +736,15 @@ uint8_t readCfg()
         }
       }
 
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = SCS_120;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrb = NRB_66;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = SCS_15;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrb = NRB_106;
 
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = SCS_120;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_66;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = SCS_15;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_106;
 
 #if 0
       duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrScs = SCS_15;
-      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_160;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_106;
 #endif
       /*Measurement Config and Cell Config */ 
       duCfgParam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG; 
@@ -685,25 +755,25 @@ uint8_t readCfg()
 
       /* Broadcast PLMN Identity */
       for(j=0;j<MAXBPLMNNRMINUS1;j++)
-      {  
+      { 
         for(k=0;k<MAX_PLMN;k++)
         {
+           memset(&duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k], 0, sizeof(Plmn));
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[0] = PLMN_MCC0;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[1] = PLMN_MCC1;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[2] = PLMN_MCC2;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[0] = PLMN_MNC0;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[1] = PLMN_MNC1;                                         
-           duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[2] = PLMN_MNC2;
         }
         /* Extended PLMN List */        
         for(k=0;k<MAX_PLMN;k++)
         {
+           memset(&duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k], 0, sizeof(Plmn));
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[0] = PLMN_MCC0;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[1] = PLMN_MCC1;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[2] = PLMN_MCC2;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[0] = PLMN_MNC0;
            duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[1] = PLMN_MNC1;
-           duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[2] = PLMN_MNC2;
         }
 
         duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].tac = DU_TAC;
@@ -713,14 +783,13 @@ uint8_t readCfg()
 
       /*gnb DU System Info mib msg*/
       BuildMibMsg();
-      DU_ALLOC(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg,\
-           strlen(encBuf));
+      DU_ALLOC(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg, encBufSize);
       if(!(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg))
       {
-        DU_LOG("\nDU_APP: Memory allocation failure");
+        DU_LOG("\nERROR  -->  DU APP : Memory allocation failure at readCfg");
         return RFAILED;
       }
-      strcpy((char *)duCfgParam.srvdCellLst[i].duSysInfo.mibMsg, encBuf);
+      memcpy(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg, encBuf, encBufSize);
       duCfgParam.srvdCellLst[i].duSysInfo.mibLen = encBufSize;
 
       /*gnb DU System Info mib msg*/
@@ -729,7 +798,7 @@ uint8_t readCfg()
            encBufSize);
       if(!(duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg))
       {
-        DU_LOG("\nDU_APP: Memory allocation failure");
+        DU_LOG("\nERROR  -->  DU APP : Memory allocation failure at readCfg");
         return RFAILED;
       }
       memcpy(duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg,\
@@ -740,7 +809,7 @@ uint8_t readCfg()
 
    if(readMacCfg() != ROK)
    {
-      DU_LOG("\nDU_APP : Failed while reading MAC config");
+      DU_LOG("\nERROR  -->  DU_APP : Failed while reading MAC config");
       return RFAILED;
    }
 
@@ -773,7 +842,7 @@ uint8_t duReadCfg()
    //Read configs into duCfgParams
    if(readCfg() != ROK)
    {
-      DU_LOG("\nDU_APP : Reading configuration failed");
+      DU_LOG("\nERROR  -->  DU_APP : Reading configuration failed");
       return RFAILED;
    }
 
@@ -792,13 +861,13 @@ uint8_t duReadCfg()
 
    if(ODU_GET_MSG_BUF(DFLT_REGION, DU_POOL, &mBuf) != ROK)
    {
-      DU_LOG("\nDU_APP : Memory allocation failed in duReadCfg");
+      DU_LOG("\nERROR  -->  DU_APP : Memory allocation failed in duReadCfg");
       return RFAILED;
    }
 
    if (ODU_POST_TASK(&pst, mBuf) != ROK)
    {
-      DU_LOG("\nDU_APP : ODU_POST_TASK failed in duReadCfg");
+      DU_LOG("\nERROR  -->  DU_APP : ODU_POST_TASK failed in duReadCfg");
       return RFAILED;
    }