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 enum
+{
+ UE_IDLE,
+ UE_ATTACH_IN_PROGRESS,
+ UE_ACTIVE,
+ UE_HANDOVER_IN_PROGRESS
+}UeState;
+
typedef struct RrcVersion
{
uint8_t rrcVer; /* Latest RRC Version */
Plmn plmn;
EgtpParams egtpParams;
RrcVersion rrcVersion;
- uint8_t numSnssaiSupported;
- Snssai *snssaiList[MAX_NUM_OF_SLICE];
}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);