From 2e3617064e27b8d7bb5ba74319f8c1c99491b8dd Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Tue, 20 Feb 2024 16:14:46 +0530 Subject: [PATCH] [Epic-ID: ODUHIGH-538][Issue-ID: ODUHIGH-563] Fixes to read SCTP and EGTP configuration from XML file Change-Id: I9c78f7cf9b8e574fa1dba8af362737d5e136e886 Signed-off-by: lal.harshita --- build/config/odu_config.xml | 6 +- src/du_app/du_cfg.c | 177 ++++++------------------------------------- src/du_app/du_cfg.h | 14 ---- src/du_app/du_f1ap_msg_hdl.c | 2 +- 4 files changed, 27 insertions(+), 172 deletions(-) diff --git a/build/config/odu_config.xml b/build/config/odu_config.xml index 777316e4f..2bb368226 100644 --- a/build/config/odu_config.xml +++ b/build/config/odu_config.xml @@ -15,9 +15,9 @@ 29 3 32 - 192.168.130.71 - 192.168.130.72 - 192.168.130.70 + 192.168.130.81 + 192.168.130.82 + 192.168.130.80 38472 36421 diff --git a/src/du_app/du_cfg.c b/src/du_app/du_cfg.c index 6ea0cdb4a..6f95194ce 100644 --- a/src/du_app/du_cfg.c +++ b/src/du_app/du_cfg.c @@ -351,35 +351,6 @@ uint8_t readMacCfg() 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; -} - /******************************************************************* * * @brief Configures the DU Parameters @@ -604,7 +575,6 @@ uint8_t readCfg() 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; @@ -623,61 +593,8 @@ uint8_t readCfg() /* 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.e2NodeId = 1; //Will be removed as part of E2 config parser duCb.e2apDb.e2TransInfo.transIdCounter = 0; duCb.e2apDb.numOfTNLAssoc = 1; @@ -1129,7 +1046,6 @@ uint8_t cpyRrmPolicyInDuCfgParams(RrmPolicyList rrmPolicy[], uint8_t policyNum, return ROK; } -#ifdef XML_BASED_CONFIG /******************************************************************* * * @brief Fill SCTP Parameters @@ -1150,14 +1066,20 @@ uint8_t cpyRrmPolicyInDuCfgParams(RrmPolicyList rrmPolicy[], uint8_t policyNum, * ****************************************************************/ 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)); @@ -1167,6 +1089,7 @@ uint8_t parseSctpParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SctpParams * 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)); @@ -1176,10 +1099,6 @@ uint8_t parseSctpParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SctpParams * 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 @@ -1229,6 +1148,7 @@ uint8_t parseEgtpParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, F1EgtpParams return ROK; } +#ifdef XML_BASED_CONFIG /******************************************************************* * * @brief Fill MIB configuration @@ -1290,44 +1210,6 @@ uint8_t parseMibParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, MibParams *mi 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 @@ -5395,17 +5277,6 @@ uint8_t parseDuCfgParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) #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)) - { - duCfgParam.maxSupportedUes = 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)); @@ -5423,6 +5294,16 @@ uint8_t parseDuCfgParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) 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)); @@ -5484,6 +5365,7 @@ uint8_t parseDuCfgParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) 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) @@ -5492,14 +5374,6 @@ uint8_t parseDuCfgParams(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) } } - if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_RRC_VERSION")) && (cur->ns == ns)) - { - if(parseF1RrcVersion(doc, ns, cur, &duCfgParam.rrcVersion) != ROK) - { - return RFAILED; - } - } - if ((!xmlStrcmp(cur->name, (const xmlChar *)"F1_DU_SRVD_CELL_INFO")) && (cur->ns == ns)) { if(parseF1DuServedCellInfo(doc, ns, cur, &duCfgParam.srvdCellLst[0]) != ROK) @@ -5774,11 +5648,6 @@ void printDuConfig() 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); diff --git a/src/du_app/du_cfg.h b/src/du_app/du_cfg.h index 1b902dd59..cc638f100 100644 --- a/src/du_app/du_cfg.h +++ b/src/du_app/du_cfg.h @@ -27,22 +27,10 @@ #define GNB_ID 1 /* As per 38.423,Sec 9.2.2.1, gnbId range b/w 0 to 4294967295 */ #define DU_INST 0 -#define DU_ID 1 -#ifndef O1_ENABLE -#define DU_IP_V4_ADDR "192.168.130.81" -#define CU_IP_V4_ADDR "192.168.130.82" -#define RIC_IP_V4_ADDR "192.168.130.80" - -#define F1_SCTP_PORT 38472 /* As per the spec 38.472, the registered port number for F1AP is 38472 */ -#define E2_SCTP_PORT 36421 -#endif - -#define F1_EGTP_PORT 2152 /* As per the spec 29.281, the registered port number for GTP-U is 2152 */ #define NR_PCI 1 #define NR_CELL_ID 1 -#define DU_NAME "ORAN OAM DU" #define CELL_TYPE SMALL //TODO: while testing for TDD, Mu1 and 100 MHz, this flag must be enabled @@ -1275,9 +1263,7 @@ typedef struct duCfgParams ThreadInfo threadInfo; SctpParams sctpParams; /* SCTP Params */ F1EgtpParams egtpParams; /* EGTP Params */ - SchedulerCfg schedCfg; F1DuSrvdCellInfo srvdCellLst[MAX_NUM_CELL]; /* Serving cell list *///TODO: this must be removed eventually - F1RrcVersion rrcVersion; /* RRC version */ MacCellCfg macCellCfg; /* MAC cell configuration */ MibParams mibParams; /* MIB Params */ Sib1Params sib1Params; /* SIB1 Params */ diff --git a/src/du_app/du_f1ap_msg_hdl.c b/src/du_app/du_f1ap_msg_hdl.c index 85f3396e4..87c15361a 100644 --- a/src/du_app/du_f1ap_msg_hdl.c +++ b/src/du_app/du_f1ap_msg_hdl.c @@ -10567,7 +10567,7 @@ uint8_t extractUpTnlInfo(uint8_t drbId, uint8_t configType,\ #ifdef O1_ENABLE cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du); #else - cmInetAddr((char *)DU_IP_V4_ADDR, &ipv4_du); + ipv4_du = duCfgParam.egtpParams.localIp.ipV4Addr; #endif for(tnlIdx=0; tnlIdx < tnlInfo->list.count; tnlIdx++) -- 2.16.6