Modify licenses
[scp/ocu/5gnr.git] / Include / upcContext.h
1 /******************************************************************************
2 *
3 *   Copyright (c) 2020 ICT/CAS.
4 *
5 *   Licensed under the O-RAN Software License, Version 1.0 (the "Software 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 *       https://www.o-ran.org/software
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
20 #ifndef __UPCCONTEXT_H__
21 #define __UPCCONTEXT_H__
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #include "gnbCommon.h"
28 #include "cuModuleInterface.h"
29
30
31
32 #define UPC_MAX_IP_NUM                  5
33 #define UPC_MAX_UP_NUM                  1
34 #define UPC_MAX_PLMN_NUM        2
35 #define UPC_MAX_SLICE_NUM       3
36 #define UPC_MAX_QOS_PARA_NUM    10
37 #define UPC_MAX_UE_NUM          MAX_UE_NUM
38 #define UPC_MAX_SESSION_NUM     10
39 #define UPC_MAX_DRB_NUM                 2
40
41 typedef struct
42 {
43         INT64                           sessId;
44         E1apCause_e                     cause;
45 }SessFailitem_t;
46
47 typedef struct
48 {
49         INT16                           drbId;
50         E1apCause_e                     cause;
51 }DrbFailitem_t;
52
53 typedef struct
54 {
55         UINT8                           qosFlowId;
56         E1apCause_e                     cause;
57 }qosFailitem_t;
58
59 typedef struct
60 {
61         UINT8                                           qosSetupAllowed;
62         UINT8                                           qosModAllowed;
63
64         UINT8                                           qosFlowId;
65
66         /* QOS Info Begin */
67         QosFlowLevelQosPar_t        qosPara;
68
69         UINT8                                           qosMapFlag;
70         QosFlowMapInd_e                 qosFlowMapInd;
71         /* QOS Info End */
72
73         E1apCause_e                                     qosSetFailCause;
74         E1apCause_e                                     qosModFailCause;
75 }upcTempQosInfo_t;
76
77 typedef struct
78 {
79         UINT8                                           drbSetupAllowed;
80         UINT8                                           drbModAllowed;
81
82         UINT8                                           drbId;
83
84         UINT16                                          qosSetupNum;
85         UINT16                                          qosSetupSuccNum;/* 最终建立成功的个数 */
86         UINT16                                          qosSetupFailNum;/* 最终建立失败的个数 */
87
88         UINT16                                          qosModNum;
89         UINT16                                          qosModSuccNum;/* 最终建立成功的个数 */
90         UINT16                                          qosModFailNum;/* 最终建立失败的个数 */
91
92         upcTempQosInfo_t                        *pQosSetupList;
93         upcTempQosInfo_t                        *pQosModList;
94
95         /* DRB Info --Begin */
96
97         UINT8                                           sdapFlag;/* Only Mod Optional */
98         SdapCfg_t                                       sdapConfig;
99
100         UINT8                                           pdcpFlag;/* Only Mod Optional */
101         PDCPConfiguration_t             pdcpConfig;
102         CellGroupInformation_t      cellGroupInfo;
103
104         CellGroupInformation_t      cellGroupToAdd;/* Only Mod Optional */
105         CellGroupInformation_t      cellGroupToMod;/* Only Mod Optional */
106         CellGroupInformation_t      cellGroupToRemove;/* Only Mod Optional */
107
108         UINT8                                           DFIReqFlag;
109         DFIRequest_t                            drbDFIReq;
110         UINT8                                           DFIRspFlag;/* Only Mod Optional */
111         DFIResponse_t                           drbDFIRsp;
112
113         UINT8                                           inactTimeFlag;
114         INT64                                   inactivityTimer;
115
116         UINT8                                           pdcpSNStatuFlag;
117         PdcpSNStatusInfo_t                      pdcpSNStatusInfo;
118
119         PdcpSNStatusRequest_e           pdcpSNStatusReq;
120
121         UPParametersList_t                      f1UlUpPara;
122         UINT8                                           f1DlUpParaFlag;/* Only Mod Optional */
123         UPParametersList_t                      f1DlUpPara;
124
125         UINT8                                           pdcpUlCntFlag;
126         PdcpCount_t                                     pdcpUlCount;
127
128         UINT8                                           pdcpDlCntFlag;
129         PdcpCount_t                                     pdcpDlConut;
130
131         /* DRB Info -- end */
132
133         E1apCause_e                                     drbSetFailCause;
134         E1apCause_e                                     drbModFailCause;
135 }upcTempDrbInfo_t;
136
137 typedef struct
138 {
139         UINT8                                           sessSetupAllowed;
140         UINT8                                           sessModAllowed;
141
142         UINT16                                          pduSessId;
143
144         UINT16                                          drbSetupNum;
145         UINT16                                          drbSetupSuccNum;/* 最终建立成功的个数 */
146         UINT16                                          drbSetupFailNum;/* 最终建立失败的个数 */
147
148         UINT16                                          drbModNum; /* 最初请求修改的个数 */
149         UINT16                                          drbModSuccNum;  /* 最终修改成功的个数 */
150         UINT16                                          drbModFailNum; /* 最终修改失败的个数 */
151
152         UINT8                                           drbRemoveNum;
153         UINT8                                           drbRemoveId[UPC_MAX_DRB_NUM];
154
155         upcTempDrbInfo_t                        *pTempDrbSetupList;
156         upcTempDrbInfo_t                        *pTempDrbModList;
157
158         /* Session Info --Begin */
159         PduSessType_e                           pduSessionType;
160         SNssai_t                                        snssai;
161
162         UINT8                                           secuIndiFlag;/* Only Mod Optional */
163         SecuInd_t                                   secuIndi;
164         SecuResult_t                securityResult;
165
166         UINT8                                           ulUpChgFlag;/* Only Mod Optional */
167         UpTransLayerInfo_t          ulUpTNLInfo;
168
169         UINT8                                           dlAMBRFlag;
170         UINT64                                          sessDlAMBR;
171
172         UINT8                                           DFIReqFlag;
173     DFIRequest_t                            DFIInfoReq;
174         UINT8                                           DFIRspFlag;/* Only Mod Optional */
175         DFIResponse_t                           DFIInfoRsp;
176
177         UINT8                                           InactTimerFlag;
178         INT64                                   inactTimer;
179
180         UINT8                                           dlNGupTnlFlag;
181         UpTransLayerInfo_t                      dlNgUpTnlInfo;
182         UINT8                                           dlNgUpChgFlag;
183
184         UINT8                                           InstanceFlag;
185         INT64                                           networkInstance;
186         /* session Info --End */
187
188         E1apCause_e                                     sessSetFailCause;
189         E1apCause_e                                     sessModFailCause;
190 }upcTempSessInfo_t;
191
192
193 typedef struct
194 {
195         struct upUeCb                           *pUeCb;
196
197         UINT16                                          sessSetupNum;   /* 最初请求建立的个数 */
198         UINT16                                          sessSetupSuccNum;/* 最终建立成功的个数 */
199         UINT16                                          sessSetupFailNum;/* 最终建立失败的个数 */
200
201         UINT16                                          sessModNum; /* 最初请求修改的个数 */
202         UINT16                                          sessModSuccNum; /* 最终修改成功的个数 */
203         UINT16                                          sessModFailNum; /* 最终修改失败的个数 */
204
205         upcTempSessInfo_t                       *pTempSessSetupList;
206         upcTempSessInfo_t                       *pTempSessModList;
207
208
209         /* Content      --Begin */
210         UINT8                                           secuInfoFlag;/* Only Mod Optional */
211         SecuInfo_t                                      secuInfo;
212
213         UINT8                                           dlAmbrFlag;/* Only Mod Optional */
214         UINT64                                          ueDlAMBR;
215
216         PlmnId_t                                        servPlmnId;
217         ActNotiLevel_e                          actNotiLevel;
218
219         UINT8                                           dlIPDRFlag;
220         UINT64                                          ueDlMaxIPDR;
221
222         UINT8                                           inactTimeFlag;
223         INT64                                           inactTimer;
224
225         UINT8                                           bearStaChageFlag;
226         BearCxtStatusChange_e           bearerCxtStatusChg;
227
228         UINT8                                           newTnlInfoReqFlag;/* Only Mod Optional */
229         NewUlTnlInfoRequire_e           newTnlInfoReq;
230
231         UINT8                                           dataDisFlag;/* Only Mod Optional */
232         DataDisRequire_e            dataDisRequire;
233         /* Content      --End */
234 }upcTempInfo_t;
235
236
237 struct upSessCb;
238 struct upUeCb;
239 struct upInstance;
240 typedef struct upDrbCb
241 {
242         UINT8                                           useFlag;
243     INT64                           drbId;
244
245     SdapCfg_t                                   sdapConfig;
246         PDCPConfiguration_t             pdcpConfig;
247         UPParametersList_t                      f1UlUpPara;
248         UPParametersList_t                      f1DlUpPara;
249         CellGroupInformation_t      cellGroupInfo;
250
251         /* QOS INFO */
252         QosFlowQosPara_t                        qosFlowPara;
253
254         UINT8                                           DFIFlag;
255     DFIRequest_t                        dataForInfoReq;
256
257
258         PdcpSNStatusInfo_t                      pdcpSNStatusInfo;
259     struct upSessCb             *pSessionCb;
260 }UpDrbCb_t;
261
262 typedef struct upSessCb
263 {
264         UINT8                                           useFlag;
265     UINT16                              sessId;
266     PduSessType_e                   sessType;
267     SNssai_t                    sNSsai;
268
269     SecuInd_t                   secuInd;
270         SecuResult_t                            securityResult;
271
272     UINT64                              dlAMBR;
273
274     UpTransLayerInfo_t          ngUlUpTransInfo;
275         UpTransLayerInfo_t          ngDlUpTransInfo;
276
277     DFIRequest_t                        dataForInfoReq;
278
279
280
281         INT64                                           networkInstance;
282
283         UINT8                       drbNum;
284     UpDrbCb_t                   *pDrbCb[UPC_MAX_DRB_NUM];
285
286         struct upUeCb                           *pUeCb;
287 }UpSessCb_t;
288
289 typedef enum upUeState_e
290 {
291     UP_UE_INIT,
292     UP_UE_ACTIVE,
293     UP_UE_WAITING_INACTIVE,
294     UP_UE_INACTIVE
295 }UpUeState_e;
296
297 typedef struct upUeCb
298 {
299         UINT8                                           useFlag;
300     UINT64                                      cpE1apId;
301     UINT64                                      upE1apId;
302
303     UpUeState_e                 ueState;
304     SecuInfo_t                                  secuInfo;
305     UINT64                          ueDlAMBR;
306         UINT64                                          ueDlMaxIPDR;
307     PlmnId_t                    plmnId;
308
309     INT64                                   inActTimer;
310
311         UINT16                                          sessNum;/* current session num */
312     UpSessCb_t                  *pSessCb[UPC_MAX_SESSION_NUM];
313         struct upInstance           *pUpInstance;
314 }UpUeCb_t;
315
316 typedef struct upInstance
317 {
318     Instance_t                  instance;
319         UINT32                                          moduleId;
320         UINT32                                          state;
321     UINT64                      upId;
322     GnbCuupName_t               upName;
323     GnbCucpName_t               cpName;
324         INT8                                            upAddrNum;
325     IpAddress_t                 upAddr[UPC_MAX_IP_NUM];
326         INT8                                            cpAddrNum;
327         IpAddress_t                                     cpAddr[UPC_MAX_IP_NUM];
328
329     INT64                                       upCapa;
330     UINT32                                              bPlmnNum;
331         E1apUpbPlmnCfgInfo_t            bPlmnCfgInfo[e1ap_maxnoofSPLMNs];
332     UINT32                      ueNum;
333     UpUeCb_t                    *pUeCb[UPC_MAX_UE_NUM];
334 }UpInstance_t;
335
336 UpInstance_t *upcGetInstance();
337 UpUeCb_t* upcAllocUeCb(UpInstance_t *pInstance, UINT64  cuCpE1apId);
338 INT32 upcSetSessionCb(UpUeCb_t  * pUeCb, PduSessionResourceToSetupList_t *pPduSessionSetupList);
339 void upcSetUeCb(UpUeCb_t        * pUeCb, E1apBearerContextSetupReq_t *pBearerCxtSetupReq);
340 UpUeCb_t* upcGetUeCbByUpUeE1apId(UpInstance_t *pInstance, UINT64        cuUpE1apId);
341 void upcRemoveSessionCb(UpUeCb_t        * pUeCb, PduSessionResourceToRemoveList_t *pRemoveList);
342 UpSessCb_t *upcGetSessCb(UpUeCb_t *pUeCb, UINT8 pduSessId);
343 UpDrbCb_t *upcGetDrbCb(UpSessCb_t *pSessCb, UINT8 drbId);
344
345 #ifdef __cplusplus
346 }
347 #endif
348
349 #endif