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 typedef unsigned char byte;
37 extern const uint64_t cMaxSizeOfOctetString;
39 typedef struct { // Octet string in ASN.1 does not have maximum length!
41 uint8_t data[1024]; // Table size is const cMaxSizeOfOctetString
44 typedef struct { // Octet string in ASN.1 does not have maximum length!
50 uint8_t unusedBits; // Trailing unused bits 0 - 7
51 size_t byteLength; // Length in bytes
56 uint32_t ricRequestorID; // 0..65535
57 uint32_t ricInstanceID; // 0..65535
60 typedef uint16_t RANFunctionID_t; // 0..4095
62 typedef uint64_t RICActionID_t; // 0..255
64 enum RICActionType_t {
70 enum RICSubsequentActionType_t {
71 RICSubsequentActionType_Continue,
72 RICSubsequentActionType_wait
76 OctetString_t octetString; // This element is E2AP spec format
77 } RICActionDefinitionChoice_t;
79 enum RICTimeToWait_t {
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;
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;
114 static const uint64_t cMaxofRICactionID = 16;
117 uint8_t contentLength;
118 RICActionToBeSetupItem_t ricActionToBeSetupItem[16]; // 1..16 // Table size is const cMaxofRICactionID
119 } RICActionToBeSetupList_t;
122 uint8_t contentLength;
123 uint8_t pLMNIdentityVal[3];
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;
132 typedef struct { // gNB-ID (SIZE 22..32 bits) or eNB-ID (SIZE 18, 20,21 or 28 bits)
138 PLMNIdentity_t pLMNIdentity;
142 typedef struct { // CHOICE. Only either value can be present
143 bool globalENBIDPresent;
144 GlobalNodeID_t globalENBID;
145 bool globalGNBIDPresent;
146 GlobalNodeID_t globalGNBID;
149 enum InterfaceDirection__t {
150 InterfaceDirection__incoming,
151 InterfaceDirection__outgoing
154 typedef uint8_t ProcedureCode__t;
157 OctetString_t octetString; // This element is E2AP spec format
158 } RICEventTriggerDefinition_t;
161 RICEventTriggerDefinition_t ricEventTriggerDefinition;
162 RICActionToBeSetupList_t ricActionToBeSetupItemIEs;
163 } RICSubscriptionDetails_t;
166 uint8_t contentLength;
167 RICActionID_t ricActionID[16]; // Table size is const cMaxofRICactionID
168 } RICActionAdmittedList_t;
171 uint8_t content; // See above constants
172 uint8_t causeVal; // This is type of enum CauseRIC_t
176 RICActionID_t ricActionID;
178 } RICActionNotAdmittedItem_t;
181 uint8_t contentLength;
182 RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16]; // Table size is const cMaxofRICactionID
183 } RICActionNotAdmittedList_t;
191 typedef uint32_t ProtocolIE_ID__t;
193 enum TriggeringMessage__t {
194 TriggeringMessage__initiating_message,
195 TriggeringMessage__successful_outcome,
196 TriggeringMessage__unsuccessful_outcome
200 TypeOfError_not_understood,
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;
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;
226 OctetString_t octetString; // E2AP spec format, the other elements for E2SM-X2 format
227 uint64_t ricCallProcessIDVal;
228 } RICCallProcessID_t;
230 //////////////////////////////////////////////////////////////////////
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
305 static const char* const E2ErrorStrings[] = {
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",
374 uint64_t messageType; // Initiating message or Successful outcome or Unsuccessful outcome
378 //////////////////////////////////////////////////////////////////////
379 // Message definitons
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;
386 // E2AP messages. Below message id constant values are the same as in ASN.1 specification
388 // Initiating message
389 extern const uint64_t cRICSubscriptionRequest;
390 extern const uint64_t cRICSubscriptionDeleteRequest;
391 extern const uint64_t cRICSubscriptionDeleteRequired;
393 // Successful outcome
394 extern const uint64_t cRICSubscriptionResponse;
395 extern const uint64_t cRICsubscriptionDeleteResponse;
397 // Unsuccessful outcome
398 extern const uint64_t cRICSubscriptionFailure;
399 extern const uint64_t cRICsubscriptionDeleteFailure;
402 RICRequestID_t ricRequestID;
403 RANFunctionID_t ranFunctionID;
404 RICSubscriptionDetails_t ricSubscriptionDetails;
405 } RICSubscriptionRequest_t;
408 RICRequestID_t ricRequestID;
409 RANFunctionID_t ranFunctionID;
410 RICActionAdmittedList_t ricActionAdmittedList;
411 bool ricActionNotAdmittedListPresent;
412 RICActionNotAdmittedList_t ricActionNotAdmittedList;
413 } RICSubscriptionResponse_t;
416 RICRequestID_t ricRequestID;
417 RANFunctionID_t ranFunctionID;
419 bool criticalityDiagnosticsPresent;
420 CriticalityDiagnostics__t criticalityDiagnostics;
421 } RICSubscriptionFailure_t;
424 RICRequestID_t ricRequestID;
425 RANFunctionID_t ranFunctionID;
426 } RICSubscriptionDeleteRequest_t;
429 RICRequestID_t ricRequestID;
430 RANFunctionID_t ranFunctionID;
431 } RICSubscriptionDeleteResponse_t;
434 RICRequestID_t ricRequestID;
435 RANFunctionID_t ranFunctionID;
437 bool criticalityDiagnosticsPresent;
438 CriticalityDiagnostics__t criticalityDiagnostics; // OPTIONAL. Not used in RIC currently
439 } RICSubscriptionDeleteFailure_t;
442 RICRequestID_t ricRequestID;
443 RANFunctionID_t ranFunctionID;
445 } RICSubscriptionDeleteRequired_t;
448 int noOfRanSubscriptions;
449 RICSubscriptionDeleteRequired_t ranSubscriptionsDelRequired[1024];
451 } RICSubsDeleteRequired_t;
453 //////////////////////////////////////////////////////////////////////
454 // Function declarations
456 void allowASN1DebugPrints(bool);
458 void allowOutOfOrderIEMsg(uint8_t);
460 const char* getE2ErrorString(uint64_t);
462 typedef void* e2ap_pdu_ptr_t;
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*);
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*);
482 bool TestRICSubscriptionRequest();
483 bool TestRICSubscriptionResponse();
484 bool TestRICSubscriptionFailure();
485 bool TestRICSubscriptionDeleteRequest();
486 bool TestRICSubscriptionDeleteResponse();
487 bool TestRICSubscriptionDeleteFailure();
488 bool TestRICSubscriptionDeleteRequired();
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*);