From 7bbfb856ac535a1d45ebdf9d37bb3ffc5e7a83dc Mon Sep 17 00:00:00 2001 From: "lal.harshita" Date: Fri, 27 Jan 2023 11:36:53 +0530 Subject: [PATCH] [Issue-ID : ODUHIGH-487] EGTP Port fix at F1 interface Signed-off-by: lal.harshita Change-Id: I18c6f314f9a927ae49db92e4f9b0e4a3113f3bdb Signed-off-by: lal.harshita --- container-tag.yaml | 2 +- docs/release-notes.rst | 5 ++-- docs/user-guide.rst | 8 ++--- releases/container-release-o-du-l2 | 6 ++-- releases/container-release-o-du-l2-cu-stub | 6 ++-- src/cm/common_def.h | 1 + src/cu_stub/cu_stub.c | 32 ++++++++++---------- src/cu_stub/cu_stub.h | 5 ++-- src/cu_stub/cu_stub_egtp.c | 47 +++++++----------------------- src/cu_stub/cu_stub_egtp.h | 28 +++++++----------- src/cu_stub/cu_stub_sctp.c | 25 ++++++++-------- src/du_app/du_cfg.c | 4 +-- src/du_app/du_cfg.h | 5 ++-- src/du_app/du_egtp.c | 44 ++++++++-------------------- src/du_app/du_egtp.h | 15 +++------- src/du_app/du_mgr_main.c | 2 ++ src/phy_stub/phy_stub.h | 2 +- src/phy_stub/phy_stub_thread_hdl.c | 2 +- src/ric_stub/ric_stub.h | 2 +- 19 files changed, 92 insertions(+), 149 deletions(-) diff --git a/container-tag.yaml b/container-tag.yaml index 52a46acae..3b270aaaa 100644 --- a/container-tag.yaml +++ b/container-tag.yaml @@ -1,4 +1,4 @@ # The Jenkins job requires a tag to build the Docker image. # Global-JJB script assumes this file is in the repo root. --- -tag: 7.0.3 +tag: 7.0.4 diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 60c7fadcc..59a3efef8 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -19,7 +19,7 @@ Version history | **Date** | **Ver.** | **Author** | **Comment** | | | | | | +--------------------+--------------------+--------------------+--------------------+ -|2022-12-15 | 7.0.2 | Radisys, | G release | +|2022-12-15 | 7.0.3 | Radisys, | G release | | | | HCL Technologies | | | | | Ltd. | | +--------------------+--------------------+--------------------+--------------------+ @@ -200,8 +200,7 @@ G release | | | +--------------------------------------+------------------------------------------+ | **Repo/commit-ID** |o-du/l2/ | -| |I05be329b84ec8c0b14e362976ef49f1b15315bec | -| | | +| |I18c6f314f9a927ae49db92e4f9b0e4a3113f3bdb | +--------------------------------------+------------------------------------------+ | **Release designation** | G release | | | | diff --git a/docs/user-guide.rst b/docs/user-guide.rst index e4a1318af..167417d2f 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -66,17 +66,17 @@ II. Execution - Using Docker Images The call flow between O-DU High and CU Stub can be achieved by executing docker containers. - Pull the last built docker images: - - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:7.0.3 - - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:7.0.3 + - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:7.0.4 + - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:7.0.4 - Run CU Stub docker: - docker run -it --privileged --net=host --entrypoint bash - nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:7.0.3 + nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:7.0.4 - ./cu_stub - Run ODU docker: - docker run -it --privileged --net=host --entrypoint bash - nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:7.0.3 + nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:7.0.4 - ./odu diff --git a/releases/container-release-o-du-l2 b/releases/container-release-o-du-l2 index 1ba892839..b65cb1424 100644 --- a/releases/container-release-o-du-l2 +++ b/releases/container-release-o-du-l2 @@ -1,11 +1,11 @@ --- distribution_type: container -container_release_tag: 7.0.3 +container_release_tag: 7.0.4 container_pull_registry: nexus.o-ran-sc.org:10004 container_push_registry: nexus.o-ran-sc.org:10002 project: o-du-l2 -ref: 2430b6f8a31218e1902bfdf8f96ed479cceb632e +ref: 021ed9015df5ec5b3b97a449d2c5e14e2fa7c99c containers: - name: o-du-l2 -version: 7.0.3 +version: 7.0.4 diff --git a/releases/container-release-o-du-l2-cu-stub b/releases/container-release-o-du-l2-cu-stub index 91e051700..b7c4c12a6 100644 --- a/releases/container-release-o-du-l2-cu-stub +++ b/releases/container-release-o-du-l2-cu-stub @@ -1,11 +1,11 @@ --- distribution_type: container -container_release_tag: 7.0.3 +container_release_tag: 7.0.4 container_pull_registry: nexus.o-ran-sc.org:10004 container_push_registry: nexus.o-ran-sc.org:10002 project: o-du-l2 -ref: 2430b6f8a31218e1902bfdf8f96ed479cceb632e +ref: 021ed9015df5ec5b3b97a449d2c5e14e2fa7c99c containers: - name: o-du-l2-cu-stub -version: 7.0.3 +version: 7.0.4 diff --git a/src/cm/common_def.h b/src/cm/common_def.h index b61641aed..9c3d555e7 100644 --- a/src/cm/common_def.h +++ b/src/cm/common_def.h @@ -345,6 +345,7 @@ void oduCpyFixBufToMsg(uint8_t *fixBuf, Buffer *mBuf, uint16_t len); uint8_t buildPlmnId(Plmn plmn, uint8_t *buf); uint16_t convertScsEnumValToScsVal(uint8_t scsEnumValue); uint8_t convertScsValToScsEnum(uint32_t num); +uint8_t convertScsPeriodicityToEnum(uint32_t num); uint8_t SGetSBufNewForDebug(char *file, const char *func, int line, Region region, Pool pool, Data **ptr, Size size); uint8_t SPutSBufNewForDebug(char *file, const char *func, int line, Region region, Pool pool, Data *ptr, Size size); diff --git a/src/cu_stub/cu_stub.c b/src/cu_stub/cu_stub.c index c82fcdcc0..619b07755 100644 --- a/src/cu_stub/cu_stub.c +++ b/src/cu_stub/cu_stub.c @@ -161,12 +161,12 @@ void readCuCfg() cuCb.cuCfgParams.sctpParams.f1SctpPort = g_cfg.CU_Port; cuCb.cuCfgParams.sctpParams.numDestNode = 1; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].localIp.ipV4Pres = TRUE; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].localIp.ipV4Addr = ipv4_cu; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].localPort = CU_EGTP_PORT[0]; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].destIp.ipV4Pres = TRUE; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].destIp.ipV4Addr = ipv4_du; - cuCb.cuCfgParams.egtpParams.egtpAssoc[0].destPort = DU_EGTP_PORT[0]; + cuCb.cuCfgParams.egtpParams.localIp.ipV4Pres = TRUE; + cuCb.cuCfgParams.egtpParams.localIp.ipV4Addr = ipv4_cu; + cuCb.cuCfgParams.egtpParams.localPort = F1_EGTP_PORT; + cuCb.cuCfgParams.egtpParams.dstCfg[0].dstIp.ipV4Pres = TRUE; + cuCb.cuCfgParams.egtpParams.dstCfg[0].dstIp.ipV4Addr = ipv4_du; + cuCb.cuCfgParams.egtpParams.dstCfg[0].dstPort = F1_EGTP_PORT; cuCb.cuCfgParams.egtpParams.minTunnelId = MIN_TEID; cuCb.cuCfgParams.egtpParams.currTunnelId = cuCb.cuCfgParams.egtpParams.minTunnelId; cuCb.cuCfgParams.egtpParams.maxTunnelId = MAX_TEID; @@ -176,32 +176,34 @@ void readCuCfg() /* CU IP Address and Port*/ memset(&ipv4_du, 0, sizeof(uint32_t)); cmInetAddr((S8*)LOCAL_IP_CU, &ipv4_cu); + cuCb.cuCfgParams.sctpParams.localIpAddr.ipV4Addr = ipv4_cu; cuCb.cuCfgParams.sctpParams.localIpAddr.ipV6Pres = false; cuCb.cuCfgParams.sctpParams.f1SctpPort = F1_SCTP_PORT; + cuCb.cuCfgParams.egtpParams.localIp.ipV4Pres = TRUE; + cuCb.cuCfgParams.egtpParams.localIp.ipV4Addr = ipv4_cu; + cuCb.cuCfgParams.egtpParams.localPort = F1_EGTP_PORT; + cuCb.cuCfgParams.sctpParams.numDestNode = 0; cuCb.cuCfgParams.egtpParams.numDu = 0; numDu = 0; while(numDu < NUM_F1_ASSOC) { - /* DU IP Address and Port*/ + /* DU IP Address */ memset(&ipv4_du, 0, sizeof(uint32_t)); cmInetAddr((S8*)REMOTE_IP_DU[numDu], &ipv4_du); + + /* SCTP Parameters */ cuCb.cuCfgParams.sctpParams.destCb[numDu].destIpAddr.ipV4Addr = ipv4_du; cuCb.cuCfgParams.sctpParams.destCb[numDu].destIpAddr.ipV6Pres = false; cuCb.cuCfgParams.sctpParams.destCb[numDu].destPort = F1_SCTP_PORT; /* EGTP Parameters */ - memset(&ipv4_du, 0, sizeof(uint32_t)); - cmInetAddr((S8*)REMOTE_IP_DU[numDu], &ipv4_du); - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].localIp.ipV4Pres = TRUE; - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].localIp.ipV4Addr = ipv4_cu; - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].localPort = CU_EGTP_PORT[numDu]; - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].destIp.ipV4Pres = TRUE; - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].destIp.ipV4Addr = ipv4_du; - cuCb.cuCfgParams.egtpParams.egtpAssoc[numDu].destPort = DU_EGTP_PORT[numDu]; + cuCb.cuCfgParams.egtpParams.dstCfg[numDu].dstIp.ipV4Pres = TRUE; + cuCb.cuCfgParams.egtpParams.dstCfg[numDu].dstIp.ipV4Addr = ipv4_du; + cuCb.cuCfgParams.egtpParams.dstCfg[numDu].dstPort = F1_EGTP_PORT; (numDu)++; } diff --git a/src/cu_stub/cu_stub.h b/src/cu_stub/cu_stub.h index 9b8c9aa31..4c51a82f8 100644 --- a/src/cu_stub/cu_stub.h +++ b/src/cu_stub/cu_stub.h @@ -28,13 +28,12 @@ #ifndef O1_ENABLE #define LOCAL_IP_CU "192.168.130.82" -#define F1_SCTP_PORT 38472 +#define F1_SCTP_PORT 38472 /* As per the spec 38.472, the registered port number for F1AP is 38472 */ #define NUM_F1_ASSOC 1 #define REMOTE_IP_DU (char*[]){"192.168.130.81", "192.168.130.83"} #endif -#define DU_EGTP_PORT (int[]){39001, 39002} -#define CU_EGTP_PORT (int[]){39003, 39004} +#define F1_EGTP_PORT 2152 /* As per the spec 29.281, the registered port number for GTP-U is 2152 */ #define RRC_VER 0 #define EXT_RRC_VER 5 diff --git a/src/cu_stub/cu_stub_egtp.c b/src/cu_stub/cu_stub_egtp.c index c53bc6d92..4ccdf511a 100644 --- a/src/cu_stub/cu_stub_egtp.c +++ b/src/cu_stub/cu_stub_egtp.c @@ -123,16 +123,14 @@ S16 cuEgtpCfgReq() memcpy(&egtpCb.egtpCfg, &cuCb.cuCfgParams.egtpParams, sizeof(CuEgtpParams)); + egtpCb.localAddr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.localIp.ipV4Addr); + egtpCb.localAddr.port = egtpCb.egtpCfg.localPort; + for(destIdx=0; destIdx < egtpCb.egtpCfg.numDu; destIdx++) { - egtpCb.recvTptSrvr.addr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.egtpAssoc[destIdx].localIp.ipV4Addr); - egtpCb.recvTptSrvr.addr.port = EGTP_RECVR_PORT; - egtpCb.dstCb[destIdx].duId = destIdx+1; - egtpCb.dstCb[destIdx].dstIp = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.egtpAssoc[destIdx].destIp.ipV4Addr); - egtpCb.dstCb[destIdx].dstPort = egtpCb.egtpCfg.egtpAssoc[destIdx].destPort; - egtpCb.dstCb[destIdx].sendTptSrvr.addr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.egtpAssoc[destIdx].localIp.ipV4Addr); - egtpCb.dstCb[destIdx].sendTptSrvr.addr.port = egtpCb.egtpCfg.egtpAssoc[destIdx].localPort; + egtpCb.dstCb[destIdx].dstAddr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.dstCfg[destIdx].dstIp.ipV4Addr); + egtpCb.dstCb[destIdx].dstAddr.port = egtpCb.egtpCfg.dstCfg[destIdx].dstPort; egtpCb.dstCb[destIdx].numTunn = 0; ret = cmHashListInit(&(egtpCb.dstCb[destIdx].teIdLst), 1024, sizeof(EgtpTeIdCb), FALSE, CM_HASH_KEYTYPE_UINT32_MOD, CU_APP_MEM_REG, CU_POOL); @@ -177,39 +175,20 @@ S16 cuEgtpSrvOpenReq(Pst *pst) DU_LOG("\nINFO --> EGTP : Received open server request"); sockType = CM_INET_DGRAM; - if((ret = (cmInetSocket(sockType, &(egtpCb.recvTptSrvr.sockFd), protType))) != ROK) + if((ret = (cmInetSocket(sockType, &(egtpCb.sockFd), protType))) != ROK) { DU_LOG("\nERROR --> EGTP : Failed to open UDP socket"); return RFAILED; } - ret = cmInetBind(&(egtpCb.recvTptSrvr.sockFd), &(egtpCb.recvTptSrvr.addr)); + ret = cmInetBind(&(egtpCb.sockFd), &(egtpCb.localAddr)); if(ret != ROK) { DU_LOG("\nERROR --> EGTP : Failed to bind socket"); return RFAILED; } - - for(destIdx=0; destIdx < egtpCb.egtpCfg.numDu; destIdx++) - { - if(ret = (cmInetSocket(sockType, &(egtpCb.dstCb[destIdx].sendTptSrvr.sockFd), protType)) != ROK) - { - DU_LOG("\nERROR --> EGTP : Failed to open UDP socket"); - return RFAILED; - } - ret = cmInetBind(&(egtpCb.dstCb[destIdx].sendTptSrvr.sockFd), &(egtpCb.dstCb[destIdx].sendTptSrvr.addr)); - if(ret != ROK) - { - DU_LOG("\nERROR --> EGTP : Failed to bind socket"); - return RFAILED; - } - - /* TODO: set socket options */ - - DU_LOG("\nINFO --> EGTP : Receiver socket[%d] and Sender socket[%d] open", egtpCb.recvTptSrvr.sockFd.fd,\ - egtpCb.dstCb[destIdx].sendTptSrvr.sockFd.fd); - } + DU_LOG("\nINFO --> EGTP : Socket[%d] is open", egtpCb.sockFd.fd); return ROK; } /* cuEgtpSrvOpenReq */ @@ -780,8 +759,8 @@ S16 BuildAppMsg(uint32_t duId, EgtpMsg *egtpMsg) ipv4Hdr.length = CM_IPV4_HDRLEN + mLen; ipv4Hdr.hdrVer = 0x45; ipv4Hdr.proto = 1; - ipv4Hdr.srcAddr = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.egtpAssoc[duId-1].localIp.ipV4Addr); - ipv4Hdr.destAddr = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.egtpAssoc[duId-1].destIp.ipV4Addr); + ipv4Hdr.srcAddr = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.localIp.ipV4Addr); + ipv4Hdr.destAddr = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.dstCfg[duId-1].dstIp.ipV4Addr); /* Packing IPv4 header into buffer */ S16 ret, cnt, idx; @@ -965,15 +944,11 @@ S16 cuEgtpSendMsg(uint32_t duId, Buffer *mBuf) S16 ret; MsgLen txLen; CmInetMemInfo info; - CmInetAddr dstAddr; info.region = CU_APP_MEM_REG; info.pool = CU_POOL; - dstAddr.port = EGTP_RECVR_PORT; - dstAddr.address = egtpCb.dstCb[duId-1].dstIp; - - ret = cmInetSendMsg(&(egtpCb.dstCb[duId-1].sendTptSrvr.sockFd), &dstAddr, &info, mBuf, &txLen, CM_INET_NO_FLAG); + ret = cmInetSendMsg(&(egtpCb.sockFd), &egtpCb.dstCb[duId-1].dstAddr, &info, mBuf, &txLen, CM_INET_NO_FLAG); if(ret != ROK && ret != RWOULDBLOCK) { DU_LOG("\nERROR --> EGTP : Message send failure"); diff --git a/src/cu_stub/cu_stub_egtp.h b/src/cu_stub/cu_stub_egtp.h index 4decfda12..519c7652b 100644 --- a/src/cu_stub/cu_stub_egtp.h +++ b/src/cu_stub/cu_stub_egtp.h @@ -21,7 +21,6 @@ #ifndef __CU_STUB_EGTP_H__ #define __CU_STUB_EGTP_H__ -#define EGTP_RECVR_PORT 2152 /* As per the spec 29.281, the registered port number for GTP-U is 2152 */ #define EGTP_TNL_MGMT_ADD 1 #define EGTP_TNL_MGMT_MOD 2 #define EGTP_TNL_MGMT_DEL 3 @@ -92,12 +91,6 @@ typedef struct egtpTnlEvt uint32_t remTeid; }EgtpTnlEvt; -typedef struct egtpTptSrvr -{ - CmInetAddr addr; - CmInetFd sockFd; /* Socket file descriptor */ -}EgtpTptSrvr; - typedef struct EgtpTeIdCb { uint32_t teId; /* Local tunnel id */ @@ -112,20 +105,16 @@ typedef struct EgtpTeIdCb typedef struct egtpDstCb { uint32_t duId; - CmInetIpAddr dstIp; /* destination IP */ - uint16_t dstPort; /* Remote port that sends data */ - EgtpTptSrvr sendTptSrvr; /* Transport server for sending UDP msg to */ + CmInetAddr dstAddr; uint32_t numTunn; /* Number of tunnels */ CmHashListCp teIdLst; /* Tunnel Id list for this destination */ }EgtpDstCb; -typedef struct egtpAssoc +typedef struct egtpDstCfg { - SctpIpAddr localIp; - uint16_t localPort; - SctpIpAddr destIp; - uint16_t destPort; -}EgtpAssoc; + SctpIpAddr dstIp; + uint16_t dstPort; +}EgtpDstCfg; typedef struct cuEgtpParams { @@ -133,13 +122,16 @@ typedef struct cuEgtpParams uint32_t minTunnelId; uint32_t maxTunnelId; uint8_t numDu; - EgtpAssoc egtpAssoc[MAX_DU_SUPPORTED]; + SctpIpAddr localIp; + uint16_t localPort; + EgtpDstCfg dstCfg[MAX_DU_SUPPORTED]; }CuEgtpParams; typedef struct egtpGlobalCb { CuEgtpParams egtpCfg; /* EGTP configuration */ - EgtpTptSrvr recvTptSrvr; /* Transport server for receiving UDP msg */ + CmInetAddr localAddr; + CmInetFd sockFd; /* Socket file descriptor */ uint8_t numDu; EgtpDstCb dstCb[MAX_DU_SUPPORTED]; /* Destination endpoint */ uint8_t gCntPdu[MAX_TEID+1]; /* Maintaining PDU count for each bearer */ diff --git a/src/cu_stub/cu_stub_sctp.c b/src/cu_stub/cu_stub_sctp.c index 285414b8a..07b462c3e 100644 --- a/src/cu_stub/cu_stub_sctp.c +++ b/src/cu_stub/cu_stub_sctp.c @@ -421,10 +421,10 @@ uint8_t sctpSockPoll() uint32_t *timeoutPtr; Buffer *egtpBuf; MsgLen egtpBufLen; - CmInetAddr egtpFromAddr; CmInetMemInfo memInfo; sctpSockPollParams f1PollParams; uint64_t numMsgRcvd = 0; + CmInetAddr fromAddr; memset(&f1PollParams, 0, sizeof(sctpSockPollParams)); @@ -449,19 +449,20 @@ uint8_t sctpSockPoll() } /* Receiving EGTP data */ - for(destIdx = 0; destIdx < egtpCb.numDu; destIdx++) + egtpBufLen = -1; + ret = cmInetRecvMsg(&(egtpCb.sockFd), &fromAddr, &memInfo, &egtpBuf, &egtpBufLen, CM_INET_NO_FLAG); + if(ret == ROK && egtpBuf != NULLP) { - - egtpFromAddr.port = egtpCb.dstCb[destIdx].dstPort; - egtpFromAddr.address = egtpCb.dstCb[destIdx].dstIp; - egtpBufLen = -1; - ret = cmInetRecvMsg(&(egtpCb.recvTptSrvr.sockFd), &egtpFromAddr, &memInfo, &egtpBuf, &egtpBufLen, CM_INET_NO_FLAG); - if(ret == ROK && egtpBuf != NULLP) + for(destIdx = 0; destIdx < egtpCb.numDu; destIdx++) { - DU_LOG("\nINFO --> EGTP : Received UL Message [%ld] from DUid %d\n", numMsgRcvd+1, egtpCb.dstCb[destIdx].duId); - numMsgRcvd++; - //ODU_PRINT_MSG(egtpBuf, 0 ,0); - cuEgtpHdlRecvMsg(egtpBuf); + if((fromAddr.port == egtpCb.dstCb[destIdx].dstAddr.port) && (fromAddr.address == egtpCb.dstCb[destIdx].dstAddr.address)) + { + DU_LOG("\nINFO --> EGTP : Received UL Message [%ld] from DU Id [%d]\n", numMsgRcvd+1, egtpCb.dstCb[destIdx].duId); + numMsgRcvd++; + //ODU_PRINT_MSG(egtpBuf, 0 ,0); + cuEgtpHdlRecvMsg(egtpBuf); + break; + } } } diff --git a/src/du_app/du_cfg.c b/src/du_app/du_cfg.c index 8392ff495..d5b87759f 100644 --- a/src/du_app/du_cfg.c +++ b/src/du_app/du_cfg.c @@ -717,10 +717,10 @@ uint8_t readCfg() /* EGTP Parameters */ duCfgParam.egtpParams.localIp.ipV4Pres = TRUE; duCfgParam.egtpParams.localIp.ipV4Addr = ipv4_du; - duCfgParam.egtpParams.localPort = DU_EGTP_PORT; + duCfgParam.egtpParams.localPort = F1_EGTP_PORT; duCfgParam.egtpParams.destIp.ipV4Pres = TRUE; duCfgParam.egtpParams.destIp.ipV4Addr = ipv4_cu; - duCfgParam.egtpParams.destPort = CU_EGTP_PORT; + duCfgParam.egtpParams.destPort = F1_EGTP_PORT; duCfgParam.egtpParams.minTunnelId = MIN_TEID; duCfgParam.egtpParams.maxTunnelId = MAX_TEID; diff --git a/src/du_app/du_cfg.h b/src/du_app/du_cfg.h index 2d197b56c..6f55b4fc9 100644 --- a/src/du_app/du_cfg.h +++ b/src/du_app/du_cfg.h @@ -32,12 +32,11 @@ #define CU_IP_V4_ADDR "192.168.130.82" #define RIC_IP_V4_ADDR "192.168.130.80" -#define F1_SCTP_PORT 38472 +#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 DU_EGTP_PORT 39001 -#define CU_EGTP_PORT 39003 +#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 diff --git a/src/du_app/du_egtp.c b/src/du_app/du_egtp.c index 6fec8da7b..a4a8d8055 100644 --- a/src/du_app/du_egtp.c +++ b/src/du_app/du_egtp.c @@ -288,13 +288,11 @@ uint8_t egtpCfgReq(Pst *pst, EgtpConfig egtpCfg) memcpy(&egtpCb.egtpCfg, &egtpCfg, sizeof(EgtpConfig)); - egtpCb.recvTptSrvr.addr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.localIp.ipV4Addr); - egtpCb.recvTptSrvr.addr.port = EGTP_RECVR_PORT; + egtpCb.localAddr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.localIp.ipV4Addr); + egtpCb.localAddr.port = egtpCb.egtpCfg.localPort; - egtpCb.dstCb.dstIp = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.destIp.ipV4Addr); - egtpCb.dstCb.dstPort = egtpCb.egtpCfg.destPort; - egtpCb.dstCb.sendTptSrvr.addr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.localIp.ipV4Addr); - egtpCb.dstCb.sendTptSrvr.addr.port = egtpCb.egtpCfg.localPort; + egtpCb.dstCb.dstAddr.address = CM_INET_NTOH_UINT32(egtpCb.egtpCfg.destIp.ipV4Addr); + egtpCb.dstCb.dstAddr.port = egtpCb.egtpCfg.destPort; egtpCb.dstCb.numTunn = 0; ret = cmHashListInit(&(egtpCb.dstCb.teIdLst), 1024, sizeof(EgtpTeIdCb), FALSE, CM_HASH_KEYTYPE_UINT32_MOD, DU_APP_MEM_REGION, DU_POOL); @@ -381,23 +379,15 @@ uint8_t egtpSrvOpenReq(Pst *pst) DU_LOG("\nDEBUG --> EGTP : Received EGTP open server request"); sockType = CM_INET_DGRAM; - ret = egtpSrvOpenPrc(sockType, &(egtpCb.recvTptSrvr)); - /* Opening and Binding receiver socket */ + ret = egtpSrvOpenPrc(sockType); + /* Opening and Binding receiver socket */ if(ret != ROK) { DU_LOG("\nERROR --> EGTP : Failed while opening receiver transport server"); return ret; } - /* Opening and Binding sender socket */ - ret = egtpSrvOpenPrc(sockType, &(egtpCb.dstCb.sendTptSrvr)); - if(ret != ROK) - { - DU_LOG("\nERROR --> EGTP : Failed while opening sender transport server"); - return ret; - } - DU_LOG("\nDEBUG --> EGTP : Receiver socket[%d] and Sender socket[%d] open", egtpCb.recvTptSrvr.sockFd.fd,\ - egtpCb.dstCb.sendTptSrvr.sockFd.fd); + DU_LOG("\nDEBUG --> EGTP : Socket [%d] is open", egtpCb.sockFd.fd); /* Start Socket polling */ memset(&egtpPst, 0, sizeof(egtpPst)); @@ -440,16 +430,16 @@ uint8_t egtpSrvOpenReq(Pst *pst) * * ****************************************************************/ -uint8_t egtpSrvOpenPrc(uint8_t sockType, EgtpTptSrvr *server) +uint8_t egtpSrvOpenPrc(uint8_t sockType) { S8 ret=ROK; - ret = cmInetSocket(sockType, &(server->sockFd), protType); + ret = cmInetSocket(sockType, &(egtpCb.sockFd), protType); if(ret != ROK) { DU_LOG("\nERROR --> EGTP : Failed to open UDP socket"); return ret; } - ret = cmInetBind(&(server->sockFd), &(server->addr)); + ret = cmInetBind(&(egtpCb.sockFd), &(egtpCb.localAddr)); if(ret != ROK) { DU_LOG("\nERROR --> EGTP : Failed to bind socket"); @@ -875,17 +865,12 @@ uint8_t egtpSendMsg(Buffer *mBuf) uint8_t ret; uint16_t txLen; CmInetMemInfo info; - CmInetAddr dstAddr; static uint64_t numDataSent = 0; info.region = DU_APP_MEM_REGION; info.pool = DU_POOL; - dstAddr.port = EGTP_RECVR_PORT; - dstAddr.address = egtpCb.dstCb.dstIp; - - ret = cmInetSendMsg(&(egtpCb.dstCb.sendTptSrvr.sockFd), &dstAddr, &info, \ - mBuf, (int16_t *)&txLen, CM_INET_NO_FLAG); + ret = cmInetSendMsg(&egtpCb.sockFd, &egtpCb.dstCb.dstAddr, &info, mBuf, (int16_t *)&txLen, CM_INET_NO_FLAG); if(ret != ROK && ret != RWOULDBLOCK) { DU_LOG("\nERROR --> EGTP : Failed sending the message"); @@ -922,20 +907,15 @@ uint8_t egtpRecvMsg() uint8_t ret; /* Return value */ uint16_t bufLen; /* Length of received buffer */ Buffer *recvBuf; /* Received buffer */ - CmInetAddr fromAddr; /* Egtp data sender address */ CmInetMemInfo memInfo; /* Buffer allocation info */ memInfo.region = DU_APP_MEM_REGION; memInfo.pool = DU_POOL; - fromAddr.port = egtpCb.dstCb.dstPort; - fromAddr.address = egtpCb.dstCb.dstIp; - while(true) { bufLen = -1; - ret = cmInetRecvMsg(&(egtpCb.recvTptSrvr.sockFd), &fromAddr, &memInfo, \ - &recvBuf, (int16_t *)&bufLen, CM_INET_NO_FLAG); + ret = cmInetRecvMsg(&egtpCb.sockFd, &egtpCb.dstCb.dstAddr, &memInfo, &recvBuf, (int16_t *)&bufLen, CM_INET_NO_FLAG); if(ret == ROK && recvBuf != NULLP) { DU_LOG("\nDEBUG --> EGTP : Received DL Message[%ld]\n", gDlDataRcvdCnt + 1); diff --git a/src/du_app/du_egtp.h b/src/du_app/du_egtp.h index b8c7b4edd..8bd133a16 100644 --- a/src/du_app/du_egtp.h +++ b/src/du_app/du_egtp.h @@ -40,12 +40,6 @@ uint8_t unpackEgtpSrvOpenReq(EgtpSrvOpenReq func, Pst *pst, Buffer *mBuf); uint8_t protType; -typedef struct egtpTptSrvr -{ - CmInetAddr addr; - CmInetFd sockFd; /* Socket file descriptor */ -}EgtpTptSrvr; - typedef struct EgtpTeIdCb { uint32_t teId; /* Local tunnel id */ @@ -59,9 +53,7 @@ typedef struct EgtpTeIdCb typedef struct egtpDstCb { - CmInetIpAddr dstIp; /* destination IP */ - uint16_t dstPort; /* destination port that sends data */ - EgtpTptSrvr sendTptSrvr; /* Transport server for sending UDP msg to */ + CmInetAddr dstAddr; /* Destination Server address */ uint32_t numTunn; /* Number of tunnels */ CmHashListCp teIdLst; /* Tunnel Id list for this destination */ }EgtpDstCb; @@ -69,7 +61,8 @@ typedef struct egtpDstCb typedef struct egtpGlobalCb { EgtpConfig egtpCfg; /* EGTP configuration */ - EgtpTptSrvr recvTptSrvr; /* Transport server for receiving UDP msg */ + CmInetAddr localAddr; /* Local Server address */ + CmInetFd sockFd; /* Socket file descriptor */ EgtpDstCb dstCb; /* Destination endpoint */ }EgtpGlobalCb; @@ -81,7 +74,7 @@ uint8_t egtpActvTsk(Pst *pst, Buffer *mBuf); uint8_t egtpFillRspPst(Pst *pst, Pst *rspPst); uint8_t egtpCfgReq(Pst *pst, EgtpConfig egtpCfg); uint8_t egtpSrvOpenReq(Pst *pst); -uint8_t egtpSrvOpenPrc(uint8_t sockType, EgtpTptSrvr *server); +uint8_t egtpSrvOpenPrc(uint8_t sockType); uint8_t egtpTnlMgmtReq(Pst *pst, EgtpTnlEvt tnlEvt); uint8_t egtpTnlAdd(EgtpTnlEvt tnlEvt); uint8_t egtpTnlMod(EgtpTnlEvt tnlEvt); diff --git a/src/du_app/du_mgr_main.c b/src/du_app/du_mgr_main.c index 21312b5b8..02ab08a25 100644 --- a/src/du_app/du_mgr_main.c +++ b/src/du_app/du_mgr_main.c @@ -29,6 +29,8 @@ #include "du_mgr_main.h" #include "du_sctp.h" #include "du_egtp.h" +#include "du_cell_mgr.h" +#include "du_f1ap_msg_hdl.h" #ifdef O1_ENABLE diff --git a/src/phy_stub/phy_stub.h b/src/phy_stub/phy_stub.h index fc23df639..8fd85c56f 100644 --- a/src/phy_stub/phy_stub.h +++ b/src/phy_stub/phy_stub.h @@ -33,7 +33,7 @@ #define MAX_SFN_VALUE 1023 #define NR_PCI 1 #define SLOT_DELAY 3 -#define NUM_DRB_TO_PUMP_DATA 3 +#define NUM_DRB_TO_PUMP_DATA 2 #define NUM_UL_PACKETS 1 /*UE Ids for RACH IND*/ diff --git a/src/phy_stub/phy_stub_thread_hdl.c b/src/phy_stub/phy_stub_thread_hdl.c index d1d3664ad..d9860f6e1 100644 --- a/src/phy_stub/phy_stub_thread_hdl.c +++ b/src/phy_stub/phy_stub_thread_hdl.c @@ -159,7 +159,7 @@ void *l1ConsoleHandler(void *args) while(counter) { /* Start Pumping data from PHY stub to DU */ - for(ueIdx=0; ueIdx < MAX_NUM_UE; ueIdx++) + for(ueIdx=0; ueIdx < phyDb.ueDb.numActvUe; ueIdx++) { for(drbIdx = 0; drbIdx < NUM_DRB_TO_PUMP_DATA; drbIdx++) //Number of DRB times the loop will run { diff --git a/src/ric_stub/ric_stub.h b/src/ric_stub/ric_stub.h index a621525ed..d908e210c 100644 --- a/src/ric_stub/ric_stub.h +++ b/src/ric_stub/ric_stub.h @@ -29,7 +29,7 @@ #define LOCAL_IP_RIC "192.168.130.80" #define E2_SCTP_PORT 36421 -#define NUM_E2_ASSOC 1 +#define NUM_E2_ASSOC 1 #define REMOTE_IP_DU (char*[]){"192.168.130.81", "192.168.130.83"} #endif -- 2.16.6