Merge "[Epic-ID: ODUHIGH-538][Issue-ID: ODUHIGH-565] Fixes to read MIB and Slice...
authorHarshita Lal <harshita.lal@radisys.com>
Wed, 21 Feb 2024 10:52:02 +0000 (10:52 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Wed, 21 Feb 2024 10:52:02 +0000 (10:52 +0000)
1  2 
build/config/odu_config.xml
src/du_app/du_cfg.c

@@@ -10,7 -10,6 +10,7 @@@
        <SCTP_CORE>25</SCTP_CORE>
        <LOWER_MAC_CORE>21</LOWER_MAC_CORE>
     </THREAD_AFFINITY>
 +   <GNB_ID>1</GNB_ID>
     <DU_ID>1</DU_ID>
     <DU_NAME>ORAN OAM DU</DU_NAME>
     <MAX_NUM_DRB>29</MAX_NUM_DRB>
        <INTRA_FREQ_RESELECT>1</INTRA_FREQ_RESELECT>
     </MIB_PARAMS>
     <SLICE_CFG>
-       <NUM_RRC_POLICY>1</NUM_RRC_POLICY>
+       <NUM_RRM_POLICY>1</NUM_RRM_POLICY>
        <MAC_SLICE_RRM_POLICY>
-          <RESOURCE_TYPE>1</RESOURCE_TYPE>
-          <NUM_RRC_POLICY_MEM>1</NUM_RRC_POLICY_MEM>
-          <RRM_POLICY_MUM_LIST>
+          <RESOURCE_TYPE>0</RESOURCE_TYPE>
+          <NUM_RRM_POLICY_MEMBER>1</NUM_RRM_POLICY_MEMBER>
+          <RRM_POLICY_MEMBER_LIST>
              <PLMN>
                 <MCC>
                    <PLMN_MCC0>3</PLMN_MCC0>
                 <SD>4</SD>
                 </SD_SIZE>
              </SNSSAI>
-          </RRM_POLICY_MUM_LIST>
+          </RRM_POLICY_MEMBER_LIST>
           <RRM_POLICY_RATIO>
              <MAX_RATIO>90</MAX_RATIO>
              <MIN_RATIO>30</MIN_RATIO>
     <MAX_SFN>1024</MAX_SFN>
     <BASE_SCS>15</BASE_SCS>
     <MAX_SYMB_PER_SLOT>14</MAX_SYMB_PER_SLOT>
 -<!--
 -   <GNB_ID>1</GNB_ID>
     <DU_TIMER_INFO>
        <TIMER_TQ_CP>
           <TIMER_LEN>2</TIMER_LEN>
        <TNL_ASSOC_LIST>
           <TNL_ASSOC>
              <LOCAL_IP>192.168.130.71</LOCAL_IP>
 -            <LOCAL_PORT>36421<LOCAL_PORT>
 +            <LOCAL_PORT>36421</LOCAL_PORT>
              <DESTINATION_IP>192.168.130.70</DESTINATION_IP>
              <DESTINATION_PORT>36421</DESTINATION_PORT>
              <ASSOC_USAGE>2</ASSOC_USAGE> 
           </RAN_FUNCTION>
        </RAN_FUNCTION_LIST>
     </E2AP_CFG>
 --->
  </DU_CFG_PARAMS>   
  
  
diff --combined src/du_app/du_cfg.c
@@@ -326,28 -326,6 +326,6 @@@ uint8_t readMacCfg(
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.pucchCommon.pucchResourceCommon = PUCCH_RSRC_COMMON;
     duCfgParam.macCellCfg.cellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_NEITHER_HOPPING;
  
- #ifndef O1_ENABLE
-    /*Note: Static Configuration, when O1 is not configuring the RRM policy*/
-    RrmPolicyList rrmPolicy;
-    rrmPolicy.id[0] = 1;
-    rrmPolicy.resourceType = PRB;
-    rrmPolicy.rRMMemberNum = 1;
-    memcpy(rrmPolicy.rRMPolicyMemberList[0].mcc,duCfgParam.macCellCfg.cellCfg.plmnInfoList[0].plmn.mcc, 3*sizeof(uint8_t));
-    memcpy(rrmPolicy.rRMPolicyMemberList[0].mnc,duCfgParam.macCellCfg.cellCfg.plmnInfoList[0].plmn.mnc, 3*sizeof(uint8_t));
-    rrmPolicy.rRMPolicyMemberList[0].sst = 1;
-    rrmPolicy.rRMPolicyMemberList[0].sd[0] = 2;
-    rrmPolicy.rRMPolicyMemberList[0].sd[1] = 3;
-    rrmPolicy.rRMPolicyMemberList[0].sd[2] = 4;
-    rrmPolicy.rRMPolicyMaxRatio = 90;
-    rrmPolicy.rRMPolicyMinRatio = 30;
-    rrmPolicy.rRMPolicyDedicatedRatio = 10;
-    cpyRrmPolicyInDuCfgParams(&rrmPolicy, 1, &duCfgParam.tempSliceCfg);
- #endif
     return ROK;
  }
  
@@@ -590,7 -568,24 +568,7 @@@ uint8_t readCfg(
     Snssai snssai[NUM_OF_SUPPORTED_SLICE] = {{1,{2,3,4}},{5,{6,7,8}}};
  #endif
  
 -   /* Gnb Id */
 -   duCb.gnbId = GNB_ID;
 -   
 -   memset(&duCb.e2apDb, 0, sizeof(E2apDb));
 -   duCb.e2apDb.e2NodeId =  1; //Will be removed as part of E2 config parser
     duCb.e2apDb.e2TransInfo.transIdCounter = 0;
 -
 -   duCb.e2apDb.numOfTNLAssoc = 1;
 -   for(tnlAssocIdx =0; tnlAssocIdx<duCb.e2apDb.numOfTNLAssoc; tnlAssocIdx++)
 -   {
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].localIpAddress.ipV4Pres = duCfgParam.sctpParams.duIpAddr.ipV4Pres;
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].localIpAddress.ipV4Addr = duCfgParam.sctpParams.duIpAddr.ipV4Addr;
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].localPort = duCfgParam.sctpParams.duPort[E2_INTERFACE];
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].destIpAddress.ipV4Pres = duCfgParam.sctpParams.ricIpAddr.ipV4Pres;
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].destIpAddress.ipV4Addr = duCfgParam.sctpParams.ricIpAddr.ipV4Addr;
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].destPort = duCfgParam.sctpParams.ricPort;
 -      duCb.e2apDb.tnlAssoc[tnlAssocIdx].usage = BOTH_FUNCTIONALITY;
 -   }
     duCb.e2apDb.numOfRanFunction = 1;
     for(ranFuncIdx =0; ranFuncIdx<duCb.e2apDb.numOfRanFunction; ranFuncIdx++)
     {
     memset(duCb.e2apDb.e2TransInfo.e2InitTransaction, 0, MAX_NUM_TRANSACTION * sizeof(E2TransInfo));
     memset(duCb.e2apDb.e2TransInfo.ricInitTransaction, 0, MAX_NUM_TRANSACTION * sizeof(E2TransInfo));
     
-    /* Mib Params */
-    mib.sysFrmNum = SYS_FRAME_NUM;
- #ifdef NR_TDD
-    mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120;
- #else
-    mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60;
- #endif
-    mib.ssb_SubcarrierOffset = SSB_SC_OFFSET; //Kssb
-    mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2;
-    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;
@@@ -1131,7 -1111,6 +1094,6 @@@ uint8_t parseEgtpParams(xmlDocPtr doc, 
     return ROK;
  }
  
- #ifdef XML_BASED_CONFIG
  /*******************************************************************
   *
   * @brief Fill MIB configuration 
@@@ -1224,17 -1203,17 +1186,17 @@@ uint8_t parsePlmn(xmlDocPtr doc, xmlNsP
           child = cur->xmlChildrenNode;
           while (child != NULL)
           {
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MCC0")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MCC0")) && (child->ns == ns))
              {
                 plmn->mcc[0] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
              }
  
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MCC1")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MCC1")) && (child->ns == ns))
              {
                 plmn->mcc[1] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
              }
  
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MCC2")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MCC2")) && (child->ns == ns))
              {
                 plmn->mcc[2] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
              }
           child = cur->xmlChildrenNode;
           while (child != NULL)
           {
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MNC0")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MNC0")) && (child->ns == ns))
              {
                 plmn->mnc[0] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));  
              }
  
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MNC1")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MNC1")) && (child->ns == ns))
              {
                 plmn->mnc[1] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
              }
  
-             if ((!xmlStrcmp(child->name, (const xmlChar *)"plmn_MNC2")) && (child->ns == ns))
+             if ((!xmlStrcmp(child->name, (const xmlChar *)"PLMN_MNC2")) && (child->ns == ns))
              {
                 plmn->mnc[2] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
              }
@@@ -1365,6 -1344,7 +1327,7 @@@ uint8_t parseSnssai(xmlDocPtr doc, xmlN
     return ROK;
  }
  
+ #ifdef XML_BASED_CONFIG
  /*******************************************************************
   *
   * @brief Fill Supported Slice List
@@@ -4921,7 -4901,9 +4884,9 @@@ uint8_t parseSib1Params(xmlDocPtr doc, 
     }
     return ROK;
  }
+ #endif
  
+ #ifndef O1_ENABLE
  /*******************************************************************
   *
   * @brief Fill RRM Policy List
@@@ -5011,7 -4993,6 +4976,6 @@@ uint8_t parseRrmPolicyRatio(xmlDocPtr d
     return ROK;
  }
  
- /*******************************************************************
  /*******************************************************************
   *
   * @brief Fill MAC Slice RRM Policy
@@@ -5043,12 -5024,12 +5007,12 @@@ uint8_t parseMacSliceRrmPolicy(xmlDocPt
           rrmPolicy->resourceType = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_RRC_POLICY_MEM")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_RRM_POLICY_MEMBER")) && (cur->ns == ns))
        {
           rrmPolicy->numOfRrmPolicyMem = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"RRM_POLICY_MUM_LIST")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"RRM_POLICY_MEMBER_LIST")) && (cur->ns == ns))
        {
           DU_ALLOC_SHRABL_BUF(rrmPolicy->rRMPolicyMemberList,\
                 rrmPolicy->numOfRrmPolicyMem * sizeof(RrmPolicyMemberList*));
@@@ -5113,7 -5094,7 +5077,7 @@@ uint8_t parseMacSliceCfgReq(xmlDocPtr d
     cur = cur -> xmlChildrenNode;
     while(cur != NULL)
     {
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_RRC_POLICY")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_RRM_POLICY")) && (cur->ns == ns))
        {
           macSliceCfgReq->numOfRrmPolicy = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
        }
@@@ -5220,209 -5201,6 +5184,209 @@@ uint8_t parseThreadAffinity(xmlDocPtr d
  }
  #endif
  
 +/*******************************************************************
 + *
 + * @brief Fill tmrTqCp
 + *
 + * @details
 + *
 + *    Function : parseTmrTqCp
 + *
 + *    Functionality: Fill tmrTqCp
 + *
 + * @params[in] XML document pointer
 + *             XML namespace
 + *             Current node in XML
 + *             Pointer to structure to be filled
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t parseTmrTqCp(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, CmTqCp *tmrTqCp)
 +{
 +   memset(tmrTqCp, 0, sizeof(CmTqCp));
 +   cur = cur ->xmlChildrenNode;
 +   while(cur != NULL)
 +   {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"TIMER_LEN")) && (cur->ns == ns))
 +      {
 +         tmrTqCp->tmrLen = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +      cur = cur -> next;
 +   }
 +   return ROK;
 +}
 +
 +/*******************************************************************
 + *
 + * @brief Fill DU timer Parameters
 + *
 + * @details
 + *
 + *    Function : parseDuTimerParams
 + *
 + *    Functionality: Fill DU timer Parmeters
 + *
 + * @params[in] XML document pointer
 + *             XML namespace
 + *             Current node in XML
 + *             Pointer to structure to be filled
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t parseDuTimerParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, DuTimers  *duTimers)
 +{
 +   memset(duTimers, 0, sizeof(DuTimers));
 +   
 +   cur = cur->xmlChildrenNode;
 +   while (cur != NULL)
 +   {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"TIMER_TQ_CP")) && (cur->ns == ns))
 +      {
 +         if(parseTmrTqCp(doc, ns, cur, &duTimers->tmrTqCp) != ROK)
 +         {
 +            return RFAILED;
 +         }
 +         else
 +         {
 +            /* Initialzie the timer queue */   
 +            memset(&(duTimers->tmrTq), 0, sizeof(CmTqType) * duTimers->tmrTqCp.tmrLen);
 +         }
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"TIMER_RESOLUTION")) && (cur->ns == ns))
 +      {
 +         duTimers->tmrRes = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +      cur = cur -> next;
 +   }
 +   return ROK;
 +}
 +
 +/*******************************************************************
 + *
 + * @brief Fill TNL assoc 
 + *
 + * @details
 + *
 + *    Function : parseTnlAssoc
 + *
 + *    Functionality: Fill TNL assoc
 + *
 + * @params[in] XML document pointer
 + *             XML namespace
 + *             Current node in XML
 + *             Pointer to structure to be filled
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t parseTnlAssoc(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, TNLAssociation *tnlAssoc)
 +{
 +   char *duIpV4Addr;
 +   char *ricIpV4Addr;
 +   CmInetIpAddr duIp;
 +   CmInetIpAddr ricIp;
 +
 +   memset(tnlAssoc, 0, sizeof(TNLAssociation));
 +   cur = cur ->xmlChildrenNode;
 +   while(cur != NULL)
 +   {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"LOCAL_IP")) && (cur->ns == ns))
 +      {
 +         duIpV4Addr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 +         cmInetAddr(duIpV4Addr, &(duIp));
 +         tnlAssoc->localIpAddress.ipV4Pres = true;
 +         tnlAssoc->localIpAddress.ipV4Addr = duIp;
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"LOCAL_PORT")) && (cur->ns == ns))
 +      {
 +         tnlAssoc->localPort = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"DESTINATION_IP")) && (cur->ns == ns))
 +      {
 +         ricIpV4Addr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 +         cmInetAddr(ricIpV4Addr, &(ricIp));
 +         tnlAssoc->destIpAddress.ipV4Pres = true;
 +         tnlAssoc->destIpAddress.ipV4Addr = ricIp;
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"DESTINATION_PORT")) && (cur->ns == ns))
 +      {
 +         tnlAssoc->destPort = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"ASSOC_USAGE")) && (cur->ns == ns))
 +      {
 +         tnlAssoc->usage = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +      cur = cur -> next;
 +   }
 +   return ROK;
 +}
 +
 +/*******************************************************************
 + *
 + * @brief Fill E2 config Parameters
 + *
 + * @details
 + *
 + *    Function : parseE2ConfigParams
 + *
 + *    Functionality: Fill E2 config Parmeters
 + *
 + * @params[in] XML document pointer
 + *             XML namespace
 + *             Current node in XML
 + *             Pointer to structure to be filled
 + * @return ROK     - success
 + *         RFAILED - failure
 + *
 + * ****************************************************************/
 +uint8_t parseE2ConfigParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, E2apDb *e2apDb)
 +{
 +   uint8_t tnlIdx=0;
 +   xmlNodePtr child = NULLP;
 +
 +   memset(e2apDb, 0, sizeof(E2apDb));
 +   cur = cur->xmlChildrenNode;
 +   while (cur != NULL)
 +   {
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"E2_NODE_ID")) && (cur->ns == ns))
 +      {
 +         e2apDb->e2NodeId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_OF_TNL_ASSOC")) && (cur->ns == ns))
 +      {
 +         e2apDb->numOfTNLAssoc = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"TNL_ASSOC_LIST")) && (cur->ns == ns))
 +      {
 +         child = cur->xmlChildrenNode;
 +         while(child != NULL)
 +         {
 +            if ((!xmlStrcmp(child->name, (const xmlChar *)"TNL_ASSOC")) && (child->ns == ns))
 +           {
 +              if(parseTnlAssoc(doc, ns, child,&e2apDb->tnlAssoc[tnlIdx]) != ROK)
 +              {
 +                 return RFAILED;
 +              }
 +              tnlIdx++;
 +
 +           }
 +           child = child -> next;
 +        }
 +     }
 +     cur = cur -> next;
 +   }
 +   return ROK;
 +}
 +
  /*******************************************************************
   *
   * @brief Fill DU Config Parmeters 
@@@ -5463,11 -5241,6 +5427,11 @@@ uint8_t parseDuCfgParams(xmlDocPtr doc
  #endif         
        }
  
 +      if ((!xmlStrcmp(cur->name, (const xmlChar *)"GNB_ID")) && (cur->ns == ns))
 +      {
 +         duCb.gnbId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
 +      }
 +
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"DU_ID")) && (cur->ns == ns))
        {
           duCfgParam.duId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
           duCfgParam.egtpParams.maxTunnelId = duCfgParam.maxNumDrb * duCfgParam.maxSupportedUes; 
        }
  
- #ifdef XML_BASED_CONFIG
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"MIB_PARAMS")) && (cur->ns == ns))
        {
           if(parseMibParams(doc, ns, cur, &duCfgParam.mibParams) != ROK)
           }
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_DU_SRVD_CELL_INFO")) && (cur->ns == ns))
+ #ifdef XML_BASED_CONFIG
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIB1_PARAMS")) && (cur->ns == ns))
        {
-          if(parseF1DuServedCellInfo(doc, ns, cur, &duCfgParam.srvdCellLst[0]) != ROK)
+          if(parseSib1Params(doc, ns, cur, &duCfgParam.sib1Params) != ROK)
           {
              return RFAILED;
           }
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAC_CELL_CFG")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_DU_SRVD_CELL_INFO")) && (cur->ns == ns))
        {
-          if(parseMacCellCfg(doc, ns, cur, &duCfgParam.macCellCfg) != ROK)
+          if(parseF1DuServedCellInfo(doc, ns, cur, &duCfgParam.srvdCellLst[0]) != ROK)
           {
              return RFAILED;
           }
        }
  
-       if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIB1_PARAMS")) && (cur->ns == ns))
+       if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAC_CELL_CFG")) && (cur->ns == ns))
        {
-          if(parseSib1Params(doc, ns, cur, &duCfgParam.sib1Params) != ROK)
+          if(parseMacCellCfg(doc, ns, cur, &duCfgParam.macCellCfg) != ROK)
           {
              return RFAILED;
           }
        }
+ #endif      
  
+ #ifndef O1_ENABLE
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"SLICE_CFG")) && (cur->ns == ns))
        {
           if(parseMacSliceCfgReq(doc, ns, cur, &duCfgParam.tempSliceCfg) != ROK)
        }
  #endif      
  
 +      if((!xmlStrcmp(cur->name, (const xmlChar *)"DU_TIMER_INFO")) && (cur->ns == ns))
 +      {
 +         if(parseDuTimerParams(doc, ns, cur, &duCb.duTimersInfo) != ROK)
 +         {
 +            return RFAILED;
 +         }
 +      }
 +
 +      if((!xmlStrcmp(cur->name, (const xmlChar *)"E2AP_CFG")) && (cur->ns == ns))
 +      {
 +         if(parseE2ConfigParams(doc, ns, cur, &duCb.e2apDb) != ROK)
 +         {
 +            return RFAILED;
 +         }
 +      }
        cur = cur -> next;
     }
     return ROK;
@@@ -5692,6 -5452,16 +5658,6 @@@ uint8_t duReadCfg(
     cmInitTimers(&(duCb.e2apDb.e2TimersInfo.e2Timers.ricServiceUpdateTimer.timer), 1);
     cmInitTimers(&(duCb.e2apDb.e2TimersInfo.e2Timers.e2NodeConfigUpdate.timer), 1);
  
 -   /* Initialzie the timer queue */   
 -   memset(&(duCb.duTimersInfo.tmrTq), 0, sizeof(CmTqType) * DU_TQ_SIZE);
 -   
 -   /* Initialize the timer control point */
 -   memset(&(duCb.duTimersInfo.tmrTqCp), 0, sizeof(CmTqCp));
 -   duCb.duTimersInfo.tmrTqCp.tmrLen = DU_TQ_SIZE;
 -   
 -   /* Initialize the timer resolution */
 -   duCb.duTimersInfo.tmrRes = DU_TIMER_RESOLUTION;
 -   
     /* Timer Registration request to system services */
     if (ODU_REG_TMR_MT(pst.srcEnt, pst.srcInst, duCb.duTimersInfo.tmrRes, duActvTmr) != ROK)
     {
@@@ -6376,7 -6146,7 +6342,7 @@@ void printDuConfig(
     for(policyIdx = 0; policyIdx < macSliceCfg->numOfRrmPolicy; policyIdx++)
     {
        rrmPolicy = macSliceCfg->listOfRrmPolicy[policyIdx];
-       DU_LOG("RRM Policy [%d]", policyIdx);
+       DU_LOG("RRM Policy [%d]\n", policyIdx);
        DU_LOG("\tResource Type %d\n", rrmPolicy->resourceType);
  
        rrmPolicyRatio = &rrmPolicy ->policyRatio;
        for(memIdx = 0; memIdx < rrmPolicy->numOfRrmPolicyMem; memIdx++)
        {
           rrmPolicyMemberList = rrmPolicy->rRMPolicyMemberList[memIdx];
-          DU_LOG("\tRRM Policy Member [%d]", memIdx);
+          DU_LOG("\tRRM Policy Member [%d]\n", memIdx);
           DU_LOG("\t\tPLMN : mcc[0] %d\n", rrmPolicyMemberList->plmn.mcc[0]);
           DU_LOG("\t\tPLMN : mcc[1] %d\n", rrmPolicyMemberList->plmn.mcc[1]);
           DU_LOG("\t\tPLMN : mcc[2] %d\n", rrmPolicyMemberList->plmn.mcc[2]);