2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
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
10 http://www.apache.org/licenses/LICENSE-2.0
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 ==================================================================================
23 #ifndef ASN_DISABLE_OER_SUPPORT
24 #define ASN_DISABLE_OER_SUPPORT
29 #include <ProcedureCode.h>
35 extern const int cCauseRICRequest;
36 extern const int cCauseRICService;
37 extern const int cCauseTransport;
38 extern const int cCauseProtocol;
39 extern const int cCauseMisc;
41 typedef unsigned char byte;
43 //extern const int64_t cMaxNrOfErrors;
45 extern const uint64_t cMaxSizeOfOctetString;
47 typedef struct { // Octet string in ASN.1 does not have maximum length!
49 uint8_t data[1024]; // Table size is const cMaxSizeOfOctetString
52 typedef struct { // Octet string in ASN.1 does not have maximum length!
58 uint8_t unusedBits; // Trailing unused bits 0 - 7
59 size_t byteLength; // Length in bytes
64 uint32_t ricRequestorID; // 0..65535
65 uint32_t ricInstanceID; // 0..65535
68 typedef uint16_t RANFunctionID_t; // 0..4095
70 typedef uint64_t RICActionID_t; // 0..255
72 enum RICActionType_t {
79 enum RICSubsequentActionType_t {
80 RICSubsequentActionType_Continue,
81 RICSubsequentActionType_wait
85 OctetString_t octetString; // This element is E2AP spec format
86 } RICActionDefinitionChoice_t;
88 enum RICTimeToWait_t {
100 RICTimeToWait_w500ms,
110 uint64_t ricSubsequentActionType; // This is type of enum RICSubsequentActionType_t
111 uint64_t ricTimeToWait; // This is type of enum RICTimeToWait_t
112 } RICSubsequentAction_t;
115 RICActionID_t ricActionID;
116 uint64_t ricActionType; // This is type of enum RICActionType_t
117 bool ricActionDefinitionPresent;
118 RICActionDefinitionChoice_t ricActionDefinitionChoice;
119 bool ricSubsequentActionPresent;
120 RICSubsequentAction_t ricSubsequentAction;
121 } RICActionToBeSetupItem_t;
123 static const uint64_t cMaxofRICactionID = 16;
126 uint8_t contentLength;
127 RICActionToBeSetupItem_t ricActionToBeSetupItem[16]; // 1..16 // Table size is const cMaxofRICactionID
128 } RICActionToBeSetupList_t;
131 uint8_t contentLength;
132 uint8_t pLMNIdentityVal[3];
136 extern const size_t cMacroENBIDP_20Bits;
137 extern const size_t cHomeENBID_28Bits;
138 extern const size_t cShortMacroENBID_18Bits;
139 extern const size_t clongMacroENBIDP_21Bits;
141 typedef struct { // gNB-ID (SIZE 22..32 bits) or eNB-ID (SIZE 18, 20,21 or 28 bits)
147 PLMNIdentity_t pLMNIdentity;
151 typedef struct { // CHOICE. Only either value can be present
152 bool globalENBIDPresent;
153 GlobalNodeID_t globalENBID;
154 bool globalGNBIDPresent;
155 GlobalNodeID_t globalGNBID;
158 enum InterfaceDirection__t {
159 InterfaceDirection__incoming,
160 InterfaceDirection__outgoing
163 typedef uint8_t ProcedureCode__t;
166 static const uint64_t cMaxofProtocolIE = 15;
169 OctetString_t octetString; // This element is E2AP spec format
170 } RICEventTriggerDefinition_t;
173 RICEventTriggerDefinition_t ricEventTriggerDefinition;
174 RICActionToBeSetupList_t ricActionToBeSetupItemIEs;
175 } RICSubscriptionDetails_t;
178 uint8_t contentLength;
179 RICActionID_t ricActionID[16]; // Table size is const cMaxofRICactionID
180 } RICActionAdmittedList_t;
182 extern const int cCauseRIC; // This is content of type CauseRIC_t
183 extern const int cCauseRICService; // This is content of type CauseRICservice_t
184 extern const int cRICCauseTransport; // This is content of type CauseTransport_t
185 extern const int cRICCauseProtocol; // This is content of type CauseProtocol_t
186 extern const int cRICCauseMisc; // This is content of type CauseMisc_t
189 uint8_t content; // See above constants
190 uint8_t causeVal; // This is type of enum CauseRIC_t
194 RICActionID_t ricActionID;
196 } RICActionNotAdmittedItem_t;
199 uint8_t contentLength;
200 RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16]; // Table size is const cMaxofRICactionID
201 } RICActionNotAdmittedList_t;
209 typedef uint32_t ProtocolIE_ID__t;
211 enum TriggeringMessage__t {
212 TriggeringMessage__initiating_message,
213 TriggeringMessage__successful_outcome,
214 TriggeringMessage__unsuccessful_outcome
218 TypeOfError_not_understood,
223 uint8_t iECriticality; // This is type of enum Criticality_t
224 ProtocolIE_ID__t iE_ID;
225 uint8_t typeOfError; // This is type of enum TypeOfError_t
226 //iE-Extensions // This has no content in E2AP ASN.1 specification
227 } CriticalityDiagnosticsIEListItem_t;
230 bool procedureCodePresent;
231 ProcedureCode__t procedureCode; // OPTIONAL
232 bool triggeringMessagePresent;
233 uint8_t triggeringMessage; // OPTIONAL. This is type of enum TriggeringMessage_t
234 bool procedureCriticalityPresent;
235 uint8_t procedureCriticality; // OPTIONAL. This is type of enum Criticality_t
236 bool ricRequestorIDPresent;
237 RICRequestID_t ricRequestorID; //OPTIONAL
238 bool iEsCriticalityDiagnosticsPresent;
239 uint16_t criticalityDiagnosticsIELength; // 1..256
240 CriticalityDiagnosticsIEListItem_t criticalityDiagnosticsIEListItem[256]; // OPTIONAL. Table size is const cMaxNrOfErrors
241 } CriticalityDiagnostics__t;
244 OctetString_t octetString; // E2AP spec format, the other elements for E2SM-X2 format
245 uint64_t ricCallProcessIDVal;
246 } RICCallProcessID_t;
248 //////////////////////////////////////////////////////////////////////
252 e2err_RICSubscriptionRequestAllocRICrequestIDFail,
253 e2err_RICSubscriptionRequestAllocRANfunctionIDFail,
254 e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail,
255 e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail,
256 e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail,
257 e2err_RICSubscriptionRequestAllocRICactionDefinitionFail,
258 e2err_RICSubscriptionRequestAllocRICsubsequentActionFail,
259 e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail,
260 e2err_RICSubscriptionRequestEncodeFail,
261 e2err_RICSubscriptionRequestAllocE2AP_PDUFail,
262 e2err_RICSubscriptionResponseAllocRICrequestIDFail,
263 e2err_RICSubscriptionResponseAllocRANfunctionIDFail,
264 e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail,
265 e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail,
266 e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail,
267 e2err_RICSubscriptionResponseEncodeFail,
268 e2err_RICSubscriptionResponseAllocE2AP_PDUFail,
269 e2err_RICSubscriptionFailureAllocRICrequestIDFail,
270 e2err_RICSubscriptionFailureAllocRANfunctionIDFail,
271 e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail,
272 e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail,
273 e2err_RICSubscriptionFailureEncodeFail,
274 e2err_RICSubscriptionFailureAllocE2AP_PDUFail,
275 e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail,
276 e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail,
277 e2err_RICSubscriptionDeleteRequestEncodeFail,
278 e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail,
279 e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail,
280 e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail,
281 e2err_RICSubscriptionDeleteResponseEncodeFail,
282 e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail,
283 e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail,
284 e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail,
285 e2err_RICSubscriptionDeleteFailureAllocRICcauseFail,
286 e2err_RICSubscriptionDeleteFailureEncodeFail,
287 e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail,
288 e2err_RICsubscriptionRequestRICrequestIDMissing,
289 e2err_RICsubscriptionRequestRANfunctionIDMissing,
290 e2err_RICsubscriptionRequestICsubscriptionMissing,
291 e2err_RICsubscriptionResponseRICrequestIDMissing,
292 e2err_RICsubscriptionResponseRANfunctionIDMissing,
293 e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing,
294 e2err_RICsubscriptionFailureRICrequestIDMissing,
295 e2err_RICsubscriptionFailureRANfunctionIDMissing,
296 e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing,
297 e2err_RICsubscriptionDeleteRequestRICrequestIDMissing,
298 e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing,
299 e2err_RICsubscriptionDeleteResponseRICrequestIDMissing,
300 e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing,
301 e2err_RICsubscriptionDeleteFailureRICrequestIDMissing,
302 e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing,
303 e2err_RICsubscriptionDeleteFailureRICcauseMissing
306 static const char* const E2ErrorStrings[] = {
308 "e2err_RICSubscriptionRequestAllocRICrequestIDFail",
309 "e2err_RICSubscriptionRequestAllocRANfunctionIDFail",
310 "e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail",
311 "e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail",
312 "e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail",
313 "e2err_RICSubscriptionRequestAllocRICactionDefinitionFail",
314 "e2err_RICSubscriptionRequestAllocRICsubsequentActionFail",
315 "e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail",
316 "e2err_RICSubscriptionRequestEncodeFail",
317 "e2err_RICSubscriptionRequestAllocE2AP_PDUFail",
318 "e2err_RICSubscriptionResponseAllocRICrequestIDFail",
319 "e2err_RICSubscriptionResponseAllocRANfunctionIDFail",
320 "e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail",
321 "e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail",
322 "e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail",
323 "e2err_RICSubscriptionResponseEncodeFail",
324 "e2err_RICSubscriptionResponseAllocE2AP_PDUFail",
325 "e2err_RICSubscriptionFailureAllocRICrequestIDFail",
326 "e2err_RICSubscriptionFailureAllocRANfunctionIDFail",
327 "e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail",
328 "e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail",
329 "e2err_RICSubscriptionFailureEncodeFail",
330 "e2err_RICSubscriptionFailureAllocE2AP_PDUFail",
331 "e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail",
332 "e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail",
333 "e2err_RICSubscriptionDeleteRequestEncodeFail",
334 "e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail",
335 "e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail",
336 "e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail",
337 "e2err_RICSubscriptionDeleteResponseEncodeFail",
338 "e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail",
339 "e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail",
340 "e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail",
341 "e2err_RICSubscriptionDeleteFailureAllocRICcauseFail",
342 "e2err_RICSubscriptionDeleteFailureEncodeFail",
343 "e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail",
344 "e2err_RICsubscriptionRequestRICrequestIDMissing",
345 "e2err_RICsubscriptionRequestRANfunctionIDMissing",
346 "e2err_RICsubscriptionRequestICsubscriptionMissing",
347 "e2err_RICsubscriptionResponseRICrequestIDMissing",
348 "e2err_RICsubscriptionResponseRANfunctionIDMissing",
349 "e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing",
350 "e2err_RICsubscriptionFailureRICrequestIDMissing",
351 "e2err_RICsubscriptionFailureRANfunctionIDMissing",
352 "e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing",
353 "e2err_RICsubscriptionDeleteRequestRICrequestIDMissing",
354 "e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing",
355 "e2err_RICsubscriptionDeleteResponseRICrequestIDMissing",
356 "e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing",
357 "e2err_RICsubscriptionDeleteFailureRICrequestIDMissing",
358 "e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing",
359 "e2err_RICsubscriptionDeleteFailureRICcauseMissing"
363 uint64_t messageType; // Initiating message or Successful outcome or Unsuccessful outcome
367 //////////////////////////////////////////////////////////////////////
368 // Message definitons
370 // Below constant values are same as in E2AP, E2SM and X2AP specs
371 extern const uint64_t cE2InitiatingMessage;
372 extern const uint64_t cE2SuccessfulOutcome;
373 extern const uint64_t cE2UnsuccessfulOutcome;
375 // E2AP messages. Below message id constant values are the same as in ASN.1 specification
377 // Initiating message
378 extern const uint64_t cRICSubscriptionRequest;
379 extern const uint64_t cRICSubscriptionDeleteRequest;
381 // Successful outcome
382 extern const uint64_t cRICSubscriptionResponse;
383 extern const uint64_t cRICsubscriptionDeleteResponse;
385 // Unsuccessful outcome
386 extern const uint64_t cRICSubscriptionFailure;
387 extern const uint64_t cRICsubscriptionDeleteFailure;
390 RICRequestID_t ricRequestID;
391 RANFunctionID_t ranFunctionID;
392 RICSubscriptionDetails_t ricSubscriptionDetails;
393 } RICSubscriptionRequest_t;
396 RICRequestID_t ricRequestID;
397 RANFunctionID_t ranFunctionID;
398 RICActionAdmittedList_t ricActionAdmittedList;
399 bool ricActionNotAdmittedListPresent;
400 RICActionNotAdmittedList_t ricActionNotAdmittedList;
401 } RICSubscriptionResponse_t;
404 RICRequestID_t ricRequestID;
405 RANFunctionID_t ranFunctionID;
406 RICActionNotAdmittedList_t ricActionNotAdmittedList;
407 bool criticalityDiagnosticsPresent;
408 CriticalityDiagnostics__t criticalityDiagnostics;
409 } RICSubscriptionFailure_t;
412 RICRequestID_t ricRequestID;
413 RANFunctionID_t ranFunctionID;
414 } RICSubscriptionDeleteRequest_t;
417 RICRequestID_t ricRequestID;
418 RANFunctionID_t ranFunctionID;
419 } RICSubscriptionDeleteResponse_t;
422 RICRequestID_t ricRequestID;
423 RANFunctionID_t ranFunctionID;
425 bool criticalityDiagnosticsPresent;
426 CriticalityDiagnostics__t criticalityDiagnostics; // OPTIONAL. Not used in RIC currently
427 } RICSubscriptionDeleteFailure_t;
429 //////////////////////////////////////////////////////////////////////
430 // Function declarations
432 void allowASN1DebugPrints(bool);
434 const char* getE2ErrorString(uint64_t);
436 typedef void* e2ap_pdu_ptr_t;
438 uint64_t packRICSubscriptionRequest(size_t*, byte*, char*,RICSubscriptionRequest_t*);
439 uint64_t packRICSubscriptionResponse(size_t*, byte*, char*,RICSubscriptionResponse_t*);
440 uint64_t packRICSubscriptionFailure(size_t*, byte*, char*,RICSubscriptionFailure_t*);
441 uint64_t packRICSubscriptionDeleteRequest(size_t*, byte*, char*,RICSubscriptionDeleteRequest_t*);
442 uint64_t packRICSubscriptionDeleteResponse(size_t*, byte*, char*,RICSubscriptionDeleteResponse_t*);
443 uint64_t packRICSubscriptionDeleteFailure(size_t*, byte*, char*,RICSubscriptionDeleteFailure_t*);
445 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t, const byte*, char*, E2MessageInfo_t*);
446 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t*, RICSubscriptionRequest_t*);
447 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t*, RICSubscriptionResponse_t*);
448 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t*, RICSubscriptionFailure_t*);
449 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteRequest_t*);
450 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteResponse_t*);
451 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteFailure_t*);
455 bool TestRICSubscriptionRequest();
456 bool TestRICSubscriptionResponse();
457 bool TestRICSubscriptionFailure();
458 bool TestRICSubscriptionDeleteRequest();
459 bool TestRICSubscriptionDeleteResponse();
460 bool TestRICSubscriptionDeleteFailure();
462 void printRICSubscriptionRequest(const RICSubscriptionRequest_t*);
463 void printRICSubscriptionResponse(const RICSubscriptionResponse_t*);
464 void printRICSubscriptionFailure(const RICSubscriptionFailure_t*);
465 void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t*);
466 void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t*);
467 void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t*);