[Issue-ID : ODUHIGH-487] EGTP Port fix at F1 interface 10/10310/7
authorlal.harshita <Harshita.Lal@radisys.com>
Fri, 27 Jan 2023 06:06:53 +0000 (11:36 +0530)
committerlal.harshita <Harshita.Lal@radisys.com>
Fri, 27 Jan 2023 09:46:01 +0000 (15:16 +0530)
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
Change-Id: I18c6f314f9a927ae49db92e4f9b0e4a3113f3bdb
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
19 files changed:
container-tag.yaml
docs/release-notes.rst
docs/user-guide.rst
releases/container-release-o-du-l2
releases/container-release-o-du-l2-cu-stub
src/cm/common_def.h
src/cu_stub/cu_stub.c
src/cu_stub/cu_stub.h
src/cu_stub/cu_stub_egtp.c
src/cu_stub/cu_stub_egtp.h
src/cu_stub/cu_stub_sctp.c
src/du_app/du_cfg.c
src/du_app/du_cfg.h
src/du_app/du_egtp.c
src/du_app/du_egtp.h
src/du_app/du_mgr_main.c
src/phy_stub/phy_stub.h
src/phy_stub/phy_stub_thread_hdl.c
src/ric_stub/ric_stub.h

index 52a46ac..3b270aa 100644 (file)
@@ -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
index 60c7fad..59a3efe 100644 (file)
@@ -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                                |
 |                                      |                                          |   
index e4a1318..167417d 100644 (file)
@@ -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
 
 
index 1ba8928..b65cb14 100644 (file)
@@ -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
index 91e0517..b7c4c12 100644 (file)
@@ -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
index b61641a..9c3d555 100644 (file)
@@ -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);
index c82fcdc..619b077 100644 (file)
@@ -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)++;
    }
index 9b8c9aa..4c51a82 100644 (file)
 #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
 
index c53bc6d..4ccdf51 100644 (file)
@@ -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");
index 4decfda..519c765 100644 (file)
@@ -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 */
index 285414b..07b462c 100644 (file)
@@ -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;
+            }
 
          }
       }
index 8392ff4..d5b8775 100644 (file)
@@ -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;
 
index 2d197b5..6f55b4f 100644 (file)
 #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
 
index 6fec8da..a4a8d80 100644 (file)
@@ -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);
index b8c7b4e..8bd133a 100644 (file)
 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);
index 21312b5..02ab08a 100644 (file)
@@ -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
 
index fc23df6..8fd85c5 100644 (file)
@@ -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*/
index d1d3664..d9860f6 100644 (file)
@@ -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
                {
index a621525..d908e21 100644 (file)
@@ -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