Support for handling unordered IEs in RIC Sub Del Resp/Failure messgae
[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
31 #ifdef  __cplusplus
32 extern "C" {
33 #endif
34
35 typedef unsigned char byte;
36
37 extern const uint64_t cMaxSizeOfOctetString;
38
39 typedef struct { // Octet string in ASN.1 does not have maximum length!
40     size_t contentLength;
41     uint8_t data[1024]; // Table size is const cMaxSizeOfOctetString
42 } OctetString_t;
43
44 typedef struct { // Octet string in ASN.1 does not have maximum length!
45     size_t length;
46     uint8_t* data;
47 } DynOctetString_t;
48
49 typedef struct {
50     uint8_t unusedBits; // Trailing unused bits 0 - 7
51     size_t byteLength;  // Length in bytes
52     uint8_t* data;
53 } DynBitString_t;
54
55 typedef struct  {
56         uint32_t ricRequestorID; // 0..65535
57         uint32_t ricInstanceID;  // 0..65535
58 } RICRequestID_t;
59
60 typedef uint16_t RANFunctionID_t; // 0..4095
61
62 typedef uint64_t RICActionID_t; // 0..255
63
64 enum RICActionType_t {
65      RICActionType_report,
66      RICActionType_insert,
67      RICActionType_policy
68 };
69
70 enum RICSubsequentActionType_t {
71         RICSubsequentActionType_Continue,
72         RICSubsequentActionType_wait
73 };
74
75 typedef struct {
76     OctetString_t octetString;   // This element is E2AP spec format
77 } RICActionDefinitionChoice_t;
78
79 enum RICTimeToWait_t {
80         RICTimeToWait_zero,
81         RICTimeToWait_w1ms,
82         RICTimeToWait_w2ms,
83         RICTimeToWait_w5ms,
84         RICTimeToWait_w10ms,
85         RICTimeToWait_w20ms,
86         RICTimeToWait_w30ms,
87         RICTimeToWait_w40ms,
88         RICTimeToWait_w50ms,
89         RICTimeToWait_w100ms,
90         RICTimeToWait_w200ms,
91     RICTimeToWait_w500ms,
92         RICTimeToWait_w1s,
93         RICTimeToWait_w2s,
94         RICTimeToWait_w5s,
95         RICTimeToWait_w10s,
96         RICTimeToWait_w20s,
97         RICTimeToWait_w60s
98 };
99
100 typedef struct {
101         uint64_t ricSubsequentActionType;  // This is type of enum RICSubsequentActionType_t
102         uint64_t ricTimeToWait;  // This is type of enum RICTimeToWait_t
103 } RICSubsequentAction_t;
104
105 typedef struct  {
106         RICActionID_t ricActionID;
107         uint64_t ricActionType;  // This is type of enum RICActionType_t
108         bool ricActionDefinitionPresent;
109         RICActionDefinitionChoice_t ricActionDefinitionChoice;
110         bool ricSubsequentActionPresent;
111         RICSubsequentAction_t ricSubsequentAction;
112 } RICActionToBeSetupItem_t;
113
114 static const uint64_t cMaxofRICactionID = 16;
115
116 typedef struct  {
117     uint8_t contentLength;
118     RICActionToBeSetupItem_t ricActionToBeSetupItem[16];  // 1..16 // Table size is const cMaxofRICactionID
119 } RICActionToBeSetupList_t;
120
121 typedef struct {
122     uint8_t contentLength;
123     uint8_t pLMNIdentityVal[3];
124 } PLMNIdentity_t;
125
126 // size of eNB-id
127 extern const size_t cMacroENBIDP_20Bits;
128 extern const size_t cHomeENBID_28Bits;
129 extern const size_t cShortMacroENBID_18Bits;
130 extern const size_t clongMacroENBIDP_21Bits;
131
132 typedef struct {   // gNB-ID (SIZE 22..32 bits) or eNB-ID (SIZE 18, 20,21 or 28 bits)
133     uint8_t bits;
134     uint32_t nodeID;
135 } NodeID_t;
136
137 typedef struct {
138         PLMNIdentity_t  pLMNIdentity;
139         NodeID_t        nodeID;
140 }  GlobalNodeID_t;
141
142 typedef struct {   // CHOICE. Only either value can be present
143         bool globalENBIDPresent;
144         GlobalNodeID_t globalENBID;
145         bool globalGNBIDPresent;
146         GlobalNodeID_t globalGNBID;
147 } InterfaceID_t;
148
149 enum InterfaceDirection__t {
150         InterfaceDirection__incoming,
151         InterfaceDirection__outgoing
152 };
153
154 typedef uint8_t ProcedureCode__t;
155
156 typedef struct {
157     OctetString_t octetString;   // This element is E2AP spec format
158 } RICEventTriggerDefinition_t;
159
160 typedef struct {
161     RICEventTriggerDefinition_t ricEventTriggerDefinition;
162     RICActionToBeSetupList_t ricActionToBeSetupItemIEs;
163 } RICSubscriptionDetails_t;
164
165 typedef struct {
166     uint8_t contentLength;
167         RICActionID_t ricActionID[16]; // Table size is const cMaxofRICactionID
168 } RICActionAdmittedList_t;
169
170 typedef struct {
171     uint8_t content; // See above constants
172     uint8_t causeVal; // This is type of enum CauseRIC_t
173 } RICCause_t;
174
175 typedef struct {
176         RICActionID_t ricActionID;
177     RICCause_t cause;
178 } RICActionNotAdmittedItem_t;
179
180 typedef struct {
181     uint8_t contentLength;
182     RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16];  // Table size is const cMaxofRICactionID
183 } RICActionNotAdmittedList_t;
184
185 enum Criticality_t {
186     Criticality__reject,
187     Criticality__ignore,
188     Criticality__notify
189 };
190
191 typedef uint32_t ProtocolIE_ID__t;
192
193 enum TriggeringMessage__t {
194     TriggeringMessage__initiating_message,
195     TriggeringMessage__successful_outcome,
196     TriggeringMessage__unsuccessful_outcome
197 };
198
199 enum TypeOfError_t {
200         TypeOfError_not_understood,
201         TypeOfError_missing
202 };
203
204 typedef struct {
205         uint8_t iECriticality; // This is type of enum Criticality_t
206         ProtocolIE_ID__t iE_ID;
207         uint8_t typeOfError; // This is type of enum TypeOfError_t
208         //iE-Extensions  // This has no content in E2AP ASN.1 specification
209 } CriticalityDiagnosticsIEListItem_t;
210
211 typedef struct {
212     bool procedureCodePresent;
213         ProcedureCode__t procedureCode;  // OPTIONAL
214         bool triggeringMessagePresent;
215         uint8_t triggeringMessage;       // OPTIONAL. This is type of enum TriggeringMessage_t
216         bool procedureCriticalityPresent;
217         uint8_t procedureCriticality;    // OPTIONAL. This is type of enum Criticality_t
218         bool ricRequestorIDPresent;
219     RICRequestID_t ricRequestorID;   //OPTIONAL
220         bool iEsCriticalityDiagnosticsPresent;
221     uint16_t criticalityDiagnosticsIELength; // 1..256
222         CriticalityDiagnosticsIEListItem_t criticalityDiagnosticsIEListItem[256];  // OPTIONAL. Table size is const cMaxNrOfErrors
223 } CriticalityDiagnostics__t;
224
225 typedef struct {
226     OctetString_t octetString;    // E2AP spec format, the other elements for E2SM-X2 format
227     uint64_t ricCallProcessIDVal;
228 } RICCallProcessID_t;
229
230 //////////////////////////////////////////////////////////////////////
231 // E2 Error codes
232 enum e2err {
233     e2err_OK,
234     e2err_RICSubscriptionRequestAllocRICrequestIDFail,
235     e2err_RICSubscriptionRequestAllocRANfunctionIDFail,
236     e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail,
237     e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail,
238     e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail,
239     e2err_RICSubscriptionRequestAllocRICactionDefinitionFail,
240     e2err_RICSubscriptionRequestAllocRICsubsequentActionFail,
241     e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail,
242     e2err_RICSubscriptionRequestEncodeFail,
243     e2err_RICSubscriptionRequestAllocE2AP_PDUFail,
244     e2err_RICSubscriptionResponseAllocRICrequestIDFail,
245     e2err_RICSubscriptionResponseAllocRANfunctionIDFail,
246     e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail,
247     e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail,
248     e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail,
249     e2err_RICSubscriptionResponseEncodeFail,
250     e2err_RICSubscriptionResponseAllocE2AP_PDUFail,
251     e2err_RICSubscriptionFailureAllocRICrequestIDFail,
252     e2err_RICSubscriptionFailureAllocRANfunctionIDFail,
253     e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail,
254     e2err_RICSubscriptionFailureAllocCauseFail,
255     e2err_RICSubscriptionFailureEncodeFail,
256     e2err_RICSubscriptionFailureAllocE2AP_PDUFail,
257     e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail,
258     e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail,
259     e2err_RICSubscriptionDeleteRequestEncodeFail,
260     e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail,
261     e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail,
262     e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail,
263     e2err_RICSubscriptionDeleteResponseEncodeFail,
264     e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail,
265     e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail,
266     e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail,
267     e2err_RICSubscriptionDeleteFailureAllocRICcauseFail,
268     e2err_RICSubscriptionDeleteFailureEncodeFail,
269     e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail,
270     e2err_RICsubscriptionRequestRICrequestIDMissing,
271     e2err_RICsubscriptionRequestRANfunctionIDMissing,
272     e2err_RICsubscriptionRequestICsubscriptionMissing,
273     e2err_RICsubscriptionResponseRICrequestIDMissing,
274     e2err_RICsubscriptionResponseRANfunctionIDMissing,
275     e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing,
276     e2err_RICsubscriptionFailureRICrequestIDMissing,
277     e2err_RICsubscriptionFailureRANfunctionIDMissing,
278     e2err_RICsubscriptionFailureCauseMissing,
279     e2err_RICsubscriptionDeleteRequestRICrequestIDMissing,
280     e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing,
281     e2err_RICsubscriptionDeleteResponseRICrequestIDMissing,
282     e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing,
283     e2err_RICsubscriptionDeleteFailureRICrequestIDMissing,
284     e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing,
285     e2err_RICsubscriptionDeleteFailureRICcauseMissing,
286     e2err_RICSubscriptionDeleteRequiredRICrequestIDMissing,
287     e2err_RICSubscriptionDeleteRequiredRANfunctionIDMissing,
288     e2err_RICSubscriptionDeleteRequiredRICcauseMissing,
289     e2err_RICSubscriptionDeleteRequiredEncodeFail,
290     e2err_RICSubscriptionDeleteRequiredAllocE2AP_PDUFail,
291     e2err_RICsubscriptionResponseRICrequestIDWrongOrder,
292     e2err_RICsubscriptionResponseRANfunctionIDWrongOrder,
293     e2err_RICsubscriptionResponseRICaction_Admitted_ListWrongOrder,
294     e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListWrongOrder,
295     e2err_RICsubscriptionFailureRICrequestIDWrongOrder,
296     e2err_RICsubscriptionFailureRANfunctionIDWrongOrder,
297     e2err_RICsubscriptionFailureCauseWrongOrder,
298     e2err_RICsubscriptionDeleteResponseRICrequestIDWrongOrder,
299     e2err_RICsubscriptionDeleteResponseRANfunctionIDWrongOrder,
300     e2err_RICsubscriptionDeleteFailureRICrequestIDWrongOrder,
301     e2err_RICsubscriptionDeleteFailureRANfunctionIDWrongOrder,
302     e2err_RICsubscriptionDeleteFailureRICcauseWrongOrder
303 };
304
305 static const char* const E2ErrorStrings[] = {
306     "e2err_OK",
307     "e2err_RICSubscriptionRequestAllocRICrequestIDFail",
308     "e2err_RICSubscriptionRequestAllocRANfunctionIDFail",
309     "e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail",
310     "e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail",
311     "e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail",
312     "e2err_RICSubscriptionRequestAllocRICactionDefinitionFail",
313     "e2err_RICSubscriptionRequestAllocRICsubsequentActionFail",
314     "e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail",
315     "e2err_RICSubscriptionRequestEncodeFail",
316     "e2err_RICSubscriptionRequestAllocE2AP_PDUFail",
317     "e2err_RICSubscriptionResponseAllocRICrequestIDFail",
318     "e2err_RICSubscriptionResponseAllocRANfunctionIDFail",
319     "e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail",
320     "e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail",
321     "e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail",
322     "e2err_RICSubscriptionResponseEncodeFail",
323     "e2err_RICSubscriptionResponseAllocE2AP_PDUFail",
324     "e2err_RICSubscriptionFailureAllocRICrequestIDFail",
325     "e2err_RICSubscriptionFailureAllocRANfunctionIDFail",
326     "e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail",
327     "e2err_RICSubscriptionFailureAllocCauseFail",
328     "e2err_RICSubscriptionFailureEncodeFail",
329     "e2err_RICSubscriptionFailureAllocE2AP_PDUFail",
330     "e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail",
331     "e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail",
332     "e2err_RICSubscriptionDeleteRequestEncodeFail",
333     "e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail",
334     "e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail",
335     "e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail",
336     "e2err_RICSubscriptionDeleteResponseEncodeFail",
337     "e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail",
338     "e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail",
339     "e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail",
340     "e2err_RICSubscriptionDeleteFailureAllocRICcauseFail",
341     "e2err_RICSubscriptionDeleteFailureEncodeFail",
342     "e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail",
343     "e2err_RICsubscriptionRequestRICrequestIDMissing",
344     "e2err_RICsubscriptionRequestRANfunctionIDMissing",
345     "e2err_RICsubscriptionRequestICsubscriptionMissing",
346     "e2err_RICsubscriptionResponseRICrequestIDMissing",
347     "e2err_RICsubscriptionResponseRANfunctionIDMissing",
348     "e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing",
349     "e2err_RICsubscriptionFailureRICrequestIDMissing",
350     "e2err_RICsubscriptionFailureRANfunctionIDMissing",
351     "e2err_RICsubscriptionFailureCauseMissing",
352     "e2err_RICsubscriptionDeleteRequestRICrequestIDMissing",
353     "e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing",
354     "e2err_RICsubscriptionDeleteResponseRICrequestIDMissing",
355     "e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing",
356     "e2err_RICsubscriptionDeleteFailureRICrequestIDMissing",
357     "e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing",
358     "e2err_RICsubscriptionDeleteFailureRICcauseMissing",
359     "e2err_RICSubscriptionDeleteRequiredRICrequestIDMissing",
360     "e2err_RICSubscriptionDeleteRequiredRANfunctionIDMissing",
361     "e2err_RICSubscriptionDeleteRequiredRICcauseMissing",
362     "e2err_RICSubscriptionDeleteRequiredEncodeFail",
363     "e2err_RICSubscriptionDeleteRequiredAllocE2AP_PDUFail",
364     "e2err_RICsubscriptionResponseRICrequestIDWrongOrder",
365     "e2err_RICsubscriptionResponseRANfunctionIDWrongOrder",
366     "e2err_RICsubscriptionResponseRICaction_Admitted_ListWrongOrder",
367     "e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListWrongOrder",
368     "e2err_RICsubscriptionFailureRICrequestIDWrongOrder",
369     "e2err_RICsubscriptionFailureRANfunctionIDWrongOrder",
370     "e2err_RICsubscriptionFailureCauseWrongOrder",
371 };
372
373 typedef struct {
374     uint64_t messageType; // Initiating message or Successful outcome or Unsuccessful outcome
375     uint64_t messageId;
376 } E2MessageInfo_t;
377
378 //////////////////////////////////////////////////////////////////////
379 // Message definitons
380
381 // Below constant values are same as in E2AP, E2SM and X2AP specs
382 extern const uint64_t cE2InitiatingMessage;
383 extern const uint64_t cE2SuccessfulOutcome;
384 extern const uint64_t cE2UnsuccessfulOutcome;
385
386 // E2AP messages. Below message id constant values are the same as in ASN.1 specification
387
388 // Initiating message
389 extern const uint64_t cRICSubscriptionRequest;
390 extern const uint64_t cRICSubscriptionDeleteRequest;
391 extern const uint64_t cRICSubscriptionDeleteRequired;
392
393 // Successful outcome
394 extern const uint64_t cRICSubscriptionResponse;
395 extern const uint64_t cRICsubscriptionDeleteResponse;
396
397 // Unsuccessful outcome
398 extern const uint64_t cRICSubscriptionFailure;
399 extern const uint64_t cRICsubscriptionDeleteFailure;
400
401 typedef struct {
402     RICRequestID_t ricRequestID;
403     RANFunctionID_t ranFunctionID;
404     RICSubscriptionDetails_t ricSubscriptionDetails;
405 } RICSubscriptionRequest_t;
406
407 typedef struct {
408     RICRequestID_t ricRequestID;
409     RANFunctionID_t ranFunctionID;
410     RICActionAdmittedList_t ricActionAdmittedList;
411     bool ricActionNotAdmittedListPresent;
412     RICActionNotAdmittedList_t ricActionNotAdmittedList;
413 } RICSubscriptionResponse_t;
414
415 typedef struct {
416     RICRequestID_t ricRequestID;
417     RANFunctionID_t ranFunctionID;
418     RICCause_t cause;
419     bool criticalityDiagnosticsPresent;
420     CriticalityDiagnostics__t criticalityDiagnostics;
421 } RICSubscriptionFailure_t;
422
423 typedef struct {
424     RICRequestID_t ricRequestID;
425     RANFunctionID_t ranFunctionID;
426 } RICSubscriptionDeleteRequest_t;
427
428 typedef struct  {
429     RICRequestID_t ricRequestID;
430     RANFunctionID_t ranFunctionID;
431 } RICSubscriptionDeleteResponse_t;
432
433 typedef struct  {
434     RICRequestID_t ricRequestID;
435     RANFunctionID_t ranFunctionID;
436     RICCause_t cause;
437     bool criticalityDiagnosticsPresent;
438     CriticalityDiagnostics__t criticalityDiagnostics; // OPTIONAL. Not used in RIC currently
439 } RICSubscriptionDeleteFailure_t;
440
441 typedef struct {
442     RICRequestID_t ricRequestID;
443     RANFunctionID_t ranFunctionID;
444     RICCause_t cause;
445 } RICSubscriptionDeleteRequired_t;
446
447 typedef struct {
448     int noOfRanSubscriptions;
449     RICSubscriptionDeleteRequired_t ranSubscriptionsDelRequired[1024];
450
451 } RICSubsDeleteRequired_t;
452
453 //////////////////////////////////////////////////////////////////////
454 // Function declarations
455
456 void allowASN1DebugPrints(bool);
457
458 void allowOutOfOrderIEMsg(uint8_t);
459
460 const char* getE2ErrorString(uint64_t);
461
462 typedef void* e2ap_pdu_ptr_t;
463
464 uint64_t packRICSubscriptionRequest(size_t*, byte*, char*,RICSubscriptionRequest_t*);
465 uint64_t packRICSubscriptionResponse(size_t*, byte*, char*,RICSubscriptionResponse_t*);
466 uint64_t packRICSubscriptionFailure(size_t*, byte*, char*,RICSubscriptionFailure_t*);
467 uint64_t packRICSubscriptionDeleteRequest(size_t*, byte*, char*,RICSubscriptionDeleteRequest_t*);
468 uint64_t packRICSubscriptionDeleteResponse(size_t*, byte*, char*,RICSubscriptionDeleteResponse_t*);
469 uint64_t packRICSubscriptionDeleteFailure(size_t*, byte*, char*,RICSubscriptionDeleteFailure_t*);
470 uint64_t packRICSubscriptionDeleteRequired(size_t*, byte*, char*,RICSubsDeleteRequired_t*);
471
472 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t, const byte*, char*, E2MessageInfo_t*);
473 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t*, RICSubscriptionRequest_t*);
474 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t*, RICSubscriptionResponse_t*);
475 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t*, RICSubscriptionFailure_t*);
476 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteRequest_t*);
477 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteResponse_t*);
478 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteFailure_t*);
479 uint64_t getRICSubscriptionDeleteRequiredData(e2ap_pdu_ptr_t*, RICSubsDeleteRequired_t*);
480
481 #if DEBUG
482 bool TestRICSubscriptionRequest();
483 bool TestRICSubscriptionResponse();
484 bool TestRICSubscriptionFailure();
485 bool TestRICSubscriptionDeleteRequest();
486 bool TestRICSubscriptionDeleteResponse();
487 bool TestRICSubscriptionDeleteFailure();
488 bool TestRICSubscriptionDeleteRequired();
489
490 void printRICSubscriptionRequest(const RICSubscriptionRequest_t*);
491 void printRICSubscriptionResponse(const RICSubscriptionResponse_t*);
492 void printRICSubscriptionFailure(const RICSubscriptionFailure_t*);
493 void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t*);
494 void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t*);
495 void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t*);
496 void printRICSubscriptionDeleteRequired(const RICSubsDeleteRequired_t*);
497 #endif
498
499 #ifdef  __cplusplus
500 }
501 #endif
502
503 #endif