fb2674086b48ee5672141235ac417d78facf6bb8
[o-du/l2.git] / src / cu_stub / cu_stub.h
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
5 #   Licensed under the Apache License, Version 2.0 (the "License");            #
6 #   you may not use this file except in compliance with the License.           #
7 #   You may obtain a copy of the License at                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
11 #   Unless required by applicable law or agreed to in writing, software        #
12 #   distributed under the License is distributed on an "AS IS" BASIS,          #
13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
14 #   See the License for the specific language governing permissions and        #
15 #   limitations under the License.                                             #
16 ################################################################################
17 *******************************************************************************/
18
19 #ifndef __CU_MGR_MAIN_H__
20 #define __CU_MGR_MAIN_H__
21
22 #define CU_ID 1
23 #define CU_NAME "ORAN_OAM_CU"
24
25 #define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
26 #define CU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
27
28 #ifndef O1_ENABLE
29 #define DU_IP_V4_ADDR (char*[]){"192.168.130.81", "192.168.130.83"}
30 #define DU_SCTP_PORT (int[]){38472, 38473}
31
32 #define CU_IP_V4_ADDR "192.168.130.82"
33 #define CU_SCTP_PORT_TO_DU (int[]){38472, 38473}
34 #endif
35
36 #define DU_EGTP_PORT 39001
37 #define CU_EGTP_PORT 39002
38 #define RRC_VER 0
39 #define EXT_RRC_VER 5
40 #define PLMN_MCC0 3
41 #define PLMN_MCC1 1
42 #define PLMN_MCC2 1
43 #define PLMN_MNC0 4
44 #define PLMN_MNC1 8
45 #define PLMN_MNC2 0
46
47 #define CU_DU_NAME_LEN_MAX 30      /* Max length of CU/DU name string */
48
49 #define CU_APP_MEM_REG 1
50 #define CU_POOL 1
51
52 #define MAX_NUM_OF_SLICE 1024 /* As per the spec 38.473, maxnoofSliceItems = 1024*/
53
54 /* allocate and zero out a static buffer */
55
56 #define CU_ALLOC(_datPtr, _size)                             \
57 {                                                            \
58    S16 _ret;                                                 \
59    _ret = SGetSBuf(CU_APP_MEM_REG, CU_POOL,                  \
60                      (Data **)&_datPtr, _size);              \
61    if(_ret == ROK)                                           \
62       memset(_datPtr, 0, _size);                      \
63    else                                                      \
64       _datPtr = NULLP;                                       \
65 }
66  
67 /* free a static buffer */
68 #define CU_FREE(_datPtr, _size)                              \
69    if(_datPtr)                                               \
70    SPutSBuf(CU_APP_MEM_REG, CU_POOL,                         \
71          (Data *)_datPtr, _size);
72
73 #define SEARCH_DU_DB(_duIdx, _duId, _duDb){\
74    _duDb = NULLP; \
75    for(_duIdx=0; _duIdx < cuCb.numDu; _duIdx++)\
76    {\
77       if(cuCb.duInfo[_duIdx].duId == _duId)\
78       {\
79          _duDb =  (&cuCb.duInfo[_duIdx]);\
80          break; \
81      }\
82    }\
83 }
84
85 #define SEARCH_CELL_DB(_cellIdx, _duDb, _nrCellId, _cellCb){\
86    _cellCb = NULLP; \
87    for(_cellIdx=0; _cellIdx < _duDb->numCells; _cellIdx++)\
88    {\
89       if(_duDb->cellCb[_cellIdx].nrCellId == _nrCellId)\
90       {\
91          _cellCb = (&(_duDb->cellCb[_cellIdx]));\
92          break;\
93       }\
94    }\
95 }
96
97
98 typedef enum
99 {
100    UE_IDLE,
101    UE_ATTACH_IN_PROGRESS,
102    UE_ACTIVE,
103    UE_HANDOVER_IN_PROGRESS
104 }UeState;
105
106 typedef struct RrcVersion
107 {
108   uint8_t    rrcVer;     /* Latest RRC Version */
109   uint32_t   extRrcVer;  /* Latest RRC version extended */
110 }RrcVersion;
111
112 typedef struct cuCfgParams
113 {
114    uint32_t         cuId;
115    char             cuName[CU_DU_NAME_LEN_MAX];
116    CuSctpParams     sctpParams;
117    Plmn             plmn;
118    EgtpParams       egtpParams;
119    RrcVersion       rrcVersion;
120 }CuCfgParams;
121
122 typedef struct cuCellCb CuCellCb;
123
124 typedef struct cuUeCb
125 {
126    CuCellCb  *cellCb;
127    uint32_t  crnti;
128    uint8_t   gnbDuUeF1apId;
129    uint8_t   gnbCuUeF1apId;
130    F1apMsgDb f1apMsgDb;
131    UeState   state;
132 }CuUeCb;
133
134 struct cuCellCb
135 {
136    uint32_t nrCellId;
137    uint8_t  numUe;
138    CuUeCb   *ueCb[MAX_NUM_UE];
139 };
140
141 typedef struct duDb
142 {
143    uint32_t duId;
144    char     duName[CU_DU_NAME_LEN_MAX];
145    uint8_t  numCells;
146    CuCellCb cellCb[MAX_NUM_CELL];  
147    uint8_t  numUe;
148    CuUeCb   ueCb[MAX_NUM_CELL * MAX_NUM_UE];
149 }DuDb;
150
151 typedef struct cuGlobalCb
152 {
153    CuCfgParams cuCfgParams;
154    uint8_t     numSnssaiSupported;
155    Snssai      *snssaiList[MAX_NUM_OF_SLICE];
156    uint8_t     numDu;
157    DuDb        duInfo[MAX_DU_SUPPORTED];
158    uint32_t    gnbCuUeF1apIdGenerator;   /* Generating CU UE F1AP ID */
159 }CuGlobalCb;
160
161 CuGlobalCb cuCb;
162
163 void readCuCfg();
164 void cuAppInmsgHdlr(Buffer *mBuf);
165 void sctpNtfyInd(CmInetSctpNotification *ntfy);
166 uint8_t egtpInitReq();
167 void *cuConsoleHandler(void *);
168
169 #endif
170
171 /**********************************************************************
172          End of file
173 **********************************************************************/