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_transport) {
338 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
339 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
340 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
342 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
343 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
344 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
345 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
347 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
348 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
349 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
350 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
352 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
355 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
359 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
362 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
365 return e2err_RICSubscriptionResponseEncodeFail;
367 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
370 //////////////////////////////////////////////////////////////////////
371 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
373 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
376 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
377 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscription;
378 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
379 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
382 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
383 if (pRICsubscriptionFailure_IEs) {
384 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
385 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
386 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
387 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
388 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionFailure->ricRequestID.ricInstanceID;
389 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
392 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
395 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
396 if (pRICsubscriptionFailure_IEs) {
397 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
398 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
399 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
400 pRICsubscriptionFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
401 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
404 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
406 // RICaction-NotAdmitted list
407 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
408 if (pRICsubscriptionFailure_IEs) {
409 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
410 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
411 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List;
414 while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
416 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
417 if (pRICaction_NotAdmitted_ItemIEs)
419 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
420 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
421 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
424 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
425 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
428 if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) {
429 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest;
430 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest =
431 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
433 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) {
434 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService;
435 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService =
436 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
438 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) {
439 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
440 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
441 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
443 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
444 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
445 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
446 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
448 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
449 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
450 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
451 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
453 ASN_SEQUENCE_ADD(&pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
456 return e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail;
459 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
462 return e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail;
464 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
466 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
469 return e2err_RICSubscriptionFailureEncodeFail;
472 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
475 //////////////////////////////////////////////////////////////////////
476 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
478 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
481 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
482 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
483 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
484 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
487 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
488 if (pRICsubscriptionDeleteRequest_IEs) {
489 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
490 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
491 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
492 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
493 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID;
494 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
497 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
500 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
501 if (pRICsubscriptionDeleteRequest_IEs) {
502 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
503 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
504 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
505 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
506 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
509 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
511 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
514 return e2err_RICSubscriptionDeleteRequestEncodeFail;
517 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
520 //////////////////////////////////////////////////////////////////////
521 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
523 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
526 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
527 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
528 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
529 pE2AP_PDU->choice.successfulOutcome.value.present = SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
532 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
533 if (pRICsubscriptionDeleteResponse_IEs) {
534 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
535 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
536 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
537 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
538 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID;
539 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
542 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
545 pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
546 if (pRICsubscriptionDeleteResponse_IEs) {
547 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
548 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
549 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
550 pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
551 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
554 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
556 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
559 return e2err_RICSubscriptionDeleteResponseEncodeFail;
562 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
565 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
567 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
570 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
571 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
572 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
573 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
576 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
577 if (pRICsubscriptionDeleteFailure_IEs) {
578 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
579 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
580 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
581 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
582 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID;
583 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
586 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
589 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
590 if (pRICsubscriptionDeleteFailure_IEs) {
591 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
592 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
593 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
594 pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
595 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
598 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
601 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
602 if (pRICsubscriptionDeleteFailure_IEs) {
603 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_Cause;
604 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
605 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_Cause;
606 if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricRequest) {
607 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
608 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest =
609 pRICSubscriptionDeleteFailure->cause.causeVal;
611 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricService) {
612 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
613 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService =
614 pRICSubscriptionDeleteFailure->cause.causeVal;
616 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_transport) {
617 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
618 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport =
619 pRICSubscriptionDeleteFailure->cause.causeVal;
621 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_protocol) {
622 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
623 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol =
624 pRICSubscriptionDeleteFailure->cause.causeVal;
626 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_misc) {
627 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
628 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc =
629 pRICSubscriptionDeleteFailure->cause.causeVal;
631 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
634 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
636 // CriticalityDiagnostics, OPTIONAL
638 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
641 return e2err_RICSubscriptionDeleteFailureEncodeFail;
644 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
647 //////////////////////////////////////////////////////////////////////
648 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
650 E2AP_PDU_t* pE2AP_PDU = 0;
652 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
656 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
657 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
660 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
661 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscription) {
662 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionRequest) {
663 pMessageInfo->messageType = cE2InitiatingMessage;
664 pMessageInfo->messageId = cRICSubscriptionRequest;
665 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
668 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
672 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
673 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
674 pMessageInfo->messageType = cE2InitiatingMessage;
675 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
676 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
679 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
684 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
688 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
689 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
690 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse) {
691 pMessageInfo->messageType = cE2SuccessfulOutcome;
692 pMessageInfo->messageId = cRICSubscriptionResponse;
693 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
696 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
700 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
701 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
702 pMessageInfo->messageType = cE2SuccessfulOutcome;
703 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
704 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
707 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
712 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
716 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
717 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
718 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
719 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
720 pMessageInfo->messageId = cRICSubscriptionFailure;
721 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
724 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
728 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
729 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
730 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
731 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
732 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
735 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
741 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
742 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
745 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
748 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
755 //////////////////////////////////////////////////////////////////////
756 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
758 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
760 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
761 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
764 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
765 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
766 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
767 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
768 pRICSubscriptionRequest->ricRequestID.ricInstanceID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID;
771 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
772 return e2err_RICsubscriptionRequestRICrequestIDMissing;
776 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
777 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
778 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
779 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
782 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
783 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
786 // RICsubscriptionDetails
787 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
788 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscriptionDetails) {
789 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
791 // Unpack EventTriggerDefinition
792 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
793 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition;
794 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
795 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size);
797 // RICactions-ToBeSetup-List
798 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
800 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.count)
802 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.array[index];
805 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
806 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
809 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
810 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
812 // RICactionDefinition, OPTIONAL
813 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
815 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength =
816 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size;
817 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
818 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
819 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size);
821 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = true;
824 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
826 // RICsubsequentAction, OPTIONAL
827 RICsubsequentAction_t* pRICsubsequentAction;
828 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
830 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
831 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
832 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
833 pRICsubsequentAction->ricSubsequentActionType;
834 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
835 pRICsubsequentAction->ricTimeToWait;
838 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
841 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength = index;
844 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
845 return e2err_RICsubscriptionRequestICsubscriptionMissing;
848 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
853 //////////////////////////////////////////////////////////////////////
855 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
857 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
859 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
860 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
863 if (asnRicSubscriptionResponse->protocolIEs.list.count > 0 &&
864 asnRicSubscriptionResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
865 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[0];
866 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
867 pRICSubscriptionResponse->ricRequestID.ricInstanceID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID;
870 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
871 return e2err_RICsubscriptionResponseRICrequestIDMissing;
875 if (asnRicSubscriptionResponse->protocolIEs.list.count > 1 &&
876 asnRicSubscriptionResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
877 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[1];
878 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
881 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
882 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
885 // RICaction-Admitted-List
886 if (asnRicSubscriptionResponse->protocolIEs.list.count > 2 &&
887 asnRicSubscriptionResponse->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_Admitted) {
888 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[2];
889 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
891 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
892 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
893 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
896 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
897 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
900 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
903 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
904 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
907 // RICaction-NotAdmitted-List, OPTIONAL
908 if (asnRicSubscriptionResponse->protocolIEs.list.count > 3 &&
909 asnRicSubscriptionResponse->protocolIEs.list.array[3]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
910 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[3];
911 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
912 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
913 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
915 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
916 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
917 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
920 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
921 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
924 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
925 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
926 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
927 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
929 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
930 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
931 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
932 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
934 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
935 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
936 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
937 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
939 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
940 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
941 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
942 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
944 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
945 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
946 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
947 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
951 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
955 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
956 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
958 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
962 //////////////////////////////////////////////////////////////////////
963 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
965 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
967 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
968 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
971 if (asnRicSubscriptionFailure->protocolIEs.list.count > 0 &&
972 asnRicSubscriptionFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
973 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[0];
974 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
975 pRICSubscriptionFailure->ricRequestID.ricInstanceID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID;
978 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
979 return e2err_RICsubscriptionFailureRICrequestIDMissing;
983 if (asnRicSubscriptionFailure->protocolIEs.list.count > 1 &&
984 asnRicSubscriptionFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
985 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[1];
986 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
989 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
990 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
993 // RICaction-NotAdmitted-List
994 if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 &&
995 asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
996 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2];
998 while ((index < maxofRICactionID) && (index < pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
999 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1000 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1003 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1004 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1007 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
1008 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
1009 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1010 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
1012 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
1013 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
1014 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1015 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
1017 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
1018 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
1019 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1020 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
1022 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
1023 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
1024 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1025 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
1027 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
1028 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
1029 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1030 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
1034 pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = index;
1036 // CriticalityDiagnostics. OPTIONAL
1040 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1041 return e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing;
1043 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1047 //////////////////////////////////////////////////////////////////////
1048 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1050 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1052 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1053 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1056 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1057 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1058 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1059 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1060 pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID;
1063 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1064 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1068 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1069 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1070 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1071 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1074 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1075 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1077 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1081 //////////////////////////////////////////////////////////////////////
1082 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1084 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1086 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1087 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1090 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 0 &&
1091 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1092 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0];
1093 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1094 pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID;
1097 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1098 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1102 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 1 &&
1103 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1104 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1];
1105 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1108 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1109 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1111 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1115 //////////////////////////////////////////////////////////////////////
1116 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1118 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1120 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1121 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1124 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 0 &&
1125 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1126 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0];
1127 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1128 pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID;
1131 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1132 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1136 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 1 &&
1137 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1138 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1];
1139 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1142 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1143 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1147 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 &&
1148 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) {
1149 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2];
1150 if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
1151 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricRequest;
1152 pRICSubscriptionDeleteFailure->cause.causeVal =
1153 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest;
1155 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1156 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricService;
1157 pRICSubscriptionDeleteFailure->cause.causeVal =
1158 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService;
1160 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1161 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_transport;
1162 pRICSubscriptionDeleteFailure->cause.causeVal =
1163 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport;
1165 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1166 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_protocol;
1167 pRICSubscriptionDeleteFailure->cause.causeVal =
1168 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol;
1170 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1171 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_misc;
1172 pRICSubscriptionDeleteFailure->cause.causeVal =
1173 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc;
1177 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1178 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1180 // CriticalityDiagnostics, OPTIONAL
1182 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);