2ccea5bccb865f6cf96665834d7104036b8b8307
[ric-plt/submgr.git] / e2ap / libe2ap_wrapper / E2AP_if.h
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19
20 #ifndef E2AP_IF_H
21 #define E2AP_IF_H
22
23 #ifndef ASN_DISABLE_OER_SUPPORT
24 #define ASN_DISABLE_OER_SUPPORT
25 #endif
26
27 #include <stdbool.h>
28 #include <stdint.h>
29 #include <ProcedureCode.h>
30 #include <PrintableString.h>
31 #include "memtrack.h"
32
33 #ifdef  __cplusplus
34 extern "C" {
35 #endif
36
37 extern const int cCauseRICRequest;
38 extern const int cCauseRICService;
39 extern const int cCauseTransport;
40 extern const int cCauseProtocol;
41 extern const int cCauseMisc;
42
43 typedef unsigned char byte;
44
45 //extern const int64_t cMaxNrOfErrors;
46
47 extern const uint64_t cMaxSizeOfOctetString;
48
49 typedef struct { // Octet string in ASN.1 does not have maximum length!
50     size_t contentLength;
51     uint8_t data[1024]; // Table size is const cMaxSizeOfOctetString
52 } OctetString_t;
53
54 typedef struct { // Octet string in ASN.1 does not have maximum length!
55     size_t length;
56     uint8_t* data;
57 } DynOctetString_t;
58
59 typedef struct {
60     uint8_t unusedBits; // Trailing unused bits 0 - 7
61     size_t byteLength;  // Length in bytes
62     uint8_t* data;
63 } DynBitString_t;
64
65 typedef struct  {
66         uint32_t ricRequestorID; // 0..65535
67         uint32_t ricInstanceID;  // 0..65535
68 } RICRequestID_t;
69
70 typedef uint16_t RANFunctionID_t; // 0..4095
71
72 typedef uint64_t RICActionID_t; // 0..255
73
74 enum RICActionType_t {
75      RICActionType_report,
76      RICActionType_insert,
77      RICActionType_policy
78 };
79
80 typedef uint64_t StyleID_t;
81
82 typedef uint32_t ParameterID_t;  // 0..255 (maxofActionParameters)
83
84 typedef struct { // CHOICE. Only one value can be present
85     bool valueIntPresent;
86         int64_t valueInt;
87         bool valueEnumPresent;
88         int64_t valueEnum;
89     bool valueBoolPresent;
90         bool valueBool;
91     bool valueBitSPresent;
92         DynBitString_t valueBitS;
93     bool valueOctSPresent;
94         DynOctetString_t valueOctS;
95         bool valuePrtSPresent;
96         DynOctetString_t valuePrtS;
97 } ActionParameterValue_t;
98
99 typedef struct {
100     ParameterID_t parameterID;
101     ActionParameterValue_t actionParameterValue;
102 } ActionParameterItem_t;
103
104 typedef struct {
105     StyleID_t styleID;
106     uint8_t actionParameterCount;
107     ActionParameterItem_t actionParameterItem[255]; // OPTIONAL. 1..255 (maxofRANParameters)
108 } E2SMgNBX2actionDefinition_t;
109
110 enum RANParameterTest_t {
111         RANParameterTest_equal,
112         RANParameterTest_greaterthan,
113         RANParameterTest_lessthan,
114         RANParameterTest_contains,
115         RANParameterTest_present
116 };
117
118 typedef struct {
119     bool valueIntPresent;
120         int64_t valueInt;
121         bool valueEnumPresent;
122         int64_t valueEnum;
123     bool valueBoolPresent;
124         bool valueBool;
125     bool valueBitSPresent;
126         DynBitString_t valueBitS;
127     bool valueOctSPresent;
128         DynOctetString_t valueOctS;
129         bool valuePrtSPresent;
130         DynOctetString_t valuePrtS;
131 } RANParameterValue_t;
132
133 typedef int64_t RANueGroupID_t; // INTEGER
134 typedef uint32_t RANParameterID_t; // 0..255 (maxofRANParameters)
135
136 typedef struct {
137         RANParameterID_t ranParameterID;
138         RANParameterValue_t ranParameterValue;
139 } RANParameterItem_t;
140
141 typedef struct {
142         RANParameterID_t ranParameterID;
143         uint8_t ranParameterTest;               // This is type of enum RANParameterTest_t
144         RANParameterValue_t ranParameterValue;
145 } RANueGroupDefItem_t;
146
147 typedef struct {
148     uint8_t ranUeGroupDefCount;
149         RANueGroupDefItem_t ranUeGroupDefItem[255]; //OPTIONAL. 1..255 (maxofRANParameters)
150 } RANueGroupDefinition_t;
151
152 typedef struct {
153     uint8_t ranParameterCount;
154         RANParameterItem_t ranParameterItem[255]; //OPTIONAL. 1..255 (maxofRANParameters)
155 } RANimperativePolicy_t;
156
157 typedef struct {
158     RANueGroupID_t ranUEgroupID;
159         RANueGroupDefinition_t ranUEgroupDefinition;
160         RANimperativePolicy_t ranPolicy;
161 } RANueGroupItem_t;
162
163 typedef struct {
164     uint8_t ranUeGroupCount;
165     RANueGroupItem_t ranUeGroupItem[15]; // OPTIONAL. 1..15 (maxofUEgroup)
166 } E2SMgNBX2ActionDefinitionFormat2_t;
167
168 enum RICSubsequentActionType_t {
169         RICSubsequentActionType_Continue,
170         RICSubsequentActionType_wait
171 };
172
173 typedef struct {
174     uint8_t ranParameterCount;
175         RANParameterItem_t ranParameterList[255];       // OPTIONAL. 1..255 (maxofRANParameters)
176 } E2SMgNBNRTActionDefinitionFormat1_t;
177
178 typedef struct {
179     OctetString_t octetString;   // This element is E2AP spec format
180     // CHOICE. Only one value can be present
181     bool actionDefinitionX2Format1Present;
182         E2SMgNBX2actionDefinition_t* actionDefinitionX2Format1; // This element is E2SM-gNB-X2 format
183         bool actionDefinitionX2Format2Present;
184         E2SMgNBX2ActionDefinitionFormat2_t* actionDefinitionX2Format2; // This element is E2SM-gNB-X2 format
185         bool actionDefinitionNRTFormat1Present;
186     E2SMgNBNRTActionDefinitionFormat1_t* actionDefinitionNRTFormat1; // This element is E2SM-gNB-NRT format
187 } RICActionDefinitionChoice_t;
188
189 enum RICTimeToWait_t {
190         RICTimeToWait_zero,
191         RICTimeToWait_w1ms,
192         RICTimeToWait_w2ms,
193         RICTimeToWait_w5ms,
194         RICTimeToWait_w10ms,
195         RICTimeToWait_w20ms,
196         RICTimeToWait_w30ms,
197         RICTimeToWait_w40ms,
198         RICTimeToWait_w50ms,
199         RICTimeToWait_w100ms,
200         RICTimeToWait_w200ms,
201     RICTimeToWait_w500ms,
202         RICTimeToWait_w1s,
203         RICTimeToWait_w2s,
204         RICTimeToWait_w5s,
205         RICTimeToWait_w10s,
206         RICTimeToWait_w20s,
207         RICTimeToWait_w60s
208 };
209
210 typedef struct {
211         uint64_t ricSubsequentActionType;  // This is type of enum RICSubsequentActionType_t
212         uint64_t ricTimeToWait;  // This is type of enum RICTimeToWait_t
213 } RICSubsequentAction_t;
214
215 typedef struct  {
216         RICActionID_t ricActionID;
217         uint64_t ricActionType;  // This is type of enum RICActionType_t
218         bool ricActionDefinitionPresent;
219         RICActionDefinitionChoice_t ricActionDefinitionChoice;
220         bool ricSubsequentActionPresent;
221         RICSubsequentAction_t ricSubsequentAction;
222 } RICActionToBeSetupItem_t;
223
224 static const uint64_t cMaxofRICactionID = 16;
225
226 typedef struct  {
227     uint8_t contentLength;
228     RICActionToBeSetupItem_t ricActionToBeSetupItem[16];  // 1..16 // Table size is const cMaxofRICactionID
229 } RICActionToBeSetupList_t;
230
231 typedef struct {
232     uint8_t contentLength;
233     uint8_t pLMNIdentityVal[3];
234 } PLMNIdentity_t;
235
236 // size of eNB-id
237 extern const size_t cMacroENBIDP_20Bits;
238 extern const size_t cHomeENBID_28Bits;
239 extern const size_t cShortMacroENBID_18Bits;
240 extern const size_t clongMacroENBIDP_21Bits;
241
242 typedef struct {   // gNB-ID (SIZE 22..32 bits) or eNB-ID (SIZE 18, 20,21 or 28 bits)
243     uint8_t bits;
244     uint32_t nodeID;
245 } NodeID_t;
246
247 typedef struct {
248         PLMNIdentity_t  pLMNIdentity;
249         NodeID_t        nodeID;
250 }  GlobalNodeID_t;
251
252 typedef struct {   // CHOICE. Only either value can be present
253         bool globalENBIDPresent;
254         GlobalNodeID_t globalENBID;
255         bool globalGNBIDPresent;
256         GlobalNodeID_t globalGNBID;
257 } InterfaceID_t;
258
259 enum InterfaceDirection__t {
260         InterfaceDirection__incoming,
261         InterfaceDirection__outgoing
262 };
263
264 typedef uint8_t ProcedureCode__t;
265
266 enum TypeOfMessage_t {
267     TypeOfMessage_nothing,
268     TypeOfMessage_InitiatingMessage,
269     TypeOfMessage_SuccessfulOutcome,
270     TypeOfMessage_UnsuccessfulOutcome
271 };
272
273 typedef struct  {
274         ProcedureCode__t procedureCode;
275         uint8_t typeOfMessage;  // This is type of enum TypeOfMessage_t
276 } InterfaceMessageType_t;
277
278 typedef uint32_t InterfaceProtocolIEID_t;
279
280 enum InterfaceProtocolIETest_t {
281         ProtocolIEtestCondition_equal,
282         ProtocolIEtestCondition_greaterthan,
283         ProtocolIEtestCondition_lessthan,
284         ProtocolIEtestCondition_contains,
285         ProtocolIEtestCondition_present
286 };
287
288 typedef struct {   // CHOICE. Only one value can be present
289     bool valueIntPresent;
290         int64_t valueInt;
291         bool valueEnumPresent;
292         int64_t valueEnum;
293     bool valueBoolPresent;
294         bool valueBool;
295     bool valueBitStringPresent;
296         DynBitString_t valueBitString;
297     bool octetstringPresent;
298         DynOctetString_t octetString;
299 } InterfaceProtocolIEValue_t;
300
301 typedef struct {
302     InterfaceProtocolIEID_t interfaceProtocolIEID;
303     uint8_t interfaceProtocolIETest;                        // This is type of enum InterfaceProtocolIETest_t
304     InterfaceProtocolIEValue_t  interfaceProtocolIEValue;
305 } InterfacProtocolIE_t;
306
307 static const uint64_t cMaxofProtocolIE = 15;
308
309 typedef struct {
310     InterfacProtocolIE_t InterfacProtocolIE[15]; // Table size is const cMaxofProtocolIE
311 } InterfaceProtocolIEList_t;
312
313 typedef struct {
314     InterfaceID_t interfaceID;
315     uint8_t interfaceDirection;  // This is type of enum InterfaceDirection_t
316     InterfaceMessageType_t interfaceMessageType;
317     bool interfaceProtocolIEListPresent;
318     InterfaceProtocolIEList_t interfaceProtocolIEList;  // OPTIONAL. Not used in RIC currently
319 } E2SMgNBX2eventTriggerDefinition_t;
320
321 enum NRTTriggerNature_t {
322     NRTTriggerNature_t_now,
323     NRTTriggerNature_t_onchange
324 };
325
326 typedef struct {
327         uint8_t triggerNature;  // This is type of enum NRTTriggerNature_t
328 } E2SMgNBNRTEventTriggerDefinitionFormat1_t;
329
330 typedef struct {
331     E2SMgNBNRTEventTriggerDefinitionFormat1_t eventDefinitionFormat1;
332 } E2SMgNBNRTEventTriggerDefinition_t;
333
334 typedef struct {
335     OctetString_t octetString;   // This element is E2AP spec format
336     // CHOICE. Only one value can be present.
337     bool E2SMgNBX2EventTriggerDefinitionPresent;
338     E2SMgNBX2eventTriggerDefinition_t e2SMgNBX2eventTriggerDefinition;  // This element is E2SM-gNB-X2 spec format
339     bool E2SMgNBNRTEventTriggerDefinitionPresent;
340     E2SMgNBNRTEventTriggerDefinition_t e2SMgNBNRTEventTriggerDefinition; // This element is E2SM-gNB-NRT spec format
341 } RICEventTriggerDefinition_t;
342
343 typedef struct {
344     RICEventTriggerDefinition_t ricEventTriggerDefinition;
345     RICActionToBeSetupList_t ricActionToBeSetupItemIEs;
346 } RICSubscriptionDetails_t;
347
348 typedef struct {
349     uint8_t contentLength;
350         RICActionID_t ricActionID[16]; // Table size is const cMaxofRICactionID
351 } RICActionAdmittedList_t;
352
353 extern const int cCauseRIC; // This is content of type CauseRIC_t
354 extern const int cCauseRICService; // This is content of type CauseRICservice_t
355 extern const int cRICCauseTransport; // This is content of type CauseTransport_t
356 extern const int cRICCauseProtocol; // This is content of type CauseProtocol_t
357 extern const int cRICCauseMisc; // This is content of type CauseMisc_t
358
359 typedef struct {
360     uint8_t content; // See above constants
361     uint8_t causeVal; // This is type of enum CauseRIC_t
362 } RICCause_t;
363
364 typedef struct {
365         RICActionID_t ricActionID;
366     RICCause_t cause;
367 } RICActionNotAdmittedItem_t;
368
369 typedef struct {
370     uint8_t contentLength;
371     RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16];  // Table size is const cMaxofRICactionID
372 } RICActionNotAdmittedList_t;
373
374 enum Criticality_t {
375     Criticality__reject,
376     Criticality__ignore,
377     Criticality__notify
378 };
379
380 typedef uint32_t ProtocolIE_ID__t;
381
382 enum TriggeringMessage__t {
383     TriggeringMessage__initiating_message,
384     TriggeringMessage__successful_outcome,
385     TriggeringMessage__unsuccessful_outcome
386 };
387
388 enum TypeOfError_t {
389         TypeOfError_not_understood,
390         TypeOfError_missing
391 };
392
393 typedef struct {
394         uint8_t iECriticality; // This is type of enum Criticality_t
395         ProtocolIE_ID__t iE_ID;
396         uint8_t typeOfError; // This is type of enum TypeOfError_t
397         //iE-Extensions  // This has no content in E2AP ASN.1 specification
398 } CriticalityDiagnosticsIEListItem_t;
399
400 typedef struct {
401     bool procedureCodePresent;
402         ProcedureCode__t procedureCode;  // OPTIONAL
403         bool triggeringMessagePresent;
404         uint8_t triggeringMessage;       // OPTIONAL. This is type of enum TriggeringMessage_t
405         bool procedureCriticalityPresent;
406         uint8_t procedureCriticality;    // OPTIONAL. This is type of enum Criticality_t
407         bool ricRequestorIDPresent;
408     RICRequestID_t ricRequestorID;   //OPTIONAL
409         bool iEsCriticalityDiagnosticsPresent;
410     uint16_t criticalityDiagnosticsIELength; // 1..256
411         CriticalityDiagnosticsIEListItem_t criticalityDiagnosticsIEListItem[256];  // OPTIONAL. Table size is const cMaxNrOfErrors
412 } CriticalityDiagnostics__t;
413
414 typedef struct {
415     OctetString_t octetString;    // E2AP spec format, the other elements for E2SM-X2 format
416     uint64_t ricCallProcessIDVal;
417 } RICCallProcessID_t;
418
419 //////////////////////////////////////////////////////////////////////
420 // E2 Error codes
421 enum e2err {
422     e2err_OK,
423     e2err_RICSubscriptionRequestAllocRICrequestIDFail,
424     e2err_RICSubscriptionRequestAllocRANfunctionIDFail,
425     e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail,
426     e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail,
427     e2err_RICSubscriptionRequestAllocactionParameterValueValueBitSFail,
428     e2err_RICSubscriptionRequestAllocactionParameterValueValueOctSFail,
429     e2err_RICSubscriptionRequestAllocactionParameterValueValuePrtsSFail,
430     e2err_RICSubscriptionRequestAllocactionRanParameterValueValueBitSFail,
431     e2err_RICSubscriptionRequestAllocactionRanParameterValueValueOctSFail,
432     e2err_RICSubscriptionRequestAllocactionRanParameterValueValuePrtsSFail,
433     e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueBitSFail,
434     e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueOctSFail,
435     e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValuePrtsSFail,
436     e2err_RICSubscriptionRequestAllocactionDefinitionX2Format1Fail,
437     e2err_RICSubscriptionRequestAllocactionDefinitionX2Format2Fail,
438     e2err_RICSubscriptionRequestAllocactionDefinitionNRTFormat1Fail,
439     e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail,
440     e2err_RICSubscriptionRequestAllocRICactionDefinitionFail,
441     e2err_RICSubscriptionRequestRICActionDefinitionEmpty,
442     e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_X2_actionDefinition,
443     e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_NRT_actionDefinition,
444     e2err_RICSubscriptionRequestActionParameterItemFail,
445     e2err_RICActionDefinitionChoicePackFail_1,
446     e2err_RICActionDefinitionChoicePackFail_2,
447     e2err_RICSubscriptionRequestAllocE2_RANueGroupDef_ItemFail,
448     e2err_RICSubscriptionRequestAllocRANParameter_ItemFail,
449     e2err_RICSubscriptionRequestRanranUeGroupDefItemParameterValueEmptyFail,
450     e2err_RICSubscriptionRequestRanParameterItemRanParameterValueEmptyFail,
451     e2err_RICSubscriptionRequestAllocActionDefinitionFail,
452     e2err_RICSubscriptionRequestAllocNRTRANParameter_ItemFail,
453     e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueBitSFail,
454     e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueOctSFail,
455     e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValuePrtsSFail,
456     e2err_RICSubscriptionRequestRanParameterItemNRTRanParameterValueEmptyFail,
457     e2err_RICSubscriptionRequestAsn_set_addE2_ActionParameter_ItemFail,
458     e2err_RICSubscriptionRequestAsn_set_addRANueGroupDef_ItemFail,
459     e2err_RICSubscriptionRequestAsn_set_addE2_RANParameter_ItemFail,
460     e2err_RICSubscriptionRequestAsn_set_addE2_NRTRANParameter_ItemFail,
461     e2err_RICActionDefinitionChoiceWMOREFail,
462     e2err_RICActionDefinitionChoiceDecodeFAIL,
463     e2err_RICActionDefinitionChoiceDecodeDefaultFail,
464     e2err_RICNRTActionDefinitionChoiceWMOREFail,
465     e2err_RICNRTActionDefinitionChoiceDecodeFAIL,
466     e2err_RICNRTActionDefinitionChoiceDecodeDefaultFail,
467     e2err_RICActionDefinitionChoiceEmptyFAIL,
468     e2err_RICNRTEventTriggerDefinitionDecodeWMOREFail,
469     e2err_RICNRTEventTriggerDefinitionDecodeFAIL,
470     e2err_RICNRTEventTriggerDefinitionDecodeDefaultFail,
471     e2err_RICEventTriggerDefinitionEmptyDecodeDefaultFail,
472     e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_X2_ActionDefinitionChoiceFail,
473     e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_NRT_ActionDefinitionFormat1Fail,
474     e2err_RICSubscriptionRequestNRTRanParameterItemRanParameterValueEmptyFail,
475     e2err_RICSubscriptionRequestNRTAllocActionDefinitionFail,
476     e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_NRT_ActionDefinitionFail,
477     e2err_RICSubscriptionRequestAllocRICsubsequentActionFail,
478     e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail,
479     e2err_RICSubscriptionRequestEncodeFail,
480     e2err_RICSubscriptionRequestAllocE2AP_PDUFail,
481     e2err_RICEventTriggerDefinitionIEValueFail_1,
482     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail,
483     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail,
484     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail,
485     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail,
486     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail,
487     e2err_RICEventTriggerDefinitionIEValueFail_2,
488     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail,
489     e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail,
490     e2err_RICEventTriggerDefinitionIEValueFail_3,
491     e2err_RICEventTriggerDefinitionIEValueFail_4,
492     e2err_RICEventTriggerDefinitionPackFail_1,
493     e2err_RICEventTriggerDefinitionPackFail_2,
494     e2err_RICENRTventTriggerDefinitionPackFail_1,
495     e2err_RICNRTEventTriggerDefinitionPackFail_2,
496     e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail,
497     e2err_RICEventTriggerDefinitionAllocE2SM_gNB_NRT_eventTriggerDefinitionFail,
498     e2err_RICEventTriggerDefinitionAllocEventTriggerDefinitionEmptyFail,
499     e2err_RICSubscriptionResponseAllocRICrequestIDFail,
500     e2err_RICSubscriptionResponseAllocRANfunctionIDFail,
501     e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail,
502     e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail,
503     e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail,
504     e2err_RICSubscriptionResponseEncodeFail,
505     e2err_RICSubscriptionResponseAllocE2AP_PDUFail,
506     e2err_RICSubscriptionFailureAllocRICrequestIDFail,
507     e2err_RICSubscriptionFailureAllocRANfunctionIDFail,
508     e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail,
509     e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail,
510     e2err_RICSubscriptionFailureEncodeFail,
511     e2err_RICSubscriptionFailureAllocE2AP_PDUFail,
512     e2err_E2SM_gNB_X2_indicationMessageAllocE2AP_PDUFail,
513     e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail,
514     e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail,
515     e2err_RICSubscriptionDeleteRequestEncodeFail,
516     e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail,
517     e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail,
518     e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail,
519     e2err_RICSubscriptionDeleteResponseEncodeFail,
520     e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail,
521     e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail,
522     e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail,
523     e2err_RICSubscriptionDeleteFailureAllocRICcauseFail,
524     e2err_RICSubscriptionDeleteFailureEncodeFail,
525     e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail,
526     e2err_RICsubscriptionRequestRICrequestIDMissing,
527     e2err_RICsubscriptionRequestRANfunctionIDMissing,
528     e2err_RICsubscriptionRequestICsubscriptionMissing,
529     e2err_RICEventTriggerDefinitionIEValueFail_5,
530     e2err_RICEventTriggerDefinitionIEValueFail_6,
531     e2err_RICEventTriggerDefinitionIEValueFail_7,
532     e2err_RICEventTriggerDefinitionIEValueFail_8,
533     e2err_RICEventTriggerDefinitionDecodeWMOREFail,
534     e2err_RICEventTriggerDefinitionDecodeFAIL,
535     e2err_RICEventTriggerDefinitionDecodeDefaultFail,
536     e2err_RICsubscriptionResponseRICrequestIDMissing,
537     e2err_RICsubscriptionResponseRANfunctionIDMissing,
538     e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing,
539     e2err_RICsubscriptionFailureRICrequestIDMissing,
540     e2err_RICsubscriptionFailureRANfunctionIDMissing,
541     e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing,
542     e2err_RICEventTriggerDefinitionIEValueFail_9,
543     e2err_RICEventTriggerDefinitionIEValueFail_10,
544     e2err_RICEventTriggerDefinitionIEValueFail_11,
545     e2err_RICsubscriptionDeleteRequestRICrequestIDMissing,
546     e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing,
547     e2err_RICsubscriptionDeleteResponseRICrequestIDMissing,
548     e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing,
549     e2err_RICsubscriptionDeleteFailureRICrequestIDMissing,
550     e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing,
551     e2err_RICsubscriptionDeleteFailureRICcauseMissing
552 };
553
554 static const char* const E2ErrorStrings[] = {
555     "e2err_OK",
556     "e2err_RICSubscriptionRequestAllocRICrequestIDFail",
557     "e2err_RICSubscriptionRequestAllocRANfunctionIDFail",
558     "e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail",
559     "e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail",
560     "e2err_RICSubscriptionRequestAllocactionParameterValueValueBitSFail",
561     "e2err_RICSubscriptionRequestAllocactionParameterValueValueOctSFail",
562     "e2err_RICSubscriptionRequestAllocactionParameterValueValuePrtsSFail",
563     "e2err_RICSubscriptionRequestAllocactionRanParameterValueValueBitSFail",
564     "e2err_RICSubscriptionRequestAllocactionRanParameterValueValueOctSFail",
565     "e2err_RICSubscriptionRequestAllocactionRanParameterValueValuePrtsSFail",
566     "e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueBitSFail",
567     "e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueOctSFail",
568     "e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValuePrtsSFail",
569     "e2err_RICSubscriptionRequestAllocactionDefinitionX2Format1Fail",
570     "e2err_RICSubscriptionRequestAllocactionDefinitionX2Format2Fail",
571     "e2err_RICSubscriptionRequestAllocactionDefinitionNRTFormat1Fail",
572     "e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail",
573     "e2err_RICSubscriptionRequestAllocRICactionDefinitionFail",
574     "e2err_RICSubscriptionRequestRICActionDefinitionEmpty",
575     "e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_X2_actionDefinition",
576     "e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_NRT_actionDefinition",
577     "e2err_RICSubscriptionRequestActionParameterItemFail",
578     "e2err_RICActionDefinitionChoicePackFail_1",
579     "e2err_RICActionDefinitionChoicePackFail_2",
580     "e2err_RICSubscriptionRequestAllocE2_RANueGroupDef_ItemFail",
581     "e2err_RICSubscriptionRequestAllocRANParameter_ItemFail",
582     "e2err_RICSubscriptionRequestRanranUeGroupDefItemParameterValueEmptyFail",
583     "e2err_RICSubscriptionRequestRanParameterItemRanParameterValueEmptyFail",
584     "e2err_RICSubscriptionRequestAllocActionDefinitionFail",
585     "e2err_RICSubscriptionRequestAllocNRTRANParameter_ItemFail",
586     "e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueBitSFail",
587     "e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueOctSFail",
588     "e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValuePrtsSFail",
589     "e2err_RICSubscriptionRequestRanParameterItemNRTRanParameterValueEmptyFail",
590     "e2err_RICSubscriptionRequestAsn_set_addE2_ActionParameter_ItemFail",
591     "e2err_RICSubscriptionRequestAsn_set_addRANueGroupDef_ItemFail",
592     "e2err_RICSubscriptionRequestAsn_set_addE2_RANParameter_ItemFail",
593     "e2err_RICSubscriptionRequestAsn_set_addE2_NRTRANParameter_ItemFail",
594     "e2err_RICActionDefinitionChoiceWMOREFail",
595     "e2err_RICActionDefinitionChoiceDecodeFAIL",
596     "e2err_RICActionDefinitionChoiceDecodeDefaultFail",
597     "e2err_RICNRTActionDefinitionChoiceWMOREFail",
598     "e2err_RICNRTActionDefinitionChoiceDecodeFAIL",
599     "e2err_RICNRTActionDefinitionChoiceDecodeDefaultFail",
600     "e2err_RICActionDefinitionChoiceEmptyFAIL",
601     "e2err_RICNRTEventTriggerDefinitionDecodeWMOREFail",
602     "e2err_RICNRTEventTriggerDefinitionDecodeFAIL",
603     "e2err_RICNRTEventTriggerDefinitionDecodeDefaultFail",
604     "e2err_RICEventTriggerDefinitionEmptyDecodeDefaultFail",
605     "e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_X2_ActionDefinitionChoiceFail",
606     "e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_NRT_ActionDefinitionFormat1Fail",
607     "e2err_RICSubscriptionRequestNRTRanParameterItemRanParameterValueEmptyFail",
608     "e2err_RICSubscriptionRequestNRTAllocActionDefinitionFail",
609     "e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_NRT_ActionDefinitionFail",
610     "e2err_RICSubscriptionRequestAllocRICsubsequentActionFail",
611     "e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail",
612     "e2err_RICSubscriptionRequestEncodeFail",
613     "e2err_RICSubscriptionRequestAllocE2AP_PDUFail",
614     "e2err_RICEventTriggerDefinitionIEValueFail_1",
615     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail",
616     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail",
617     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail",
618     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail",
619     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail",
620     "e2err_RICEventTriggerDefinitionIEValueFail_2",
621     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail",
622     "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail",
623     "e2err_RICEventTriggerDefinitionIEValueFail_3",
624     "e2err_RICEventTriggerDefinitionIEValueFail_4",
625     "e2err_RICEventTriggerDefinitionPackFail_1",
626     "e2err_RICEventTriggerDefinitionPackFail_2",
627     "e2err_RICENRTventTriggerDefinitionPackFail_1",
628     "e2err_RICNRTEventTriggerDefinitionPackFail_2",
629     "e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail",
630     "e2err_RICEventTriggerDefinitionAllocE2SM_gNB_NRT_eventTriggerDefinitionFail",
631     "e2err_RICEventTriggerDefinitionAllocEventTriggerDefinitionEmptyFail",
632     "e2err_RICSubscriptionResponseAllocRICrequestIDFail",
633     "e2err_RICSubscriptionResponseAllocRANfunctionIDFail",
634     "e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail",
635     "e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail",
636     "e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail",
637     "e2err_RICSubscriptionResponseEncodeFail",
638     "e2err_RICSubscriptionResponseAllocE2AP_PDUFail",
639     "e2err_RICSubscriptionFailureAllocRICrequestIDFail",
640     "e2err_RICSubscriptionFailureAllocRANfunctionIDFail",
641     "e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail",
642     "e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail",
643     "e2err_RICSubscriptionFailureEncodeFail",
644     "e2err_RICSubscriptionFailureAllocE2AP_PDUFail",
645     "e2err_E2SM_gNB_X2_indicationMessageAllocE2AP_PDUFail",
646     "e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail",
647     "e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail",
648     "e2err_RICSubscriptionDeleteRequestEncodeFail",
649     "e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail",
650     "e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail",
651     "e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail",
652     "e2err_RICSubscriptionDeleteResponseEncodeFail",
653     "e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail",
654     "e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail",
655     "e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail",
656     "e2err_RICSubscriptionDeleteFailureAllocRICcauseFail",
657     "e2err_RICSubscriptionDeleteFailureEncodeFail",
658     "e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail",
659     "e2err_RICsubscriptionRequestRICrequestIDMissing",
660     "e2err_RICsubscriptionRequestRANfunctionIDMissing",
661     "e2err_RICsubscriptionRequestICsubscriptionMissing",
662     "e2err_RICEventTriggerDefinitionIEValueFail_5",
663     "e2err_RICEventTriggerDefinitionIEValueFail_6",
664     "e2err_RICEventTriggerDefinitionIEValueFail_7",
665     "e2err_RICEventTriggerDefinitionIEValueFail_8",
666     "e2err_RICEventTriggerDefinitionDecodeWMOREFail",
667     "e2err_RICEventTriggerDefinitionDecodeFAIL",
668     "e2err_RICEventTriggerDefinitionDecodeDefaultFail",
669     "e2err_RICsubscriptionResponseRICrequestIDMissing",
670     "e2err_RICsubscriptionResponseRANfunctionIDMissing",
671     "e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing",
672     "e2err_RICsubscriptionFailureRICrequestIDMissing",
673     "e2err_RICsubscriptionFailureRANfunctionIDMissing",
674     "e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing",
675     "e2err_RICEventTriggerDefinitionIEValueFail_9",
676     "e2err_RICEventTriggerDefinitionIEValueFail_10",
677     "e2err_RICEventTriggerDefinitionIEValueFail_11",
678     "e2err_RICsubscriptionDeleteRequestRICrequestIDMissing",
679     "e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing",
680     "e2err_RICsubscriptionDeleteResponseRICrequestIDMissing",
681     "e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing",
682     "e2err_RICsubscriptionDeleteFailureRICrequestIDMissing",
683     "e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing",
684     "e2err_RICsubscriptionDeleteFailureRICcauseMissing"
685 };
686
687 typedef struct {
688     uint64_t messageType; // Initiating message or Successful outcome or Unsuccessful outcome
689     uint64_t messageId;
690 } E2MessageInfo_t;
691
692 //////////////////////////////////////////////////////////////////////
693 // Message definitons
694
695 // Below constant values are same as in E2AP, E2SM and X2AP specs
696 extern const uint64_t cE2InitiatingMessage;
697 extern const uint64_t cE2SuccessfulOutcome;
698 extern const uint64_t cE2UnsuccessfulOutcome;
699
700 // E2AP messages. Below message id constant values are the same as in ASN.1 specification
701
702 // Initiating message
703 extern const uint64_t cRICSubscriptionRequest;
704 extern const uint64_t cRICSubscriptionDeleteRequest;
705
706 // Successful outcome
707 extern const uint64_t cRICSubscriptionResponse;
708 extern const uint64_t cRICsubscriptionDeleteResponse;
709
710 // Unsuccessful outcome
711 extern const uint64_t cRICSubscriptionFailure;
712 extern const uint64_t cRICsubscriptionDeleteFailure;
713
714 typedef struct {
715     RICRequestID_t ricRequestID;
716     RANFunctionID_t ranFunctionID;
717     RICSubscriptionDetails_t ricSubscriptionDetails;
718 } RICSubscriptionRequest_t;
719
720 typedef struct {
721     RICRequestID_t ricRequestID;
722     RANFunctionID_t ranFunctionID;
723     RICActionAdmittedList_t ricActionAdmittedList;
724     bool ricActionNotAdmittedListPresent;
725     RICActionNotAdmittedList_t ricActionNotAdmittedList;
726 } RICSubscriptionResponse_t;
727
728 typedef struct {
729     RICRequestID_t ricRequestID;
730     RANFunctionID_t ranFunctionID;
731     RICActionNotAdmittedList_t ricActionNotAdmittedList;
732     bool criticalityDiagnosticsPresent;
733     CriticalityDiagnostics__t criticalityDiagnostics;
734 } RICSubscriptionFailure_t;
735
736 typedef struct {
737     RICRequestID_t ricRequestID;
738     RANFunctionID_t ranFunctionID;
739 } RICSubscriptionDeleteRequest_t;
740
741 typedef struct  {
742     RICRequestID_t ricRequestID;
743     RANFunctionID_t ranFunctionID;
744 } RICSubscriptionDeleteResponse_t;
745
746 typedef struct  {
747     RICRequestID_t ricRequestID;
748     RANFunctionID_t ranFunctionID;
749     RICCause_t cause;
750     bool criticalityDiagnosticsPresent;
751     CriticalityDiagnostics__t criticalityDiagnostics; // OPTIONAL. Not used in RIC currently
752 } RICSubscriptionDeleteFailure_t;
753
754 //////////////////////////////////////////////////////////////////////
755 // Function declarations
756
757 const char* getE2ErrorString(uint64_t);
758
759 typedef void* e2ap_pdu_ptr_t;
760
761 uint64_t packRICSubscriptionRequest(size_t*, byte*, char*,RICSubscriptionRequest_t*);
762 uint64_t packRICEventTriggerDefinition(char*,RICEventTriggerDefinition_t*);
763 uint64_t packRICActionDefinition(char*, RICActionDefinitionChoice_t*);
764 uint64_t packRICEventTriggerDefinitionX2Format(char* pLogBuffer, RICEventTriggerDefinition_t*);
765 uint64_t packRICEventTriggerDefinitionNRTFormat(char* pLogBuffer, RICEventTriggerDefinition_t*);
766 uint64_t packActionDefinitionX2Format(char*, RICActionDefinitionChoice_t*);
767 uint64_t packActionDefinitionNRTFormat(char*, RICActionDefinitionChoice_t*);
768 uint64_t packRICSubscriptionResponse(size_t*, byte*, char*,RICSubscriptionResponse_t*);
769 uint64_t packRICSubscriptionFailure(size_t*, byte*, char*,RICSubscriptionFailure_t*);
770 uint64_t packRICSubscriptionDeleteRequest(size_t*, byte*, char*,RICSubscriptionDeleteRequest_t*);
771 uint64_t packRICSubscriptionDeleteResponse(size_t*, byte*, char*,RICSubscriptionDeleteResponse_t*);
772 uint64_t packRICSubscriptionDeleteFailure(size_t*, byte*, char*,RICSubscriptionDeleteFailure_t*);
773
774 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t, const byte*, char*, E2MessageInfo_t*);
775 uint64_t getRICSubscriptionRequestData(mem_track_hdr_t *, e2ap_pdu_ptr_t*, RICSubscriptionRequest_t*);
776 uint64_t getRICEventTriggerDefinitionData(RICEventTriggerDefinition_t*);
777 uint64_t getRICEventTriggerDefinitionDataX2Format(RICEventTriggerDefinition_t*);
778 uint64_t getRICEventTriggerDefinitionDataNRTFormat(RICEventTriggerDefinition_t*);
779 uint64_t getRICActionDefinitionData(mem_track_hdr_t *, RICActionDefinitionChoice_t*);
780 uint64_t getRICActionDefinitionDataX2Format(mem_track_hdr_t*, RICActionDefinitionChoice_t*);
781 uint64_t getRICActionDefinitionDataNRTFormat(mem_track_hdr_t*, RICActionDefinitionChoice_t*);
782 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t*, RICSubscriptionResponse_t*);
783 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t*, RICSubscriptionFailure_t*);
784 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteRequest_t*);
785 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteResponse_t*);
786 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteFailure_t*);
787
788 void* allocDynMem(mem_track_hdr_t*, size_t);
789 bool addOctetString(mem_track_hdr_t *, DynOctetString_t*, uint64_t, void*);
790 bool addBitString(mem_track_hdr_t *, DynBitString_t*, uint64_t, void*, uint8_t);
791
792 uint64_t allocActionDefinitionX2Format1(mem_track_hdr_t*, E2SMgNBX2actionDefinition_t**);
793 uint64_t allocActionDefinitionX2Format2(mem_track_hdr_t*, E2SMgNBX2ActionDefinitionFormat2_t**);
794 uint64_t allocActionDefinitionNRTFormat1(mem_track_hdr_t*, E2SMgNBNRTActionDefinitionFormat1_t**);
795
796 uint64_t allocateOctetStringBuffer(DynOctetString_t*, uint64_t);
797 uint64_t allocateBitStringBuffer(mem_track_hdr_t *, DynBitString_t*, uint64_t);
798
799 #if DEBUG
800 bool TestRICSubscriptionRequest();
801 bool TestRICSubscriptionResponse();
802 bool TestRICSubscriptionFailure();
803 bool TestRICSubscriptionDeleteRequest();
804 bool TestRICSubscriptionDeleteResponse();
805 bool TestRICSubscriptionDeleteFailure();
806
807 void printRICSubscriptionRequest(const RICSubscriptionRequest_t*);
808 void printRICSubscriptionResponse(const RICSubscriptionResponse_t*);
809 void printRICSubscriptionFailure(const RICSubscriptionFailure_t*);
810 void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t*);
811 void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t*);
812 void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t*);
813 #endif
814
815 #ifdef  __cplusplus
816 }
817 #endif
818
819 #endif