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"
26 #include "E2SM-gNB-X2-eventTriggerDefinition.h"
27 #include "asn_constant.h"
31 static const bool debug = true;
33 static const bool debug = false;
37 const int64_t cMaxNrOfErrors = 256;
39 const uint64_t cMaxSizeOfOctetString = 1024;
41 const size_t cMacroENBIDP_20Bits = 20;
42 const size_t cHomeENBID_28Bits = 28;
43 const size_t cShortMacroENBID_18Bits = 18;
44 const size_t clongMacroENBIDP_21Bits = 21;
46 const int cRICCauseRadioNetwork = 1; // this is content of type RICCause_t
47 const int cRICCauseTransport = 2; // this is content of type RICCause_t
48 const int cRICCauseProtocol = 3; // this is content of type RICCause_t
49 const int cRICCauseMisc = 4; // this is content of type RICCause_t
50 const int cRICCauseRic = 5; // this is content of type RICCause_t
52 //////////////////////////////////////////////////////////////////////
55 // Below constant values are same as in E2AP, E2SM and X2AP specs
56 const uint64_t cE2InitiatingMessage = 1;
57 const uint64_t cE2SuccessfulOutcome = 2;
58 const uint64_t cE2UnsuccessfulOutcome = 3;
62 const uint64_t cRICSubscriptionRequest = 1;
63 const uint64_t cRICSubscriptionDeleteRequest = 2;
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 const char* getE2ErrorString(uint64_t errorCode) {
81 return E2ErrorStrings[errorCode];
84 /////////////////////////////////////////////////////////////////////
85 bool E2encode(E2AP_PDU_t* pE2AP_PDU, size_t* dataBufferSize, byte* dataBuffer, char* pLogBuffer) {
89 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
92 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pE2AP_PDU, dataBuffer, *dataBufferSize);
93 if (rval.encoded == -1) {
94 sprintf(pLogBuffer,"Serialization of %s failed.", asn_DEF_E2AP_PDU.name);
95 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
98 else if (rval.encoded > *dataBufferSize) {
99 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",*dataBufferSize, asn_DEF_E2AP_PDU.name, rval.encoded);
100 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
105 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2AP_PDU.name, *dataBufferSize, rval.encoded);
107 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
108 *dataBufferSize = rval.encoded;
113 //////////////////////////////////////////////////////////////////////
114 uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
116 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
119 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
120 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_ricSubscription;
121 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
122 pE2AP_PDU->choice.initiatingMessage.value.present = RICInitiatingMessage__value_PR_RICsubscriptionRequest;
125 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
126 if (pRICsubscriptionRequest_IEs) {
127 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
128 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
129 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
130 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionRequest->ricRequestID.ricRequestorID;
131 pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber;
132 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
135 return e2err_RICSubscriptionRequestAllocRICrequestIDFail;
138 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
139 if (pRICsubscriptionRequest_IEs) {
140 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
141 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
142 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID;
143 pRICsubscriptionRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionRequest->ranFunctionID;
144 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
147 return e2err_RICSubscriptionRequestAllocRANfunctionIDFail;
150 pRICsubscriptionRequest_IEs = calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
151 if (pRICsubscriptionRequest_IEs) {
152 pRICsubscriptionRequest_IEs->id = ProtocolIE_ID_id_RICsubscription;
153 pRICsubscriptionRequest_IEs->criticality = Criticality_reject;
154 pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscription;
156 // RICeventTriggerDefinition
158 if ((returnCode = packRICEventTriggerDefinition(pLogBuffer, &pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition) != e2err_OK))
161 pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition.buf =
162 calloc(1, pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.contentLength);
163 if (pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition.buf) {
164 pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition.size =
165 pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.contentLength;
166 memcpy(pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition.buf,
167 pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.data,
168 pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.contentLength);
171 return e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail;
173 // RICactions-ToBeSetup-List
175 while (index < pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength && index < maxofRICactionID) {
177 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs = calloc(1, sizeof(RICaction_ToBeSetup_ItemIEs_t));
178 if (pRICaction_ToBeSetup_ItemIEs) {
179 pRICaction_ToBeSetup_ItemIEs->id = ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
180 pRICaction_ToBeSetup_ItemIEs->criticality = Criticality_reject;
181 pRICaction_ToBeSetup_ItemIEs->value.present = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
183 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID =
184 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID;
186 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType =
187 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType;
190 return e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail;
192 // RICactionDefinition, OPTIONAL
193 // This is not used in RIC
195 // RICsubsequentAction, OPTIONAL
196 RICsubsequentAction_t* pRICsubsequentAction = calloc(1, sizeof(RICsubsequentAction_t));
197 if (pRICsubsequentAction) {
198 pRICsubsequentAction->ricSubsequentActionType =
199 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType;
200 pRICsubsequentAction->ricTimeToWait =
201 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait;
202 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = pRICsubsequentAction;
205 return e2err_RICSubscriptionRequestAllocRICsubsequentActionFail;
207 ASN_SEQUENCE_ADD(&pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list, pRICaction_ToBeSetup_ItemIEs);
210 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
213 return e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail;
215 if (E2encode(pE2AP_PDU, pdataBufferSize, pDataBuffer, pLogBuffer))
218 return e2err_RICSubscriptionRequestEncodeFail;
220 return e2err_RICSubscriptionRequestAllocE2AP_PDUFail;
223 //////////////////////////////////////////////////////////////////////
224 uint64_t packRICEventTriggerDefinition(char* pLogBuffer, RICEventTriggerDefinition_t* pRICEventTriggerDefinition) {
226 E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t));
227 if(pE2SM_gNB_X2_eventTriggerDefinition)
229 // RICeventTriggerDefinition
231 if ((pRICEventTriggerDefinition->interfaceID.globalENBIDPresent == true && pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent == true) ||
232 (pRICEventTriggerDefinition->interfaceID.globalENBIDPresent == false && pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent == false))
233 return e2err_RICEventTriggerDefinitionIEValueFail_1;
235 // GlobalENB-ID or GlobalGNB-ID
236 if (pRICEventTriggerDefinition->interfaceID.globalENBIDPresent)
238 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = Interface_ID_PR_global_eNB_ID;
242 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size =
243 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength;
244 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf = calloc(1,3);
245 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf) {
246 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
247 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal,
248 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength);
251 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail;
254 if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cMacroENBIDP_20Bits){
255 // BIT STRING (SIZE (20)
256 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_macro_eNB_ID;
257 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf = calloc(1,3);
258 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf) {
259 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size = 3; // bytes
260 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.bits_unused = 4; // trailing unused bits
261 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf,
262 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
265 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail;
267 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cHomeENBID_28Bits) {
268 // BIT STRING (SIZE (28)
269 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_home_eNB_ID;
270 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf = calloc(1,4);
271 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf) {
272 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size = 4; // bytes
273 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.bits_unused = 4; // trailing unused bits
274 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf,
275 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,4);
278 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail;
280 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cShortMacroENBID_18Bits) {
281 // BIT STRING (SIZE(18)
282 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_short_Macro_eNB_ID;
283 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf = calloc(1,3);
284 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf) {
285 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size = 3;
286 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.bits_unused = 6; // trailing unused bits
287 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf,
288 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
291 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail;
293 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == clongMacroENBIDP_21Bits) {
294 // BIT STRING (SIZE(21)
295 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_long_Macro_eNB_ID;
296 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf = calloc(1,3);
297 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf) {
298 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size = 3; // bytes
299 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.bits_unused = 3; // trailing unused bits
300 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf,
301 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
304 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail;
307 return e2err_RICEventTriggerDefinitionIEValueFail_2;
310 else if (pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent) {
312 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = Interface_ID_PR_global_gNB_ID;
315 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.size =
316 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength;
317 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf =
318 calloc(1,pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
319 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf) {
320 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf,
321 (void*)&pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal,
322 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
325 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail;
327 // GNB-ID, BIT STRING (SIZE (22..32)
328 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size = 4; //32bits
329 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf = calloc(1, 4);
330 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf) {
331 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf,
332 (void*)&pRICEventTriggerDefinition->interfaceID.globalGNBID,4); //32bits
335 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail;
338 return e2err_RICEventTriggerDefinitionIEValueFail_3;
340 // InterfaceDirection
341 pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection = pRICEventTriggerDefinition->interfaceDirection;
343 // InterfaceMessageType
345 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode = pRICEventTriggerDefinition->interfaceMessageType.procedureCode;
348 if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2InitiatingMessage)
349 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_initiating_message;
350 else if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2SuccessfulOutcome)
351 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_successful_outcome;
352 else if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2UnsuccessfulOutcome)
353 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_unsuccessful_outcome;
355 return e2err_RICEventTriggerDefinitionIEValueFail_4;
357 // InterfaceProtocolIE-List, OPTIONAL
361 asn_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
364 size_t bufferSize = sizeof(pRICEventTriggerDefinition->octetString.data);
366 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition,
367 pRICEventTriggerDefinition->octetString.data, bufferSize);
368 if(rval.encoded == -1)
370 sprintf(pLogBuffer,"Serialization of %s failed.", asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name);
371 return e2err_RICEventTriggerDefinitionPackFail_1;
373 else if(rval.encoded > bufferSize)
375 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.encoded);
376 return e2err_RICEventTriggerDefinitionPackFail_2;
380 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, bufferSize, rval.encoded);
382 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
384 pRICEventTriggerDefinition->octetString.contentLength = rval.encoded;
387 return e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail;
390 //////////////////////////////////////////////////////////////////////
391 uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
393 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
396 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
397 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_ricSubscription;
398 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
399 pE2AP_PDU->choice.initiatingMessage.value.present = RICSuccessfulOutcome__value_PR_RICsubscriptionResponse;
402 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
403 if (pRICsubscriptionResponse_IEs) {
404 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
405 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
406 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
407 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionResponse->ricRequestID.ricRequestorID;
408 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber;
409 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
412 return e2err_RICSubscriptionResponseAllocRICrequestIDFail;
415 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
416 if (pRICsubscriptionResponse_IEs) {
417 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
418 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
419 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID;
420 pRICsubscriptionResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionResponse->ranFunctionID;
421 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
424 return e2err_RICSubscriptionResponseAllocRANfunctionIDFail;
426 // RICaction-Admitted list
427 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
428 if (pRICsubscriptionResponse_IEs) {
429 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_Admitted;
430 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
431 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
434 while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength && index < maxofRICactionID) {
436 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs = calloc(1, sizeof (RICaction_Admitted_ItemIEs_t));
437 if (pRICaction_Admitted_ItemIEs)
439 pRICaction_Admitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
440 pRICaction_Admitted_ItemIEs->criticality = Criticality_reject;
441 pRICaction_Admitted_ItemIEs->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
444 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID = pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index];
445 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list, pRICaction_Admitted_ItemIEs);
448 return e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail;
453 return e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail;
455 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
457 // RICaction-NotAdmitted list
458 if (pRICSubscriptionResponse->ricActionNotAdmittedListPresent) {
459 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
460 if (pRICsubscriptionResponse_IEs) {
461 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
462 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
463 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
466 while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
468 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
469 if (pRICaction_NotAdmitted_ItemIEs)
471 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
472 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
473 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
476 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
477 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
480 if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_radioNetwork) {
481 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_radioNetwork;
482 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork =
483 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
485 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_transport) {
486 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_transport;
487 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport =
488 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
490 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_protocol) {
491 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_protocol;
492 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol =
493 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
495 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_misc) {
496 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_misc;
497 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc =
498 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
500 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_ric) {
501 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_ric;
502 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric =
503 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
505 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
508 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
512 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
515 return e2err_RICSubscriptionResponseAllocRICActionNotAdmittedListFail;
517 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
520 return e2err_RICSubscriptionResponseEncodeFail;
522 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
525 //////////////////////////////////////////////////////////////////////
526 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
528 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
531 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
532 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_ricSubscription;
533 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
534 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = RICUnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
537 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
538 if (pRICsubscriptionFailure_IEs) {
539 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
540 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
541 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
542 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
543 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber;
544 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
547 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
550 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
551 if (pRICsubscriptionFailure_IEs) {
552 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
553 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
554 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
555 pRICsubscriptionFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
556 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
559 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
561 // RICaction-NotAdmitted list
562 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
563 if (pRICsubscriptionFailure_IEs) {
564 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
565 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
566 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List;
569 while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
571 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
572 if (pRICaction_NotAdmitted_ItemIEs)
574 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
575 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
576 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
579 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
580 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
583 if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_radioNetwork) {
584 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_radioNetwork;
585 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork =
586 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
588 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_transport) {
589 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_transport;
590 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport =
591 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
593 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_protocol) {
594 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_protocol;
595 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol =
596 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
598 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_misc) {
599 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_misc;
600 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc =
601 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
603 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_ric) {
604 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_ric;
605 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric =
606 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
608 ASN_SEQUENCE_ADD(&pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
611 return e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail;
614 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
617 return e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail;
619 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
621 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
624 return e2err_RICSubscriptionFailureEncodeFail;
627 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
630 //////////////////////////////////////////////////////////////////////
631 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
633 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
636 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
637 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
638 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
639 pE2AP_PDU->choice.initiatingMessage.value.present = RICInitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
642 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
643 if (pRICsubscriptionDeleteRequest_IEs) {
644 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
645 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
646 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
647 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
648 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber;
649 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
652 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
655 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
656 if (pRICsubscriptionDeleteRequest_IEs) {
657 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
658 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
659 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
660 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
661 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
664 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
666 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
669 return e2err_RICSubscriptionDeleteRequestEncodeFail;
672 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
675 //////////////////////////////////////////////////////////////////////
676 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
678 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
681 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
682 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
683 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
684 pE2AP_PDU->choice.successfulOutcome.value.present = RICSuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
687 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
688 if (pRICsubscriptionDeleteResponse_IEs) {
689 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
690 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
691 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
692 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
693 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber;
694 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
697 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
700 pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
701 if (pRICsubscriptionDeleteResponse_IEs) {
702 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
703 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
704 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
705 pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
706 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
709 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
711 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
714 return e2err_RICSubscriptionDeleteResponseEncodeFail;
717 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
720 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
722 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
725 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
726 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
727 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
728 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = RICUnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
731 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
732 if (pRICsubscriptionDeleteFailure_IEs) {
733 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
734 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
735 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
736 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
737 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber;
738 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
741 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
744 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
745 if (pRICsubscriptionDeleteFailure_IEs) {
746 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
747 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
748 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
749 pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
750 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
753 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
756 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
757 if (pRICsubscriptionDeleteFailure_IEs) {
758 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICcause;
759 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
760 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICcause;
761 if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_radioNetwork) {
762 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_radioNetwork;
763 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.radioNetwork =
764 pRICSubscriptionDeleteFailure->ricCause.cause;
766 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_transport) {
767 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_transport;
768 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.transport =
769 pRICSubscriptionDeleteFailure->ricCause.cause;
771 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_protocol) {
772 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_protocol;
773 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.protocol =
774 pRICSubscriptionDeleteFailure->ricCause.cause;
776 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_misc) {
777 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_misc;
778 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.misc =
779 pRICSubscriptionDeleteFailure->ricCause.cause;
781 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_ric) {
782 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_ric;
783 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.ric =
784 pRICSubscriptionDeleteFailure->ricCause.cause;
786 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
789 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
791 // CriticalityDiagnostics, OPTIONAL
793 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
796 return e2err_RICSubscriptionDeleteFailureEncodeFail;
799 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
802 //////////////////////////////////////////////////////////////////////
803 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
805 E2AP_PDU_t* pE2AP_PDU = 0;
807 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
812 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
813 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
816 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
817 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_ricSubscription) {
818 if (pE2AP_PDU->choice.initiatingMessage.value.present == RICInitiatingMessage__value_PR_RICsubscriptionRequest) {
819 pMessageInfo->messageType = cE2InitiatingMessage;
820 pMessageInfo->messageId = cRICSubscriptionRequest;
821 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
824 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
828 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
829 if (pE2AP_PDU->choice.initiatingMessage.value.present == RICInitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
830 pMessageInfo->messageType = cE2InitiatingMessage;
831 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
832 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
835 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
840 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
844 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
845 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_ricSubscription) {
846 if (pE2AP_PDU->choice.successfulOutcome.value.present == RICSuccessfulOutcome__value_PR_RICsubscriptionResponse) {
847 pMessageInfo->messageType = cE2SuccessfulOutcome;
848 pMessageInfo->messageId = cRICSubscriptionResponse;
849 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
852 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
856 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
857 if (pE2AP_PDU->choice.successfulOutcome.value.present == RICSuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
858 pMessageInfo->messageType = cE2SuccessfulOutcome;
859 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
860 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
863 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
868 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
872 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
873 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_ricSubscription) {
874 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == RICUnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
875 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
876 pMessageInfo->messageId = cRICSubscriptionFailure;
877 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
880 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
884 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
885 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == RICUnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
886 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
887 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
888 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
891 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
897 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
898 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
901 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
904 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
911 //////////////////////////////////////////////////////////////////////
912 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
914 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
916 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
917 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
920 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
921 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
922 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
923 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
924 pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
927 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
928 return e2err_RICsubscriptionRequestRICrequestIDMissing;
932 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
933 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
934 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
935 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
938 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
939 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
943 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
944 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscription) {
945 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
947 // Unpack EventTriggerDefinition
948 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
949 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition;
950 pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
951 memcpy(pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size); //octetstring
954 if ((returnCode = getRICEventTriggerDefinitionData(&pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition) != e2err_OK)) {
955 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
959 // RICactions-ToBeSetup-List
960 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
962 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list.count)
964 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list.array[index];
967 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
968 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
971 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
972 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
974 // RICactionDefinition, OPTIONAL
975 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
977 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
981 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
983 // RICsubsequentAction, OPTIONAL
984 RICsubsequentAction_t* pRICsubsequentAction;
985 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
987 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
988 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
989 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
990 pRICsubsequentAction->ricSubsequentActionType;
991 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
992 pRICsubsequentAction->ricTimeToWait;
995 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
998 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength = index;
1001 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1002 return e2err_RICsubscriptionRequestICsubscriptionMissing;
1005 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1009 //////////////////////////////////////////////////////////////////////
1010 uint64_t getRICEventTriggerDefinitionData(RICEventTriggerDefinition_t* pRICEventTriggerDefinition) {
1012 E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = 0;
1013 asn_dec_rval_t rval;
1014 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void **)&pE2SM_gNB_X2_eventTriggerDefinition,
1015 pRICEventTriggerDefinition->octetString.data, pRICEventTriggerDefinition->octetString.contentLength);
1020 printf("Successfully decoded E2SM_gNB_X2_eventTriggerDefinition");
1021 asn_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1024 // InterfaceID, GlobalENB-ID or GlobalGNB-ID
1025 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == Interface_ID_PR_global_eNB_ID) {
1028 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = true;
1031 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength =
1032 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size;
1033 memcpy(pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal,
1034 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
1035 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength);
1038 IdOctects_t eNBOctects;
1039 memset(eNBOctects.octets, 0, sizeof(eNBOctects));
1040 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_macro_eNB_ID) {
1041 // BIT STRING (SIZE (20)
1042 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cMacroENBIDP_20Bits;
1043 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf,
1044 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size);
1045 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1047 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_home_eNB_ID) {
1048 // BIT STRING (SIZE (28)
1049 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cHomeENBID_28Bits;
1050 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf,
1051 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size);
1052 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1054 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_short_Macro_eNB_ID) {
1055 // BIT STRING (SIZE(18)
1056 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cShortMacroENBID_18Bits;
1057 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf,
1058 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size);
1059 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1061 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_long_Macro_eNB_ID) {
1062 // BIT STRING (SIZE(21)
1063 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits;
1064 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf,
1065 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size);
1066 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1069 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1070 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1071 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1072 return e2err_RICEventTriggerDefinitionIEValueFail_5;
1075 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == Interface_ID_PR_global_gNB_ID) {
1077 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = true;
1080 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength =
1081 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size;
1082 memcpy(pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal,
1083 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
1084 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
1087 IdOctects_t gNBOctects;
1088 memset(gNBOctects.octets, 0, sizeof(gNBOctects));
1089 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.present == GNB_ID_PR_gNB_ID) {
1090 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.bits = pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size;
1091 memcpy(gNBOctects.octets, pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf,
1092 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.bits);
1093 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.nodeID = gNBOctects.nodeID;
1096 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1097 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1098 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1099 return e2err_RICEventTriggerDefinitionIEValueFail_6;
1103 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1104 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1105 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1106 return e2err_RICEventTriggerDefinitionIEValueFail_7;
1109 // InterfaceDirection
1110 pRICEventTriggerDefinition->interfaceDirection = pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection;
1112 // InterfaceMessageType
1113 pRICEventTriggerDefinition->interfaceMessageType.procedureCode = pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode;
1115 if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_initiating_message)
1116 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2InitiatingMessage;
1117 else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_successful_outcome)
1118 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2SuccessfulOutcome;
1119 else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_unsuccessful_outcome)
1120 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2UnsuccessfulOutcome;
1122 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1123 return e2err_RICEventTriggerDefinitionIEValueFail_8;
1126 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1130 printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",pRICEventTriggerDefinition->octetString.contentLength,
1131 asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed);
1133 return e2err_RICEventTriggerDefinitionDecodeWMOREFail;
1136 printf("Decode failed. Buffer size %zu, %s, consumed %zu",pRICEventTriggerDefinition->octetString.contentLength,
1137 asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed);
1139 return e2err_RICEventTriggerDefinitionDecodeFAIL;
1141 return e2err_RICEventTriggerDefinitionDecodeDefaultFail;
1145 //////////////////////////////////////////////////////////////////////
1146 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
1148 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1150 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
1151 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
1154 if (asnRicSubscriptionResponse->protocolIEs.list.count > 0 &&
1155 asnRicSubscriptionResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1156 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[0];
1157 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1158 pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1161 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1162 return e2err_RICsubscriptionResponseRICrequestIDMissing;
1166 if (asnRicSubscriptionResponse->protocolIEs.list.count > 1 &&
1167 asnRicSubscriptionResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1168 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[1];
1169 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
1172 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1173 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
1176 // RICaction-Admitted-List
1177 if (asnRicSubscriptionResponse->protocolIEs.list.count > 2 &&
1178 asnRicSubscriptionResponse->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_Admitted) {
1179 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[2];
1180 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
1182 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
1183 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
1184 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
1187 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
1188 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
1191 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
1194 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1195 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
1198 // RICaction-NotAdmitted-List, OPTIONAL
1199 if (asnRicSubscriptionResponse->protocolIEs.list.count > 3 &&
1200 asnRicSubscriptionResponse->protocolIEs.list.array[3]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
1201 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[3];
1202 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
1203 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
1204 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
1206 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
1207 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1208 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1211 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1212 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1215 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_radioNetwork) {
1216 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_radioNetwork;
1217 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1218 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork;
1220 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_transport) {
1221 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_transport;
1222 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1223 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport;
1225 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_protocol) {
1226 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_protocol;
1227 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1228 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol;
1230 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_misc) {
1231 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_misc;
1232 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1233 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc;
1235 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_ric) {
1236 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_ric;
1237 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1238 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric;
1242 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
1246 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
1247 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
1250 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1254 //////////////////////////////////////////////////////////////////////
1255 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
1257 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1259 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
1260 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
1263 RICsubscriptionFailure_IEs_t* RICsubscriptionFailure_IEs_t;
1264 if (asnRicSubscriptionFailure->protocolIEs.list.count > 0 &&
1265 asnRicSubscriptionFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1266 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[0];
1267 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1268 pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1271 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1272 return e2err_RICsubscriptionFailureRICrequestIDMissing;
1276 if (asnRicSubscriptionFailure->protocolIEs.list.count > 1 &&
1277 asnRicSubscriptionFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1278 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[1];
1279 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
1282 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1283 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
1286 // RICaction-NotAdmitted-List
1287 if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 &&
1288 asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
1289 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2];
1291 while ((index < maxofRICactionID) && (index < pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
1292 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1293 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1296 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1297 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1300 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_radioNetwork) {
1301 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_radioNetwork;
1302 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1303 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork;
1305 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_transport) {
1306 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_transport;
1307 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1308 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport;
1310 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_protocol) {
1311 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_protocol;
1312 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1313 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol;
1315 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_misc) {
1316 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_misc;
1317 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1318 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc;
1320 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_ric) {
1321 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_ric;
1322 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1323 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric;
1327 pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = index;
1329 // CriticalityDiagnostics. OPTIONAL
1333 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1334 return e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing;
1337 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1341 //////////////////////////////////////////////////////////////////////
1342 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1344 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1346 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1347 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1350 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1351 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1352 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1353 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1354 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1357 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1358 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1362 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1363 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1364 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1365 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1368 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1369 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1372 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1376 //////////////////////////////////////////////////////////////////////
1377 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1379 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1381 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1382 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1385 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 0 &&
1386 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1387 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0];
1388 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1389 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1392 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1393 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1397 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 1 &&
1398 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1399 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1];
1400 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1403 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1404 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1407 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1411 //////////////////////////////////////////////////////////////////////
1412 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1414 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1416 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1417 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1420 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 0 &&
1421 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1422 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0];
1423 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1424 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1427 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1428 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1432 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 1 &&
1433 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1434 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1];
1435 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1438 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1439 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1443 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 &&
1444 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICcause) {
1445 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2];
1446 if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_radioNetwork) {
1447 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_radioNetwork;
1448 pRICSubscriptionDeleteFailure->ricCause.cause =
1449 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.radioNetwork;
1451 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_transport) {
1452 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_transport;
1453 pRICSubscriptionDeleteFailure->ricCause.cause =
1454 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.transport;
1456 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_protocol) {
1457 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_protocol;
1458 pRICSubscriptionDeleteFailure->ricCause.cause =
1459 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.protocol;
1461 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_misc) {
1462 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_misc;
1463 pRICSubscriptionDeleteFailure->ricCause.cause =
1464 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.misc;
1466 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_ric) {
1467 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_ric;
1468 pRICSubscriptionDeleteFailure->ricCause.cause =
1469 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.ric;
1473 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1474 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1476 // CriticalityDiagnostics, OPTIONAL
1478 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);