[Epic-ID: ODUHIGH-405][Task-ID: ODUHIGH-425] Fixes in the CU stub for memory-related...
[o-du/l2.git] / src / cu_stub / cu_stub.h
index 74d6847..d2c3f88 100644 (file)
 #ifndef __CU_MGR_MAIN_H__
 #define __CU_MGR_MAIN_H__
 
-#define MAX_IPV6_LEN 16
+#define CU_ID 1
+#define CU_NAME "ORAN_OAM_CU"
+
+#define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
+#define CU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
+
+#ifndef O1_ENABLE
+#define DU_IP_V4_ADDR (char*[]){"192.168.130.81", "192.168.130.83"}
+#define DU_SCTP_PORT (int[]){38472, 38473}
+
+#define CU_IP_V4_ADDR "192.168.130.82"
+#define CU_SCTP_PORT_TO_DU (int[]){38472, 38473}
+#endif
+
+#define DU_EGTP_PORT 39001
+#define CU_EGTP_PORT 39002
+#define RRC_VER 0
+#define EXT_RRC_VER 5
+#define PLMN_MCC0 3
+#define PLMN_MCC1 1
+#define PLMN_MCC2 1
+#define PLMN_MNC0 4
+#define PLMN_MNC1 8
+#define PLMN_MNC2 0
+
 #define CU_DU_NAME_LEN_MAX 30      /* Max length of CU/DU name string */
 
 #define CU_APP_MEM_REG 1
 #define CU_POOL 1
-#define MAX_DU_PORT 2
-#define DU_PORT 38472
+
+#define MAX_NUM_OF_SLICE 1024 /* As per the spec 38.473, maxnoofSliceItems = 1024*/
 
 /* allocate and zero out a static buffer */
+
 #define CU_ALLOC(_datPtr, _size)                             \
 {                                                            \
    S16 _ret;                                                 \
    SPutSBuf(CU_APP_MEM_REG, CU_POOL,                         \
          (Data *)_datPtr, _size);
 
+#define SEARCH_DU_DB(_duIdx, _duId, _duDb){\
+   _duDb = NULLP; \
+   for(_duIdx=0; _duIdx < cuCb.numDu; _duIdx++)\
+   {\
+      if(cuCb.duInfo[_duIdx].duId == _duId)\
+      {\
+         _duDb =  (&cuCb.duInfo[_duIdx]);\
+              break; \
+     }\
+   }\
+}
+
+#define SEARCH_CELL_DB(_cellIdx, _duDb, _nrCellId, _cellCb){\
+   _cellCb = NULLP; \
+   for(_cellIdx=0; _cellIdx < _duDb->numCells; _cellIdx++)\
+   {\
+      if(_duDb->cellCb[_cellIdx].nrCellId == _nrCellId)\
+      {\
+         _cellCb = (&(_duDb->cellCb[_cellIdx]));\
+         break;\
+      }\
+   }\
+}
+
 
-typedef struct ipAddr
+typedef enum
 {
- Bool      ipV4Pres;
- uint32_t  ipV4Addr;
- Bool      ipV6Pres;
- uint8_t   ipV6Addr[MAX_IPV6_LEN];
-}SctpIpAddr;
+   UE_IDLE,
+   UE_ATTACH_IN_PROGRESS,
+   UE_ACTIVE,
+   UE_HANDOVER_IN_PROGRESS
+}UeState;
 
 typedef struct RrcVersion
 {
@@ -60,25 +109,6 @@ typedef struct RrcVersion
   uint32_t   extRrcVer;  /* Latest RRC version extended */
 }RrcVersion;
 
-typedef struct egtpParams
-{
-   SctpIpAddr  localIp;
-   uint16_t    localPort;
-   SctpIpAddr  destIp;
-   uint16_t    destPort;
-   uint32_t    currTunnelId;
-   uint32_t    minTunnelId;
-   uint32_t    maxTunnelId;
-}EgtpParams;
-
-typedef struct CuSctpParams
-{
-   SctpIpAddr  duIpAddr;
-   uint16_t    duPort;
-   SctpIpAddr  cuIpAddr;
-   uint16_t    cuPort;
-}CuSctpParams;
-
 typedef struct cuCfgParams
 {
    uint32_t         cuId;
@@ -88,7 +118,47 @@ typedef struct cuCfgParams
    EgtpParams       egtpParams;
    RrcVersion       rrcVersion;
 }CuCfgParams;
-CuCfgParams cuCfgParams; //global variable to hold all configs
+
+typedef struct cuCellCb CuCellCb;
+
+typedef struct cuUeCb
+{
+   CuCellCb  *cellCb;
+   uint32_t  crnti;
+   uint8_t   gnbDuUeF1apId;
+   uint8_t   gnbCuUeF1apId;
+   F1apMsgDb f1apMsgDb;
+   UeState   state;
+}CuUeCb;
+
+struct cuCellCb
+{
+   uint32_t nrCellId;
+   uint8_t  numUe;
+   CuUeCb   *ueCb[MAX_NUM_UE];
+};
+
+typedef struct duDb
+{
+   uint32_t duId;
+   char     duName[CU_DU_NAME_LEN_MAX];
+   uint8_t  numCells;
+   CuCellCb cellCb[MAX_NUM_CELL];  
+   uint8_t  numUe;
+   CuUeCb   ueCb[MAX_NUM_CELL * MAX_NUM_UE];
+}DuDb;
+
+typedef struct cuGlobalCb
+{
+   CuCfgParams cuCfgParams;
+   uint8_t     numSnssaiSupported;
+   Snssai      *snssaiList[MAX_NUM_OF_SLICE];
+   uint8_t     numDu;
+   DuDb        duInfo[MAX_DU_SUPPORTED];
+   uint32_t    gnbCuUeF1apIdGenerator;   /* Generating CU UE F1AP ID */
+}CuGlobalCb;
+
+CuGlobalCb cuCb;
 
 void readCuCfg();
 void cuAppInmsgHdlr(Buffer *mBuf);