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 ==================================================================================
24 #include "ProtocolIE-Field.h"
25 #include "RICsubsequentAction.h"
27 #include "asn_constant.h"
30 static bool debugPrints = false;
32 const int64_t cMaxNrOfErrors = 256;
33 const uint64_t cMaxSizeOfOctetString = 1024;
35 const size_t cMacroENBIDP_20Bits = 20;
36 const size_t cHomeENBID_28Bits = 28;
37 const size_t cShortMacroENBID_18Bits = 18;
38 const size_t clongMacroENBIDP_21Bits = 21;
40 const int cCauseRICRequest = 1;
41 const int cCauseRICService = 2;
42 const int cCauseTransport = 3;
43 const int cCauseProtocol = 4;
44 const int cCauseMisc = 5;
46 //////////////////////////////////////////////////////////////////////
49 // Below constant values are same as in E2AP, E2SM and X2AP specs
50 const uint64_t cE2InitiatingMessage = 1;
51 const uint64_t cE2SuccessfulOutcome = 2;
52 const uint64_t cE2UnsuccessfulOutcome = 3;
56 const uint64_t cRICSubscriptionRequest = 1;
57 const uint64_t cRICSubscriptionDeleteRequest = 2;
60 const uint64_t cRICSubscriptionResponse = 1;
61 const uint64_t cRICsubscriptionDeleteResponse = 2;
63 // Unsuccessful outcome
64 const uint64_t cRICSubscriptionFailure = 1;
65 const uint64_t cRICsubscriptionDeleteFailure = 2;
72 //////////////////////////////////////////////////////////////////////
73 void allowASN1DebugPrints(bool allowASN1DebugPrints) {
74 debugPrints = allowASN1DebugPrints;
77 //////////////////////////////////////////////////////////////////////
78 const char* getE2ErrorString(uint64_t errorCode) {
80 return E2ErrorStrings[errorCode];
83 /////////////////////////////////////////////////////////////////////
84 bool E2encode(E2AP_PDU_t* pE2AP_PDU, size_t* dataBufferSize, byte* dataBuffer, char* pLogBuffer) {
87 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
90 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pE2AP_PDU, dataBuffer, *dataBufferSize);
91 if (rval.encoded == -1) {
92 sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2AP_PDU.name);
93 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
96 else if (rval.encoded > *dataBufferSize) {
97 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",*dataBufferSize, asn_DEF_E2AP_PDU.name, rval.encoded);
98 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
103 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2AP_PDU.name, *dataBufferSize, rval.encoded);
105 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
106 *dataBufferSize = rval.encoded;
111 //////////////////////////////////////////////////////////////////////
112 uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
114 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
117 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
118 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
119 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
120 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionRequest;
123 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
124 if (pRICsubscriptionRequest_IEs) {
125 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
126 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
127 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
128 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionRequest->ricRequestID.ricRequestorID;
129 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionRequest->ricRequestID.ricInstanceID;
130 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
133 return e2err_RICSubscriptionRequestAllocRICrequestIDFail;
136 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
137 if (pRICsubscriptionRequest_IEs) {
138 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
139 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
140 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID;
141 pRICsubscriptionRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionRequest->ranFunctionID;
142 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
145 return e2err_RICSubscriptionRequestAllocRANfunctionIDFail;
147 // RICsubscriptionDetails
148 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
149 if (pRICsubscriptionRequest_IEs) {
150 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICsubscriptionDetails;
151 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
152 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails;
154 // RICeventTriggerDefinition
155 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf =
156 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
157 if (pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf) {
158 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.size =
159 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength;
160 memcpy(pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf,
161 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data,
162 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
165 return e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail;
167 // RICactions-ToBeSetup-List
169 while (index < pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength && index < maxofRICactionID) {
170 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs = calloc(1, sizeof(RICaction_ToBeSetup_ItemIEs_t));
171 if (pRICaction_ToBeSetup_ItemIEs) {
172 pRICaction_ToBeSetup_ItemIEs->id = ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
173 pRICaction_ToBeSetup_ItemIEs->criticality = Criticality_ignore;
174 pRICaction_ToBeSetup_ItemIEs->value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
177 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID =
178 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID;
181 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType =
182 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType;
184 // RICactionDefinition, OPTIONAL
185 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent) {
186 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = calloc(1, sizeof (RICactionDefinition_t));
187 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition) {
188 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf =
189 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
190 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf) {
191 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size =
192 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength;
193 memcpy(pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
194 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
195 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
198 return e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail;
201 return e2err_RICSubscriptionRequestAllocRICactionDefinitionFail;
204 // RICsubsequentAction, OPTIONAL
205 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent) {
206 RICsubsequentAction_t* pRICsubsequentAction = calloc(1, sizeof(RICsubsequentAction_t));
207 if (pRICsubsequentAction) {
208 pRICsubsequentAction->ricSubsequentActionType =
209 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType;
210 pRICsubsequentAction->ricTimeToWait =
211 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait;
212 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = pRICsubsequentAction;
215 return e2err_RICSubscriptionRequestAllocRICsubsequentActionFail;
219 return e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail;
221 ASN_SEQUENCE_ADD(&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, pRICaction_ToBeSetup_ItemIEs);
224 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
227 return e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail;
228 if (E2encode(pE2AP_PDU, pdataBufferSize, pDataBuffer, pLogBuffer))
231 return e2err_RICSubscriptionRequestEncodeFail;
233 return e2err_RICSubscriptionRequestAllocE2AP_PDUFail;
237 //////////////////////////////////////////////////////////////////////
238 uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
240 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
243 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
244 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
245 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
246 pE2AP_PDU->choice.initiatingMessage.value.present = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
249 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
250 if (pRICsubscriptionResponse_IEs) {
251 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
252 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
253 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
254 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionResponse->ricRequestID.ricRequestorID;
255 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionResponse->ricRequestID.ricInstanceID;
256 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
259 return e2err_RICSubscriptionResponseAllocRICrequestIDFail;
262 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
263 if (pRICsubscriptionResponse_IEs) {
264 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
265 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
266 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID;
267 pRICsubscriptionResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionResponse->ranFunctionID;
268 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
271 return e2err_RICSubscriptionResponseAllocRANfunctionIDFail;
273 // RICaction-Admitted list
274 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
275 if (pRICsubscriptionResponse_IEs) {
276 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_Admitted;
277 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
278 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
281 while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength && index < maxofRICactionID) {
283 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs = calloc(1, sizeof (RICaction_Admitted_ItemIEs_t));
284 if (pRICaction_Admitted_ItemIEs)
286 pRICaction_Admitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
287 pRICaction_Admitted_ItemIEs->criticality = Criticality_reject;
288 pRICaction_Admitted_ItemIEs->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
291 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID = pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index];
292 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list, pRICaction_Admitted_ItemIEs);
295 return e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail;
300 return e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail;
302 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
304 // RICaction-NotAdmitted list, OPTIONAL
305 if (pRICSubscriptionResponse->ricActionNotAdmittedListPresent) {
306 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
307 if (pRICsubscriptionResponse_IEs) {
308 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
309 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
310 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
313 while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
315 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
316 if (pRICaction_NotAdmitted_ItemIEs)
318 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
319 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
320 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
323 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
324 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
327 if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) {
328 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest;
329 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest =
330 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
332 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) {
333 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService;
334 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService =
335 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
337 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_e2Node) {
338 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_e2Node;
339 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node =
340 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
342 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) {
343 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
344 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
345 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
347 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
348 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
349 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
350 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
352 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
353 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
354 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
355 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
357 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
360 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
364 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
367 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
370 return e2err_RICSubscriptionResponseEncodeFail;
372 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
375 //////////////////////////////////////////////////////////////////////
376 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
378 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
381 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
382 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscription;
383 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
384 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
387 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
388 if (pRICsubscriptionFailure_IEs) {
389 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
390 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
391 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
392 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
393 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionFailure->ricRequestID.ricInstanceID;
394 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
397 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
400 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
401 if (pRICsubscriptionFailure_IEs) {
402 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
403 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
404 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
405 pRICsubscriptionFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
406 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
409 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
412 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
413 if (pRICsubscriptionFailure_IEs) {
414 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_Cause;
415 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
416 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_Cause;
417 if (pRICSubscriptionFailure->cause.content == Cause_PR_ricRequest) {
418 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
419 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest =
420 pRICSubscriptionFailure->cause.causeVal;
422 else if (pRICSubscriptionFailure->cause.content == Cause_PR_ricService) {
423 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
424 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService =
425 pRICSubscriptionFailure->cause.causeVal;
427 else if (pRICSubscriptionFailure->cause.content == Cause_PR_e2Node) {
428 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node;
429 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node =
430 pRICSubscriptionFailure->cause.causeVal;
432 else if (pRICSubscriptionFailure->cause.content == Cause_PR_transport) {
433 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
434 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport =
435 pRICSubscriptionFailure->cause.causeVal;
437 else if (pRICSubscriptionFailure->cause.content == Cause_PR_protocol) {
438 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
439 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol =
440 pRICSubscriptionFailure->cause.causeVal;
442 else if (pRICSubscriptionFailure->cause.content == Cause_PR_misc) {
443 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
444 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc =
445 pRICSubscriptionFailure->cause.causeVal;
447 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
450 return e2err_RICSubscriptionFailureAllocCauseFail;
452 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
454 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
457 return e2err_RICSubscriptionFailureEncodeFail;
460 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
463 //////////////////////////////////////////////////////////////////////
464 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
466 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
469 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
470 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
471 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
472 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
475 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
476 if (pRICsubscriptionDeleteRequest_IEs) {
477 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
478 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
479 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
480 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
481 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID;
482 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
485 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
488 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
489 if (pRICsubscriptionDeleteRequest_IEs) {
490 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
491 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
492 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
493 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
494 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
497 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
499 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
502 return e2err_RICSubscriptionDeleteRequestEncodeFail;
505 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
508 //////////////////////////////////////////////////////////////////////
509 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
511 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
514 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
515 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
516 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
517 pE2AP_PDU->choice.successfulOutcome.value.present = SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
520 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
521 if (pRICsubscriptionDeleteResponse_IEs) {
522 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
523 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
524 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
525 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
526 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID;
527 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
530 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
533 pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
534 if (pRICsubscriptionDeleteResponse_IEs) {
535 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
536 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
537 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
538 pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
539 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
542 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
544 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
547 return e2err_RICSubscriptionDeleteResponseEncodeFail;
550 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
553 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
555 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
558 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
559 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
560 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
561 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
564 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
565 if (pRICsubscriptionDeleteFailure_IEs) {
566 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
567 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
568 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
569 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
570 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID;
571 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
574 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
577 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
578 if (pRICsubscriptionDeleteFailure_IEs) {
579 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
580 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
581 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
582 pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
583 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
586 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
589 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
590 if (pRICsubscriptionDeleteFailure_IEs) {
591 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_Cause;
592 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
593 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_Cause;
594 if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricRequest) {
595 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
596 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest =
597 pRICSubscriptionDeleteFailure->cause.causeVal;
599 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricService) {
600 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
601 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService =
602 pRICSubscriptionDeleteFailure->cause.causeVal;
604 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_e2Node) {
605 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node;
606 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node =
607 pRICSubscriptionDeleteFailure->cause.causeVal;
609 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_transport) {
610 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
611 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport =
612 pRICSubscriptionDeleteFailure->cause.causeVal;
614 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_protocol) {
615 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
616 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol =
617 pRICSubscriptionDeleteFailure->cause.causeVal;
619 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_misc) {
620 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
621 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc =
622 pRICSubscriptionDeleteFailure->cause.causeVal;
624 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
627 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
629 // CriticalityDiagnostics, OPTIONAL
631 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
634 return e2err_RICSubscriptionDeleteFailureEncodeFail;
637 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
640 //////////////////////////////////////////////////////////////////////
641 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
643 E2AP_PDU_t* pE2AP_PDU = 0;
645 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
649 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
650 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
653 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
654 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscription) {
655 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionRequest) {
656 pMessageInfo->messageType = cE2InitiatingMessage;
657 pMessageInfo->messageId = cRICSubscriptionRequest;
658 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
661 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
665 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
666 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
667 pMessageInfo->messageType = cE2InitiatingMessage;
668 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
669 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
672 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
677 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
681 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
682 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
683 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse) {
684 pMessageInfo->messageType = cE2SuccessfulOutcome;
685 pMessageInfo->messageId = cRICSubscriptionResponse;
686 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
689 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
693 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
694 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
695 pMessageInfo->messageType = cE2SuccessfulOutcome;
696 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
697 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
700 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
705 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
709 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
710 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
711 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
712 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
713 pMessageInfo->messageId = cRICSubscriptionFailure;
714 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
717 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
721 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
722 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
723 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
724 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
725 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
728 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
734 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
735 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
738 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
741 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
748 //////////////////////////////////////////////////////////////////////
749 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
751 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
753 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
754 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
757 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
758 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
759 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
760 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
761 pRICSubscriptionRequest->ricRequestID.ricInstanceID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID;
764 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
765 return e2err_RICsubscriptionRequestRICrequestIDMissing;
769 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
770 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
771 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
772 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
775 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
776 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
779 // RICsubscriptionDetails
780 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
781 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscriptionDetails) {
782 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
784 // Unpack EventTriggerDefinition
785 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
786 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition;
787 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
788 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size);
790 // RICactions-ToBeSetup-List
791 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
793 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.count)
795 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.array[index];
798 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
799 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
802 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
803 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
805 // RICactionDefinition, OPTIONAL
806 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
808 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength =
809 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size;
810 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
811 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
812 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size);
814 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = true;
817 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
819 // RICsubsequentAction, OPTIONAL
820 RICsubsequentAction_t* pRICsubsequentAction;
821 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
823 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
824 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
825 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
826 pRICsubsequentAction->ricSubsequentActionType;
827 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
828 pRICsubsequentAction->ricTimeToWait;
831 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
834 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength = index;
837 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
838 return e2err_RICsubscriptionRequestICsubscriptionMissing;
841 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
846 //////////////////////////////////////////////////////////////////////
848 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
850 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
852 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
853 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
856 if (asnRicSubscriptionResponse->protocolIEs.list.count > 0 &&
857 asnRicSubscriptionResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
858 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[0];
859 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
860 pRICSubscriptionResponse->ricRequestID.ricInstanceID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID;
863 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
864 return e2err_RICsubscriptionResponseRICrequestIDMissing;
868 if (asnRicSubscriptionResponse->protocolIEs.list.count > 1 &&
869 asnRicSubscriptionResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
870 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[1];
871 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
874 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
875 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
878 // RICaction-Admitted-List
879 if (asnRicSubscriptionResponse->protocolIEs.list.count > 2 &&
880 asnRicSubscriptionResponse->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_Admitted) {
881 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[2];
882 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
884 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
885 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
886 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
889 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
890 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
893 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
896 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
897 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
900 // RICaction-NotAdmitted-List, OPTIONAL
901 if (asnRicSubscriptionResponse->protocolIEs.list.count > 3 &&
902 asnRicSubscriptionResponse->protocolIEs.list.array[3]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
903 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[3];
904 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
905 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
906 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
908 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
909 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
910 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
913 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
914 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
917 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
918 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
919 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
920 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
922 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
923 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
924 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
925 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
927 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_e2Node) {
928 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_e2Node;
929 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
930 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node;
932 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
933 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
934 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
935 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
937 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
938 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
939 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
940 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
942 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
943 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
944 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
945 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
949 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
953 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
954 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
956 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
960 //////////////////////////////////////////////////////////////////////
961 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
963 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
965 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
966 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
969 if (asnRicSubscriptionFailure->protocolIEs.list.count > 0 &&
970 asnRicSubscriptionFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
971 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[0];
972 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
973 pRICSubscriptionFailure->ricRequestID.ricInstanceID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID;
976 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
977 return e2err_RICsubscriptionFailureRICrequestIDMissing;
981 if (asnRicSubscriptionFailure->protocolIEs.list.count > 1 &&
982 asnRicSubscriptionFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
983 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[1];
984 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
987 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
988 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
992 if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 &&
993 asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) {
994 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2];
995 if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
996 pRICSubscriptionFailure->cause.content = Cause_PR_ricRequest;
997 pRICSubscriptionFailure->cause.causeVal =
998 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest;
1000 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1001 pRICSubscriptionFailure->cause.content = Cause_PR_ricService;
1002 pRICSubscriptionFailure->cause.causeVal =
1003 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService;
1005 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) {
1006 pRICSubscriptionFailure->cause.content = Cause_PR_e2Node;
1007 pRICSubscriptionFailure->cause.causeVal =
1008 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node;
1010 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1011 pRICSubscriptionFailure->cause.content = Cause_PR_transport;
1012 pRICSubscriptionFailure->cause.causeVal =
1013 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport;
1015 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1016 pRICSubscriptionFailure->cause.content = Cause_PR_protocol;
1017 pRICSubscriptionFailure->cause.causeVal =
1018 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol;
1020 else if(pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1021 pRICSubscriptionFailure->cause.content = Cause_PR_misc;
1022 pRICSubscriptionFailure->cause.causeVal =
1023 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc;
1027 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1028 return e2err_RICsubscriptionFailureCauseMissing;
1031 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1035 //////////////////////////////////////////////////////////////////////
1036 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1038 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1040 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1041 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1044 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1045 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1046 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1047 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1048 pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID;
1051 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1052 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1056 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1057 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1058 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1059 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1062 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1063 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1065 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1069 //////////////////////////////////////////////////////////////////////
1070 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1072 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1074 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1075 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1078 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 0 &&
1079 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1080 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0];
1081 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1082 pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID;
1085 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1086 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1090 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 1 &&
1091 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1092 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1];
1093 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1096 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1097 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1099 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1103 //////////////////////////////////////////////////////////////////////
1104 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1106 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1108 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1109 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1112 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 0 &&
1113 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1114 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0];
1115 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1116 pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID;
1119 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1120 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1124 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 1 &&
1125 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1126 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1];
1127 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1130 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1131 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1135 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 &&
1136 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) {
1137 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2];
1138 if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
1139 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricRequest;
1140 pRICSubscriptionDeleteFailure->cause.causeVal =
1141 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest;
1143 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1144 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricService;
1145 pRICSubscriptionDeleteFailure->cause.causeVal =
1146 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService;
1148 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) {
1149 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_e2Node;
1150 pRICSubscriptionDeleteFailure->cause.causeVal =
1151 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node;
1153 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1154 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_transport;
1155 pRICSubscriptionDeleteFailure->cause.causeVal =
1156 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport;
1158 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1159 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_protocol;
1160 pRICSubscriptionDeleteFailure->cause.causeVal =
1161 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol;
1163 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1164 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_misc;
1165 pRICSubscriptionDeleteFailure->cause.causeVal =
1166 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc;
1170 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1171 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1173 // CriticalityDiagnostics, OPTIONAL
1175 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);