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 if (pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent) {
197 RICsubsequentAction_t* pRICsubsequentAction = calloc(1, sizeof(RICsubsequentAction_t));
198 if (pRICsubsequentAction) {
199 pRICsubsequentAction->ricSubsequentActionType =
200 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType;
201 pRICsubsequentAction->ricTimeToWait =
202 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait;
203 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = pRICsubsequentAction;
206 return e2err_RICSubscriptionRequestAllocRICsubsequentActionFail;
208 ASN_SEQUENCE_ADD(&pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list, pRICaction_ToBeSetup_ItemIEs);
211 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest.protocolIEs.list, pRICsubscriptionRequest_IEs);
214 return e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail;
216 if (E2encode(pE2AP_PDU, pdataBufferSize, pDataBuffer, pLogBuffer))
219 return e2err_RICSubscriptionRequestEncodeFail;
221 return e2err_RICSubscriptionRequestAllocE2AP_PDUFail;
224 //////////////////////////////////////////////////////////////////////
225 uint64_t packRICEventTriggerDefinition(char* pLogBuffer, RICEventTriggerDefinition_t* pRICEventTriggerDefinition) {
227 E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = calloc(1, sizeof(E2SM_gNB_X2_eventTriggerDefinition_t));
228 if(pE2SM_gNB_X2_eventTriggerDefinition)
230 // RICeventTriggerDefinition
232 if ((pRICEventTriggerDefinition->interfaceID.globalENBIDPresent == true && pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent == true) ||
233 (pRICEventTriggerDefinition->interfaceID.globalENBIDPresent == false && pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent == false))
234 return e2err_RICEventTriggerDefinitionIEValueFail_1;
236 // GlobalENB-ID or GlobalGNB-ID
237 if (pRICEventTriggerDefinition->interfaceID.globalENBIDPresent)
239 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = Interface_ID_PR_global_eNB_ID;
243 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size =
244 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength;
245 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf = calloc(1,3);
246 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf) {
247 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
248 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal,
249 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength);
252 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail;
255 if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cMacroENBIDP_20Bits){
256 // BIT STRING (SIZE (20)
257 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_macro_eNB_ID;
258 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf = calloc(1,3);
259 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf) {
260 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size = 3; // bytes
261 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.bits_unused = 4; // trailing unused bits
262 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf,
263 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
266 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail;
268 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cHomeENBID_28Bits) {
269 // BIT STRING (SIZE (28)
270 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_home_eNB_ID;
271 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf = calloc(1,4);
272 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf) {
273 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size = 4; // bytes
274 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.bits_unused = 4; // trailing unused bits
275 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf,
276 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,4);
279 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail;
281 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == cShortMacroENBID_18Bits) {
282 // BIT STRING (SIZE(18)
283 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_short_Macro_eNB_ID;
284 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf = calloc(1,3);
285 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf) {
286 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size = 3;
287 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.bits_unused = 6; // trailing unused bits
288 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf,
289 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
292 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail;
294 else if (pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits == clongMacroENBIDP_21Bits) {
295 // BIT STRING (SIZE(21)
296 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_long_Macro_eNB_ID;
297 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf = calloc(1,3);
298 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf) {
299 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size = 3; // bytes
300 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.bits_unused = 3; // trailing unused bits
301 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf,
302 (void*)&pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID,3);
305 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail;
308 return e2err_RICEventTriggerDefinitionIEValueFail_2;
311 else if (pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent) {
313 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = Interface_ID_PR_global_gNB_ID;
316 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.size =
317 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength;
318 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf =
319 calloc(1,pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
320 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf) {
321 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf,
322 (void*)&pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal,
323 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
326 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail;
328 // GNB-ID, BIT STRING (SIZE (22..32)
329 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size = 4; //32bits
330 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf = calloc(1, 4);
331 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf) {
332 memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf,
333 (void*)&pRICEventTriggerDefinition->interfaceID.globalGNBID,4); //32bits
336 return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail;
339 return e2err_RICEventTriggerDefinitionIEValueFail_3;
341 // InterfaceDirection
342 pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection = pRICEventTriggerDefinition->interfaceDirection;
344 // InterfaceMessageType
346 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode = pRICEventTriggerDefinition->interfaceMessageType.procedureCode;
349 if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2InitiatingMessage)
350 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_initiating_message;
351 else if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2SuccessfulOutcome)
352 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_successful_outcome;
353 else if(pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage == cE2UnsuccessfulOutcome)
354 pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = TypeOfMessage_unsuccessful_outcome;
356 return e2err_RICEventTriggerDefinitionIEValueFail_4;
358 // InterfaceProtocolIE-List, OPTIONAL
362 asn_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
365 size_t bufferSize = sizeof(pRICEventTriggerDefinition->octetString.data);
367 rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition,
368 pRICEventTriggerDefinition->octetString.data, bufferSize);
369 if(rval.encoded == -1)
371 sprintf(pLogBuffer,"Serialization of %s failed.", asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name);
372 return e2err_RICEventTriggerDefinitionPackFail_1;
374 else if(rval.encoded > bufferSize)
376 sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.encoded);
377 return e2err_RICEventTriggerDefinitionPackFail_2;
381 sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, bufferSize, rval.encoded);
383 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
385 pRICEventTriggerDefinition->octetString.contentLength = rval.encoded;
388 return e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail;
391 //////////////////////////////////////////////////////////////////////
392 uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
394 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
397 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
398 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_ricSubscription;
399 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
400 pE2AP_PDU->choice.initiatingMessage.value.present = RICSuccessfulOutcome__value_PR_RICsubscriptionResponse;
403 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
404 if (pRICsubscriptionResponse_IEs) {
405 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
406 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
407 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
408 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionResponse->ricRequestID.ricRequestorID;
409 pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber;
410 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
413 return e2err_RICSubscriptionResponseAllocRICrequestIDFail;
416 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
417 if (pRICsubscriptionResponse_IEs) {
418 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
419 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
420 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID;
421 pRICsubscriptionResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionResponse->ranFunctionID;
422 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
425 return e2err_RICSubscriptionResponseAllocRANfunctionIDFail;
427 // RICaction-Admitted list
428 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
429 if (pRICsubscriptionResponse_IEs) {
430 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_Admitted;
431 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
432 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
435 while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength && index < maxofRICactionID) {
437 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs = calloc(1, sizeof (RICaction_Admitted_ItemIEs_t));
438 if (pRICaction_Admitted_ItemIEs)
440 pRICaction_Admitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
441 pRICaction_Admitted_ItemIEs->criticality = Criticality_reject;
442 pRICaction_Admitted_ItemIEs->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
445 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID = pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index];
446 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list, pRICaction_Admitted_ItemIEs);
449 return e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail;
454 return e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail;
456 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
458 // RICaction-NotAdmitted list, OPTIONAL
459 if (pRICSubscriptionResponse->ricActionNotAdmittedListPresent) {
460 pRICsubscriptionResponse_IEs = calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
461 if (pRICsubscriptionResponse_IEs) {
462 pRICsubscriptionResponse_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
463 pRICsubscriptionResponse_IEs->criticality = Criticality_reject;
464 pRICsubscriptionResponse_IEs->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
467 while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
469 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
470 if (pRICaction_NotAdmitted_ItemIEs)
472 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
473 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
474 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
477 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
478 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
481 if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_radioNetwork) {
482 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_radioNetwork;
483 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork =
484 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
486 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_transport) {
487 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_transport;
488 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport =
489 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
491 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_protocol) {
492 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_protocol;
493 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol =
494 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
496 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_misc) {
497 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_misc;
498 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc =
499 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
501 else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_ric) {
502 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_ric;
503 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric =
504 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
506 ASN_SEQUENCE_ADD(&pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
509 return e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail;
513 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse.protocolIEs.list, pRICsubscriptionResponse_IEs);
516 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
519 return e2err_RICSubscriptionResponseEncodeFail;
521 return e2err_RICSubscriptionResponseAllocE2AP_PDUFail;
524 //////////////////////////////////////////////////////////////////////
525 uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
527 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
530 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
531 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_ricSubscription;
532 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
533 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = RICUnsuccessfulOutcome__value_PR_RICsubscriptionFailure;
536 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
537 if (pRICsubscriptionFailure_IEs) {
538 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
539 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
540 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICrequestID;
541 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionFailure->ricRequestID.ricRequestorID;
542 pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber;
543 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
546 return e2err_RICSubscriptionFailureAllocRICrequestIDFail;
549 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
550 if (pRICsubscriptionFailure_IEs) {
551 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
552 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
553 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RANfunctionID;
554 pRICsubscriptionFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionFailure->ranFunctionID;
555 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
558 return e2err_RICSubscriptionFailureAllocRANfunctionIDFail;
560 // RICaction-NotAdmitted list
561 pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t));
562 if (pRICsubscriptionFailure_IEs) {
563 pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
564 pRICsubscriptionFailure_IEs->criticality = Criticality_reject;
565 pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List;
568 while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) {
570 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t));
571 if (pRICaction_NotAdmitted_ItemIEs)
573 pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
574 pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject;
575 pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
578 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID =
579 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID;
582 if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_radioNetwork) {
583 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_radioNetwork;
584 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork =
585 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
587 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_transport) {
588 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_transport;
589 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport =
590 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
592 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_protocol) {
593 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_protocol;
594 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol =
595 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
597 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_misc) {
598 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_misc;
599 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc =
600 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
602 else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content == RICcause_PR_ric) {
603 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present = RICcause_PR_ric;
604 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric =
605 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause;
607 ASN_SEQUENCE_ADD(&pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs);
610 return e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail;
613 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs);
616 return e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail;
618 // CriticalityDiagnostics, OPTIONAL. Not used in RIC
620 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
623 return e2err_RICSubscriptionFailureEncodeFail;
626 return e2err_RICSubscriptionFailureAllocE2AP_PDUFail;
629 //////////////////////////////////////////////////////////////////////
630 uint64_t packRICSubscriptionDeleteRequest(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
632 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
635 pE2AP_PDU->present = E2AP_PDU_PR_initiatingMessage;
636 pE2AP_PDU->choice.initiatingMessage.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
637 pE2AP_PDU->choice.initiatingMessage.criticality = Criticality_ignore;
638 pE2AP_PDU->choice.initiatingMessage.value.present = RICInitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
641 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
642 if (pRICsubscriptionDeleteRequest_IEs) {
643 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RICrequestID;
644 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
645 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
646 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID;
647 pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber;
648 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
651 return e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail;
654 pRICsubscriptionDeleteRequest_IEs = calloc(1, sizeof(RICsubscriptionDeleteRequest_IEs_t));
655 if (pRICsubscriptionDeleteRequest_IEs) {
656 pRICsubscriptionDeleteRequest_IEs->id = ProtocolIE_ID_id_RANfunctionID;
657 pRICsubscriptionDeleteRequest_IEs->criticality = Criticality_reject;
658 pRICsubscriptionDeleteRequest_IEs->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
659 pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteRequest->ranFunctionID;
660 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest.protocolIEs.list, pRICsubscriptionDeleteRequest_IEs);
663 return e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail;
665 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
668 return e2err_RICSubscriptionDeleteRequestEncodeFail;
671 return e2err_RICSubscriptionDeleteRequestAllocE2AP_PDUFail;
674 //////////////////////////////////////////////////////////////////////
675 uint64_t packRICSubscriptionDeleteResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
677 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
680 pE2AP_PDU->present = E2AP_PDU_PR_successfulOutcome;
681 pE2AP_PDU->choice.successfulOutcome.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
682 pE2AP_PDU->choice.successfulOutcome.criticality = Criticality_ignore;
683 pE2AP_PDU->choice.successfulOutcome.value.present = RICSuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse;
686 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
687 if (pRICsubscriptionDeleteResponse_IEs) {
688 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RICrequestID;
689 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
690 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID;
691 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID;
692 pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber;
693 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
696 return e2err_RICSubscriptionDeleteResponseAllocRICrequestIDFail;
699 pRICsubscriptionDeleteResponse_IEs = calloc(1, sizeof(RICsubscriptionDeleteResponse_IEs_t));
700 if (pRICsubscriptionDeleteResponse_IEs) {
701 pRICsubscriptionDeleteResponse_IEs->id = ProtocolIE_ID_id_RANfunctionID;
702 pRICsubscriptionDeleteResponse_IEs->criticality = Criticality_reject;
703 pRICsubscriptionDeleteResponse_IEs->value.present = RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID;
704 pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteResponse->ranFunctionID;
705 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse.protocolIEs.list, pRICsubscriptionDeleteResponse_IEs);
708 return e2err_RICSubscriptionDeleteResponseAllocRANfunctionIDFail;
710 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
713 return e2err_RICSubscriptionDeleteResponseEncodeFail;
716 return e2err_RICSubscriptionDeleteResponseAllocE2AP_PDUFail;
719 uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
721 E2AP_PDU_t* pE2AP_PDU = calloc(1, sizeof(E2AP_PDU_t));
724 pE2AP_PDU->present = E2AP_PDU_PR_unsuccessfulOutcome;
725 pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode = ProcedureCode_id_ricSubscriptionDelete;
726 pE2AP_PDU->choice.unsuccessfulOutcome.criticality = Criticality_ignore;
727 pE2AP_PDU->choice.unsuccessfulOutcome.value.present = RICUnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure;
730 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
731 if (pRICsubscriptionDeleteFailure_IEs) {
732 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICrequestID;
733 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
734 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID;
735 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID;
736 pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber = pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber;
737 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
740 return e2err_RICSubscriptionDeleteFailureAllocRICrequestIDFail;
743 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
744 if (pRICsubscriptionDeleteFailure_IEs) {
745 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RANfunctionID;
746 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
747 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID;
748 pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID = pRICSubscriptionDeleteFailure->ranFunctionID;
749 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
752 return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail;
755 pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t));
756 if (pRICsubscriptionDeleteFailure_IEs) {
757 pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_RICcause;
758 pRICsubscriptionDeleteFailure_IEs->criticality = Criticality_reject;
759 pRICsubscriptionDeleteFailure_IEs->value.present = RICsubscriptionDeleteFailure_IEs__value_PR_RICcause;
760 if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_radioNetwork) {
761 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_radioNetwork;
762 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.radioNetwork =
763 pRICSubscriptionDeleteFailure->ricCause.cause;
765 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_transport) {
766 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_transport;
767 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.transport =
768 pRICSubscriptionDeleteFailure->ricCause.cause;
770 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_protocol) {
771 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_protocol;
772 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.protocol =
773 pRICSubscriptionDeleteFailure->ricCause.cause;
775 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_misc) {
776 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_misc;
777 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.misc =
778 pRICSubscriptionDeleteFailure->ricCause.cause;
780 else if (pRICSubscriptionDeleteFailure->ricCause.content == RICcause_PR_ric) {
781 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present = RICcause_PR_ric;
782 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.ric =
783 pRICSubscriptionDeleteFailure->ricCause.cause;
785 ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure.protocolIEs.list, pRICsubscriptionDeleteFailure_IEs);
788 return e2err_RICSubscriptionDeleteFailureAllocRICcauseFail;
790 // CriticalityDiagnostics, OPTIONAL
792 if (E2encode(pE2AP_PDU, pDataBufferSize, pDataBuffer, pLogBuffer))
795 return e2err_RICSubscriptionDeleteFailureEncodeFail;
798 return e2err_RICSubscriptionDeleteFailureAllocE2AP_PDUFail;
801 //////////////////////////////////////////////////////////////////////
802 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuffer, char* pLogBuffer, E2MessageInfo_t* pMessageInfo) {
804 E2AP_PDU_t* pE2AP_PDU = 0;
806 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize);
811 sprintf(pLogBuffer,"Successfully decoded E2AP-PDU");
812 asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU);
815 if (pE2AP_PDU->present == E2AP_PDU_PR_initiatingMessage) {
816 if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_ricSubscription) {
817 if (pE2AP_PDU->choice.initiatingMessage.value.present == RICInitiatingMessage__value_PR_RICsubscriptionRequest) {
818 pMessageInfo->messageType = cE2InitiatingMessage;
819 pMessageInfo->messageId = cRICSubscriptionRequest;
820 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
823 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
827 else if (pE2AP_PDU->choice.initiatingMessage.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
828 if (pE2AP_PDU->choice.initiatingMessage.value.present == RICInitiatingMessage__value_PR_RICsubscriptionDeleteRequest) {
829 pMessageInfo->messageType = cE2InitiatingMessage;
830 pMessageInfo->messageId = cRICSubscriptionDeleteRequest;
831 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
834 sprintf(pLogBuffer,"Error. Not supported initiatingMessage MessageId = %u",pE2AP_PDU->choice.initiatingMessage.value.present);
839 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.initiatingMessage.procedureCode);
843 else if (pE2AP_PDU->present == E2AP_PDU_PR_successfulOutcome) {
844 if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_ricSubscription) {
845 if (pE2AP_PDU->choice.successfulOutcome.value.present == RICSuccessfulOutcome__value_PR_RICsubscriptionResponse) {
846 pMessageInfo->messageType = cE2SuccessfulOutcome;
847 pMessageInfo->messageId = cRICSubscriptionResponse;
848 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
851 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
855 else if (pE2AP_PDU->choice.successfulOutcome.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
856 if (pE2AP_PDU->choice.successfulOutcome.value.present == RICSuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse) {
857 pMessageInfo->messageType = cE2SuccessfulOutcome;
858 pMessageInfo->messageId = cRICsubscriptionDeleteResponse;
859 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
862 sprintf(pLogBuffer,"Error. Not supported successfulOutcome MessageId = %u",pE2AP_PDU->choice.successfulOutcome.value.present);
867 sprintf(pLogBuffer,"Error. Procedure not supported. ProcedureCode = %li",pE2AP_PDU->choice.successfulOutcome.procedureCode);
871 else if (pE2AP_PDU->present == E2AP_PDU_PR_unsuccessfulOutcome) {
872 if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_ricSubscription) {
873 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == RICUnsuccessfulOutcome__value_PR_RICsubscriptionFailure) {
874 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
875 pMessageInfo->messageId = cRICSubscriptionFailure;
876 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
879 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
883 else if (pE2AP_PDU->choice.unsuccessfulOutcome.procedureCode == ProcedureCode_id_ricSubscriptionDelete) {
884 if (pE2AP_PDU->choice.unsuccessfulOutcome.value.present == RICUnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure) {
885 pMessageInfo->messageType = cE2UnsuccessfulOutcome;
886 pMessageInfo->messageId = cRICsubscriptionDeleteFailure;
887 return (e2ap_pdu_ptr_t*)pE2AP_PDU;
890 sprintf(pLogBuffer,"Error. Not supported unsuccessfulOutcome MessageId = %u",pE2AP_PDU->choice.unsuccessfulOutcome.value.present);
896 sprintf(pLogBuffer,"Decode failed. Invalid message type %u",pE2AP_PDU->present);
897 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
900 sprintf(pLogBuffer,"Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
903 sprintf(pLogBuffer,"Decode failed. Buffer size %zu, %s, consumed %zu",dataBufferSize, asn_DEF_E2AP_PDU.name, rval.consumed);
910 //////////////////////////////////////////////////////////////////////
911 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) {
913 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
915 RICsubscriptionRequest_t *asnRicSubscriptionRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionRequest;
916 RICsubscriptionRequest_IEs_t* pRICsubscriptionRequest_IEs;
919 if (asnRicSubscriptionRequest->protocolIEs.list.count > 0 &&
920 asnRicSubscriptionRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
921 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[0];
922 pRICSubscriptionRequest->ricRequestID.ricRequestorID = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestorID;
923 pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
926 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
927 return e2err_RICsubscriptionRequestRICrequestIDMissing;
931 if (asnRicSubscriptionRequest->protocolIEs.list.count > 1 &&
932 asnRicSubscriptionRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
933 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[1];
934 pRICSubscriptionRequest->ranFunctionID = pRICsubscriptionRequest_IEs->value.choice.RANfunctionID;
937 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
938 return e2err_RICsubscriptionRequestRANfunctionIDMissing;
942 if (asnRicSubscriptionRequest->protocolIEs.list.count > 2 &&
943 asnRicSubscriptionRequest->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICsubscription) {
944 pRICsubscriptionRequest_IEs = asnRicSubscriptionRequest->protocolIEs.list.array[2];
946 // Unpack EventTriggerDefinition
947 RICeventTriggerDefinition_t* pRICeventTriggerDefinition =
948 (RICeventTriggerDefinition_t*)&pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricEventTriggerDefinition;
949 pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size;
950 memcpy(pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size); //octetstring
953 if ((returnCode = getRICEventTriggerDefinitionData(&pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition) != e2err_OK)) {
954 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
958 // RICactions-ToBeSetup-List
959 RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs;
961 while (index < pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list.count)
963 pRICaction_ToBeSetup_ItemIEs = (RICaction_ToBeSetup_ItemIEs_t*)pRICsubscriptionRequest_IEs->value.choice.RICsubscription.ricAction_ToBeSetup_List.list.array[index];
966 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID =
967 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionID;
970 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType =
971 pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionType;
973 // RICactionDefinition, OPTIONAL
974 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition)
976 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
980 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false;
982 // RICsubsequentAction, OPTIONAL
983 RICsubsequentAction_t* pRICsubsequentAction;
984 if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction)
986 pRICsubsequentAction = pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction;
987 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
988 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType =
989 pRICsubsequentAction->ricSubsequentActionType;
990 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait =
991 pRICsubsequentAction->ricTimeToWait;
994 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = false;
997 pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength = index;
1000 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1001 return e2err_RICsubscriptionRequestICsubscriptionMissing;
1004 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1008 //////////////////////////////////////////////////////////////////////
1009 uint64_t getRICEventTriggerDefinitionData(RICEventTriggerDefinition_t* pRICEventTriggerDefinition) {
1011 E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = 0;
1012 asn_dec_rval_t rval;
1013 rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, (void **)&pE2SM_gNB_X2_eventTriggerDefinition,
1014 pRICEventTriggerDefinition->octetString.data, pRICEventTriggerDefinition->octetString.contentLength);
1019 printf("Successfully decoded E2SM_gNB_X2_eventTriggerDefinition");
1020 asn_fprint(stdout, &asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1023 // InterfaceID, GlobalENB-ID or GlobalGNB-ID
1024 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == Interface_ID_PR_global_eNB_ID) {
1027 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = true;
1030 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength =
1031 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size;
1032 memcpy(pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal,
1033 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
1034 pRICEventTriggerDefinition->interfaceID.globalENBID.pLMNIdentity.contentLength);
1037 IdOctects_t eNBOctects;
1038 memset(eNBOctects.octets, 0, sizeof(eNBOctects));
1039 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_macro_eNB_ID) {
1040 // BIT STRING (SIZE (20)
1041 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cMacroENBIDP_20Bits;
1042 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf,
1043 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size);
1044 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1046 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_home_eNB_ID) {
1047 // BIT STRING (SIZE (28)
1048 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cHomeENBID_28Bits;
1049 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf,
1050 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size);
1051 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1053 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_short_Macro_eNB_ID) {
1054 // BIT STRING (SIZE(18)
1055 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = cShortMacroENBID_18Bits;
1056 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf,
1057 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size);
1058 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1060 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == ENB_ID_PR_long_Macro_eNB_ID) {
1061 // BIT STRING (SIZE(21)
1062 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits;
1063 memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf,
1064 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size);
1065 pRICEventTriggerDefinition->interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
1068 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1069 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1070 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1071 return e2err_RICEventTriggerDefinitionIEValueFail_5;
1074 else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == Interface_ID_PR_global_gNB_ID) {
1076 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = true;
1079 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength =
1080 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size;
1081 memcpy(pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal,
1082 pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf,
1083 pRICEventTriggerDefinition->interfaceID.globalGNBID.pLMNIdentity.contentLength);
1086 IdOctects_t gNBOctects;
1087 memset(gNBOctects.octets, 0, sizeof(gNBOctects));
1088 if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.present == GNB_ID_PR_gNB_ID) {
1089 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.bits = pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size;
1090 memcpy(gNBOctects.octets, pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf,
1091 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.bits);
1092 pRICEventTriggerDefinition->interfaceID.globalGNBID.nodeID.nodeID = gNBOctects.nodeID;
1095 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1096 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1097 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1098 return e2err_RICEventTriggerDefinitionIEValueFail_6;
1102 pRICEventTriggerDefinition->interfaceID.globalENBIDPresent = false;
1103 pRICEventTriggerDefinition->interfaceID.globalGNBIDPresent = false;
1104 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1105 return e2err_RICEventTriggerDefinitionIEValueFail_7;
1108 // InterfaceDirection
1109 pRICEventTriggerDefinition->interfaceDirection = pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection;
1111 // InterfaceMessageType
1112 pRICEventTriggerDefinition->interfaceMessageType.procedureCode = pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode;
1114 if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_initiating_message)
1115 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2InitiatingMessage;
1116 else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_successful_outcome)
1117 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2SuccessfulOutcome;
1118 else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == TypeOfMessage_unsuccessful_outcome)
1119 pRICEventTriggerDefinition->interfaceMessageType.typeOfMessage = cE2UnsuccessfulOutcome;
1121 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1122 return e2err_RICEventTriggerDefinitionIEValueFail_8;
1125 ASN_STRUCT_FREE(asn_DEF_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition);
1129 printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu",pRICEventTriggerDefinition->octetString.contentLength,
1130 asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed);
1132 return e2err_RICEventTriggerDefinitionDecodeWMOREFail;
1135 printf("Decode failed. Buffer size %zu, %s, consumed %zu",pRICEventTriggerDefinition->octetString.contentLength,
1136 asn_DEF_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed);
1138 return e2err_RICEventTriggerDefinitionDecodeFAIL;
1140 return e2err_RICEventTriggerDefinitionDecodeDefaultFail;
1144 //////////////////////////////////////////////////////////////////////
1145 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) {
1147 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1149 RICsubscriptionResponse_t *asnRicSubscriptionResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionResponse;
1150 RICsubscriptionResponse_IEs_t* pRICsubscriptionResponse_IEs;
1153 if (asnRicSubscriptionResponse->protocolIEs.list.count > 0 &&
1154 asnRicSubscriptionResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1155 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[0];
1156 pRICSubscriptionResponse->ricRequestID.ricRequestorID = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1157 pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1160 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1161 return e2err_RICsubscriptionResponseRICrequestIDMissing;
1165 if (asnRicSubscriptionResponse->protocolIEs.list.count > 1 &&
1166 asnRicSubscriptionResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1167 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[1];
1168 pRICSubscriptionResponse->ranFunctionID = pRICsubscriptionResponse_IEs->value.choice.RANfunctionID;
1171 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1172 return e2err_RICsubscriptionResponseRANfunctionIDMissing;
1175 // RICaction-Admitted-List
1176 if (asnRicSubscriptionResponse->protocolIEs.list.count > 2 &&
1177 asnRicSubscriptionResponse->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_Admitted) {
1178 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[2];
1179 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = 0;
1181 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.count)) {
1182 RICaction_Admitted_ItemIEs_t* pRICaction_Admitted_ItemIEs =
1183 (RICaction_Admitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_Admitted_List.list.array[index];
1186 pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] =
1187 pRICaction_Admitted_ItemIEs->value.choice.RICaction_Admitted_Item.ricActionID;
1190 pRICSubscriptionResponse->ricActionAdmittedList.contentLength = index;
1193 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1194 return e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing;
1197 // RICaction-NotAdmitted-List, OPTIONAL
1198 if (asnRicSubscriptionResponse->protocolIEs.list.count > 3 &&
1199 asnRicSubscriptionResponse->protocolIEs.list.array[3]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
1200 pRICsubscriptionResponse_IEs = asnRicSubscriptionResponse->protocolIEs.list.array[3];
1201 if (pRICsubscriptionResponse_IEs->value.present == RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List) {
1202 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = true;
1203 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
1205 while ((index < maxofRICactionID) && (index < pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
1206 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1207 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionResponse_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1210 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1211 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1214 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_radioNetwork) {
1215 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_radioNetwork;
1216 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1217 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork;
1219 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_transport) {
1220 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_transport;
1221 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1222 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport;
1224 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_protocol) {
1225 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_protocol;
1226 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1227 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol;
1229 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_misc) {
1230 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_misc;
1231 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1232 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc;
1234 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_ric) {
1235 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_ric;
1236 pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1237 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric;
1241 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = index;
1245 pRICSubscriptionResponse->ricActionNotAdmittedListPresent = false;
1246 pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = 0;
1249 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1253 //////////////////////////////////////////////////////////////////////
1254 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionFailure_t* pRICSubscriptionFailure) {
1256 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1258 RICsubscriptionFailure_t *asnRicSubscriptionFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure;
1259 RICsubscriptionFailure_IEs_t* pRICsubscriptionFailure_IEs;
1262 RICsubscriptionFailure_IEs_t* RICsubscriptionFailure_IEs_t;
1263 if (asnRicSubscriptionFailure->protocolIEs.list.count > 0 &&
1264 asnRicSubscriptionFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1265 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[0];
1266 pRICSubscriptionFailure->ricRequestID.ricRequestorID = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1267 pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1270 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1271 return e2err_RICsubscriptionFailureRICrequestIDMissing;
1275 if (asnRicSubscriptionFailure->protocolIEs.list.count > 1 &&
1276 asnRicSubscriptionFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1277 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[1];
1278 pRICSubscriptionFailure->ranFunctionID = pRICsubscriptionFailure_IEs->value.choice.RANfunctionID;
1281 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1282 return e2err_RICsubscriptionFailureRANfunctionIDMissing;
1285 // RICaction-NotAdmitted-List
1286 if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 &&
1287 asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) {
1288 pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2];
1290 while ((index < maxofRICactionID) && (index < pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) {
1291 RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs =
1292 (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index];
1295 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID =
1296 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID;
1299 if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_radioNetwork) {
1300 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_radioNetwork;
1301 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1302 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.radioNetwork;
1304 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_transport) {
1305 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_transport;
1306 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1307 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.transport;
1309 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_protocol) {
1310 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_protocol;
1311 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1312 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.protocol;
1314 else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_misc) {
1315 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_misc;
1316 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1317 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.misc;
1319 else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.present == RICcause_PR_ric) {
1320 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = RICcause_PR_ric;
1321 pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause =
1322 pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricCause.choice.ric;
1326 pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = index;
1328 // CriticalityDiagnostics. OPTIONAL
1332 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1333 return e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing;
1336 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1340 //////////////////////////////////////////////////////////////////////
1341 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
1343 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1345 RICsubscriptionDeleteRequest_t *asnRicSubscriptionDeleteRequest = &pE2AP_PDU->choice.initiatingMessage.value.choice.RICsubscriptionDeleteRequest;
1346 RICsubscriptionDeleteRequest_IEs_t* pRICsubscriptionDeleteRequest_IEs;
1349 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 0 &&
1350 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1351 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[0];
1352 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestorID;
1353 pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteRequest_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1356 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1357 return e2err_RICsubscriptionDeleteRequestRICrequestIDMissing;
1361 if (asnRicSubscriptionDeleteRequest->protocolIEs.list.count > 1 &&
1362 asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1363 pRICsubscriptionDeleteRequest_IEs = asnRicSubscriptionDeleteRequest->protocolIEs.list.array[1];
1364 pRICSubscriptionDeleteRequest->ranFunctionID = pRICsubscriptionDeleteRequest_IEs->value.choice.RANfunctionID;
1367 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1368 return e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing;
1371 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1375 //////////////////////////////////////////////////////////////////////
1376 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
1378 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1380 RICsubscriptionDeleteResponse_t *asnRicSubscriptionDeleteResponse = &pE2AP_PDU->choice.successfulOutcome.value.choice.RICsubscriptionDeleteResponse;
1381 RICsubscriptionDeleteResponse_IEs_t* pRICsubscriptionDeleteResponse_IEs;
1384 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 0 &&
1385 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1386 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[0];
1387 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestorID;
1388 pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteResponse_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1391 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1392 return e2err_RICsubscriptionDeleteResponseRICrequestIDMissing;
1396 if (asnRicSubscriptionDeleteResponse->protocolIEs.list.count > 1 &&
1397 asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1398 pRICsubscriptionDeleteResponse_IEs = asnRicSubscriptionDeleteResponse->protocolIEs.list.array[1];
1399 pRICSubscriptionDeleteResponse->ranFunctionID = pRICsubscriptionDeleteResponse_IEs->value.choice.RANfunctionID;
1402 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1403 return e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing;
1406 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1410 //////////////////////////////////////////////////////////////////////
1411 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
1413 E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer;
1415 RICsubscriptionDeleteFailure_t *asnRicSubscriptionDeleteFailure = &pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionDeleteFailure;
1416 RICsubscriptionDeleteFailure_IEs_t* pRICsubscriptionDeleteFailure_IEs;
1419 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 0 &&
1420 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0]->id == ProtocolIE_ID_id_RICrequestID) {
1421 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[0];
1422 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestorID;
1423 pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber = pRICsubscriptionDeleteFailure_IEs->value.choice.RICrequestID.ricRequestSequenceNumber;
1426 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1427 return e2err_RICsubscriptionDeleteFailureRICrequestIDMissing;
1431 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 1 &&
1432 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1]->id == ProtocolIE_ID_id_RANfunctionID) {
1433 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[1];
1434 pRICSubscriptionDeleteFailure->ranFunctionID = pRICsubscriptionDeleteFailure_IEs->value.choice.RANfunctionID;
1437 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1438 return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing;
1442 if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 &&
1443 asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICcause) {
1444 pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2];
1445 if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_radioNetwork) {
1446 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_radioNetwork;
1447 pRICSubscriptionDeleteFailure->ricCause.cause =
1448 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.radioNetwork;
1450 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_transport) {
1451 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_transport;
1452 pRICSubscriptionDeleteFailure->ricCause.cause =
1453 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.transport;
1455 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_protocol) {
1456 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_protocol;
1457 pRICSubscriptionDeleteFailure->ricCause.cause =
1458 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.protocol;
1460 else if(pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_misc) {
1461 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_misc;
1462 pRICSubscriptionDeleteFailure->ricCause.cause =
1463 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.misc;
1465 else if (pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.present == RICcause_PR_ric) {
1466 pRICSubscriptionDeleteFailure->ricCause.content = RICcause_PR_ric;
1467 pRICSubscriptionDeleteFailure->ricCause.cause =
1468 pRICsubscriptionDeleteFailure_IEs->value.choice.RICcause.choice.ric;
1472 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);
1473 return e2err_RICsubscriptionDeleteFailureRICcauseMissing;
1475 // CriticalityDiagnostics, OPTIONAL
1477 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU);