Adding release file
[o-du/l2.git] / src / du_app / du_utils.c
index da5a29b..3d8b863 100644 (file)
 
 #define DU_INST 0
 #define DU_ID 1
-#define DU_IP_V4_ADDR "168.168.31.12"
-#define CU_IP_V4_ADDR "168.168.31.57"
+#define DU_IP_V4_ADDR "10.0.2.20"
+#define CU_IP_V4_ADDR "10.0.2.25"
 #define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
 #define DU_PORT 38472
 #define CU_PORT 38472
 #define NR_PCI 1
 #define NR_CELL_ID 1
-#define DU_NAME "Oran_OAM_DU" 
+#define DU_NAME "ORAN_OAM_DU" 
 #define CELL_DIR UL_DL
 #define CELL_TYPE SMALL
 #define DUPLEX_MODE DUP_MODE_TDD
@@ -80,9 +80,6 @@
 #define TDD_PERIODICITY TX_PRDCTY_MS_2P5
 #define RSS_MEASUREMENT_UNIT DONT_REPORT_RSSI
 
-extern DuCfgParams ducfgparam;
-
-
 /* Filling Slot configuration as :
  * Slot Sym 0 Sym 1 Sym 2 Sym 3 Sym 4 Sym 5 Sym 6 Sym 7 Sym 8 Sym 9 Sym10 Sym11 Sym12 Sym13
  *   0   DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL    DL
@@ -107,8 +104,6 @@ extern DuCfgParams ducfgparam;
  *         RFAILED - failure
  *
  * ****************************************************************/
-
-
 void fillSlotConfig()
 {
    U8 slot;
@@ -117,19 +112,19 @@ void fillSlotConfig()
    for(slot = 0; slot <= 3; slot++)
    {
       for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
-         ducfgparam.clCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
+         duCfgParam.clCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
    }
 
-   ducfgparam.clCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT;
-   ducfgparam.clCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT;
-   ducfgparam.clCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT;
-   ducfgparam.clCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT;
+   duCfgParam.clCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT;
+   duCfgParam.clCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT;
+   duCfgParam.clCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT;
+   duCfgParam.clCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT;
 
    for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
-      ducfgparam.clCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
+      duCfgParam.clCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
 
 }
-        
+
 /*******************************************************************
  *
  * @brief Reads the CL Configuration.
@@ -150,91 +145,97 @@ void fillSlotConfig()
 
 
 /* This function is used to fill up the cell configuration for CL */
-void readClCfg()
+S16 readClCfg()
 {
-   ducfgparam.clCellCfg.carrierId = CARRIER_IDX;
+   duCfgParam.clCellCfg.carrierId = CARRIER_IDX;
 
    /* Cell configuration */
-   ducfgparam.clCellCfg.cellId = NR_CELL_ID;
-   ducfgparam.clCellCfg.phyCellId = NR_PCI;
-   ducfgparam.clCellCfg.dupType = DUPLEX_MODE;
+   duCfgParam.clCellCfg.cellId = NR_CELL_ID;
+   duCfgParam.clCellCfg.phyCellId = NR_PCI;
+   duCfgParam.clCellCfg.dupType = DUPLEX_MODE;
 
    /* DL carrier configuration */
-   ducfgparam.clCellCfg.dlCarrCfg.pres = TRUE;
-   ducfgparam.clCellCfg.dlCarrCfg.bw = SUL_ARFCN;
-   ducfgparam.clCellCfg.dlCarrCfg.freq = NR_ARFCN;
-   ducfgparam.clCellCfg.dlCarrCfg.k0[0] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.k0[1] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.k0[2] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.k0[3] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.k0[4] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.gridSize[0] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.gridSize[1] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.gridSize[2] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.gridSize[3] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.gridSize[4] = 1;
-   ducfgparam.clCellCfg.dlCarrCfg.numAnt = NUM_TX_ANT;
+   duCfgParam.clCellCfg.dlCarrCfg.pres = TRUE;
+   duCfgParam.clCellCfg.dlCarrCfg.bw = SUL_ARFCN;
+   duCfgParam.clCellCfg.dlCarrCfg.freq = NR_ARFCN;
+   duCfgParam.clCellCfg.dlCarrCfg.k0[0] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.k0[1] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.k0[2] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.k0[3] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.k0[4] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.gridSize[0] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.gridSize[1] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.gridSize[2] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.gridSize[3] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.gridSize[4] = 1;
+   duCfgParam.clCellCfg.dlCarrCfg.numAnt = NUM_TX_ANT;
 
    /* UL Carrier configuration */
-   ducfgparam.clCellCfg.ulCarrCfg.pres = TRUE;
-   ducfgparam.clCellCfg.ulCarrCfg.bw = SUL_ARFCN;
-   ducfgparam.clCellCfg.ulCarrCfg.freq = NR_ARFCN;
-   ducfgparam.clCellCfg.ulCarrCfg.k0[0] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.k0[1] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.k0[2] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.k0[3] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.k0[4] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.gridSize[0] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.gridSize[1] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.gridSize[2] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.gridSize[3] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.gridSize[4] = 1;
-   ducfgparam.clCellCfg.ulCarrCfg.numAnt = NUM_RX_ANT;
-
-   ducfgparam.clCellCfg.freqShft = FREQ_SHIFT_7P5KHZ;
+   duCfgParam.clCellCfg.ulCarrCfg.pres = TRUE;
+   duCfgParam.clCellCfg.ulCarrCfg.bw = SUL_ARFCN;
+   duCfgParam.clCellCfg.ulCarrCfg.freq = NR_ARFCN;
+   duCfgParam.clCellCfg.ulCarrCfg.k0[0] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.k0[1] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.k0[2] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.k0[3] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.k0[4] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.gridSize[0] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.gridSize[1] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.gridSize[2] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.gridSize[3] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.gridSize[4] = 1;
+   duCfgParam.clCellCfg.ulCarrCfg.numAnt = NUM_RX_ANT;
+
+   duCfgParam.clCellCfg.freqShft = FREQ_SHIFT_7P5KHZ;
 
    /* SSB configuration */
-   ducfgparam.clCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR;
-   ducfgparam.clCellCfg.ssbCfg.bchPayload = BCH_PAYLOAD;
-   ducfgparam.clCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING;
-   ducfgparam.clCellCfg.ssbCfg.ssbPrbOffset = PRB_OFFSET;
-   ducfgparam.clCellCfg.ssbCfg.betaPss = BETA_PSS;
-   ducfgparam.clCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITTY;
-   ducfgparam.clCellCfg.ssbCfg.ssbSubcOffset = SSB_SUBCARRIER_OFFSET;
-   ducfgparam.clCellCfg.ssbCfg.mibPdu = 104;
-   ducfgparam.clCellCfg.ssbCfg.nSSBMask[0] = 2162721;
-   ducfgparam.clCellCfg.ssbCfg.nSSBMask[1] = 0;
-   ducfgparam.clCellCfg.ssbCfg.multCarrBand = SSB_MULT_CARRIER_BAND;
-   ducfgparam.clCellCfg.ssbCfg.multCellCarr = MULT_CELL_CARRIER;
+   duCfgParam.clCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR;
+   duCfgParam.clCellCfg.ssbCfg.bchPayload = BCH_PAYLOAD;
+   duCfgParam.clCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING;
+   duCfgParam.clCellCfg.ssbCfg.ssbPrbOffset = PRB_OFFSET;
+   duCfgParam.clCellCfg.ssbCfg.betaPss = BETA_PSS;
+   duCfgParam.clCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITTY;
+   duCfgParam.clCellCfg.ssbCfg.ssbSubcOffset = SSB_SUBCARRIER_OFFSET;
+   duCfgParam.clCellCfg.ssbCfg.mibPdu = 104;
+   duCfgParam.clCellCfg.ssbCfg.nSSBMask[0] = 2162721;
+   duCfgParam.clCellCfg.ssbCfg.nSSBMask[1] = 0;
+   duCfgParam.clCellCfg.ssbCfg.multCarrBand = SSB_MULT_CARRIER_BAND;
+   duCfgParam.clCellCfg.ssbCfg.multCellCarr = MULT_CELL_CARRIER;
 
    /* PRACH configuration */
-   ducfgparam.clCellCfg.prachCfg.pres = TRUE;
-   ducfgparam.clCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN;
-   ducfgparam.clCellCfg.prachCfg.prachSubcSpacing = PRACH_SUBCARRIER_SPACING;
-   ducfgparam.clCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG;
-   ducfgparam.clCellCfg.prachCfg.prachFdm = NUM_PRACH_FDM;
-   ducfgparam.clCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX;
-   ducfgparam.clCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ;
-   ducfgparam.clCellCfg.prachCfg.fdm[0].k1 = 1;
-   ducfgparam.clCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
-   ducfgparam.clCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ;
-   *(ducfgparam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ;
-   ducfgparam.clCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH;
-   ducfgparam.clCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND;
+   duCfgParam.clCellCfg.prachCfg.pres = TRUE;
+   duCfgParam.clCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN;
+   duCfgParam.clCellCfg.prachCfg.prachSubcSpacing = PRACH_SUBCARRIER_SPACING;
+   duCfgParam.clCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG;
+   duCfgParam.clCellCfg.prachCfg.prachFdm = NUM_PRACH_FDM;
+   duCfgParam.clCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX;
+   duCfgParam.clCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ;
+   duCfgParam.clCellCfg.prachCfg.fdm[0].k1 = 1;
+   duCfgParam.clCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
+   duCfgParam.clCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ;
+   if(SGetSBuf(DU_APP_MEM_REGION, DU_POOL, (Data **)&(duCfgParam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq), NUM_UNUSED_ROOT_SEQ * sizeof(U8)))
+   {
+      printf("\nMemory allocation failed");
+      RETVALUE(RFAILED);
+   }
+   *(duCfgParam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ;
+   duCfgParam.clCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH;
+   duCfgParam.clCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND;
 
    /* TDD configuration */
-   ducfgparam.clCellCfg.tddCfg.pres = TRUE;
-   ducfgparam.clCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
+   duCfgParam.clCellCfg.tddCfg.pres = TRUE;
+   duCfgParam.clCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
 
    fillSlotConfig();
 
    /* RSSI Measurement configuration */
-   ducfgparam.clCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
+   duCfgParam.clCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
 
    /* This should be calculated based on
-     (number of mandatory parameters) + (number of otional parameters being filled) */
-   ducfgparam.clCellCfg.numTlv = 39;
+      (number of mandatory parameters) + (number of otional parameters being filled) */
+   duCfgParam.clCellCfg.numTlv = 39;
 
+   RETVALUE(ROK);
 }
 /*******************************************************************
  *
@@ -254,134 +255,145 @@ void readClCfg()
  *
  * ****************************************************************/
 
-void readCfg()
+S16 readCfg()
 {
    U8 i,j,k;
-   
+   U32 ipv4_du, ipv4_cu;
+
+   cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
+   cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
+   //U32 ipv6_int = inet_addr(DU_IP_V6_ADDR);  
+
    /* F1 DU IP Address and Port*/
-   ducfgparam.sctpParams.duIpAddr.ipV4Pres = TRUE;
-   strcpy(ducfgparam.sctpParams.duIpAddr.ipV4Addr, (char*)DU_IP_V4_ADDR);
-   ducfgparam.sctpParams.duIpAddr.ipV6Pres = FALSE;
-   strcpy(ducfgparam.sctpParams.duIpAddr.ipV6Addr, (char*)DU_IP_V6_ADDR);
-   ducfgparam.sctpParams.duPort = DU_PORT;
-       
+   duCfgParam.sctpParams.duIpAddr.ipV4Pres = TRUE;
+   duCfgParam.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
+   duCfgParam.sctpParams.duIpAddr.ipV6Pres = FALSE;
+   //strcpy(duCfgParam.sctpParams.duIpAddr.ipV6Addr, (char*)DU_IP_V6_ADDR);
+   duCfgParam.sctpParams.duPort = DU_PORT;
+
    /* F1 CU IP Address and Port*/
-   ducfgparam.sctpParams.cuIpAddr.ipV4Pres = TRUE;
-   strcpy(ducfgparam.sctpParams.cuIpAddr.ipV4Addr, (char*)CU_IP_V4_ADDR);
-   ducfgparam.sctpParams.cuIpAddr.ipV6Pres = FALSE;
-   strcpy(ducfgparam.sctpParams.cuIpAddr.ipV6Addr, DU_IP_V6_ADDR);
-   ducfgparam.sctpParams.cuPort = CU_PORT;
-       
+   duCfgParam.sctpParams.cuIpAddr.ipV4Pres = TRUE;
+   duCfgParam.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
+   duCfgParam.sctpParams.cuIpAddr.ipV6Pres = FALSE;
+   //strcpy(duCfgParam.sctpParams.cuIpAddr.ipV6Addr, DU_IP_V6_ADDR);
+   duCfgParam.sctpParams.cuPort = CU_PORT;
+
+   duCfgParam.maxUe = 32; //TODO: Check
    /* DU Info */       
-   ducfgparam.duId = DU_ID;    
-   strcpy(ducfgparam.duName,DU_NAME);
-   
+   duCfgParam.duId = DU_ID;    
+   strcpy((char*)duCfgParam.duName,DU_NAME);
+
    for(i=0;i<MAXCELLINGNBDU;i++)
    { 
-      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;
+      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;
-      ducfgparam.srvdCellLst[i].duCellInfo.cellInfo.nrPci = NR_PCI;
-       
+      duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.cellId = NR_CELL_ID;
+      duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrPci = NR_PCI;
+
       /* List of Available PLMN */
       for(j=0;j<MAXNUMOFBPLMN;j++)
       {
-        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;
+         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<MAXNUMOFBPLMN;j++)
       {
-        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;
+         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 */
-      ducfgparam.srvdCellLst[i].duCellInfo.tac.pres = TRUE;
-      ducfgparam.srvdCellLst[i].duCellInfo.tac.tac = DU_TAC;
-      ducfgparam.srvdCellLst[i].duCellInfo.epsTac.pres = TRUE;  //to check and fill.
-      ducfgparam.srvdCellLst[i].duCellInfo.epsTac.tac =DU_TAC; //to check and fill
+      duCfgParam.srvdCellLst[i].duCellInfo.tac.pres = TRUE;
+      duCfgParam.srvdCellLst[i].duCellInfo.tac.tac = DU_TAC;
+      duCfgParam.srvdCellLst[i].duCellInfo.epsTac.pres = TRUE;  //to check and fill.
+      duCfgParam.srvdCellLst[i].duCellInfo.epsTac.tac =DU_TAC; //to check and fill
 
       /* NR Mode info */
-      ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_ARFCN;
-      ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.pres = TRUE;
-      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.nrArfcn = NR_ARFCN;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.pres = TRUE;
+      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;          
 
       for(j=0;j<MAXNRCELLBANDS;j++)
       {
-        ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
+         duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
          for(k=0;k<MAXNRCELLBANDS;k++)
-        {
-           ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].sulBand[k] = SUL_BAND;  
+         {
+            duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].sulBand[k] = SUL_BAND;         
          }
       }
 
-      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.nrScs = SCS_15;
+      duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_160;
 
       /*Measurement Config and Cell Config */ 
-      ducfgparam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG; 
+      duCfgParam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG; 
+
+      duCfgParam.srvdCellLst[i].duCellInfo.cellDir = CELL_DIR; 
+
+      duCfgParam.srvdCellLst[i].duCellInfo.cellType=CELL_TYPE;
 
-      ducfgparam.srvdCellLst[i].duCellInfo.cellDir = CELL_DIR; 
-       
-      ducfgparam.srvdCellLst[i].duCellInfo.cellType=CELL_TYPE;
-       
       /* Broadcast PLMN Identity */
       for(j=0;j<MAXBPLMNNRMINUS1;j++)
-      {
-        for(k=0;j<MAXNUMOFBPLMN;k++)
-        {
-          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;j<MAXNUMOFBPLMN;k++)
-        {
-          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.pres = TRUE;
-        ducfgparam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].tac.tac = DU_TAC;
-        ducfgparam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].nrCellId = NR_CELL_ID;
-        ducfgparam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].ranac = NR_RANAC;
+      {  
+         for(k=0;k<MAXNUMOFBPLMN;k++)
+         {
+            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<MAXNUMOFBPLMN;k++)
+         {
+            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.pres = TRUE;
+         duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].tac.tac = DU_TAC;
+         duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].nrCellId = NR_CELL_ID;
+         duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].ranac = NR_RANAC;
       }
 
-     /*gnb DU System Info */
-     //TODO: uncomment ducfgparam.srvdCellLst[i].duSysInfo.mibMsg;  //to do
-     //TODO: uncomment ducfgparam.srvdCellLst[i].duSysInfo.sib1Msg; //to do
+      /*gnb DU System Info */
+      //TODO: uncomment duCfgParam.srvdCellLst[i].duSysInfo.mibMsg;  //to do
+      //TODO: uncomment duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg; //to do
    }
 
    /* RRC Version,Extended RRC Version */
-   //TODO: uncomment ducfgparam.rrcVersion.rrcVer; //to do
-   //TODO: uncomment ducfgparam.rrcVersion.extRrcVer; //to do
+   //TODO: uncomment duCfgParam.rrcVersion.rrcVer; //to do
+   //TODO: uncomment duCfgParam.rrcVersion.extRrcVer; //to do
 
-   readClCfg();
+   if(readClCfg() != ROK)
+   {
+      printf("\nFailed while reading CL config");
+      RETVALUE(RFAILED);
+   }
 
+   RETVALUE(ROK);
 }
 
 /*******************************************************************
@@ -406,7 +418,11 @@ S16 duReadCfg()
    Pst pst;
    Buffer *mBuf;
    //Read configs into duCfgParams
-   readCfg();
+   if(readCfg() != ROK)
+   {
+      printf("\nReading configuration failed");
+      RETVALUE(RFAILED);
+   }
 
    //Fill pst structure
    cmMemset((U8 *)&(pst), 0, sizeof(Pst));
@@ -437,6 +453,6 @@ S16 duReadCfg()
 }
 
 /**********************************************************************
-         End of file
-**********************************************************************/
+  End of file
+ **********************************************************************/