Merge "[Epic-ID: ODUHIGH-538][Issue-ID: ODUHIGH-564] Add configuration prints for...
authorPriyanka Borla <pborla@radisys.com>
Thu, 22 Feb 2024 14:33:54 +0000 (14:33 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Thu, 22 Feb 2024 14:33:54 +0000 (14:33 +0000)
1  2 
build/config/odu_config.xml
src/du_app/du_cfg.c

                 <F1_SLICE_SUPP_LST>
                    <NUM_SUPPORT_SLICE>2</NUM_SUPPORT_SLICE>
                    <SNSSAI_LIST>
 -                     <NUM_NSSAI>2</NUM_NSSAI>
 -                     <LIST>
                       <SNSSAI>
                          <SST>1</SST>
                          <SD_SIZE>
 -                        <SD>2</SD>
 -                        <SD>3</SD>
 -                        <SD>4</SD>
 +                           <SD>2</SD>
 +                           <SD>3</SD>
 +                           <SD>4</SD>
                          </SD_SIZE>
                       </SNSSAI>
                       <SNSSAI>
                          <SST>5</SST>
                          <SD_SIZE>
 -                        <SD>6</SD>
 -                        <SD>7</SD>
 -                        <SD>8</SD>
 +                           <SD>6</SD>
 +                           <SD>7</SD>
 +                           <SD>8</SD>
                          </SD_SIZE>
                       </SNSSAI>
 -                     </LIST>
                    </SNSSAI_LIST>
                 </F1_SLICE_SUPP_LST>
              </F1_SRVD_PLMN>
                          <F1_NRB>14</F1_NRB>
                       </F1_TX_BW>
                    </F1_SUL_INFO>
 +                   <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
                    <F1_FREQ_BAND_LIST>
 -                     <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
 -                     <LIST>
                       <F1_FREQ_BAND>
                          <NR_FREQ_BAND>1</NR_FREQ_BAND>
                          <SUL_BAND_LIST>
 -                        <LIST>
                             <SUL_BAND>2</SUL_BAND>
 -                        </LIST>
                          </SUL_BAND_LIST>
                       </F1_FREQ_BAND>
 -                     </LIST>
                    </F1_FREQ_BAND_LIST>
                 </F1_NR_FREQ_INFO_UL>
                 <F1_NR_FREQ_INFO_DL>
                          <F1_NRB>14</F1_NRB>
                       </F1_TX_BW>
                    </F1_SUL_INFO>
 +                  <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
                    <F1_FREQ_BAND_LIST>
 -                     <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
 -                     <LIST>
                       <F1_FREQ_BAND>
                          <NR_FREQ_BAND>1</NR_FREQ_BAND>
                          <SUL_BAND_LIST>
 -                        <LIST>
                             <SUL_BAND>2</SUL_BAND>
 -                        </LIST>
                          </SUL_BAND_LIST>
                       </F1_FREQ_BAND>
 -                     </LIST>
                    </F1_FREQ_BAND_LIST>
                 </F1_NR_FREQ_INFO_DL>
                 <F1_TX_BW_UL>
                          <F1_NRB>28</F1_NRB>
                       </F1_TX_BW>
                    </F1_SUL_INFO>
 +                  <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
                    <F1_FREQ_BAND_LIST>
 -                     <MAX_NRCELL_BANDS>2</MAX_NRCELL_BANDS>
 -                     <LIST>
                       <F1_FREQ_BAND>
                          <NR_FREQ_BAND>78</NR_FREQ_BAND>
                          <SUL_BAND_LIST>
 -                        <LIST>
                                <SUL_BAND>2</SUL_BAND>
 -                        </LIST>
                          </SUL_BAND_LIST>
                       </F1_FREQ_BAND>
 -                     </LIST>
                    </F1_FREQ_BAND_LIST>
                 </F1_NR_FREQ_INFO>
                 <F1_TX_BW>
                       <NAME>E2 Node Measurement</NAME>
                       <FORMAT_TYPE>1</FORMAT_TYPE>
                    </RIC_STYLE>
-                   <NUM_OF_MEASUREMENT_INFO>2</NUM_OF_MEASUREMENT_INFO>
                    <MEASUREMENT_INFO_LIST>
                       <MEASUREMENT_INFO>
                          <ID>1</ID>
diff --combined src/du_app/du_cfg.c
@@@ -102,6 -102,284 +102,6 @@@ uint16_t calcSliv(uint8_t startSymbol, 
     return sliv;
  }
  
 -/*******************************************************************
 - *
 - * @brief Configures the DU Parameters
 - *
 - * @details
 - *
 - *    Function : readCfg
 - *
 - *    Functionality:
 - *       - Initializes the DuCfg members.  
 - *       - Calls readMacCfg()  
 - *
 - * @params[in] system task ID
 - * @return ROK     - success
 - *         RFAILED - failure
 - *
 - * ****************************************************************/
 -
 -uint8_t readCfg()
 -{
 -   uint8_t srvdCellIdx, bandIdx, sliceIdx, plmnIdx;
 -   uint8_t brdcstPlmnIdx, freqBandIdx, srvdPlmnIdx;
 -   Sib1Params sib1;
 -   SupportedSliceList *taiSliceSuppLst;
 -
 -#ifndef O1_ENABLE
 -   /* Note: Added these below variable for local testing*/
 -   Snssai snssai[NUM_OF_SUPPORTED_SLICE] = {{1,{2,3,4}},{5,{6,7,8}}};
 -#endif
 -
 -   for(srvdCellIdx=0; srvdCellIdx<DEFAULT_CELLS; srvdCellIdx++)
 -   { 
 -      memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn, 0, sizeof(Plmn));
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn.mcc[0] = PLMN_MCC0;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn.mcc[1] = PLMN_MCC1;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn.mcc[2] = PLMN_MCC2;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn.mnc[0] = PLMN_MNC0;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn.mnc[1] = PLMN_MNC1;
 -
 -      /*Cell ID */
 - #ifdef O1_ENABLE
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrPci = cellParams.nRPCI;
 - #else
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrPci = NR_PCI;
 -#endif
 -      /* List of Available PLMN */
 -      for(srvdPlmnIdx=0; srvdPlmnIdx<MAX_PLMN; srvdPlmnIdx++)
 -      {
 -         /* As per spec 38.473, Plmn identity consists of 3 digit from mcc
 -          * followed by either 2 digit or 3 digits of mnc */ 
 -
 -         memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn, 0,\
 -         sizeof(Plmn));
 - #ifdef O1_ENABLE
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[0] = cellParams.plmnList[srvdPlmnIdx].mcc[0];
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[1] = cellParams.plmnList[srvdPlmnIdx].mcc[1];
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[2] = cellParams.plmnList[srvdPlmnIdx].mcc[2];
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mnc[0] = cellParams.plmnList[srvdPlmnIdx].mnc[0];
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mnc[1] = cellParams.plmnList[srvdPlmnIdx].mnc[1];
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mnc[2] = cellParams.plmnList[srvdPlmnIdx].mnc[2];
 - #else
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[0] = PLMN_MCC0;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[1] = PLMN_MCC1;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mcc[2] = PLMN_MCC2;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mnc[0] = PLMN_MNC0;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].plmn.mnc[1] = PLMN_MNC1;
 -#endif
 -      }
 -      /* List of Extended PLMN */
 -      for(srvdPlmnIdx=0; srvdPlmnIdx<MAX_PLMN; srvdPlmnIdx++)
 -      {
 -         /* As per spec 38.473, Plmn identity consists of 3 digit from mcc
 -          * followed by either 2 digit or 3 digits of mnc */ 
 -
 -         memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn, 0, sizeof(Plmn));
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn.mcc[0] = PLMN_MCC0;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn.mcc[1] = PLMN_MCC1;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn.mcc[2] = PLMN_MCC2;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn.mnc[0] = PLMN_MNC0;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].extPlmn.mnc[1] = PLMN_MNC1;
 -      } 
 -      /* List of Supporting Slices */
 -      for(srvdPlmnIdx=0; srvdPlmnIdx<MAX_PLMN; srvdPlmnIdx++)
 -      {
 -         taiSliceSuppLst = &duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.srvdPlmn[srvdPlmnIdx].\
 -         taiSliceSuppLst;
 -         
 -         /* TODO Calculte the exact number of supported slices once will get
 -          * cell configuration from O1 */
 -         taiSliceSuppLst->numSupportedSlices = NUM_OF_SUPPORTED_SLICE;
 -         if(taiSliceSuppLst->numSupportedSlices > MAX_NUM_OF_SLICE_ITEMS)
 -         {
 -            DU_LOG("\nERROR --> DU_APP: readCfg(): Number of supported slice [%d] is more than 1024",\
 -            taiSliceSuppLst->numSupportedSlices);
 -            return RFAILED;
 -         }
 -
 -         DU_ALLOC(taiSliceSuppLst->snssai, taiSliceSuppLst->numSupportedSlices*sizeof(Snssai*));
 -         if(taiSliceSuppLst->snssai == NULLP)
 -         {
 -            DU_LOG("\nERROR --> DU_APP: readCfg():Memory allocation failed");
 -            return RFAILED;
 -         }
 -         
 -         for(sliceIdx=0; sliceIdx<taiSliceSuppLst->numSupportedSlices; sliceIdx++)
 -         {
 -            DU_ALLOC(taiSliceSuppLst->snssai[sliceIdx], sizeof(Snssai));
 -            if(taiSliceSuppLst->snssai[sliceIdx] == NULLP)
 -            {
 -               DU_LOG("\nERROR --> DU_APP: readCfg():Memory allocation failed");
 -               return RFAILED;
 -            }
 -#ifdef O1_ENABLE
 -            memcpy(taiSliceSuppLst->snssai[sliceIdx]->sd, cellParams.plmnList[sliceIdx].sd, \
 -                  SD_SIZE*sizeof(uint8_t));
 -            taiSliceSuppLst->snssai[sliceIdx]->sst = cellParams.plmnList[sliceIdx].sst;
 -#else
 -            memcpy(taiSliceSuppLst->snssai[sliceIdx], &snssai[sliceIdx], sizeof(Snssai));
 -#endif
 -         }
 -      }
 -
 -      /* NR Mode info */
 -#ifdef NR_TDD
 -      /* NR TDD Mode info */
 -#ifdef O1_ENABLE      
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = cellParams.arfcnUL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = cellParams.arfcnSUL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);              
 -#else
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_UL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = NR_SCS;               
 -#endif      
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_273;               
 -
 -      for(freqBandIdx=0; freqBandIdx<MAX_NRCELL_BANDS; freqBandIdx++)
 -      {
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[freqBandIdx].nrFreqBand =\
 -                                                                                                                     NR_FREQ_BAND;
 -         for(bandIdx=0; bandIdx<MAX_NRCELL_BANDS; bandIdx++)
 -         {
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[freqBandIdx].sulBand[bandIdx]\
 -               = SUL_BAND;    
 -         }
 -      }
 -#else
 -      /* NR FDD Mode info */
 -#ifdef O1_ENABLE
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = cellParams.arfcnUL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = cellParams.arfcnSUL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.nrArfcn = cellParams.arfcnDL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulArfcn = cellParams.arfcnSUL;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
 -#else
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = NR_UL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = NR_SCS;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = NR_SCS;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.nrArfcn = NR_DL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = NR_SCS;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = NR_SCS;
 -#endif
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
 -      for(freqBandIdx=0; freqBandIdx<MAX_NRCELL_BANDS; freqBandIdx++)
 -      {
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.freqBand[freqBandIdx].\
 -         nrFreqBand = NR_FREQ_BAND;
 -         for(bandIdx=0; bandIdx<MAX_NRCELL_BANDS; bandIdx++)
 -         {
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.freqBand[freqBandIdx].\
 -            sulBand[bandIdx] = SUL_BAND;
 -         }
 -      }
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
 -      for(freqBandIdx=0; freqBandIdx<MAX_NRCELL_BANDS; freqBandIdx++)
 -      {
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[freqBandIdx].\
 -         nrFreqBand = NR_FREQ_BAND;
 -         for(bandIdx=0; bandIdx<MAX_NRCELL_BANDS; bandIdx++)
 -         {
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[freqBandIdx].\
 -            sulBand[bandIdx] = SUL_BAND;
 -         }
 -      }
 -
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrb = NRB_106;
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_106;
 -#endif
 -
 -      /*Measurement Config and Cell Config */ 
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.measTimeCfgDuration = TIME_CFG; 
 -
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellDir = DL_UL; 
 -
 -      duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellType=CELL_TYPE;
 -
 -      /* Broadcast PLMN Identity */
 -      for(brdcstPlmnIdx=0; brdcstPlmnIdx<MAX_BPLMN_NRCELL_MINUS_1; brdcstPlmnIdx++)
 -      { 
 -         for(plmnIdx=0; plmnIdx<MAX_PLMN; plmnIdx++)
 -         {
 -            memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx],\
 -            0, sizeof(Plmn));
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx].mcc[0] =\
 -            PLMN_MCC0;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx].mcc[1] =\
 -            PLMN_MCC1;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx].mcc[2] =\
 -            PLMN_MCC2;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx].mnc[0] =\
 -            PLMN_MNC0;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].plmn[plmnIdx].mnc[1] =\
 -            PLMN_MNC1;
 -         }
 -         /* Extended PLMN List */      
 -         for(plmnIdx=0; plmnIdx<MAX_PLMN; plmnIdx++)
 -         {
 -            memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx], 0, sizeof(Plmn));
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx].mcc[0] = PLMN_MCC0;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx].mcc[1] = PLMN_MCC1;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx].mcc[2] = PLMN_MCC2;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx].mnc[0] = PLMN_MNC0;
 -            duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].\
 -            extPlmn[plmnIdx].mnc[1] = PLMN_MNC1;
 -         }
 -#ifdef O1_ENABLE
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.epsTac = cellParams.nRTAC; //TODO : to check and fill
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.tac = cellParams.nRTAC;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].tac = cellParams.nRTAC;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].nrCellId = cellParams.cellLocalId;
 -#else       
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.epsTac = DU_TAC; //TODO : to check and fill
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.tac = DU_TAC;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].tac = DU_TAC;
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].nrCellId = NR_CELL_ID;
 -#endif     
 -         duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.brdcstPlmnInfo[brdcstPlmnIdx].ranac = NR_RANAC;
 -      }
 -
 -      /*gnb DU System Info mib msg*/
 -      BuildMibMsg();
 -      DU_ALLOC(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.mibMsg, encBufSize);
 -      if(!(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.mibMsg))
 -      {
 -         DU_LOG("\nERROR  -->  DU APP : Memory allocation failure at readCfg");
 -         return RFAILED;
 -      }
 -      memcpy(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.mibMsg, encBuf, encBufSize);
 -      duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.mibLen = encBufSize;
 -
 -      /*gnb DU System Info mib msg*/
 -      BuildSib1Msg();
 -      DU_ALLOC(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.sib1Msg,\
 -            encBufSize);
 -      if(!(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.sib1Msg))
 -      {
 -         DU_LOG("\nERROR  -->  DU APP : Memory allocation failure at readCfg");
 -         return RFAILED;
 -      }
 -      memcpy(duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.sib1Msg,\
 -            encBuf,encBufSize);
 -      duCfgParam.srvdCellLst[srvdCellIdx].duSysInfo.sib1Len = encBufSize;
 -
 -   }
 -
 -   return ROK;
 -}
 -
  /*******************************************************************
   *
   * @brief Copy Slice Cfg in temp structre in duCfgParams 
@@@ -605,6 -883,7 +605,6 @@@ uint8_t parseSupportedSliceList(xmlDocP
     return ROK;
  }
  
 -#ifdef XML_BASED_CONFIG
  /*******************************************************************
   *
   * @brief Fill Served PLMN
@@@ -739,6 -1018,7 +739,6 @@@ uint8_t parseF1FreqBand(xmlDocPtr doc, 
     uint8_t sulIdx = 0;
     uint16_t sulValue = 0;
     xmlNodePtr child;
 -   xmlNodePtr sulChild;
  
     memset(freqBand, 0, sizeof(F1FreqBand));
     cur = cur->xmlChildrenNode;
           child = cur->xmlChildrenNode;
           while (child != NULL) 
           {
 -            if ((!xmlStrcmp(child->name, (const xmlChar *)"LIST")) && (child->ns == ns)) 
 +            sulIdx = 0;
 +            if ((!xmlStrcmp(child->name, (const xmlChar *)"SUL_BAND")) && (child->ns == ns)) 
              {
 -               sulChild = child->xmlChildrenNode;
 -               sulIdx = 0;
 -               while (sulChild != NULL) 
 +               sulValue = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
 +               if (sulIdx < MAX_NRCELL_BANDS)
                 {
 -                  if ((!xmlStrcmp(sulChild->name, (const xmlChar *)"SUL_BAND")) && (sulChild->ns == ns)) 
 -                  {
 -                     sulValue = atoi((char *)xmlNodeListGetString(doc, sulChild->xmlChildrenNode, 1));
 -                     if (sulIdx < MAX_NRCELL_BANDS) 
 -                     {
 -                        freqBand->sulBand[sulIdx] = sulValue;
 -                        sulIdx++;
 -                     } 
 -                     else 
 -                     {
 -                        DU_LOG("ERROR  -->  DU_APP : %s :  SUL_BAND array overflow\n", __func__);
 -                        return RFAILED;
 -                     }
 -                  }
 -                  sulChild = sulChild->next;
 +                  freqBand->sulBand[sulIdx] = sulValue;
 +                  sulIdx++;
 +               } 
 +               else 
 +               {
 +                  DU_LOG("ERROR  -->  DU_APP : %s :  SUL_BAND array overflow\n", __func__);
 +                  return RFAILED;
                 }
              }
              child = child->next;
@@@ -799,17 -1087,27 +799,17 @@@ uint8_t parseF1FreqBandList(xmlDocPtr d
  {
     uint8_t idx = 0;
  
 -   xmlNodePtr child;
     cur = cur->xmlChildrenNode;
     while(cur != NULL)
     {
 -      if ((!xmlStrcmp(cur->name, (const xmlChar *)"LIST")) && (cur->ns == ns))
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_FREQ_BAND")) && (cur->ns == ns))
        {
 -         child = cur->xmlChildrenNode;
 -         while(child != NULL)
 +         if(parseF1FreqBand(doc, ns, cur, &nrFreqInfo->freqBand[idx]) != ROK)
           {
 -            if ((!xmlStrcmp(child->name, (const xmlChar *)"F1_FREQ_BAND")) && (child->ns == ns))
 -            {
 -               if(parseF1FreqBand(doc, ns, child, &nrFreqInfo->freqBand[idx]) != ROK)
 -               {
 -                  return RFAILED;
 -               }
 -               idx++;
 -            }
 -            child = child -> next;
 +            return RFAILED;
           }
 +         idx++;
        }
 -
        cur = cur -> next;
     }
     return ROK;
@@@ -839,14 -1137,10 +839,14 @@@ uint8_t parseF1TxBw(xmlDocPtr doc, xmlN
     cur = cur->xmlChildrenNode;
     while(cur != NULL)
     {
 +#ifdef O1_ENABLE
 +      txBw->nrScs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
 +#else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_NR_SCS")) && (cur->ns == ns))
        {
           txBw->nrScs = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
 +#endif
  
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_NRB")) && (cur->ns == ns))
        {
@@@ -882,14 -1176,10 +882,14 @@@ uint8_t parseF1SulInfo(xmlDocPtr doc, x
     cur = cur->xmlChildrenNode;
     while(cur != NULL)
     {
 +#ifdef O1_ENABLE
 +      sulInfo->sulArfcn = cellParams.arfcnSUL;
 +#else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"SUL_ARFCN")) && (cur->ns == ns))
        {
           sulInfo->sulArfcn = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
 +#endif
  
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_TX_BW")) && (cur->ns == ns))
        {
@@@ -928,14 -1218,10 +928,14 @@@ uint8_t parseF1NrFreqInfo(xmlDocPtr doc
     cur = cur->xmlChildrenNode;
     while(cur != NULL)
     {
 +#if O1_ENABLE
 +      nrFreqInfo->nrArfcn = cellParams.arfcnUL;
 +#else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"NR_ARFCN")) && (cur->ns == ns))
        {
           nrFreqInfo->nrArfcn = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
 +#endif      
  
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_SUL_INFO")) && (cur->ns == ns))
        {
@@@ -1019,7 -1305,6 +1019,7 @@@ uint8_t parseF1NrFddInfo(xmlDocPtr doc
     return ROK;
  }
  
 +#ifdef NR_TDD
  /*******************************************************************
   *
   * @brief Fill NR TDD Info
@@@ -1064,7 -1349,6 +1064,7 @@@ uint8_t parseF1NrTddInfo(xmlDocPtr doc
     }
     return ROK;
  }
 +#endif
  
  /*******************************************************************
   *
@@@ -1097,7 -1381,6 +1097,7 @@@ uint8_t parseNrModeInfo(xmlDocPtr doc, 
           strcpy((char*)modeCfg, (char*)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));      
        }
  
 +#ifndef NR_TDD
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_NR_FDD_INFO")) && (cur->ns == ns))
        {
           if(strcmp(modeCfg, "FDD") == 0)
              }
           }
        }
 -
 +#else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_NR_TDD_INFO")) && (cur->ns == ns))
        {
           if(strcmp(modeCfg, "TDD") == 0)
           }
        }
  
 +#endif            
        cur = cur -> next;
     }
     return ROK;
@@@ -1218,10 -1500,6 +1218,10 @@@ uint8_t parseF1DuCellInfo(xmlDocPtr doc
           }
        }
  
 +#ifdef O1_ENABLE
 +      duCellInfo->tac = cellParams.nRTAC;
 +      duCellInfo->epsTac = cellParams.nRTAC;
 +#else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"TAC")) && (cur->ns == ns))
        {
           duCellInfo->tac = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        {
           duCellInfo->epsTac = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
 +#endif
  
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"NR_MODE_INFO")) && (cur->ns == ns))
        {
              return RFAILED;
           }
        }
 -
        cur = cur -> next;
     }
     return ROK;
@@@ -1351,7 -1629,7 +1351,7 @@@ uint8_t fillDuSrvdCellSysInfo(F1DuSysIn
     return ROK;
  }
  
 -#ifdef O1_ENABLED
 +#ifdef O1_ENABLE
  /*******************************************************************
   *
   * @brief Fill PLMN received from O1 interface
@@@ -1380,6 -1658,7 +1380,6 @@@ void fillPlmnFromO1(Plmn *PLMN, uint8_
     PLMN->mnc[2] = cellParams.plmnList[srvdPlmnIdx].mnc[2];
  }
  #endif
 -#endif
  
  /*******************************************************************
   *
@@@ -2588,6 -2867,7 +2588,6 @@@ uint8_t parsePdschConfigCommon(xmlDocPt
  {
     uint8_t idx = 0;
     xmlNodePtr child = NULLP;
 -   xmlNodePtr pdschNode = NULLP;
  
     memset(pdschCfgCmn, 0, sizeof(PdschConfigCommon));
     cur = cur -> xmlChildrenNode;
@@@ -3014,6 -3294,7 +3014,6 @@@ uint8_t parsePuschCfgCommon(xmlDocPtr d
  {
     uint8_t rsrcIdx = 0;
     xmlNodePtr child = NULLP;
 -   xmlNodePtr rsrcNode = NULLP;
  
     memset(puschCfgCmn, 0, sizeof(PuschCfgCommon));
     cur = cur -> xmlChildrenNode;
@@@ -4006,7 -4287,7 +4006,7 @@@ uint8_t parseSib1Params(xmlDocPtr doc, 
  #ifdef O1_ENABLE
     sib1Params-> tac = cellParams.nRTAC;
     sib1Params->cellIdentity = CELL_IDENTITY *  cellParams.cellLocalId;
 -   DU_LOG("\nDEBUG --> DU_APP: readCfg(): OAM CellLocalId=%d", sib1Params->cellIdentity);
 +   DU_LOG("\nDEBUG --> DU_APP: parseSib1Params(): OAM CellLocalId=%d", sib1Params->cellIdentity);
  #else
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"TAC")) && (cur->ns == ns))
        {
@@@ -4644,7 -4925,6 +4644,6 @@@ uint8_t parseMeasurementInfo(xmlDocPtr 
  uint8_t parseReportStyle(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, RicReportStyle  *ricReportStyle)
  {
     xmlNodePtr child = NULLP;
-    uint8_t numOfMeasurementInfo=0;
     memset(ricReportStyle, 0, sizeof(RicReportStyle));
  
     cur = cur->xmlChildrenNode;
           }
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_OF_MEASUREMENT_INFO")) && (cur->ns == ns))
-       {
-          numOfMeasurementInfo = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
-       }
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"MEASUREMENT_INFO_LIST")) && (cur->ns == ns))
        {
           child = cur->xmlChildrenNode;
@@@ -5079,6 -5354,7 +5073,6 @@@ uint8_t parseDuCfgParams(xmlDocPtr doc
           }
        }
  
 -#ifdef XML_BASED_CONFIG
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_DU_SRVD_CELL_INFO")) && (cur->ns == ns))
        {
           if(parseF1DuServedCellInfo(doc, ns, cur, &duCfgParam.srvdCellLst[0]) != ROK)
              return RFAILED;
           }
        }
 -#endif      
  
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAC_CELL_CFG")) && (cur->ns == ns))
        {
@@@ -5154,10 -5431,7 +5148,10 @@@ uint8_t duReadCfg(
     xmlDocPtr doc = NULLP;
     xmlNodePtr cur = NULLP;
     xmlNsPtr ns = NULLP;
 +   Pst pst;
 +   Buffer *mBuf;
  
 +   /* Parse, store and print DU configurations from XML file */
     doc = xmlParseFile(filename);
     if(doc == NULL)
     {
     }
  
     parseDuCfgParams(doc, ns, cur);
 +   printDuConfig();
  
     xmlFreeDoc(doc);
     xmlCleanupParser();
  
 -   Pst pst;
 -   Buffer *mBuf;
 -
 -   /* Read configs into duCfgParams */
 -   if(readCfg() != ROK)
 -   {
 -      DU_LOG("\nERROR  -->  DU_APP : Reading configuration failed");
 -      return RFAILED;
 -   }
 -   printDuConfig();
 -
     /* Fill pst structure */
     memset(&(pst), 0, sizeof(Pst));
     pst.srcEnt = (Ent)ENTDUAPP;
   * ****************************************************************/
  void printDuConfig()
  {
+    
+    uint16_t ranFuncIdx;
+    uint8_t reportStyleIdx =0, eventStyleIdx=0, tnlIdx=0;
     uint8_t sliceIdx = 0, pfIdx = 0, rsrcIdx = 0, ssbMaskIdx = 0, fdmIdx = 0;
     uint8_t monitoringSymbIdx = 0, poIdx = 0, policyIdx = 0, memIdx = 0;
     __attribute__((unused)) SctpParams *sctp;
     MacSliceRrmPolicy *rrmPolicy;
     __attribute__((unused)) RrmPolicyRatio *rrmPolicyRatio;
     __attribute__((unused)) RrmPolicyMemberList *rrmPolicyMemberList;
+    CmLList *node;
+    E2apDb *e2apDb;
+    RanFunction *ranFunc;
+    CmLListCp *measurementInfoList;
+    MeasurementInfoForAction *measurementInfoForAction;
  #ifdef NR_TDD
     F1NrTddInfo *f1NrTddInfo;
     TDDCfg *tddCfg;
           DU_LOG("\t\tSD %d %d %d\n",rrmPolicyMemberList->snssai.sd[0],rrmPolicyMemberList->snssai.sd[1],rrmPolicyMemberList->snssai.sd[2]);
        }
     }
+    
+    DU_LOG("\n ** E2 configuration ** \n");
+    e2apDb = &duCb.e2apDb;
+    DU_LOG("E2 node id %lu\n", e2apDb->e2NodeId);
+    DU_LOG("Number of RAN function %d\n", e2apDb->numOfRanFunction);
+    for(ranFuncIdx=0; ranFuncIdx<e2apDb->numOfRanFunction; ranFuncIdx++)
+    {
+       ranFunc = &e2apDb->ranFunction[ranFuncIdx];
+       DU_LOG("RAN function id %d\n", ranFunc->id);
+       DU_LOG("Short Name %s\n", ranFunc->name.shortName);
+       DU_LOG("Service Model OID %s\n", ranFunc->name.serviceModelOID);
+       DU_LOG("Description %s\n", ranFunc->name.description);
+       
+       DU_LOG("RevisionCounter %d\n",ranFunc->revisionCounter);
+       DU_LOG("NUM of Event Trigger Style Supported %d\n",ranFunc->numOfEventTriggerStyleSupported);
+       for(eventStyleIdx=0;eventStyleIdx<ranFunc->numOfEventTriggerStyleSupported; eventStyleIdx++)
+       {
+          DU_LOG("Style Type %d\n",ranFunc->eventTriggerStyleList[eventStyleIdx].styleType);
+          DU_LOG("Name %s\n",ranFunc->eventTriggerStyleList[eventStyleIdx].name);
+          DU_LOG("Format type %d\n",ranFunc->eventTriggerStyleList[eventStyleIdx].formatType);
+       }
+       DU_LOG("Num of Report Style Supported %d\n",ranFunc->numOfReportStyleSupported);
+       for(reportStyleIdx=0;reportStyleIdx<ranFunc->numOfReportStyleSupported; reportStyleIdx++)
+       {
+          DU_LOG("Style Type %d\n",ranFunc->reportStyleList[reportStyleIdx].reportStyle.styleType);
+          DU_LOG("Name %s\n",ranFunc->reportStyleList[reportStyleIdx].reportStyle.name);
+          DU_LOG("Format type %d\n",ranFunc->reportStyleList[reportStyleIdx].reportStyle.formatType);
+          measurementInfoList = &ranFunc->reportStyleList[reportStyleIdx].measurementInfoList;
+          if(measurementInfoList->count)
+          {
+             CM_LLIST_FIRST_NODE(measurementInfoList, node);
+             while(node)
+             {
+                measurementInfoForAction = (MeasurementInfoForAction*) node->node;
+                if(measurementInfoForAction)
+                {
+                   DU_LOG("Measurement Type Name %s\n",measurementInfoForAction->measurementTypeName);
+                   DU_LOG("Measurement Type Id %d\n",measurementInfoForAction->measurementTypeId);
+                }
+                node = node->next;
+             }
+          }
+       }
+       DU_LOG("Ric Indication header format %d\n",ranFunc->ricIndicationHeaderFormat);
+       DU_LOG("Ric indication message format %d\n",ranFunc->ricIndicationMessageFormat);
+    }
+    DU_LOG("Number of TNL association %d\n", e2apDb->numOfTNLAssoc);
+    for(tnlIdx=0;tnlIdx<e2apDb->numOfTNLAssoc;tnlIdx++)
+    {
+       DU_LOG("Local IPv4 Address present %u\n", e2apDb->tnlAssoc[tnlIdx].localIpAddress.ipV4Pres);
+       DU_LOG("local IP Address %u\n", e2apDb->tnlAssoc[tnlIdx].localIpAddress.ipV4Addr);
+       DU_LOG("Destination IPv4 Address present %u\n", e2apDb->tnlAssoc[tnlIdx].destIpAddress.ipV4Pres);
+       DU_LOG("Destination IP Address %u\n", e2apDb->tnlAssoc[tnlIdx].destIpAddress.ipV4Addr);
+       DU_LOG("Local port %d\n", e2apDb->tnlAssoc[tnlIdx].localPort);
+       DU_LOG("Destination port %d\n", e2apDb->tnlAssoc[tnlIdx].destPort);
+       DU_LOG("Tnl usage %d\n", e2apDb->tnlAssoc[tnlIdx].usage);
+    }
  }
  
  /**********************************************************************