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;
-}
-
-/*******************************************************************
- *
- * @brief Configures the DU Parameters
- *
- * @details
- *
- * Function : fillDuPort
- *
- * Functionality:
- * - fills the DU Ports.
- *
- * @params[in] duPort array to be filled
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-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] = F1_SCTP_PORT; /* DU Port idx 0 38472 */
- duPort[E2_INTERFACE] = E2_SCTP_PORT; /* RIC Port idx 1 36421 */
-#endif
return ROK;
}
return sliv;
}
-
-/*******************************************************************
- *
- * @brief Configures serving cell config common in sib1
- *
- * @details
- *
- * Function : fillServCellCfgCommSib
- *
- * Functionality:
- * - fills Serving cell config common for SIB1
- *
- * @params[in] SrvCellCfgCommSib pointer
- * @return ROK - success
- * RFAILED - failure
- *
- ** ****************************************************************/
-uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
-{
- PdcchCfgCommon pdcchCfg;
- PdschCfgCommon pdschCfg;
- PcchCfg pcchCfg;
- RachCfgCommon rachCfg;
- PuschCfgCommon puschCfg;
- PucchCfgCommon pucchCfg;
- TddUlDlCfgCommon tddCfg;
-
-#ifdef O1_ENABLE
- srvCellCfgComm->scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
-#else
- srvCellCfgComm->scs = NR_SCS;
-#endif
-
- /* Configuring DL Config Common for SIB1*/
- srvCellCfgComm->dlCfg.freqBandInd = NR_FREQ_BAND;
- srvCellCfgComm->dlCfg.offsetToPointA = OFFSET_TO_POINT_A;
-#ifdef O1_ENABLE
- srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = cellParams.ssbOffset;
- srvCellCfgComm->dlCfg.dlScsCarrier.scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
- srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = cellParams.bSChannelBwUL;
-#else
- srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET;
- srvCellCfgComm->dlCfg.dlScsCarrier.scs = NR_SCS;
- srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = NR_BANDWIDTH;
-#endif
- srvCellCfgComm->dlCfg.locAndBw = FREQ_LOC_BW;
-
- /* Configuring PDCCH Config Common For SIB1 */
- pdcchCfg.present = BWP_DownlinkCommon__pdcch_ConfigCommon_PR_setup;
- 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 = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
- //pdcchCfg.monitorSlotPrdAndOff = \
- SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
- pdcchCfg.monitorSymbolsInSlot[0] = 128;
- pdcchCfg.monitorSymbolsInSlot[1] = 0;
- pdcchCfg.numCandAggLvl1 = SearchSpace__nrofCandidates__aggregationLevel1_n8;
- pdcchCfg.numCandAggLvl2 = SearchSpace__nrofCandidates__aggregationLevel2_n4;
- pdcchCfg.numCandAggLvl4 = SearchSpace__nrofCandidates__aggregationLevel4_n2;
- pdcchCfg.numCandAggLvl8 = SearchSpace__nrofCandidates__aggregationLevel8_n1;
- pdcchCfg.numCandAggLvl16 = SearchSpace__nrofCandidates__aggregationLevel16_n0;
- pdcchCfg.searchSpcType = SearchSpace__searchSpaceType_PR_common;
- pdcchCfg.commSrchSpcDciFrmt = PDCCH_SERACH_SPACE_DCI_FORMAT;
- pdcchCfg.searchSpcSib1 = PDCCH_SEARCH_SPACE_ID_SIB1;
- pdcchCfg.pagingSearchSpc = PDCCH_SEARCH_SPACE_ID_PAGING;
- pdcchCfg.raSearchSpc = PDCCH_SEARCH_SPACE_ID_PAGING;
- srvCellCfgComm->dlCfg.pdcchCfg = pdcchCfg;
-
- /* Configuring PDSCH Config Common For SIB1 */
- pdschCfg.present = BWP_DownlinkCommon__pdsch_ConfigCommon_PR_setup;
- pdschCfg.numTimeDomRsrcAlloc = 2;
- pdschCfg.timeDomAlloc[0].k0 = PDSCH_K0_CFG1;
- pdschCfg.timeDomAlloc[0].mapType = PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
- pdschCfg.timeDomAlloc[0].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL);
-
- pdschCfg.timeDomAlloc[1].k0 = PDSCH_K0_CFG2;
- pdschCfg.timeDomAlloc[1].mapType = PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
- pdschCfg.timeDomAlloc[1].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL);
-
- srvCellCfgComm->dlCfg.pdschCfg = pdschCfg;
-
- /* Configuring BCCH Config for SIB1 */
- srvCellCfgComm->dlCfg.bcchCfg.modPrdCoeff = BCCH_Config__modificationPeriodCoeff_n16;
-
- /* Configuring PCCH Config for SIB1 */
- pcchCfg.dfltPagingCycle = convertPagingCycleEnumToValue(PagingCycle_rf256);
- pcchCfg.nAndPagingFrmOffsetType = PCCH_Config__nAndPagingFrameOffset_PR_oneT;
- pcchCfg.pageFrameOffset = 0;
- pcchCfg.ns = convertNsEnumToValue(PCCH_Config__ns_one);
- pcchCfg.firstPDCCHMontioringType = PCCH_Config__firstPDCCH_MonitoringOccasionOfPO_PR_sCS30KHZoneT_SCS15KHZhalfT;
- memset(pcchCfg.firstPDCCHMontioringInfo, 0, sizeof(uint16_t));
- pcchCfg.firstPDCCHMontioringInfo[0] = 44;
-
- srvCellCfgComm->dlCfg.pcchCfg = pcchCfg;
-
-
- /* Configuring UL Config Common */
-#ifdef O1_ENABLE
- srvCellCfgComm->ulCfg.ulScsCarrier.scsOffset = cellParams.ssbOffset;
- srvCellCfgComm->ulCfg.ulScsCarrier.scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
- srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = cellParams.bSChannelBwUL;
-#else
- srvCellCfgComm->ulCfg.ulScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET;
- srvCellCfgComm->ulCfg.ulScsCarrier.scs = NR_SCS;
- srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = NR_BANDWIDTH;
-#endif
- srvCellCfgComm->ulCfg.freqBandInd = NR_FREQ_BAND;
- srvCellCfgComm->ulCfg.pMax = UL_P_MAX;
- srvCellCfgComm->ulCfg.locAndBw = FREQ_LOC_BW;
- srvCellCfgComm->ulCfg.timeAlignTimerComm = TimeAlignmentTimer_infinity;
-
- /* Configuring RACH Config Common for SIB1 */
- rachCfg.present = BWP_UplinkCommon__rach_ConfigCommon_PR_setup;
- rachCfg.prachCfgIdx = PRACH_CONFIG_IDX;
- rachCfg.msg1Fdm = RACH_ConfigGeneric__msg1_FDM_one;
- rachCfg.msg1FreqStart = PRACH_FREQ_START;
- rachCfg.zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
- rachCfg.preambleRcvdTgtPwr = PRACH_PREAMBLE_RCVD_TGT_PWR;
- rachCfg.preambleTransMax = RACH_ConfigGeneric__preambleTransMax_n200;
- rachCfg.pwrRampingStep = RACH_ConfigGeneric__powerRampingStep_dB2;
- rachCfg.raRspWindow = RACH_ConfigGeneric__ra_ResponseWindow_sl10;
- rachCfg.numRaPreamble = NUM_RA_PREAMBLE;
- rachCfg.numSsbPerRachOcc = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one;
- rachCfg.numCbPreamblePerSsb = CB_PREAMBLE_PER_SSB;
- rachCfg.contResTimer = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64;
- rachCfg.rsrpThreshSsb = RSRP_THRESHOLD_SSB;
- rachCfg.rootSeqIdxPresent = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139;
- rachCfg.rootSeqIdx = ROOT_SEQ_IDX;
- rachCfg.msg1Scs = PRACH_SUBCARRIER_SPACING ;
- rachCfg.restrictedSetCfg = PRACH_RESTRICTED_SET_CFG;
- srvCellCfgComm->ulCfg.rachCfg = rachCfg;
-
- /* Configuring PUSCH Config Common for SIB1 */
- puschCfg.puschCfgPresent = BWP_UplinkCommon__pusch_ConfigCommon_PR_setup;
- puschCfg.numTimeDomRsrcAlloc = 2;
- puschCfg.timeDomAllocList[0].k2 = PUSCH_K2_CFG1;
- puschCfg.timeDomAllocList[0].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
- puschCfg.timeDomAllocList[0].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
- puschCfg.timeDomAllocList[1].k2 = PUSCH_K2_CFG2;
- puschCfg.timeDomAllocList[1].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
- puschCfg.timeDomAllocList[1].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
- puschCfg.msg3DeltaPreamble = PUSCH_MSG3_DELTA_PREAMBLE;
- puschCfg.p0NominalWithGrant = PUSCH_P0_NOMINAL_WITH_GRANT;
- srvCellCfgComm->ulCfg.puschCfg = puschCfg;
-
- /* Configuring PUCCH Config Common for SIB1 */
- pucchCfg.present = BWP_UplinkCommon__pucch_ConfigCommon_PR_setup;
- pucchCfg.rsrcComm = PUCCH_RSRC_COMMON;
- pucchCfg.grpHop = PUCCH_ConfigCommon__pucch_GroupHopping_neither;
- pucchCfg.p0Nominal = PUCCH_P0_NOMINAL;
- srvCellCfgComm->ulCfg.pucchCfg = pucchCfg;
-
- /* Configuring TDD UL DL config common */
- tddCfg.refScs = SubcarrierSpacing_kHz30;
- 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;
- tddCfg.numUlSymbols = NUM_UL_SYMBOLS;
- srvCellCfgComm->tddCfg = tddCfg;
-
- srvCellCfgComm->ssbPosInBurst = 192;
- srvCellCfgComm->ssbPrdServingCell = SSB_PERIODICITY;
- srvCellCfgComm->ssPbchBlockPwr = SSB_PBCH_PWR;
-
- return ROK;
-}
-
/*******************************************************************
*
* @brief Configures the DU Parameters
CmLList *node;
uint8_t srvdCellIdx, bandIdx, sliceIdx, plmnIdx, ranFuncIdx, eventTriggerStyleIdx, reportStyleIdx, tnlAssocIdx;
uint8_t brdcstPlmnIdx, freqBandIdx, srvdPlmnIdx;
- uint32_t ipv4_du, ipv4_cu, ipv4_ric;
MibParams mib;
Sib1Params sib1;
SupportedSliceList *taiSliceSuppLst;
Snssai snssai[NUM_OF_SUPPORTED_SLICE] = {{1,{2,3,4}},{5,{6,7,8}}};
#endif
- /* Gnb Id */
- duCb.gnbId = GNB_ID;
-
-#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 = F1_SCTP_PORT;
- duCfgParam.sctpParams.ricPort = E2_SCTP_PORT;
-#endif
-
- fillDuPort(duCfgParam.sctpParams.duPort);
-
- /* F1 DU IP Address and Port*/
- duCfgParam.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
-
- /* F1 CU IP Address and Port*/
- duCfgParam.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
-
- /* Fill RIC Params */
- duCfgParam.sctpParams.ricIpAddr.ipV4Addr = ipv4_ric;
-
- /* EGTP Parameters */
- duCfgParam.egtpParams.localIp.ipV4Pres = TRUE;
- duCfgParam.egtpParams.localIp.ipV4Addr = ipv4_du;
- duCfgParam.egtpParams.localPort = F1_EGTP_PORT;
- duCfgParam.egtpParams.destIp.ipV4Pres = TRUE;
- duCfgParam.egtpParams.destIp.ipV4Addr = ipv4_cu;
- duCfgParam.egtpParams.destPort = F1_EGTP_PORT;
- duCfgParam.egtpParams.minTunnelId = MIN_TEID;
- duCfgParam.egtpParams.maxTunnelId = MAX_TEID;
-
- duCfgParam.maxUe = 32; //TODO: Check
-
- /* DU Info */
- duCfgParam.duId = DU_ID;
- DU_ALLOC(duCfgParam.duName, sizeof(DU_NAME));
- if(!duCfgParam.duName)
- {
- DU_LOG("\nDEBUG --> DU_APP: readCfg(): Memory allocation failure for DU name");
- return RFAILED;
- }
- strcpy((char*)duCfgParam.duName,DU_NAME);
-
- memset(&duCb.e2apDb, 0, sizeof(E2apDb));
- duCb.e2apDb.e2NodeId = DU_ID;
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;
- 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.ranac = DU_RANAC;
-
-#ifdef O1_ENABLE
- sib1.tac = cellParams.nRTAC;
- sib1.cellIdentity = CELL_IDENTITY * cellParams.cellLocalId;
- DU_LOG("\nDEBUG --> DU_APP: readCfg(): OAM CellLocalId=%d", \
- sib1.cellIdentity);
-#else
- sib1.tac = DU_TAC;
- sib1.cellIdentity = CELL_IDENTITY * NR_CELL_ID;
-#endif
- sib1.cellResvdForOpUse = PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved;
- sib1.connEstFailCnt = ConnEstFailureControl__connEstFailCount_n3;
- sib1.connEstFailOffValidity = ConnEstFailureControl__connEstFailOffsetValidity_s900;
- sib1.connEstFailOffset = 15;
- sib1.siSchedInfo.winLen = SI_SchedulingInfo__si_WindowLength_s5;
- sib1.siSchedInfo.broadcastSta = SchedulingInfo__si_BroadcastStatus_broadcasting;
- sib1.siSchedInfo.preiodicity = SchedulingInfo__si_Periodicity_rf8;
- sib1.siSchedInfo.sibType = SIB_TypeInfo__type_sibType2;
- sib1.siSchedInfo.sibValTag = SIB1_VALUE_TAG;
-
- fillServCellCfgCommSib(&sib1.srvCellCfgCommSib);
-
- duCfgParam.sib1Params = sib1;
-
for(srvdCellIdx=0; srvdCellIdx<DEFAULT_CELLS; srvdCellIdx++)
{
memset(&duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.cellInfo.nrCgi.plmn, 0, sizeof(Plmn));
return ROK;
}
-#ifdef XML_BASED_CONFIG
/*******************************************************************
*
* @brief Fill SCTP Parameters
* ****************************************************************/
uint8_t parseSctpParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SctpParams *sctp)
{
- uint8_t max_du_port;
- uint16_t f1_sctp_port;
- uint16_t e2_sctp_port;
+ uint8_t max_du_port = 0;
+ uint16_t f1_sctp_port = 0;
+ uint16_t e2_sctp_port = 0;
memset(sctp, 0, sizeof(SctpParams));
cur = cur->xmlChildrenNode;
while (cur != NULL)
{
+#ifdef O1_ENABLE
+ sctp->duPort[F1_INTERFACE] = g_cfg.DU_Port;
+ sctp->duPort[E2_INTERFACE] = g_cfg.RIC_Port;
+ sctp->cuPort = g_cfg.CU_Port;
+ sctp->ricPort = g_cfg.RIC_Port;
+#else
if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_DU_PORT")) && (cur->ns == ns))
{
max_du_port = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
sctp->duPort[E2_INTERFACE] = e2_sctp_port; /* RIC Port idx 1 */
}
}
+
if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_SCTP_PORT")) && (cur->ns == ns))
{
f1_sctp_port = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
e2_sctp_port = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
-#ifdef O1_ENABLE
- sctp->cuPort = g_cfg.CU_Port;
- sctp->ricPort = g_cfg.RIC_Port;
-#else
sctp->cuPort = f1_sctp_port;
sctp->ricPort = e2_sctp_port;
#endif
return ROK;
}
-/*******************************************************************
- *
- * @brief Fill RRC version
- *
- * @details
- *
- * Function : parseF1RrcVersion
- *
- * Functionality: Fill RRC version
- *
- * @params[in] XML document pointer
- * XML namespace
- * Current node in XML
- * Pointer to structure to be filled
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-uint8_t parseF1RrcVersion(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur,F1RrcVersion *f1RrcVersion)
-{
- memset(f1RrcVersion, 0, sizeof(F1RrcVersion));
- cur = cur->xmlChildrenNode;
- while(cur != NULL)
- {
- if((!xmlStrcmp(cur->name, (const xmlChar *)"RRC_VER")) && (cur->ns == ns))
- {
- strcpy((char*)f1RrcVersion->rrcVer, (char*)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
- }
-
- if((!xmlStrcmp(cur->name, (const xmlChar *)"EXT_RRC_VER")) && (cur->ns == ns))
- {
- f1RrcVersion->extRrcVer = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
- }
- cur = cur -> next;
- }
- return ROK;
-}
-
/*******************************************************************
*
* @brief Fill PLMN ID
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));
}
return ROK;
}
+#ifdef XML_BASED_CONFIG
/*******************************************************************
*
* @brief Fill Supported Slice List
}
return ROK;
}
+#endif
/*******************************************************************
*
child = cur->xmlChildrenNode;
while (child != NULL)
{
- if ((!xmlStrcmp(child->name, (const xmlChar *)"LIST")) && (child->ns == ns))
+ if ((!xmlStrcmp(child->name, (const xmlChar *)"PUSCH_TIME_DOM_RSRC_ALLOC")) && (child->ns == ns))
{
- rsrcNode = child->xmlChildrenNode;
- while (rsrcNode != NULL)
+ if(parsePuschCmnTimeDomRsrcAlloc(doc, ns, child, &puschCfgCmn->timeDomAllocList[rsrcIdx]) != ROK)
{
- if ((!xmlStrcmp(rsrcNode->name, (const xmlChar *)"PUSCH_TIME_DOM_RSRC_ALLOC")) \
- && (rsrcNode->ns == ns))
- {
- if(parsePuschCmnTimeDomRsrcAlloc(doc, ns, rsrcNode, &puschCfgCmn->timeDomAllocList[rsrcIdx]) != ROK)
- {
- return RFAILED;
- }
- rsrcIdx++;
- }
- rsrcNode = rsrcNode->next;
+ return RFAILED;
}
+ rsrcIdx++;
}
child = child->next;
}
* RFAILED - failure
*
* ****************************************************************/
-uint8_t parseScsSpecCarrier(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur,ScsSpecCarrier *scsSpecCrr)
+uint8_t parseScsSpecCarrier(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, ScsSpecCarrier *scsSpecCrr)
{
memset(scsSpecCrr, 0, sizeof(ScsSpecCarrier));
+
+#ifdef O1_ENABLE
+ scsSpecCrr->scsOffset = cellParams.ssbOffset;
+ scsSpecCrr->scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
+ scsSpecCrr->scsBw = cellParams.bSChannelBwUL;
+#else
cur = cur -> xmlChildrenNode;
while(cur != NULL)
{
}
cur = cur -> next;
}
+#endif
return ROK;
}
cur = cur -> xmlChildrenNode;
while(cur != NULL)
{
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"DFLT_PAGING_CYCLE")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"DEFAULT_PAGING_CYCLE")) && (cur->ns == ns))
{
pcchCfg->dfltPagingCycle = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NAND_PAGING_FRM_OFFSET")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NAND_PAGING_FRAME_OFFSET")) && (cur->ns == ns))
{
pcchCfg->nAndPagingFrmOffsetType = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"PAGE_FRM_OFFSET")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"PAGE_FRAME_OFFSET")) && (cur->ns == ns))
{
pcchCfg->pageFrameOffset = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
pcchCfg->firstPDCCHMontioringType = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"LIST")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"FIRST_PDCCH_LIST")) && (cur->ns == ns))
{
child = cur->xmlChildrenNode;
- while(child != NULL)
+ while (child != NULL)
{
- if ((!xmlStrcmp(child->name, (const xmlChar *)"FIRST_PDCCH_LIST")) && (child->ns == ns))
+ if ((!xmlStrcmp(child->name, (const xmlChar *)"FIRST_PDCCH_MONITORING_INFO")) && (child->ns == ns))
{
- firstPdcchNode = child->xmlChildrenNode;
- while (firstPdcchNode != NULL)
- {
- if ((!xmlStrcmp(firstPdcchNode->name, (const xmlChar *)"FIRST_PDCCH_MONITORING_INFO")) && (firstPdcchNode->ns == ns))
- {
- pcchCfg->firstPDCCHMontioringInfo[idx] = atoi((char *)xmlNodeListGetString(doc, firstPdcchNode->xmlChildrenNode, 1));
- idx++;
- }
- firstPdcchNode = firstPdcchNode->next;
- }
+ pcchCfg->firstPDCCHMontioringInfo[idx] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
+ idx++;
}
- child = child -> next;
+ child = child->next;
}
}
cur = cur -> next;
{
uint8_t idx = 0;
xmlNodePtr child = NULLP;
- xmlNodePtr listChild = NULLP;
memset(pdschCfgCmn, 0, sizeof(PdschCfgCommon));
cur = cur -> xmlChildrenNode;
child = cur->xmlChildrenNode;
while (child != NULL)
{
- if ((!xmlStrcmp(child->name, (const xmlChar *)"LIST")) && (child->ns == ns))
+ if ((!xmlStrcmp(child->name, (const xmlChar *)"PDSCH_TIME_DOM_RSRC_ALLOC")) && (child->ns == ns))
{
- listChild = child->xmlChildrenNode;
- while (listChild != NULL)
+ if(parsePdschTimeDomRsrcAlloc(doc, ns, child, &pdschCfgCmn->timeDomAlloc[idx]) != ROK)
{
- if ((!xmlStrcmp(listChild->name, (const xmlChar *)"PDSCH_TIME_DOM_RSRC_ALLOC")) && (listChild->ns == ns))
- {
- if(parsePdschTimeDomRsrcAlloc(doc, ns, listChild, &pdschCfgCmn->timeDomAlloc[idx]) != ROK)
- {
- return RFAILED;
- }
- idx++;
- }
- listChild = listChild->next;
+ return RFAILED;
}
+ idx++;
}
child = child->next;
}
{
uint8_t idx = 0;
xmlNodePtr child = NULLP;
- xmlNodePtr listChild = NULLP;
memset(pdccgCfgCmn, 0, sizeof( PdcchCfgCommon));
cur = cur -> xmlChildrenNode;
pdccgCfgCmn->ctrlRsrcSetId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"MONITOR_SLOT_PRD_OFFPRESENT")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"MONITOR_SLOT_PERIOD_OFFSET_PRESENT")) && (cur->ns == ns))
{
pdccgCfgCmn->monitorSlotPrdAndOffPresent = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"LIST")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"MONITOR_LIST")) && (cur->ns == ns))
{
child = cur->xmlChildrenNode;
while (child)
{
- if ((!xmlStrcmp(child->name, (const xmlChar *)"MONITOR_LIST")) && (child->ns == ns))
+ if ((!xmlStrcmp(child->name, (const xmlChar *)"MONITOR_SYMBOL_IN_SLOT")) && (child->ns == ns))
{
- listChild = child->xmlChildrenNode;
- while (listChild != NULL)
- {
- if ((!xmlStrcmp(listChild->name, (const xmlChar *)"MONITOR_SYMBOL_INSLOT")) && (listChild->ns == ns))
- {
- pdccgCfgCmn->monitorSymbolsInSlot[idx] = atoi((char *)xmlNodeListGetString(doc, listChild->xmlChildrenNode, 1));
- idx++;
- }
- listChild = listChild->next;
- }
+ pdccgCfgCmn->monitorSymbolsInSlot[idx] = atoi((char *)xmlNodeListGetString(doc, child->xmlChildrenNode, 1));
+ idx++;
}
child = child->next;
}
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUMC_AGG_LVL1")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_CANDIDATE_AGG_LVL_1")) && (cur->ns == ns))
{
pdccgCfgCmn->numCandAggLvl1 = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUMC_AGG_LVL2")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_CANDIDATE_AGG_LVL_2")) && (cur->ns == ns))
{
pdccgCfgCmn->numCandAggLvl2 = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUMC_AGG_LVL4")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_CANDIDATE_AGG_LVL_4")) && (cur->ns == ns))
{
pdccgCfgCmn->numCandAggLvl4 = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUMC_AGG_LVL8")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_CANDIDATE_AGG_LVL_8")) && (cur->ns == ns))
{
pdccgCfgCmn->numCandAggLvl8 = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUMC_AGG_LVL16")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"NUM_CANDIDATE_AGG_LVL_16")) && (cur->ns == ns))
{
pdccgCfgCmn->numCandAggLvl16 = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"SEARCH_SPC_TYPE")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"SEARCH_SPACE_TYPE")) && (cur->ns == ns))
{
pdccgCfgCmn->searchSpcType = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"PDCCH_SERACH_SPACE_DCI_FORMAT")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"PDCCH_SEARCH_SPACE_DCI_FORMAT")) && (cur->ns == ns))
{
pdccgCfgCmn->commSrchSpcDciFrmt = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
pdccgCfgCmn->pagingSearchSpc = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"RA_PDCCH_SEARCH_SPACE_ID_PAGING")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"PDCCH_SEARCH_SPACE_ID_RA")) && (cur->ns == ns))
{
pdccgCfgCmn->raSearchSpc = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
return RFAILED;
}
}
-
cur = cur -> next;
}
return ROK;
cur = cur -> xmlChildrenNode;
while(cur != NULL)
{
+#ifdef O1_ENABLE
+ srvCellCfgCmnSib->scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
+#else
if ((!xmlStrcmp(cur->name, (const xmlChar *)"NR_SCS")) && (cur->ns == ns))
{
srvCellCfgCmnSib->scs = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
-
+#endif
if ((!xmlStrcmp(cur->name, (const xmlChar *)"SSB_POS_INBURST")) && (cur->ns == ns))
{
srvCellCfgCmnSib->ssbPosInBurst = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
siSchedInfo->winLen = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"BROADCAST_STA")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"BROADCAST_STATUS")) && (cur->ns == ns))
{
siSchedInfo->broadcastSta = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
siSchedInfo->sibType = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIB1_VAL_TAG")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIB1_VALUE_TAG")) && (cur->ns == ns))
{
siSchedInfo->sibValTag = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
cur = cur -> xmlChildrenNode;
while(cur != NULL)
{
+#ifdef O1_ENABLE
+ sib1Params-> tac = cellParams.nRTAC;
+ sib1Params->cellIdentity = CELL_IDENTITY * cellParams.cellLocalId;
+ DU_LOG("\nDEBUG --> DU_APP: readCfg(): OAM CellLocalId=%d", sib1Params->cellIdentity);
+#else
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"TAC")) && (cur->ns == ns))
+ {
+ sib1Params-> tac = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
+ }
+
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"CELL_IDENTITY")) && (cur->ns == ns))
+ {
+ sib1Params->cellIdentity = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
+ }
+#endif
+
if ((!xmlStrcmp(cur->name, (const xmlChar *)"PLMN")) && (cur->ns == ns))
{
if(parsePlmn(doc, ns, cur, &sib1Params->plmn) != ROK)
}
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"TAC")) && (cur->ns == ns))
- {
- sib1Params-> tac = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
- }
-
if ((!xmlStrcmp(cur->name, (const xmlChar *)"RANAC")) && (cur->ns == ns))
{
sib1Params->ranac = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"CELL_IDENTITY")) && (cur->ns == ns))
- {
- sib1Params->cellIdentity = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
- }
-
if ((!xmlStrcmp(cur->name, (const xmlChar *)"CELL_RESVD_OPUSE")) && (cur->ns == ns))
{
sib1Params->cellResvdForOpUse = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"SRV_CELLCFG_COM_SIB")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"SRV_CELL_CFG_COM_SIB")) && (cur->ns == ns))
{
if(parseSrvCellCfgCmnSib(doc, ns, cur, &sib1Params->srvCellCfgCommSib) != ROK)
{
return ROK;
}
+#ifndef O1_ENABLE
/*******************************************************************
*
* @brief Fill RRM Policy List
return ROK;
}
-/*******************************************************************
/*******************************************************************
*
* @brief Fill MAC Slice RRM Policy
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*));
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));
}
}
#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
#endif
}
-#ifdef XML_BASED_CONFIG
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_DRB")) && (cur->ns == ns))
- {
- duCfgParam.maxNumDrb = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
- }
-
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_UE_SUPPORTED")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"GNB_ID")) && (cur->ns == ns))
{
- duCfgParam.maxSupportedUes = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
+ duCb.gnbId = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
if ((!xmlStrcmp(cur->name, (const xmlChar *)"DU_ID")) && (cur->ns == ns))
strcpy((char*)duCfgParam.duName, tempDuName);
}
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_DRB")) && (cur->ns == ns))
+ {
+ duCfgParam.maxNumDrb = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
+ }
+
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_UE_SUPPORTED")) && (cur->ns == ns))
+ {
+ duCfgParam.maxSupportedUes = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
+ }
+
if ((!xmlStrcmp(cur->name, (const xmlChar *)"MAX_NUM_UE")) && (cur->ns == ns))
{
duCfgParam.maxUe = atoi((char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1));
}
}
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_RRC_VERSION")) && (cur->ns == ns))
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIB1_PARAMS")) && (cur->ns == ns))
{
- if(parseF1RrcVersion(doc, ns, cur, &duCfgParam.rrcVersion) != ROK)
+ if(parseSib1Params(doc, ns, cur, &duCfgParam.sib1Params) != ROK)
{
return RFAILED;
}
}
+#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 *)"SIB1_PARAMS")) && (cur->ns == ns))
+#ifndef O1_ENABLE
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"SLICE_CFG")) && (cur->ns == ns))
{
- if(parseSib1Params(doc, ns, cur, &duCfgParam.sib1Params) != ROK)
+ if(parseMacSliceCfgReq(doc, ns, cur, &duCfgParam.tempSliceCfg) != ROK)
{
return RFAILED;
}
}
+#endif
- if ((!xmlStrcmp(cur->name, (const xmlChar *)"SLICE_CFG")) && (cur->ns == ns))
+ if((!xmlStrcmp(cur->name, (const xmlChar *)"DU_TIMER_INFO")) && (cur->ns == ns))
{
- if(parseMacSliceCfgReq(doc, ns, cur, &duCfgParam.tempSliceCfg) != ROK)
+ if(parseDuTimerParams(doc, ns, cur, &duCb.duTimersInfo) != ROK)
{
return RFAILED;
}
}
-#endif
+ 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;
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)
{
DU_LOG("Cell Barred %ld\n", mib->cellBarred);
DU_LOG("Intra Frequency Reselection %ld\n", mib->intraFreqReselection);
- f1RrcVersion = &duCfgParam.rrcVersion;
- DU_LOG("\n ** RRC Version ** \n");
- DU_LOG("RRC Version %s\n", f1RrcVersion->rrcVer);
- DU_LOG("Extended RRC Version %d\n", f1RrcVersion->extRrcVer);
-
duSysInfo = &duCfgParam.srvdCellLst[0].duSysInfo;
DU_LOG("\n ** DU System Information ** \n");
DU_LOG("MIB length %d\n", duSysInfo->mibLen);
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]);