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 // Value of checkIEOrder defines if strict order to be followed while
33 // packing/unpacking of E2AP messages.
34 // Value 1 defines strict order and value 0 defines lenient order
35 static uint8_t checkIEOrder = 1;
37 const int64_t cMaxNrOfErrors = 256;
38 const uint64_t cMaxSizeOfOctetString = 1024;
40 const size_t cMacroENBIDP_20Bits = 20;
41 const size_t cHomeENBID_28Bits = 28;
42 const size_t cShortMacroENBID_18Bits = 18;
43 const size_t clongMacroENBIDP_21Bits = 21;
45 const int cCauseRICRequest = 1;
46 const int cCauseRICService = 2;
47 const int cCauseTransport = 3;
48 const int cCauseProtocol = 4;
49 const int cCauseMisc = 5;
51 //////////////////////////////////////////////////////////////////////
54 // Below constant values are same as in E2AP, E2SM and X2AP specs
55 const uint64_t cE2InitiatingMessage = 1;
56 const uint64_t cE2SuccessfulOutcome = 2;
57 const uint64_t cE2UnsuccessfulOutcome = 3;
61 const uint64_t cRICSubscriptionRequest = 1;
62 const uint64_t cRICSubscriptionDeleteRequest = 2;
63 const uint64_t cRICSubscriptionDeleteRequired = 3;
66 const uint64_t cRICSubscriptionResponse = 1;
67 const uint64_t cRICsubscriptionDeleteResponse = 2;
69 // Unsuccessful outcome
70 const uint64_t cRICSubscriptionFailure = 1;
71 const uint64_t cRICsubscriptionDeleteFailure = 2;
78 //////////////////////////////////////////////////////////////////////
79 void allowASN1DebugPrints(bool allowASN1DebugPrints) {
80 debugPrints = allowASN1DebugPrints;
83 //////////////////////////////////////////////////////////////////////
84 void allowOutOfOrderIEMsg(uint8_t e2IEOrderCheckEnabled) {
85 checkIEOrder = e2IEOrderCheckEnabled;
88 //////////////////////////////////////////////////////////////////////
89 const char* getE2ErrorString(uint64_t errorCode) {
91 return E2ErrorStrings[errorCode];
94 /////////////////////////////////////////////////////////////////////
95 bool E2encode(E2AP_PDU_t* pE2AP_PDU, size_t* dataBufferSize, byte* dataBuffer, char* pLogBuffer) {
98 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
101 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pE2AP_PDU, dataBuffer, *dataBufferSize);
102 if (rval.encoded == -1) {
103 sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2AP_PDU.name);
104 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
107 else if (rval.encoded > *dataBufferSize) {
108 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",*dataBufferSize, asn_DEF_E2AP_PDU.name, rval.encoded);
109 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
114 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2AP_PDU.name, *dataBufferSize, rval.encoded);
116 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
117 *dataBufferSize = rval.encoded;
122 //////////////////////////////////////////////////////////////////////
123 uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
125 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
128 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
129 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
130 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
131 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionRequest;
134 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
135 if (pRICsubscriptionRequest_IEs) {
136 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
137 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
138 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
139 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionRequest->ricRequestID.ricRequestorID;
140 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionRequest->ricRequestID.ricInstanceID;
141 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
144 return e2err_RICSubscriptionRequestAllocRICrequestIDFail;
147 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
148 if (pRICsubscriptionRequest_IEs) {
149 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
150 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
151 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID;
152 pRICsubscriptionRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionRequest->ranFunctionID;
153 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
156 return e2err_RICSubscriptionRequestAllocRANfunctionIDFail;
158 // RICsubscriptionDetails
159 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
160 if (pRICsubscriptionRequest_IEs) {
161 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICsubscriptionDetails;
162 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
163 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails;
165 // RICeventTriggerDefinition
166 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf =
167 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
168 if (pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf) {
169 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.size =
170 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength;
171 memcpy(pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf,
172 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data,
173 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
176 return e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail;
178 // RICactions-ToBeSetup-List
180 while (index < pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength && index < maxofRICactionID) {
181 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs = calloc(1, sizeof(RICaction_ToBeSetup_ItemIEs_t));
182 if (pRICaction_ToBeSetup_ItemIEs) {
183 pRICaction_ToBeSetup_ItemIEs->id = ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
184 pRICaction_ToBeSetup_ItemIEs->criticality = Criticality_ignore;
185 pRICaction_ToBeSetup_ItemIEs->value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
188 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID =
189 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID;
192 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType =
193 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType;
195 // RICactionDefinition, OPTIONAL
196 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent) {
197 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = calloc(1, sizeof (RICactionDefinition_t));
198 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition) {
199 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf =
200 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
201 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf) {
202 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size =
203 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength;
204 memcpy(pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
205 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
206 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
209 return e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail;
212 return e2err_RICSubscriptionRequestAllocRICactionDefinitionFail;
215 // RICsubsequentAction, OPTIONAL
216 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent) {
217 RICsubsequentAction_t* pRICsubsequentAction = calloc(1, sizeof(RICsubsequentAction_t));
218 if (pRICsubsequentAction) {
219 pRICsubsequentAction->ricSubsequentActionType =
220 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType;
221 pRICsubsequentAction->ricTimeToWait =
222 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait;
223 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = pRICsubsequentAction;
226 return e2err_RICSubscriptionRequestAllocRICsubsequentActionFail;
230 return e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail;
232 ASN_SEQUENCE_ADD(&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, pRICaction_ToBeSetup_ItemIEs);
235 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
238 return e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail;
239 if (E2encode(pE2AP_PDU, pdataBufferSize, pDataBuffer, pLogBuffer))
242 return e2err_RICSubscriptionRequestEncodeFail;
244 return e2err_RICSubscriptionRequestAllocE2AP_PDUFail;
248 //////////////////////////////////////////////////////////////////////
249 uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
251 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
254 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
255 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
256 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
257 pE2AP_PDU->choice.initiatingMessage.value.present = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
260 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs_RicRequestID = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
261 if (pRICsubscriptionResponse_IEs_RicRequestID) {
262 pRICsubscriptionResponse_IEs_RicRequestID->id = ProtocolIE_ID_id_RICrequestID;
263 pRICsubscriptionResponse_IEs_RicRequestID->criticality = Criticality_reject;
264 pRICsubscriptionResponse_IEs_RicRequestID->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
265 pRICsubscriptionResponse_IEs_RicRequestID->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionResponse->ricRequestID.ricRequestorID;
266 pRICsubscriptionResponse_IEs_RicRequestID->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionResponse->ricRequestID.ricInstanceID;
269 return e2err_RICSubscriptionResponseAllocRICrequestIDFail;
272 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs_RANFunctionID = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
273 if (pRICsubscriptionResponse_IEs_RANFunctionID) {
274 pRICsubscriptionResponse_IEs_RANFunctionID->id = ProtocolIE_ID_id_RANfunctionID;
275 pRICsubscriptionResponse_IEs_RANFunctionID->criticality = Criticality_reject;
276 pRICsubscriptionResponse_IEs_RANFunctionID->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID;
277 pRICsubscriptionResponse_IEs_RANFunctionID->value.choice.RANfunctionID = pRICSubscriptionResponse->ranFunctionID;
280 return e2err_RICSubscriptionResponseAllocRANfunctionIDFail;
282 // Check if Out of order IE messages to be packed, add RANFunctionID IE before RICRequestID
284 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs_RicRequestID);
285 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs_RANFunctionID);
287 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs_RANFunctionID);
288 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs_RicRequestID);
291 // RICaction-Admitted list
292 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
293 if (pRICsubscriptionResponse_IEs) {
294 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_Admitted;
295 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
296 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
299 while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength && index < maxofRICactionID) {
301 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs = calloc(1, sizeof (RICaction_Admitted_ItemIEs_t));
302 if (pRICaction_Admitted_ItemIEs)
304 pRICaction_Admitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
305 pRICaction_Admitted_ItemIEs->criticality = Criticality_reject;
306 pRICaction_Admitted_ItemIEs->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
309 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID = pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index];
310 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list, pRICaction_Admitted_ItemIEs);
313 return e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail;
318 return e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail;
320 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
322 // RICaction-NotAdmitted list, OPTIONAL
323 if (pRICSubscriptionResponse->ricActionNotAdmittedListPresent) {
324 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
325 if (pRICsubscriptionResponse_IEs) {
326 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
327 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
328 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
331 while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
333 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
334 if (pRICaction_NotAdmitted_ItemIEs)
336 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
337 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
338 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
341 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
342 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
345 if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) {
346 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest;
347 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest =
348 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
350 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) {
351 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService;
352 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService =
353 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
355 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_e2Node) {
356 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_e2Node;
357 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node =
358 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
360 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) {
361 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
362 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
363 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
365 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
366 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
367 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
368 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
370 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
371 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
372 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
373 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
375 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
378 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
382 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
385 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
388 return e2err_RICSubscriptionResponseEncodeFail;
390 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
393 //////////////////////////////////////////////////////////////////////
394 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
396 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
399 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
400 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscription;
401 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
402 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
405 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs_RICrequestID = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
406 if (pRICsubscriptionFailure_IEs_RICrequestID) {
407 pRICsubscriptionFailure_IEs_RICrequestID->id = ProtocolIE_ID_id_RICrequestID;
408 pRICsubscriptionFailure_IEs_RICrequestID->criticality = Criticality_reject;
409 pRICsubscriptionFailure_IEs_RICrequestID->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
410 pRICsubscriptionFailure_IEs_RICrequestID->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
411 pRICsubscriptionFailure_IEs_RICrequestID->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionFailure->ricRequestID.ricInstanceID;
414 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
417 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs_RANfunctionID = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
418 if (pRICsubscriptionFailure_IEs_RANfunctionID) {
419 pRICsubscriptionFailure_IEs_RANfunctionID->id = ProtocolIE_ID_id_RANfunctionID;
420 pRICsubscriptionFailure_IEs_RANfunctionID->criticality = Criticality_reject;
421 pRICsubscriptionFailure_IEs_RANfunctionID->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
422 pRICsubscriptionFailure_IEs_RANfunctionID->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
425 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
427 // Check if Out of order IE messages to be packed, add RANFunctionID IE before RICRequestID
429 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs_RICrequestID);
430 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs_RANfunctionID);
432 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs_RANfunctionID);
433 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs_RICrequestID);
437 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
438 if (pRICsubscriptionFailure_IEs) {
439 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_Cause;
440 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
441 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_Cause;
442 if (pRICSubscriptionFailure->cause.content == Cause_PR_ricRequest) {
443 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
444 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest =
445 pRICSubscriptionFailure->cause.causeVal;
447 else if (pRICSubscriptionFailure->cause.content == Cause_PR_ricService) {
448 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
449 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService =
450 pRICSubscriptionFailure->cause.causeVal;
452 else if (pRICSubscriptionFailure->cause.content == Cause_PR_e2Node) {
453 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node;
454 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node =
455 pRICSubscriptionFailure->cause.causeVal;
457 else if (pRICSubscriptionFailure->cause.content == Cause_PR_transport) {
458 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
459 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport =
460 pRICSubscriptionFailure->cause.causeVal;
462 else if (pRICSubscriptionFailure->cause.content == Cause_PR_protocol) {
463 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
464 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol =
465 pRICSubscriptionFailure->cause.causeVal;
467 else if (pRICSubscriptionFailure->cause.content == Cause_PR_misc) {
468 pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
469 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc =
470 pRICSubscriptionFailure->cause.causeVal;
472 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
475 return e2err_RICSubscriptionFailureAllocCauseFail;
477 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
479 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
482 return e2err_RICSubscriptionFailureEncodeFail;
485 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
488 //////////////////////////////////////////////////////////////////////
489 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
491 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
494 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
495 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
496 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
497 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
500 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
501 if (pRICsubscriptionDeleteRequest_IEs) {
502 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
503 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
504 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
505 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
506 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID;
507 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
510 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
513 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
514 if (pRICsubscriptionDeleteRequest_IEs) {
515 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
516 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
517 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
518 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
519 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
522 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
524 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
527 return e2err_RICSubscriptionDeleteRequestEncodeFail;
530 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
533 //////////////////////////////////////////////////////////////////////
534 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
536 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
539 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
540 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
541 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
542 pE2AP_PDU->choice.successfulOutcome.value.present = SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
545 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs_RICrequestID = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
546 if (pRICsubscriptionDeleteResponse_IEs_RICrequestID) {
547 pRICsubscriptionDeleteResponse_IEs_RICrequestID->id = ProtocolIE_ID_id_RICrequestID;
548 pRICsubscriptionDeleteResponse_IEs_RICrequestID->criticality = Criticality_reject;
549 pRICsubscriptionDeleteResponse_IEs_RICrequestID->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
550 pRICsubscriptionDeleteResponse_IEs_RICrequestID->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
551 pRICsubscriptionDeleteResponse_IEs_RICrequestID->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID;
554 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
557 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs_RANfunctionID = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
558 if (pRICsubscriptionDeleteResponse_IEs_RANfunctionID) {
559 pRICsubscriptionDeleteResponse_IEs_RANfunctionID->id = ProtocolIE_ID_id_RANfunctionID;
560 pRICsubscriptionDeleteResponse_IEs_RANfunctionID->criticality = Criticality_reject;
561 pRICsubscriptionDeleteResponse_IEs_RANfunctionID->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
562 pRICsubscriptionDeleteResponse_IEs_RANfunctionID->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
565 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
567 // // Check if Out of order IE messages to be packed, add RANFunctionID IE before RICRequestID
569 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs_RICrequestID);
570 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs_RANfunctionID);
572 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs_RANfunctionID);
573 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs_RICrequestID);
576 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
579 return e2err_RICSubscriptionDeleteResponseEncodeFail;
582 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
585 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
587 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
590 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
591 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
592 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
593 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
596 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs_RICrequestID = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
597 if (pRICsubscriptionDeleteFailure_IEs_RICrequestID) {
598 pRICsubscriptionDeleteFailure_IEs_RICrequestID->id = ProtocolIE_ID_id_RICrequestID;
599 pRICsubscriptionDeleteFailure_IEs_RICrequestID->criticality = Criticality_reject;
600 pRICsubscriptionDeleteFailure_IEs_RICrequestID->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
601 pRICsubscriptionDeleteFailure_IEs_RICrequestID->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
602 pRICsubscriptionDeleteFailure_IEs_RICrequestID->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID;
605 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
608 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs_RANfunctionID = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
609 if (pRICsubscriptionDeleteFailure_IEs_RANfunctionID) {
610 pRICsubscriptionDeleteFailure_IEs_RANfunctionID->id = ProtocolIE_ID_id_RANfunctionID;
611 pRICsubscriptionDeleteFailure_IEs_RANfunctionID->criticality = Criticality_reject;
612 pRICsubscriptionDeleteFailure_IEs_RANfunctionID->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
613 pRICsubscriptionDeleteFailure_IEs_RANfunctionID->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
616 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
618 // Check if Out of order IE messages to be packed, add RANFunctionID IE before RICRequestID
620 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs_RICrequestID);
621 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs_RANfunctionID);
623 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs_RANfunctionID);
624 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs_RICrequestID);
628 RICsubscriptionFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
629 if (pRICsubscriptionDeleteFailure_IEs) {
630 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_Cause;
631 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
632 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_Cause;
633 if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricRequest) {
634 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
635 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest =
636 pRICSubscriptionDeleteFailure->cause.causeVal;
638 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricService) {
639 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
640 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService =
641 pRICSubscriptionDeleteFailure->cause.causeVal;
643 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_e2Node) {
644 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node;
645 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node =
646 pRICSubscriptionDeleteFailure->cause.causeVal;
648 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_transport) {
649 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
650 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport =
651 pRICSubscriptionDeleteFailure->cause.causeVal;
653 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_protocol) {
654 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
655 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol =
656 pRICSubscriptionDeleteFailure->cause.causeVal;
658 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_misc) {
659 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
660 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc =
661 pRICSubscriptionDeleteFailure->cause.causeVal;
663 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
666 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
668 // CriticalityDiagnostics, OPTIONAL
670 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
673 return e2err_RICSubscriptionDeleteFailureEncodeFail;
676 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
679 //////////////////////////////////////////////////////////////////////
680 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
682 E2AP_PDU_t* pE2AP_PDU = 0;
684 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
688 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
689 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
692 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
693 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscription) {
694 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionRequest) {
695 pMessageInfo->messageType = cE2InitiatingMessage;
696 pMessageInfo->messageId = cRICSubscriptionRequest;
697 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
700 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
704 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
705 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
706 pMessageInfo->messageType = cE2InitiatingMessage;
707 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
708 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
711 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
714 }else if (pE2AP_PDU->choice.initiatingMessage.procedureCode ==
715 ProcedureCode_id_RICsubscriptionDeleteRequired) {
716 if (pE2AP_PDU->choice.initiatingMessage.value.present ==
717 InitiatingMessage__value_PR_RICsubscriptionDeleteRequired) {
718 pMessageInfo->messageType = cE2InitiatingMessage;
719 pMessageInfo->messageId = cRICSubscriptionDeleteRequired;
720 return (e2ap_pdu_ptr_t *) pE2AP_PDU;
722 sprintf(pLogBuffer, "Error. Not supported initiatingMessage MessageId = %u",
723 pE2AP_PDU->choice.initiatingMessage.value.present);
728 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
732 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
733 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
734 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse) {
735 pMessageInfo->messageType = cE2SuccessfulOutcome;
736 pMessageInfo->messageId = cRICSubscriptionResponse;
737 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
740 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
744 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
745 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
746 pMessageInfo->messageType = cE2SuccessfulOutcome;
747 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
748 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
751 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
756 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
760 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
761 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
762 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
763 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
764 pMessageInfo->messageId = cRICSubscriptionFailure;
765 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
768 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
772 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
773 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
774 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
775 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
776 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
779 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
785 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
786 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
789 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
792 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
799 //////////////////////////////////////////////////////////////////////
800 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
802 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
804 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
805 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
808 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
809 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
810 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
811 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
812 pRICSubscriptionRequest->ricRequestID.ricInstanceID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID;
815 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
816 return e2err_RICsubscriptionRequestRICrequestIDMissing;
820 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
821 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
822 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
823 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
826 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
827 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
830 // RICsubscriptionDetails
831 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
832 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscriptionDetails) {
833 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
835 // Unpack EventTriggerDefinition
836 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
837 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition;
838 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
839 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size);
841 // RICactions-ToBeSetup-List
842 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
844 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.count)
846 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.array[index];
849 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
850 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
853 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
854 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
856 // RICactionDefinition, OPTIONAL
857 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
859 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength =
860 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size;
861 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
862 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
863 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size);
865 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = true;
868 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
870 // RICsubsequentAction, OPTIONAL
871 RICsubsequentAction_t* pRICsubsequentAction;
872 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
874 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
875 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
876 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
877 pRICsubsequentAction->ricSubsequentActionType;
878 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
879 pRICsubsequentAction->ricTimeToWait;
882 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
885 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength = index;
888 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
889 return e2err_RICsubscriptionRequestICsubscriptionMissing;
892 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
897 //////////////////////////////////////////////////////////////////////
899 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
901 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
903 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
904 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
906 bool foundRICrequestID = false;
907 bool foundRANfunctionID = false;
908 bool foundRICactions_Admitted = false;
909 bool foundRICaction_NotAdmitted = false;
911 for (int i = 0; i < asnRicSubscriptionResponse->protocolIEs.list.count; i++) {
912 if (asnRicSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID) {
913 if (checkIEOrder && i != 0) {
914 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
915 return e2err_RICsubscriptionResponseRICrequestIDWrongOrder;
917 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[i];
918 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
919 pRICSubscriptionResponse->ricRequestID.ricInstanceID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID;
920 foundRICrequestID = true;
922 else if (asnRicSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RANfunctionID) {
923 if (checkIEOrder && i != 1) {
924 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
925 return e2err_RICsubscriptionResponseRANfunctionIDWrongOrder;
927 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[i];
928 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
929 foundRANfunctionID = true;
931 else if (asnRicSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICactions_Admitted) {
932 if (checkIEOrder && i != 2) {
933 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
934 return e2err_RICsubscriptionResponseRICaction_Admitted_ListWrongOrder;
936 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[i];
937 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
939 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
940 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
941 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
944 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
945 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
948 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
949 foundRICactions_Admitted = true;
951 else if (asnRicSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
952 if (checkIEOrder && i != 3) {
953 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
954 return e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListWrongOrder;
956 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[i];
957 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
958 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
959 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
961 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
962 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
963 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
966 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
967 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
970 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
971 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
972 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
973 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
975 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
976 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
977 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
978 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
980 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_e2Node) {
981 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_e2Node;
982 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
983 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node;
985 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
986 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
987 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
988 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
990 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
991 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
992 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
993 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
995 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
996 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
997 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
998 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
1002 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
1003 foundRICaction_NotAdmitted = true;
1008 if (!foundRICrequestID) {
1009 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1010 return e2err_RICsubscriptionResponseRICrequestIDMissing;
1012 if (!foundRANfunctionID) {
1013 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1014 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
1016 if (!foundRICactions_Admitted) {
1017 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1018 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
1021 if (!foundRICaction_NotAdmitted) {
1022 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
1023 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
1025 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1029 //////////////////////////////////////////////////////////////////////
1030 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
1032 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1034 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
1035 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
1037 bool foundRICrequestID = false;
1038 bool foundRANfunctionID = false;
1039 bool foundCause = false;
1041 for (int i = 0; i < asnRicSubscriptionFailure->protocolIEs.list.count; i++) {
1042 if (asnRicSubscriptionFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID) {
1043 if (checkIEOrder && i != 0) {
1044 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1045 return e2err_RICsubscriptionFailureRICrequestIDWrongOrder;
1047 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[i];
1048 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1049 pRICSubscriptionFailure->ricRequestID.ricInstanceID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID;
1050 foundRICrequestID = true;
1052 else if (asnRicSubscriptionFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RANfunctionID) {
1053 if (checkIEOrder && i != 1) {
1054 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1055 return e2err_RICsubscriptionFailureRANfunctionIDWrongOrder;
1057 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[i];
1058 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
1059 foundRANfunctionID = true;
1061 else if (asnRicSubscriptionFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_Cause) {
1062 if (checkIEOrder && i != 2) {
1063 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1064 return e2err_RICsubscriptionFailureCauseWrongOrder;
1066 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[i];
1067 if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
1068 pRICSubscriptionFailure->cause.content = Cause_PR_ricRequest;
1069 pRICSubscriptionFailure->cause.causeVal =
1070 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest;
1072 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1073 pRICSubscriptionFailure->cause.content = Cause_PR_ricService;
1074 pRICSubscriptionFailure->cause.causeVal =
1075 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService;
1077 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) {
1078 pRICSubscriptionFailure->cause.content = Cause_PR_e2Node;
1079 pRICSubscriptionFailure->cause.causeVal =
1080 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node;
1082 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1083 pRICSubscriptionFailure->cause.content = Cause_PR_transport;
1084 pRICSubscriptionFailure->cause.causeVal =
1085 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport;
1087 else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1088 pRICSubscriptionFailure->cause.content = Cause_PR_protocol;
1089 pRICSubscriptionFailure->cause.causeVal =
1090 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol;
1092 else if(pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1093 pRICSubscriptionFailure->cause.content = Cause_PR_misc;
1094 pRICSubscriptionFailure->cause.causeVal =
1095 pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc;
1101 if (!foundRICrequestID) {
1102 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1103 return e2err_RICsubscriptionFailureRICrequestIDMissing;
1105 if (!foundRANfunctionID) {
1106 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1107 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
1110 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1111 return e2err_RICsubscriptionFailureCauseMissing;
1114 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1118 //////////////////////////////////////////////////////////////////////
1119 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1121 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1123 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1124 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1127 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1128 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1129 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1130 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1131 pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID;
1134 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1135 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1139 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1140 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1141 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1142 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1145 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1146 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1148 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1152 //////////////////////////////////////////////////////////////////////
1153 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1155 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1157 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1158 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1160 bool ricRequestIDFound = false;
1161 bool ranFunctionIDFound = false;
1163 for (int i = 0; i < asnRicSubscriptionDeleteResponse->protocolIEs.list.count; i++) {
1164 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[i];
1166 if (pRICsubscriptionDeleteResponse_IEs->id == ProtocolIE_ID_id_RICrequestID) {
1167 if (checkIEOrder && i != 0) {
1168 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1169 return e2err_RICsubscriptionDeleteResponseRICrequestIDWrongOrder;
1171 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1172 pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID;
1173 ricRequestIDFound = true;
1175 else if (pRICsubscriptionDeleteResponse_IEs->id == ProtocolIE_ID_id_RANfunctionID) {
1176 if (checkIEOrder && i != 1) {
1177 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1178 return e2err_RICsubscriptionDeleteResponseRANfunctionIDWrongOrder;
1180 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1181 ranFunctionIDFound = true;
1185 if (!ricRequestIDFound) {
1186 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1187 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1190 if (!ranFunctionIDFound) {
1191 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1192 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1195 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1199 //////////////////////////////////////////////////////////////////////
1200 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1202 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1204 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1205 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1207 bool foundRICrequestID = false;
1208 bool foundRANfunctionID = false;
1209 bool foundCause = false;
1211 for (int i = 0; i < asnRicSubscriptionDeleteFailure->protocolIEs.list.count; i++) {
1212 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID) {
1213 if (checkIEOrder && i != 0) {
1214 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1215 return e2err_RICsubscriptionDeleteFailureRICrequestIDWrongOrder;
1217 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i];
1218 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1219 pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID;
1220 foundRICrequestID = true;
1221 } else if (asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RANfunctionID) {
1222 if (checkIEOrder && i != 1) {
1223 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1224 return e2err_RICsubscriptionDeleteFailureRANfunctionIDWrongOrder;
1226 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i];
1227 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1228 foundRANfunctionID = true;
1229 } else if (asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_Cause) {
1230 if (checkIEOrder && i != 2) {
1231 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1232 return e2err_RICsubscriptionDeleteFailureRICcauseWrongOrder;
1234 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[i];
1235 if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
1236 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricRequest;
1237 pRICSubscriptionDeleteFailure->cause.causeVal =
1238 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest;
1240 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1241 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricService;
1242 pRICSubscriptionDeleteFailure->cause.causeVal =
1243 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService;
1245 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) {
1246 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_e2Node;
1247 pRICSubscriptionDeleteFailure->cause.causeVal =
1248 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node;
1250 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1251 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_transport;
1252 pRICSubscriptionDeleteFailure->cause.causeVal =
1253 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport;
1255 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1256 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_protocol;
1257 pRICSubscriptionDeleteFailure->cause.causeVal =
1258 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol;
1260 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1261 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_misc;
1262 pRICSubscriptionDeleteFailure->cause.causeVal =
1263 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc;
1269 if (!foundRICrequestID) {
1270 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1271 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1273 if (!foundRANfunctionID) {
1274 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1275 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1278 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1279 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1282 // CriticalityDiagnostics, OPTIONAL
1284 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1288 //**************************************************************************************************************************
1289 uint64_t packRICSubscriptionDeleteRequired(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubsDeleteRequired_t* pRICSubscriptionDeleteRequired) {
1291 E2AP_PDU_t *pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
1293 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
1294 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscriptionDeleteRequired;
1295 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
1296 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequired;
1299 RICsubscriptionDeleteRequired_IEs_t *ricSubsDeleteRequiredIEs = calloc(1,
1300 sizeof(RICsubscriptionDeleteRequired_IEs_t));
1301 ricSubsDeleteRequiredIEs->id = ProtocolIE_ID_id_RICsubscriptionToBeRemoved;
1302 ricSubsDeleteRequiredIEs->criticality = Criticality_ignore;
1303 ricSubsDeleteRequiredIEs->value.present = RICsubscriptionDeleteRequired_IEs__value_PR_RICsubscription_List_withCause;
1305 for (int idx = 0; idx < pRICSubscriptionDeleteRequired->noOfRanSubscriptions; idx++) {
1306 RICsubscription_withCause_ItemIEs_t *ricSubsListWithCauseItem = calloc(1,
1307 sizeof(RICsubscription_withCause_ItemIEs_t));
1308 ricSubsListWithCauseItem->id = ProtocolIE_ID_id_RICsubscription_withCause_Item;
1309 ricSubsListWithCauseItem->criticality = Criticality_ignore;
1310 ricSubsListWithCauseItem->value.present = RICsubscription_withCause_ItemIEs__value_PR_RICsubscription_withCause_Item;
1313 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.ricRequestID.ricRequestorID =
1314 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ricRequestID.ricRequestorID;
1315 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.ricRequestID.ricInstanceID =
1316 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ricRequestID.ricInstanceID;
1319 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.ranFunctionID =
1320 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ranFunctionID;
1323 if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1324 Cause_PR_ricRequest) {
1325 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_ricRequest;
1326 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.ricRequest =
1327 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1328 } else if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1329 Cause_PR_ricService) {
1330 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_ricService;
1331 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.ricService =
1332 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1333 } else if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1335 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_e2Node;
1336 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.e2Node =
1337 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1338 } else if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1339 Cause_PR_protocol) {
1340 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_protocol;
1341 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.protocol =
1342 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1343 } else if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1344 Cause_PR_transport) {
1345 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_transport;
1346 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.transport =
1347 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1348 } else if (pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content ==
1350 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.present = Cause_PR_misc;
1351 ricSubsListWithCauseItem->value.choice.RICsubscription_withCause_Item.cause.choice.misc =
1352 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal;
1354 asn_sequence_add(&ricSubsDeleteRequiredIEs->value.choice.RICsubscription_List_withCause.list,
1355 ricSubsListWithCauseItem);
1358 &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequired.protocolIEs.list,
1359 ricSubsDeleteRequiredIEs);
1361 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
1364 return e2err_RICSubscriptionDeleteRequiredEncodeFail;
1368 return e2err_RICSubscriptionDeleteRequiredAllocE2AP_PDUFail;
1371 //**************************************************************************************************************************
1372 uint64_t getRICSubscriptionDeleteRequiredData(e2ap_pdu_ptr_t *pE2AP_PDU_pointer,
1373 RICSubsDeleteRequired_t *pRICSubscriptionDeleteRequired) {
1375 E2AP_PDU_t *pE2AP_PDU = (E2AP_PDU_t *) pE2AP_PDU_pointer;
1377 RICsubscriptionDeleteRequired_t *asnRicSubscriptionDeleteRequired = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequired;
1379 if (asnRicSubscriptionDeleteRequired->protocolIEs.list.count > 0 &&
1380 asnRicSubscriptionDeleteRequired->protocolIEs.list.array[0]->id ==
1381 ProtocolIE_ID_id_RICsubscriptionToBeRemoved) {
1382 if (asnRicSubscriptionDeleteRequired->protocolIEs.list.array[0]->value.present ==
1383 RICsubscriptionDeleteRequired_IEs__value_PR_RICsubscription_List_withCause) {
1384 RICsubscription_List_withCause_t riCsubscriptionListWithCause = asnRicSubscriptionDeleteRequired->protocolIEs.list.array[0]->value.choice.RICsubscription_List_withCause;
1385 pRICSubscriptionDeleteRequired->noOfRanSubscriptions = riCsubscriptionListWithCause.list.count;
1386 for (int idx = 0; idx < riCsubscriptionListWithCause.list.count; idx++) {
1387 RICsubscription_withCause_ItemIEs_t *riCsubscriptionWithCauseItemIEs = (RICsubscription_withCause_ItemIEs_t*)riCsubscriptionListWithCause.list.array[idx];
1388 if (riCsubscriptionWithCauseItemIEs->id == ProtocolIE_ID_id_RICsubscription_withCause_Item &&
1389 riCsubscriptionWithCauseItemIEs->value.present ==
1390 RICsubscription_withCause_ItemIEs__value_PR_RICsubscription_withCause_Item) {
1392 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ricRequestID.ricRequestorID = riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.ricRequestID.ricRequestorID;
1393 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ricRequestID.ricInstanceID = riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.ricRequestID.ricInstanceID;
1396 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].ranFunctionID = riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.ranFunctionID;
1399 if (riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.present ==
1400 Cause_PR_ricRequest) {
1401 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content = Cause_PR_ricRequest;
1402 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal =
1403 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.choice.ricRequest;
1406 else if (riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.present ==
1407 Cause_PR_ricService) {
1408 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content = Cause_PR_ricService;
1409 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal =
1410 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.choice.ricService;
1412 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.present ==
1413 Cause_PR_transport) {
1414 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content = Cause_PR_transport;
1415 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal =
1416 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.choice.transport;
1418 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.present ==
1419 Cause_PR_protocol) {
1420 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content = Cause_PR_protocol;
1421 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal =
1422 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.choice.protocol;
1424 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.present ==
1426 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.content = Cause_PR_misc;
1427 pRICSubscriptionDeleteRequired->ranSubscriptionsDelRequired[idx].cause.causeVal =
1428 riCsubscriptionWithCauseItemIEs->value.choice.RICsubscription_withCause_Item.cause.choice.misc;
1438 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);