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