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"
32 static const bool debug = true;
34 static const bool debug = true; //false;
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;
65 const uint64_t cRICSubscriptionResponse = 1;
66 const uint64_t cRICsubscriptionDeleteResponse = 2;
68 // Unsuccessful outcome
69 const uint64_t cRICSubscriptionFailure = 1;
70 const uint64_t cRICsubscriptionDeleteFailure = 2;
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) {
88 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
91 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pE2AP_PDU, dataBuffer, *dataBufferSize);
92 if (rval.encoded == -1) {
93 sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2AP_PDU.name);
94 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
97 else if (rval.encoded > *dataBufferSize) {
98 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",*dataBufferSize, asn_DEF_E2AP_PDU.name, rval.encoded);
99 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
104 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2AP_PDU.name, *dataBufferSize, rval.encoded);
106 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
107 *dataBufferSize = rval.encoded;
112 //////////////////////////////////////////////////////////////////////
113 uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
115 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
118 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
119 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
120 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
121 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionRequest;
124 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
125 if (pRICsubscriptionRequest_IEs) {
126 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
127 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
128 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
129 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionRequest->ricRequestID.ricRequestorID;
130 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionRequest->ricRequestID.ricInstanceID;
131 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
134 return e2err_RICSubscriptionRequestAllocRICrequestIDFail;
137 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
138 if (pRICsubscriptionRequest_IEs) {
139 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
140 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
141 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID;
142 pRICsubscriptionRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionRequest->ranFunctionID;
143 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
146 return e2err_RICSubscriptionRequestAllocRANfunctionIDFail;
148 // RICsubscriptionDetails
149 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
150 if (pRICsubscriptionRequest_IEs) {
151 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICsubscriptionDetails;
152 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
153 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails;
155 // RICeventTriggerDefinition
156 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf =
157 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
158 if (pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf) {
159 pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.size =
160 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength;
161 memcpy(pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf,
162 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data,
163 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength);
166 return e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail;
168 // RICactions-ToBeSetup-List
170 while (index < pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength && index < maxofRICactionID) {
171 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs = calloc(1, sizeof(RICaction_ToBeSetup_ItemIEs_t));
172 if (pRICaction_ToBeSetup_ItemIEs) {
173 pRICaction_ToBeSetup_ItemIEs->id = ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
174 pRICaction_ToBeSetup_ItemIEs->criticality = Criticality_ignore;
175 pRICaction_ToBeSetup_ItemIEs->value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
178 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID =
179 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID;
182 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType =
183 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType;
185 // RICactionDefinition, OPTIONAL
186 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent) {
187 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = calloc(1, sizeof (RICactionDefinition_t));
188 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition) {
189 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf =
190 calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
191 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf) {
192 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size =
193 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength;
194 memcpy(pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
195 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
196 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength);
199 return e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail;
202 return e2err_RICSubscriptionRequestAllocRICactionDefinitionFail;
205 // RICsubsequentAction, OPTIONAL
206 if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent) {
207 RICsubsequentAction_t* pRICsubsequentAction = calloc(1, sizeof(RICsubsequentAction_t));
208 if (pRICsubsequentAction) {
209 pRICsubsequentAction->ricSubsequentActionType =
210 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType;
211 pRICsubsequentAction->ricTimeToWait =
212 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait;
213 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = pRICsubsequentAction;
216 return e2err_RICSubscriptionRequestAllocRICsubsequentActionFail;
220 return e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail;
222 ASN_SEQUENCE_ADD(&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, pRICaction_ToBeSetup_ItemIEs);
225 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
228 return e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail;
229 if (E2encode(pE2AP_PDU, pdataBufferSize, pDataBuffer, pLogBuffer))
232 return e2err_RICSubscriptionRequestEncodeFail;
234 return e2err_RICSubscriptionRequestAllocE2AP_PDUFail;
238 //////////////////////////////////////////////////////////////////////
239 uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
241 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
244 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
245 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscription;
246 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
247 pE2AP_PDU->choice.initiatingMessage.value.present = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
250 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
251 if (pRICsubscriptionResponse_IEs) {
252 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
253 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
254 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
255 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionResponse->ricRequestID.ricRequestorID;
256 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionResponse->ricRequestID.ricInstanceID;
257 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
260 return e2err_RICSubscriptionResponseAllocRICrequestIDFail;
263 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
264 if (pRICsubscriptionResponse_IEs) {
265 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
266 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
267 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID;
268 pRICsubscriptionResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionResponse->ranFunctionID;
269 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
272 return e2err_RICSubscriptionResponseAllocRANfunctionIDFail;
274 // RICaction-Admitted list
275 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
276 if (pRICsubscriptionResponse_IEs) {
277 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_Admitted;
278 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
279 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
282 while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength && index < maxofRICactionID) {
284 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs = calloc(1, sizeof (RICaction_Admitted_ItemIEs_t));
285 if (pRICaction_Admitted_ItemIEs)
287 pRICaction_Admitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
288 pRICaction_Admitted_ItemIEs->criticality = Criticality_reject;
289 pRICaction_Admitted_ItemIEs->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
292 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID = pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index];
293 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list, pRICaction_Admitted_ItemIEs);
296 return e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail;
301 return e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail;
303 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
305 // RICaction-NotAdmitted list, OPTIONAL
306 if (pRICSubscriptionResponse->ricActionNotAdmittedListPresent) {
307 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
308 if (pRICsubscriptionResponse_IEs) {
309 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
310 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
311 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
314 while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
316 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
317 if (pRICaction_NotAdmitted_ItemIEs)
319 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
320 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
321 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
324 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
325 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
328 if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) {
329 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest;
330 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest =
331 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
333 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) {
334 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService;
335 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService =
336 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
338 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) {
339 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
340 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
341 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
343 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
344 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
345 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
346 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
348 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
349 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
350 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
351 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
353 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
356 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
360 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
363 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
366 return e2err_RICSubscriptionResponseEncodeFail;
368 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
371 //////////////////////////////////////////////////////////////////////
372 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
374 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
377 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
378 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscription;
379 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
380 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
383 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
384 if (pRICsubscriptionFailure_IEs) {
385 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
386 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
387 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
388 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
389 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionFailure->ricRequestID.ricInstanceID;
390 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
393 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
396 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
397 if (pRICsubscriptionFailure_IEs) {
398 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
399 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
400 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
401 pRICsubscriptionFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
402 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
405 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
407 // RICaction-NotAdmitted list
408 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
409 if (pRICsubscriptionFailure_IEs) {
410 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
411 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
412 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List;
415 while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
417 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
418 if (pRICaction_NotAdmitted_ItemIEs)
420 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
421 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
422 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
425 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
426 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
429 if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) {
430 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest;
431 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest =
432 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
434 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) {
435 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService;
436 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService =
437 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
439 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) {
440 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport;
441 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport =
442 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
444 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) {
445 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol;
446 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol =
447 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
449 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) {
450 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc;
451 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc =
452 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal;
454 ASN_SEQUENCE_ADD(&pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
457 return e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail;
460 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
463 return e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail;
465 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
467 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
470 return e2err_RICSubscriptionFailureEncodeFail;
473 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
476 //////////////////////////////////////////////////////////////////////
477 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
479 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
482 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
483 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
484 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
485 pE2AP_PDU->choice.initiatingMessage.value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
488 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
489 if (pRICsubscriptionDeleteRequest_IEs) {
490 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
491 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
492 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
493 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
494 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID;
495 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
498 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
501 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
502 if (pRICsubscriptionDeleteRequest_IEs) {
503 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
504 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
505 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
506 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
507 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
510 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
512 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
515 return e2err_RICSubscriptionDeleteRequestEncodeFail;
518 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
521 //////////////////////////////////////////////////////////////////////
522 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
524 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
527 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
528 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
529 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
530 pE2AP_PDU->choice.successfulOutcome.value.present = SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
533 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
534 if (pRICsubscriptionDeleteResponse_IEs) {
535 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
536 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
537 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
538 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
539 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID;
540 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
543 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
546 pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
547 if (pRICsubscriptionDeleteResponse_IEs) {
548 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
549 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
550 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
551 pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
552 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
555 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
557 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
560 return e2err_RICSubscriptionDeleteResponseEncodeFail;
563 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
566 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
568 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
571 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
572 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_RICsubscriptionDelete;
573 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
574 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
577 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
578 if (pRICsubscriptionDeleteFailure_IEs) {
579 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
580 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
581 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
582 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
583 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID = pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID;
584 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
587 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
590 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
591 if (pRICsubscriptionDeleteFailure_IEs) {
592 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
593 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
594 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
595 pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
596 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
599 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
602 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
603 if (pRICsubscriptionDeleteFailure_IEs) {
604 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_Cause;
605 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
606 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_Cause;
607 if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricRequest) {
608 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest;
609 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest =
610 pRICSubscriptionDeleteFailure->cause.causeVal;
612 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_ricService) {
613 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_ricService;
614 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService =
615 pRICSubscriptionDeleteFailure->cause.causeVal;
617 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_transport) {
618 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_transport;
619 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport =
620 pRICSubscriptionDeleteFailure->cause.causeVal;
622 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_protocol) {
623 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_protocol;
624 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol =
625 pRICSubscriptionDeleteFailure->cause.causeVal;
627 else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_misc) {
628 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_misc;
629 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc =
630 pRICSubscriptionDeleteFailure->cause.causeVal;
632 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
635 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
637 // CriticalityDiagnostics, OPTIONAL
639 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
642 return e2err_RICSubscriptionDeleteFailureEncodeFail;
645 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
648 //////////////////////////////////////////////////////////////////////
649 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
651 E2AP_PDU_t* pE2AP_PDU = 0;
653 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
658 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
659 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
662 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
663 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscription) {
664 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionRequest) {
665 pMessageInfo->messageType = cE2InitiatingMessage;
666 pMessageInfo->messageId = cRICSubscriptionRequest;
667 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
670 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
674 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
675 if (pE2AP_PDU->choice.initiatingMessage.value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
676 pMessageInfo->messageType = cE2InitiatingMessage;
677 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
678 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
681 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
686 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
690 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
691 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
692 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse) {
693 pMessageInfo->messageType = cE2SuccessfulOutcome;
694 pMessageInfo->messageId = cRICSubscriptionResponse;
695 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
698 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
702 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
703 if (pE2AP_PDU->choice.successfulOutcome.value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
704 pMessageInfo->messageType = cE2SuccessfulOutcome;
705 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
706 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
709 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
714 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
718 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
719 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscription) {
720 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
721 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
722 pMessageInfo->messageId = cRICSubscriptionFailure;
723 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
726 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
730 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_RICsubscriptionDelete) {
731 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
732 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
733 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
734 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
737 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
743 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
744 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
747 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
750 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
757 //////////////////////////////////////////////////////////////////////
758 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
760 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
762 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
763 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
766 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
767 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
768 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
769 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
770 pRICSubscriptionRequest->ricRequestID.ricInstanceID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricInstanceID;
773 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
774 return e2err_RICsubscriptionRequestRICrequestIDMissing;
778 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
779 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
780 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
781 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
784 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
785 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
788 // RICsubscriptionDetails
789 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
790 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscriptionDetails) {
791 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
793 // Unpack EventTriggerDefinition
794 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
795 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition;
796 pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
797 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size);
799 // RICactions-ToBeSetup-List
800 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
802 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.count)
804 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list.array[index];
807 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
808 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
811 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
812 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
814 // RICactionDefinition, OPTIONAL
815 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
817 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.contentLength =
818 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size;
819 memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.octetString.data,
820 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf,
821 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size);
823 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = true;
826 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
828 // RICsubsequentAction, OPTIONAL
829 RICsubsequentAction_t* pRICsubsequentAction;
830 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
832 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
833 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
834 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
835 pRICsubsequentAction->ricSubsequentActionType;
836 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
837 pRICsubsequentAction->ricTimeToWait;
840 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
843 pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.contentLength = index;
846 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
847 return e2err_RICsubscriptionRequestICsubscriptionMissing;
850 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
855 //////////////////////////////////////////////////////////////////////
857 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
859 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
861 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
862 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
865 if (asnRicSubscriptionResponse->protocolIEs.list.count > 0 &&
866 asnRicSubscriptionResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
867 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[0];
868 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
869 pRICSubscriptionResponse->ricRequestID.ricInstanceID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricInstanceID;
872 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
873 return e2err_RICsubscriptionResponseRICrequestIDMissing;
877 if (asnRicSubscriptionResponse->protocolIEs.list.count > 1 &&
878 asnRicSubscriptionResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
879 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[1];
880 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
883 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
884 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
887 // RICaction-Admitted-List
888 if (asnRicSubscriptionResponse->protocolIEs.list.count > 2 &&
889 asnRicSubscriptionResponse->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_Admitted) {
890 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[2];
891 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
893 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
894 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
895 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
898 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
899 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
902 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
905 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
906 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
909 // RICaction-NotAdmitted-List, OPTIONAL
910 if (asnRicSubscriptionResponse->protocolIEs.list.count > 3 &&
911 asnRicSubscriptionResponse->protocolIEs.list.array[3]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
912 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[3];
913 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
914 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
915 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
917 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
918 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
919 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
922 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
923 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
926 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
927 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
928 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
929 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
931 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
932 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
933 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
934 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
936 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
937 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
938 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
939 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
941 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
942 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
943 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
944 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
946 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
947 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
948 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
949 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
953 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
957 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
958 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
960 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
964 //////////////////////////////////////////////////////////////////////
965 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
967 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
969 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
970 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
973 if (asnRicSubscriptionFailure->protocolIEs.list.count > 0 &&
974 asnRicSubscriptionFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
975 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[0];
976 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
977 pRICSubscriptionFailure->ricRequestID.ricInstanceID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricInstanceID;
980 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
981 return e2err_RICsubscriptionFailureRICrequestIDMissing;
985 if (asnRicSubscriptionFailure->protocolIEs.list.count > 1 &&
986 asnRicSubscriptionFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
987 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[1];
988 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
991 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
992 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
995 // RICaction-NotAdmitted-List
996 if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 &&
997 asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
998 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2];
1000 while ((index < maxofRICactionID) && (index < pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
1001 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1002 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1005 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1006 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1009 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) {
1010 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest;
1011 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1012 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest;
1014 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) {
1015 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService;
1016 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1017 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService;
1019 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) {
1020 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport;
1021 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1022 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport;
1024 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) {
1025 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol;
1026 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1027 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol;
1029 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) {
1030 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc;
1031 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal =
1032 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc;
1036 pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = index;
1038 // CriticalityDiagnostics. OPTIONAL
1042 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1043 return e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing;
1045 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1049 //////////////////////////////////////////////////////////////////////
1050 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1052 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1054 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1055 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1058 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1059 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1060 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1061 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1062 pRICSubscriptionDeleteRequest->ricRequestID.ricInstanceID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricInstanceID;
1065 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1066 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1070 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1071 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1072 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1073 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1076 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1077 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1079 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1083 //////////////////////////////////////////////////////////////////////
1084 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1086 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1088 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1089 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1092 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 0 &&
1093 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1094 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0];
1095 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1096 pRICSubscriptionDeleteResponse->ricRequestID.ricInstanceID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricInstanceID;
1099 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1100 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1104 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 1 &&
1105 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1106 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1];
1107 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1110 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1111 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1113 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1117 //////////////////////////////////////////////////////////////////////
1118 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1120 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1122 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1123 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1126 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 0 &&
1127 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1128 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0];
1129 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1130 pRICSubscriptionDeleteFailure->ricRequestID.ricInstanceID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricInstanceID;
1133 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1134 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1138 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 1 &&
1139 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1140 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1];
1141 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1144 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1145 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1149 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 &&
1150 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) {
1151 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2];
1152 if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) {
1153 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricRequest;
1154 pRICSubscriptionDeleteFailure->cause.causeVal =
1155 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricRequest;
1157 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) {
1158 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_ricService;
1159 pRICSubscriptionDeleteFailure->cause.causeVal =
1160 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService;
1162 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_transport) {
1163 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_transport;
1164 pRICSubscriptionDeleteFailure->cause.causeVal =
1165 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport;
1167 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) {
1168 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_protocol;
1169 pRICSubscriptionDeleteFailure->cause.causeVal =
1170 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.protocol;
1172 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_misc) {
1173 pRICSubscriptionDeleteFailure->cause.content = Cause_PR_misc;
1174 pRICSubscriptionDeleteFailure->cause.causeVal =
1175 pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.misc;
1179 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1180 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1182 // CriticalityDiagnostics, OPTIONAL
1184 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);