X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=e2ap%2Flibe2ap_wrapper%2FE2AP_if.c;h=4a2a018d451a5b25a319e857cdeae0039a6143d7;hb=refs%2Fheads%2Fe2ap-v02.00;hp=4b6dfd16aa163e4914cb50493d7767e1ed8fdf4d;hpb=7eb69048a3e3ddcf7fb8d3bf9567a66e806b3cd7;p=ric-plt%2Fsubmgr.git diff --git a/e2ap/libe2ap_wrapper/E2AP_if.c b/e2ap/libe2ap_wrapper/E2AP_if.c index 4b6dfd1..4a2a018 100644 --- a/e2ap/libe2ap_wrapper/E2AP_if.c +++ b/e2ap/libe2ap_wrapper/E2AP_if.c @@ -20,36 +20,14 @@ #include #include -#include "E2_asn_constant.h" #include "E2AP-PDU.h" #include "ProtocolIE-Field.h" #include "RICsubsequentAction.h" -#include "E2_E2SM-gNB-X2-eventTriggerDefinition.h" -#include "E2_E2SM-gNB-NRT-EventTriggerDefinition.h" -#include "E2_E2SM-gNB-X2-ActionDefinitionChoice.h" -#include "E2_E2SM-gNB-X2-actionDefinition.h" -#include "E2_ActionParameter-Item.h" -#include "E2_E2SM-gNB-X2-ActionDefinition-Format2.h" -#include "E2_RANueGroup-Item.h" -#include "E2_RANueGroupDef-Item.h" -#include "E2_RANimperativePolicy.h" -#include "E2_RANParameter-Item.h" - -// E2SM-gNB-NRT -#include "E2_E2SM-gNB-NRT-ActionDefinition.h" -#include "E2_E2SM-gNB-NRT-ActionDefinition-Format1.h" -#include "E2_RANparameter-Item.h" #include "asn_constant.h" -#include "E2_asn_constant.h" #include "E2AP_if.h" - -#ifdef DEBUG - static const bool debug = true; -#else - static const bool debug = true; //false; -#endif +static bool debugPrints = false; const int64_t cMaxNrOfErrors = 256; const uint64_t cMaxSizeOfOctetString = 1024; @@ -91,6 +69,11 @@ typedef union { uint8_t octets[4]; } IdOctects_t; +////////////////////////////////////////////////////////////////////// +void allowASN1DebugPrints(bool allowASN1DebugPrints) { + debugPrints = allowASN1DebugPrints; +} + ////////////////////////////////////////////////////////////////////// const char* getE2ErrorString(uint64_t errorCode) { @@ -100,8 +83,7 @@ const char* getE2ErrorString(uint64_t errorCode) { ///////////////////////////////////////////////////////////////////// bool E2encode(E2AP_PDU_t* pE2AP_PDU, size_t* dataBufferSize, byte* dataBuffer, char* pLogBuffer) { - // Debug print - if (debug) + if (debugPrints) asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU); asn_enc_rval_t rval; @@ -117,7 +99,7 @@ bool E2encode(E2AP_PDU_t* pE2AP_PDU, size_t* dataBufferSize, byte* dataBuffer, c return false; } else { - if (debug) + if (debugPrints) sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2AP_PDU.name, *dataBufferSize, rval.encoded); ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); @@ -170,10 +152,6 @@ uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, pRICsubscriptionRequest_IEs->value.present = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails; // RICeventTriggerDefinition - uint64_t returnCode; - if ((returnCode = packRICEventTriggerDefinition(pLogBuffer, &pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition) != e2err_OK)) - return returnCode; - pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf = calloc(1, pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength); if (pRICsubscriptionRequest_IEs->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition.buf) { @@ -205,10 +183,6 @@ uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, // RICactionDefinition, OPTIONAL if (pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent) { - uint64_t returnCode; - if ((returnCode = packRICActionDefinition(pLogBuffer, &pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice) != e2err_OK)) { - return returnCode; - } pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = calloc(1, sizeof (RICactionDefinition_t)); if (pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition) { pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf = @@ -259,676 +233,6 @@ uint64_t packRICSubscriptionRequest(size_t* pdataBufferSize, byte* pDataBuffer, return e2err_RICSubscriptionRequestAllocE2AP_PDUFail; } -////////////////////////////////////////////////////////////////////// -uint64_t packRICEventTriggerDefinition(char* pLogBuffer, RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - if (pRICEventTriggerDefinition->E2SMgNBX2EventTriggerDefinitionPresent) - return packRICEventTriggerDefinitionX2Format(pLogBuffer, pRICEventTriggerDefinition); - else if(pRICEventTriggerDefinition->E2SMgNBNRTEventTriggerDefinitionPresent) - return packRICEventTriggerDefinitionNRTFormat(pLogBuffer, pRICEventTriggerDefinition); - else - return e2err_RICEventTriggerDefinitionAllocEventTriggerDefinitionEmptyFail; -} - -////////////////////////////////////////////////////////////////////// -uint64_t packRICEventTriggerDefinitionX2Format(char* pLogBuffer, RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - E2_E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = calloc(1, sizeof(E2_E2SM_gNB_X2_eventTriggerDefinition_t)); - if(pE2SM_gNB_X2_eventTriggerDefinition == NULL) - return e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail; - - // RICeventTriggerDefinition - // InterfaceID - if ((pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent == true && - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent == true) || - (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent == false && - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent == false)) - return e2err_RICEventTriggerDefinitionIEValueFail_1; - - // GlobalENB-ID or GlobalGNB-ID - if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent) - { - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = E2_Interface_ID_PR_global_eNB_ID; - - // GlobalENB-ID - // PLMN-Identity - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size = - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf = calloc(1,3); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf) { - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail; - - // Add ENB-ID - if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits == cMacroENBIDP_20Bits){ - // BIT STRING, SIZE 20 - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_macro_eNB_ID; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf = calloc(1,3); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf) { - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size = 3; // bytes - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.bits_unused = 4; // trailing unused bits - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID,3); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail; - } - else if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits == cHomeENBID_28Bits) { - // BIT STRING, SIZE 28 - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_home_eNB_ID; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf = calloc(1,4); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf) { - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size = 4; // bytes - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.bits_unused = 4; // trailing unused bits - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID,4); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail; - } - else if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits == cShortMacroENBID_18Bits) { - // BIT STRING, SIZE 18 - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_short_Macro_eNB_ID; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf = calloc(1,3); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf) { - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size = 3; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.bits_unused = 6; // trailing unused bits - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID,3); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail; - } - else if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits == clongMacroENBIDP_21Bits) { - // BIT STRING, SIZE 21 - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present = ENB_ID_PR_long_Macro_eNB_ID; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf = calloc(1,3); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf) { - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size = 3; // bytes - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.bits_unused = 3; // trailing unused bits - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID,3); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail; - } - else - return e2err_RICEventTriggerDefinitionIEValueFail_2; - } - else if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent) { - // GlobalGNB-ID - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present = E2_Interface_ID_PR_global_gNB_ID; - - // PLMN-Identity - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.size = - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength; - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf = - calloc(1,pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf) { - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.pLMN_Identity.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength); - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail; - - // GNB-ID, BIT STRING, SIZE 22..32 - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size = 4; //32bits - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf = calloc(1, 4); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf) { - memcpy(pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf, - (void*)&pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID,4); //32bits - } - else - return e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail; - } - else - return e2err_RICEventTriggerDefinitionIEValueFail_3; - - // InterfaceDirection - pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection = pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceDirection; - - // InterfaceMessageType - // ProcedureCode - pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode = pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.procedureCode; - - // TypeOfMessage - if(pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage == cE2InitiatingMessage) - pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = E2_TypeOfMessage_initiating_message; - else if(pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage == cE2SuccessfulOutcome) - pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = E2_TypeOfMessage_successful_outcome; - else if(pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage == cE2UnsuccessfulOutcome) - pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage = E2_TypeOfMessage_unsuccessful_outcome; - else - return e2err_RICEventTriggerDefinitionIEValueFail_4; - - // InterfaceProtocolIE-List, OPTIONAL. Not used in RIC currently - if (pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceProtocolIEListPresent == true) {} - - // Debug print - if (debug) - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - - // Encode - size_t bufferSize = sizeof(pRICEventTriggerDefinition->octetString.data); - asn_enc_rval_t rval; - rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition, - pRICEventTriggerDefinition->octetString.data, bufferSize); - - if(rval.encoded == -1) { - sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition.name); - return e2err_RICEventTriggerDefinitionPackFail_1; - } - else if(rval.encoded > bufferSize) { - sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition.name, rval.encoded); - return e2err_RICEventTriggerDefinitionPackFail_2; - } - else - if (debug) - sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition.name, bufferSize, rval.encoded); - - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - - pRICEventTriggerDefinition->octetString.contentLength = rval.encoded; - return e2err_OK; -} - -////////////////////////////////////////////////////////////////////// -uint64_t packRICEventTriggerDefinitionNRTFormat(char* pLogBuffer, RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - E2_E2SM_gNB_NRT_EventTriggerDefinition_t* pE2_E2SM_gNB_NRT_EventTriggerDefinition = calloc(1, sizeof(E2_E2SM_gNB_NRT_EventTriggerDefinition_t)); - if(pE2_E2SM_gNB_NRT_EventTriggerDefinition == NULL) - return e2err_RICEventTriggerDefinitionAllocE2SM_gNB_NRT_eventTriggerDefinitionFail; - - pE2_E2SM_gNB_NRT_EventTriggerDefinition->present = E2_E2SM_gNB_NRT_EventTriggerDefinition_PR_eventDefinition_Format1; - pE2_E2SM_gNB_NRT_EventTriggerDefinition->choice.eventDefinition_Format1.triggerNature = - pRICEventTriggerDefinition->e2SMgNBNRTEventTriggerDefinition.eventDefinitionFormat1.triggerNature; - - // Debug print - if (debug) - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, pE2_E2SM_gNB_NRT_EventTriggerDefinition); - - // Encode - size_t bufferSize = sizeof(pRICEventTriggerDefinition->octetString.data); - asn_enc_rval_t rval; - rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, pE2_E2SM_gNB_NRT_EventTriggerDefinition, - pRICEventTriggerDefinition->octetString.data, bufferSize); - - if(rval.encoded == -1) { - sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition.name); - return e2err_RICENRTventTriggerDefinitionPackFail_1; - } - else if(rval.encoded > bufferSize) { - sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition.name, rval.encoded); - return e2err_RICNRTEventTriggerDefinitionPackFail_2; - } - else - if (debug) - sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition.name, bufferSize, rval.encoded); - - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, pE2_E2SM_gNB_NRT_EventTriggerDefinition); - - pRICEventTriggerDefinition->octetString.contentLength = rval.encoded; - return e2err_OK; -} - -////////////////////////////////////////////////////////////////////// -uint64_t packRICActionDefinition(char* pLogBuffer, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - if (pRICActionDefinitionChoice->actionDefinitionX2Format1Present || - pRICActionDefinitionChoice->actionDefinitionX2Format2Present) { - // E2SM-gNB-X2-actionDefinition - return packActionDefinitionX2Format(pLogBuffer,pRICActionDefinitionChoice); - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present) { - // E2SM-gNB-NRT-actionDefinition - return packActionDefinitionNRTFormat(pLogBuffer,pRICActionDefinitionChoice); - } - else - return e2err_RICSubscriptionRequestRICActionDefinitionEmpty; -} - -////////////////////////////////////////////////////////////////////// -uint64_t packActionDefinitionX2Format(char* pLogBuffer, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - int result; - - // E2SM-gNB-X2-actionDefinition - E2_E2SM_gNB_X2_ActionDefinitionChoice_t* pE2_E2SM_gNB_X2_ActionDefinitionChoice = calloc(1, sizeof(E2_E2SM_gNB_X2_ActionDefinitionChoice_t)); - if (pE2_E2SM_gNB_X2_ActionDefinitionChoice == NULL) { - return e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_X2_ActionDefinitionChoiceFail; - } - - if (pRICActionDefinitionChoice->actionDefinitionX2Format1Present) { - - // E2SM-gNB-X2-actionDefinition - pE2_E2SM_gNB_X2_ActionDefinitionChoice->present = E2_E2SM_gNB_X2_ActionDefinitionChoice_PR_actionDefinition_Format1; - pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.style_ID = pRICActionDefinitionChoice->actionDefinitionX2Format1->styleID; - - if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterCount > 0) { - struct E2_E2SM_gNB_X2_actionDefinition__actionParameter_List* pE2_E2SM_gNB_X2_actionDefinition__actionParameter_List = - calloc(1, sizeof (struct E2_E2SM_gNB_X2_actionDefinition__actionParameter_List)); - uint64_t index = 0; - while (index < pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterCount && index < E2_maxofRANParameters) { - E2_ActionParameter_Item_t* pE2_ActionParameter_Item = calloc(1, sizeof(E2_ActionParameter_Item_t)); - if (pE2_ActionParameter_Item) { - pE2_ActionParameter_Item->actionParameter_ID = pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].parameterID; - if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueIntPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valueInt; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueInt = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueInt; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueEnumPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valueEnum; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueEnum = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueIntPresent; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBoolPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valueBool; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBool = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBool; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitSPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valueBitS; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS.byteLength; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.bits_unused = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS.unusedBits; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS.byteLength, 1); - if (pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.buf) { - memcpy(pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS.byteLength); - } - else - return e2err_RICSubscriptionRequestAllocactionParameterValueValueBitSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctSPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valueOctS; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctS.length; - pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctS.length, 1); - if (pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.buf) { - memcpy(pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionParameterValueValueOctSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtSPresent) { - pE2_ActionParameter_Item->actionParameter_Value.present = E2_ActionParameter_Value_PR_valuePrtS; - pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtS.length; - pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtS.length ,1); - if (pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.buf) { - memcpy(pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionParameterValueValuePrtsSFail; - } - else - return e2err_RICSubscriptionRequestActionParameterItemFail; - - if ((result = asn_set_add(pE2_E2SM_gNB_X2_actionDefinition__actionParameter_List, pE2_ActionParameter_Item)) != 0) - return e2err_RICSubscriptionRequestAsn_set_addE2_ActionParameter_ItemFail; - } - else - return e2err_RICSubscriptionRequestAllocActionDefinitionFail; - index++; - } - pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.actionParameter_List = pE2_E2SM_gNB_X2_actionDefinition__actionParameter_List; - } - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2Present) { - - // E2SM-gNB-X2-ActionDefinition-Format2 - pE2_E2SM_gNB_X2_ActionDefinitionChoice->present = E2_E2SM_gNB_X2_ActionDefinitionChoice_PR_actionDefinition_Format2; - - if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupCount > 0) { - struct E2_E2SM_gNB_X2_ActionDefinition_Format2__ranUEgroup_List* pE2_E2SM_gNB_X2_ActionDefinition_Format2__ranUEgroup_List = - calloc(1, sizeof(struct E2_E2SM_gNB_X2_ActionDefinition_Format2__ranUEgroup_List)); - - uint64_t index = 0; - while (index < pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupCount && index < E2_maxofUEgroup) { - - E2_RANueGroup_Item_t* pE2_RANueGroup_Item = calloc(1, sizeof(E2_RANueGroup_Item_t)); - if (pE2_RANueGroup_Item) { - - struct E2_RANueGroupDefinition__ranUEgroupDef_List* pE2_RANueGroupDefinition__ranUEgroupDef_List = - calloc(1, sizeof (struct E2_RANueGroupDefinition__ranUEgroupDef_List)); - - pE2_RANueGroup_Item->ranUEgroupID = pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupID; - - uint64_t index2 = 0; - while (index2 < pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefCount && index2 < E2_maxofRANParameters) { - E2_RANueGroupDef_Item_t* pE2_RANueGroupDef_Item = calloc(1, sizeof(E2_RANueGroupDef_Item_t)); - if(pE2_RANueGroupDef_Item) { - pE2_RANueGroupDef_Item->ranParameter_ID = pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterID; - pE2_RANueGroupDef_Item->ranParameter_Test = pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterTest; - if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueIntPresent) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueInt; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueInt = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueInt; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueEnum) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueEnum; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueEnum = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueEnum; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBoolPresent) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBool; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBool = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBool; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitSPresent) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBitS; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS.byteLength; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.bits_unused = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS.unusedBits; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS.byteLength, 1); - if (pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.buf) { - memcpy(pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS.byteLength); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValueValueBitSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctSPresent) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueOctS; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctS.length; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctS.length, 1); - if (pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.buf) { - memcpy(pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValueValueOctSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtSPresent) { - pE2_RANueGroupDef_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valuePrtS; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtS.length; - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtS.length, 1); - if (pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.buf) { - memcpy(pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValueValuePrtsSFail; - } - else - return e2err_RICSubscriptionRequestRanranUeGroupDefItemParameterValueEmptyFail; - - if ((result = asn_set_add(pE2_RANueGroupDefinition__ranUEgroupDef_List, pE2_RANueGroupDef_Item)) != 0) - return e2err_RICSubscriptionRequestAsn_set_addRANueGroupDef_ItemFail; - pE2_RANueGroup_Item->ranUEgroupDefinition.ranUEgroupDef_List = pE2_RANueGroupDefinition__ranUEgroupDef_List; - } - else - return e2err_RICSubscriptionRequestAllocE2_RANueGroupDef_ItemFail; - index2++; - } - - struct E2_RANimperativePolicy__ranImperativePolicy_List* pE2_RANimperativePolicy__ranImperativePolicy_List = - calloc(1, sizeof (struct E2_RANimperativePolicy__ranImperativePolicy_List)); - - uint64_t index3 = 0; - while (index3 < pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterCount && index3 < E2_maxofRANParameters) { - E2_RANParameter_Item_t* pE2_RANParameter_Item = calloc(1, sizeof(E2_RANParameter_Item_t)); - if (pE2_RANParameter_Item) { - pE2_RANParameter_Item->ranParameter_ID = pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterID; - if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueIntPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueInt; - pE2_RANParameter_Item->ranParameter_Value.choice.valueInt = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueInt; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueEnum) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueEnum; - pE2_RANParameter_Item->ranParameter_Value.choice.valueEnum = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueEnum; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBoolPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBool; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBool = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBool; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBitS; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS.byteLength; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.bits_unused = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS.unusedBits; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS.byteLength, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS.byteLength); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueBitSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueOctS; - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctS.length; - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctS.length, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValueOctSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valuePrtS; - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.size = - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtS.length; - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtS.length, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtS.data, - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionRanParameterValue2ValuePrtsSFail; - } - else - return e2err_RICSubscriptionRequestRanParameterItemRanParameterValueEmptyFail; - - if ((result = asn_set_add(pE2_RANimperativePolicy__ranImperativePolicy_List, pE2_RANParameter_Item)) != 0) - return e2err_RICSubscriptionRequestAsn_set_addE2_RANParameter_ItemFail; - pE2_RANueGroup_Item->ranPolicy.ranImperativePolicy_List = pE2_RANimperativePolicy__ranImperativePolicy_List; - } - else - return e2err_RICSubscriptionRequestAllocActionDefinitionFail; - index3++; - } - - const int result = asn_set_add(pE2_E2SM_gNB_X2_ActionDefinition_Format2__ranUEgroup_List, pE2_RANueGroup_Item); - if (result != 0) - sprintf(pLogBuffer,"asn_set_add() failed"); - } - else - return e2err_RICSubscriptionRequestAllocRANParameter_ItemFail; - index++; - } - pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format2.ranUEgroup_List = pE2_E2SM_gNB_X2_ActionDefinition_Format2__ranUEgroup_List; - } - } - else { - return e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_X2_actionDefinition; - } - - // Debug print - if (debug) - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - - // Encode - size_t bufferSize = sizeof(pRICActionDefinitionChoice->octetString.data); - asn_enc_rval_t rval; - rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice, - pRICActionDefinitionChoice->octetString.data, bufferSize); - if(rval.encoded == -1) { - sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice.name); - return e2err_RICActionDefinitionChoicePackFail_1; - } - else if(rval.encoded > bufferSize) { - sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice.name, rval.encoded); - return e2err_RICActionDefinitionChoicePackFail_2; - } - else - if (debug) - sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice.name, bufferSize, rval.encoded); - - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - - pRICActionDefinitionChoice->octetString.contentLength = rval.encoded; - return e2err_OK; -} - -////////////////////////////////////////////////////////////////////// -uint64_t packActionDefinitionNRTFormat(char* pLogBuffer, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - // E2SM-gNB-NRT-actionDefinition - E2_E2SM_gNB_NRT_ActionDefinition_t* pE2_E2SM_gNB_NRT_ActionDefinition = calloc(1, sizeof(E2_E2SM_gNB_NRT_ActionDefinition_t)); - if (pE2_E2SM_gNB_NRT_ActionDefinition == NULL) - return e2err_RICSubscriptionRequestAllocE2_E2SM_gNB_NRT_ActionDefinitionFail; - - if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present) { - - // E2SM-gNB-NRT-ActionDefinition-Format1 - pE2_E2SM_gNB_NRT_ActionDefinition->present = E2_E2SM_gNB_NRT_ActionDefinition_PR_actionDefinition_Format1; - - struct E2_E2SM_gNB_NRT_ActionDefinition_Format1__ranParameter_List* pE2_E2SM_gNB_NRT_ActionDefinition_Format1__ranParameter_List = - calloc(1, sizeof(struct E2_E2SM_gNB_NRT_ActionDefinition_Format1__ranParameter_List)); - - uint64_t index = 0; - while (index < pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterCount && index < E2_maxofRANParameters) { - E2_RANParameter_Item_t* pE2_RANParameter_Item = calloc(1, sizeof(E2_RANParameter_Item_t)); - if (pE2_RANParameter_Item) { - pE2_RANParameter_Item->ranParameter_ID = pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterID; - if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueIntPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueInt; - pE2_RANParameter_Item->ranParameter_Value.choice.valueInt = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueInt; - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueEnum) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueEnum; - pE2_RANParameter_Item->ranParameter_Value.choice.valueEnum = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueEnum; - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBoolPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBool; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBool = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBool; - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueBitS; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.size = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS.byteLength; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.bits_unused = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS.unusedBits; - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS.byteLength, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS.data, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS.byteLength); - } - else - return e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueBitSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valueOctS; - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.size = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctS.length; - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctS.length, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctS.data, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValueOctSFail; - } - else if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtSPresent) { - pE2_RANParameter_Item->ranParameter_Value.present = E2_RANParameter_Value_PR_valuePrtS; - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.size = - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtS.length; - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf = - calloc(pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtS.length, 1); - if (pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf) { - memcpy(pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtS.data, - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtS.length); - } - else - return e2err_RICSubscriptionRequestAllocactionNRTRanParameterValue2ValuePrtsSFail; - } - else - return e2err_RICSubscriptionRequestRanParameterItemNRTRanParameterValueEmptyFail; - - int result; - if ((result = asn_set_add(pE2_E2SM_gNB_NRT_ActionDefinition_Format1__ranParameter_List, pE2_RANParameter_Item)) != 0) - return e2err_RICSubscriptionRequestAsn_set_addE2_NRTRANParameter_ItemFail; - pE2_E2SM_gNB_NRT_ActionDefinition->choice.actionDefinition_Format1.ranParameter_List = pE2_E2SM_gNB_NRT_ActionDefinition_Format1__ranParameter_List; - } - else - return e2err_RICSubscriptionRequestAllocNRTRANParameter_ItemFail; - index++; - } - } - else - return e2err_RICSubscriptionRequestRICActionDefinitionEmptyE2_E2SM_gNB_NRT_actionDefinition; - - // Debug print - if (debug) - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - - // Encode - size_t bufferSize = sizeof(pRICActionDefinitionChoice->octetString.data); - asn_enc_rval_t rval; - rval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition, - pRICActionDefinitionChoice->octetString.data, bufferSize); - if(rval.encoded == -1) { - sprintf(pLogBuffer,"Serialization of %s failed", asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition.name); - return e2err_RICActionDefinitionChoicePackFail_1; - } - else if(rval.encoded > bufferSize) { - sprintf(pLogBuffer,"Buffer of size %zu is too small for %s, need %zu",bufferSize, asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition.name, rval.encoded); - return e2err_RICActionDefinitionChoicePackFail_2; - } - else - if (debug) - sprintf(pLogBuffer,"Successfully encoded %s. Buffer size %zu, encoded size %zu",asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition.name, bufferSize, rval.encoded); - - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - - pRICActionDefinitionChoice->octetString.contentLength = rval.encoded; - return e2err_OK; -} ////////////////////////////////////////////////////////////////////// uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, char* pLogBuffer, RICSubscriptionResponse_t* pRICSubscriptionResponse) { @@ -1019,7 +323,7 @@ uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID = pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID; - // RICCause + // Cause if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) { pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest; pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest = @@ -1030,6 +334,11 @@ uint64_t packRICSubscriptionResponse(size_t* pDataBufferSize, byte* pDataBuffer, pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService = pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; } + else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_e2Node) { + pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_e2Node; + pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node = + pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; + } else if (pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) { pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport; pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport = @@ -1099,63 +408,46 @@ uint64_t packRICSubscriptionFailure(size_t* pDataBufferSize, byte* pDataBuffer, else return e2err_RICSubscriptionFailureAllocRANfunctionIDFail; - // RICaction-NotAdmitted list + // Cause pRICsubscriptionFailure_IEs = calloc(1, sizeof(RICsubscriptionFailure_IEs_t)); if (pRICsubscriptionFailure_IEs) { - pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_RICactions_NotAdmitted; + pRICsubscriptionFailure_IEs->id = ProtocolIE_ID_id_Cause; pRICsubscriptionFailure_IEs->criticality = Criticality_reject; - pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List; - - uint64_t index = 0; - while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength && index < maxofRICactionID) { - - RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = calloc(1, sizeof (RICaction_NotAdmitted_ItemIEs_t)); - if (pRICaction_NotAdmitted_ItemIEs) - { - pRICaction_NotAdmitted_ItemIEs->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item; - pRICaction_NotAdmitted_ItemIEs->criticality = Criticality_reject; - pRICaction_NotAdmitted_ItemIEs->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item; - - // RICActionID - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID; - - // RICCause - if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricRequest) { - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricRequest; - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; - } - else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_ricService) { - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_ricService; - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; - } - else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_transport) { - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_transport; - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; - } - else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_protocol) { - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_protocol; - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; - } - else if (pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content == Cause_PR_misc) { - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present = Cause_PR_misc; - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc = - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal; - } - ASN_SEQUENCE_ADD(&pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list, pRICaction_NotAdmitted_ItemIEs); - } - else - return e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail; - index++; + pRICsubscriptionFailure_IEs->value.present = RICsubscriptionFailure_IEs__value_PR_Cause; + if (pRICSubscriptionFailure->cause.content == Cause_PR_ricRequest) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricRequest; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest = + pRICSubscriptionFailure->cause.causeVal; + } + else if (pRICSubscriptionFailure->cause.content == Cause_PR_ricService) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_ricService; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService = + pRICSubscriptionFailure->cause.causeVal; + } + else if (pRICSubscriptionFailure->cause.content == Cause_PR_e2Node) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node = + pRICSubscriptionFailure->cause.causeVal; + } + else if (pRICSubscriptionFailure->cause.content == Cause_PR_transport) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_transport; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport = + pRICSubscriptionFailure->cause.causeVal; + } + else if (pRICSubscriptionFailure->cause.content == Cause_PR_protocol) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_protocol; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol = + pRICSubscriptionFailure->cause.causeVal; + } + else if (pRICSubscriptionFailure->cause.content == Cause_PR_misc) { + pRICsubscriptionFailure_IEs->value.choice.Cause.present = Cause_PR_misc; + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc = + pRICSubscriptionFailure->cause.causeVal; } ASN_SEQUENCE_ADD(&pE2AP_PDU->choice.unsuccessfulOutcome.value.choice.RICsubscriptionFailure.protocolIEs.list, pRICsubscriptionFailure_IEs); } else - return e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail; + return e2err_RICSubscriptionFailureAllocCauseFail; // CriticalityDiagnostics, OPTIONAL. Not used in RIC @@ -1293,7 +585,7 @@ uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBu else return e2err_RICSubscriptionDeleteFailureAllocRANfunctionIDFail; - // RICcause + // Cause pRICsubscriptionDeleteFailure_IEs = calloc(1, sizeof(RICsubscriptionDeleteFailure_IEs_t)); if (pRICsubscriptionDeleteFailure_IEs) { pRICsubscriptionDeleteFailure_IEs->id = ProtocolIE_ID_id_Cause; @@ -1309,6 +601,11 @@ uint64_t packRICSubscriptionDeleteFailure(size_t* pDataBufferSize, byte* pDataBu pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService = pRICSubscriptionDeleteFailure->cause.causeVal; } + else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_e2Node) { + pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_e2Node; + pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node = + pRICSubscriptionDeleteFailure->cause.causeVal; + } else if (pRICSubscriptionDeleteFailure->cause.content == Cause_PR_transport) { pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present = Cause_PR_transport; pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.transport = @@ -1348,8 +645,7 @@ e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuff rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **)&pE2AP_PDU, dataBuffer, dataBufferSize); switch (rval.code) { case RC_OK: - // Debug print - if (debug) { + if (debugPrints) { sprintf(pLogBuffer,"Successfully decoded E2AP-PDU"); asn_fprint(stdout, &asn_DEF_E2AP_PDU, pE2AP_PDU); } @@ -1450,7 +746,7 @@ e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t dataBufferSize, const byte* dataBuff } ////////////////////////////////////////////////////////////////////// -uint64_t getRICSubscriptionRequestData(mem_track_hdr_t * pDynMemHead, e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) { +uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionRequest_t* pRICSubscriptionRequest) { E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer; @@ -1491,23 +787,6 @@ uint64_t getRICSubscriptionRequestData(mem_track_hdr_t * pDynMemHead, e2ap_pdu_p pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.contentLength = pRICeventTriggerDefinition->size; memcpy(pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.octetString.data, pRICeventTriggerDefinition->buf, pRICeventTriggerDefinition->size); - // Workaroud to spec problem. E2AP spec does not specify what speck (gNB-X2 or gNB-NRT) should be used when decoded EventTriggerDefinition and ActionDefinition - // received received. Here we know that length of gNB-NRT EventTriggerDefinition octet string is always 1 at the moment. - if (pRICeventTriggerDefinition->size == 1) { - pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.E2SMgNBNRTEventTriggerDefinitionPresent = true; - pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.E2SMgNBX2EventTriggerDefinitionPresent = false; - } - else { - pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.E2SMgNBNRTEventTriggerDefinitionPresent = false; - pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition.E2SMgNBX2EventTriggerDefinitionPresent = true; - } - - uint64_t returnCode; - if ((returnCode = getRICEventTriggerDefinitionData(&pRICSubscriptionRequest->ricSubscriptionDetails.ricEventTriggerDefinition)) != e2err_OK) { - ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); - return returnCode; - } - // RICactions-ToBeSetup-List RICaction_ToBeSetup_ItemIEs_t* pRICaction_ToBeSetup_ItemIEs; uint64_t index = 0; @@ -1532,18 +811,7 @@ uint64_t getRICSubscriptionRequestData(mem_track_hdr_t * pDynMemHead, e2ap_pdu_p pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->buf, pRICaction_ToBeSetup_ItemIEs->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition->size); - // Workaroud to spec problem. E2AP spec does not specify what speck (gNB-X2 or gNB-NRT) should be used when decoded EventTriggerDefinition and ActionDefinition - // received received. Here we know that length of gNB-NRT EventTriggerDefinition octet string is always 1 at the moment. - if (pRICeventTriggerDefinition->size == 1) - pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionNRTFormat1Present = true; - else - pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice.actionDefinitionNRTFormat1Present = false; - pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = true; - if ((returnCode = getRICActionDefinitionData(pDynMemHead, &pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionChoice)) != e2err_OK) { - ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); - return returnCode; - } } else pRICSubscriptionRequest->ricSubscriptionDetails.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false; @@ -1574,534 +842,9 @@ uint64_t getRICSubscriptionRequestData(mem_track_hdr_t * pDynMemHead, e2ap_pdu_p return e2err_OK; } -////////////////////////////////////////////////////////////////////// -uint64_t getRICEventTriggerDefinitionData(RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - if (pRICEventTriggerDefinition->E2SMgNBX2EventTriggerDefinitionPresent) - return getRICEventTriggerDefinitionDataX2Format(pRICEventTriggerDefinition); - else if (pRICEventTriggerDefinition->E2SMgNBNRTEventTriggerDefinitionPresent) - return getRICEventTriggerDefinitionDataNRTFormat(pRICEventTriggerDefinition); - else - return e2err_RICEventTriggerDefinitionEmptyDecodeDefaultFail; -} ////////////////////////////////////////////////////////////////////// -uint64_t getRICEventTriggerDefinitionDataX2Format(RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - E2_E2SM_gNB_X2_eventTriggerDefinition_t* pE2SM_gNB_X2_eventTriggerDefinition = 0; - asn_dec_rval_t rval; - rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, (void **)&pE2SM_gNB_X2_eventTriggerDefinition, - pRICEventTriggerDefinition->octetString.data, pRICEventTriggerDefinition->octetString.contentLength); - switch(rval.code) { - case RC_OK: - // Debug print - if (debug) { - printf("Successfully decoded E2SM_gNB_X2_eventTriggerDefinition\n"); - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - } - - // InterfaceID, GlobalENB-ID or GlobalGNB-ID - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == E2_Interface_ID_PR_global_eNB_ID) { - - // GlobalENB-ID - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent = true; - - // PLMN-Identity - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength = - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size; - memcpy(pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength); - - // ENB-ID - IdOctects_t eNBOctects; - memset(eNBOctects.octets, 0, sizeof(eNBOctects)); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == E2_ENB_ID_PR_macro_eNB_ID) { - // BIT STRING, SIZE 20 - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = cMacroENBIDP_20Bits; - memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.buf, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.macro_eNB_ID.size); - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID; - } - else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == E2_ENB_ID_PR_home_eNB_ID) { - // BIT STRING, SIZE 28 - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = cHomeENBID_28Bits; - memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.buf, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.home_eNB_ID.size); - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID; - } - else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == E2_ENB_ID_PR_short_Macro_eNB_ID) { - // BIT STRING, SIZE 18 - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = cShortMacroENBID_18Bits; - memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.buf, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID.size); - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID; - } - else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.present == E2_ENB_ID_PR_long_Macro_eNB_ID) { - // BIT STRING, SIZE 21 - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits; - memcpy(eNBOctects.octets,pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.buf, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID.size); - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID; - } - else { - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent = false; - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent = false; - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - return e2err_RICEventTriggerDefinitionIEValueFail_5; - } - } - else if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.present == E2_Interface_ID_PR_global_gNB_ID) { - // GlobalGNB-ID - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent = true; - - // PLMN-Identity - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength = - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.size; - memcpy(pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal, - pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_eNB_ID.pLMN_Identity.buf, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.pLMNIdentity.contentLength); - - // GNB-ID - IdOctects_t gNBOctects; - memset(gNBOctects.octets, 0, sizeof(gNBOctects)); - if (pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.present == E2_GNB_ID_PR_gNB_ID) { - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.nodeID.bits = pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.size; - memcpy(gNBOctects.octets, pE2SM_gNB_X2_eventTriggerDefinition->interface_ID.choice.global_gNB_ID.gNB_ID.choice.gNB_ID.buf, - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.nodeID.bits); - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBID.nodeID.nodeID = gNBOctects.nodeID; - } - else { - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent = false; - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent = false; - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - return e2err_RICEventTriggerDefinitionIEValueFail_6; - } - } - else { - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalENBIDPresent = false; - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceID.globalGNBIDPresent = false; - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - return e2err_RICEventTriggerDefinitionIEValueFail_7; - } - - // InterfaceDirection - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceDirection = pE2SM_gNB_X2_eventTriggerDefinition->interfaceDirection; - - // InterfaceMessageType - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.procedureCode = pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.procedureCode; - - if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == E2_TypeOfMessage_initiating_message) - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage = cE2InitiatingMessage; - else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == E2_TypeOfMessage_successful_outcome) - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage = cE2SuccessfulOutcome; - else if (pE2SM_gNB_X2_eventTriggerDefinition->interfaceMessageType.typeOfMessage == E2_TypeOfMessage_unsuccessful_outcome) - pRICEventTriggerDefinition->e2SMgNBX2eventTriggerDefinition.interfaceMessageType.typeOfMessage = cE2UnsuccessfulOutcome; - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - return e2err_RICEventTriggerDefinitionIEValueFail_8; - } - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition, pE2SM_gNB_X2_eventTriggerDefinition); - return e2err_OK; - case RC_WMORE: - if (debug) - printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu\n",pRICEventTriggerDefinition->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed); - - return e2err_RICEventTriggerDefinitionDecodeWMOREFail; - case RC_FAIL: - if (debug) - printf("Decode failed. Buffer size %zu, %s, consumed %zu\n",pRICEventTriggerDefinition->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_X2_eventTriggerDefinition.name, rval.consumed); - return e2err_RICEventTriggerDefinitionDecodeFAIL; - default: - return e2err_RICEventTriggerDefinitionDecodeDefaultFail; - } -} - -////////////////////////////////////////////////////////////////////// -uint64_t getRICEventTriggerDefinitionDataNRTFormat(RICEventTriggerDefinition_t* pRICEventTriggerDefinition) { - - E2_E2SM_gNB_NRT_EventTriggerDefinition_t* pE2_E2SM_gNB_NRT_EventTriggerDefinition = 0; - asn_dec_rval_t rval; - rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, (void **)&pE2_E2SM_gNB_NRT_EventTriggerDefinition, - pRICEventTriggerDefinition->octetString.data, pRICEventTriggerDefinition->octetString.contentLength); - switch(rval.code) { - case RC_OK: - // Debug print - if (debug) { - printf("Successfully decoded E2SM_gNB_X2_eventTriggerDefinition\n"); - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, pE2_E2SM_gNB_NRT_EventTriggerDefinition); - } - - // NRT-TriggerNature - if (pE2_E2SM_gNB_NRT_EventTriggerDefinition->present == E2_E2SM_gNB_NRT_EventTriggerDefinition_PR_eventDefinition_Format1) { - pRICEventTriggerDefinition->E2SMgNBNRTEventTriggerDefinitionPresent = true; - pRICEventTriggerDefinition->e2SMgNBNRTEventTriggerDefinition.eventDefinitionFormat1.triggerNature = - pE2_E2SM_gNB_NRT_EventTriggerDefinition->choice.eventDefinition_Format1.triggerNature; - } - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition, pE2_E2SM_gNB_NRT_EventTriggerDefinition); - return e2err_OK; - case RC_WMORE: - if (debug) - printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu\n",pRICEventTriggerDefinition->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition.name, rval.consumed); - - return e2err_RICNRTEventTriggerDefinitionDecodeWMOREFail; - case RC_FAIL: - if (debug) - printf("Decode failed. Buffer size %zu, %s, consumed %zu\n",pRICEventTriggerDefinition->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_NRT_EventTriggerDefinition.name, rval.consumed); - return e2err_RICNRTEventTriggerDefinitionDecodeFAIL; - default: - return e2err_RICNRTEventTriggerDefinitionDecodeDefaultFail; - } -} - -////////////////////////////////////////////////////////////////////// -uint64_t getRICActionDefinitionData(mem_track_hdr_t *pDynMemHead, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - if (pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present) - return getRICActionDefinitionDataNRTFormat(pDynMemHead, pRICActionDefinitionChoice); -// if (pRICActionDefinitionChoice->actionDefinitionX2Format1Present || pRICActionDefinitionChoice->actionDefinitionX2Format2Present) - else - return getRICActionDefinitionDataX2Format(pDynMemHead, pRICActionDefinitionChoice); -// else -// return e2err_RICActionDefinitionChoiceEmptyFAIL; -} - -////////////////////////////////////////////////////////////////////// -uint64_t getRICActionDefinitionDataX2Format(mem_track_hdr_t* pDynMemHead, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - E2_E2SM_gNB_X2_ActionDefinitionChoice_t* pE2_E2SM_gNB_X2_ActionDefinitionChoice = 0; - asn_dec_rval_t rval; - rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, (void **)&pE2_E2SM_gNB_X2_ActionDefinitionChoice, - pRICActionDefinitionChoice->octetString.data, pRICActionDefinitionChoice->octetString.contentLength); - switch(rval.code) { - case RC_OK: - // Debug print - if (debug) { - printf("Successfully decoded E2SM_gNB_X2_ActionDefinitionChoice\n"); - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - } - // ActionDefinitionChoice - if (pE2_E2SM_gNB_X2_ActionDefinitionChoice->present == E2_E2SM_gNB_X2_ActionDefinitionChoice_PR_actionDefinition_Format1) { - - // E2SM-gNB-X2-actionDefinition - uint64_t status; - if ((status = allocActionDefinitionX2Format1(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format1)) != e2err_OK) - return status; - pRICActionDefinitionChoice->actionDefinitionX2Format1Present = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2Present = false; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present = false; - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterCount = 0; - pRICActionDefinitionChoice->actionDefinitionX2Format1->styleID = pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.style_ID; - - uint64_t index = 0; - if (pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.actionParameter_List) { - while (index < pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.actionParameter_List->list.count) { - E2_ActionParameter_Item_t* pE2_ActionParameter_Item = pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format1.actionParameter_List->list.array[index]; - if (pE2_ActionParameter_Item) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].parameterID = pE2_ActionParameter_Item->actionParameter_ID; - if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valueInt) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueIntPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueInt = - pE2_ActionParameter_Item->actionParameter_Value.choice.valueInt; - } - else if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valueEnum) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueEnumPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueIntPresent = - pE2_ActionParameter_Item->actionParameter_Value.choice.valueEnum; - } - else if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valueBool) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBoolPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBool = - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBool; - } - else if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valueBitS) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitSPresent = true; - addBitString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueBitS, - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.size, - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.buf, - pE2_ActionParameter_Item->actionParameter_Value.choice.valueBitS.bits_unused); - } - else if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valueOctS) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valueOctS, - pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.size, - pE2_ActionParameter_Item->actionParameter_Value.choice.valueOctS.buf); - } - else if (pE2_ActionParameter_Item->actionParameter_Value.present == E2_ActionParameter_Value_PR_valuePrtS) { - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterItem[index].actionParameterValue.valuePrtS, - pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.size, - pE2_ActionParameter_Item->actionParameter_Value.choice.valuePrtS.buf); - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestActionParameterItemFail; - } - } - index++; - } - } - pRICActionDefinitionChoice->actionDefinitionX2Format1->actionParameterCount = index; - } - else if (pE2_E2SM_gNB_X2_ActionDefinitionChoice->present == E2_E2SM_gNB_X2_ActionDefinitionChoice_PR_actionDefinition_Format2) { - - // E2SM-gNB-X2-ActionDefinition-Format2 - uint64_t status; - if ((status = allocActionDefinitionX2Format2(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2)) != e2err_OK) - return status; - - pRICActionDefinitionChoice->actionDefinitionX2Format2Present = true; - pRICActionDefinitionChoice->actionDefinitionX2Format1Present = false; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present = false; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupCount = 0; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem->ranUEgroupDefinition.ranUeGroupDefCount = 0; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem->ranPolicy.ranParameterCount = 0; - - E2_E2SM_gNB_X2_ActionDefinition_Format2_t* pE2SM_gNB_X2_actionDefinition = &pE2_E2SM_gNB_X2_ActionDefinitionChoice->choice.actionDefinition_Format2; - if(pE2SM_gNB_X2_actionDefinition) { - uint64_t index = 0; - if (pE2SM_gNB_X2_actionDefinition->ranUEgroup_List) { - while (index < pE2SM_gNB_X2_actionDefinition->ranUEgroup_List->list.count) { - E2_RANueGroup_Item_t* pE2_RANueGroup_Item = pE2SM_gNB_X2_actionDefinition->ranUEgroup_List->list.array[index]; - if (pE2_RANueGroup_Item) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupID = pE2_RANueGroup_Item->ranUEgroupID; - uint64_t index2 = 0; - while (index2 < pE2_RANueGroup_Item->ranUEgroupDefinition.ranUEgroupDef_List->list.count) { - E2_RANueGroupDef_Item_t* pE2_RANueGroupDef_Item = pE2_RANueGroup_Item->ranUEgroupDefinition.ranUEgroupDef_List->list.array[index2]; - if(pE2_RANueGroupDef_Item) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterID = pE2_RANueGroupDef_Item->ranParameter_ID; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterTest = pE2_RANueGroupDef_Item->ranParameter_Test; - if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueInt) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueIntPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueInt = - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueInt; - } - else if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueEnum) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueEnum = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueEnum = - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueEnum; - } - else if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueBool) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBoolPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBool = - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBool; - } - else if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueBitS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitSPresent = true; - addBitString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueBitS, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.size, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.buf, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueBitS.bits_unused); - } - else if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueOctS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valueOctS, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.size, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valueOctS.buf); - } - else if (pE2_RANueGroupDef_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valuePrtS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefItem[index2].ranParameterValue.valuePrtS, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.size, - pE2_RANueGroupDef_Item->ranParameter_Value.choice.valuePrtS.buf); - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestRanranUeGroupDefItemParameterValueEmptyFail; - } - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestAllocE2_RANueGroupDef_ItemFail; - } - index2++; - } - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranUEgroupDefinition.ranUeGroupDefCount = index2; - - uint64_t index3 = 0; - while (index3 < pE2_RANueGroup_Item->ranPolicy.ranImperativePolicy_List->list.count) { - E2_RANParameter_Item_t* pE2_RANParameter_Item = pE2_RANueGroup_Item->ranPolicy.ranImperativePolicy_List->list.array[index3]; - if (pE2_RANParameter_Item) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterID = pE2_RANParameter_Item->ranParameter_ID; - if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueInt) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueIntPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueInt = - pE2_RANParameter_Item->ranParameter_Value.choice.valueInt; - } - else if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueEnum) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueEnum = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueEnum = - pE2_RANParameter_Item->ranParameter_Value.choice.valueEnum; - } - else if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueBool) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBoolPresent = true; - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBool = - pE2_RANParameter_Item->ranParameter_Value.choice.valueBool; - } - else if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueBitS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitSPresent = true; - addBitString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueBitS, - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.size, - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.buf, - pE2_RANParameter_Item->ranParameter_Value.choice.valueBitS.bits_unused); - } - else if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valueOctS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valueOctS, - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.size, - pE2_RANParameter_Item->ranParameter_Value.choice.valueOctS.buf); - } - else if (pE2_RANParameter_Item->ranParameter_Value.present == E2_RANParameter_Value_PR_valuePrtS) { - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterItem[index3].ranParameterValue.valuePrtS, - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.size, - pE2_RANParameter_Item->ranParameter_Value.choice.valuePrtS.buf); - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestRanParameterItemRanParameterValueEmptyFail; - } - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestAllocActionDefinitionFail; - } - index3++; - } - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupItem[index].ranPolicy.ranParameterCount = index3; - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_RICSubscriptionRequestAllocRANParameter_ItemFail; - } - index++; - } - } - pRICActionDefinitionChoice->actionDefinitionX2Format2->ranUeGroupCount = index; - } - } - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice, pE2_E2SM_gNB_X2_ActionDefinitionChoice); - return e2err_OK; - case RC_WMORE: - if (debug) - printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu\n",pRICActionDefinitionChoice->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice.name, rval.consumed); - return e2err_RICActionDefinitionChoiceWMOREFail; - case RC_FAIL: - if (debug) - printf("Decode failed. Buffer size %zu, %s, consumed %zu\n",pRICActionDefinitionChoice->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_X2_ActionDefinitionChoice.name, rval.consumed); - - return e2err_RICActionDefinitionChoiceDecodeFAIL; - default: - return e2err_RICActionDefinitionChoiceDecodeDefaultFail; - } -} - -////////////////////////////////////////////////////////////////////// -uint64_t getRICActionDefinitionDataNRTFormat(mem_track_hdr_t* pDynMemHead, RICActionDefinitionChoice_t* pRICActionDefinitionChoice) { - - E2_E2SM_gNB_NRT_ActionDefinition_t* pE2_E2SM_gNB_NRT_ActionDefinition = 0; - asn_dec_rval_t rval; - rval = asn_decode(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, (void **)&pE2_E2SM_gNB_NRT_ActionDefinition, - pRICActionDefinitionChoice->octetString.data, pRICActionDefinitionChoice->octetString.contentLength); - switch(rval.code) { - case RC_OK: - // Debug print - if (debug) { - printf("Successfully decoded E2SM_gNB_NRT_ActionDefinition\n"); - asn_fprint(stdout, &asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - } - - // ActionDefinitionChoice - if (pE2_E2SM_gNB_NRT_ActionDefinition->present == E2_E2SM_gNB_NRT_ActionDefinition_PR_actionDefinition_Format1) { - - // E2SM-gNB-NRT-actionDefinition - uint64_t status; - if ((status = allocActionDefinitionNRTFormat1(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionNRTFormat1)) != e2err_OK) - return status; - - pRICActionDefinitionChoice->actionDefinitionNRTFormat1Present = true; - pRICActionDefinitionChoice->actionDefinitionX2Format1Present = false; - pRICActionDefinitionChoice->actionDefinitionX2Format2Present = false; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterCount = 0; - uint64_t index = 0; - while (index < pE2_E2SM_gNB_NRT_ActionDefinition->choice.actionDefinition_Format1.ranParameter_List->list.count) { - E2_RANparameter_Item_t* pE2_RANparameter_Item = pE2_E2SM_gNB_NRT_ActionDefinition->choice.actionDefinition_Format1.ranParameter_List->list.array[index]; - if (pE2_RANparameter_Item) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterID = pE2_RANparameter_Item->ranParameter_ID; - - if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valueInt) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueIntPresent = true; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueInt = - pE2_RANparameter_Item->ranParameter_Value.choice.valueInt; - } - else if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valueEnum) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueEnumPresent = true; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueEnum = - pE2_RANparameter_Item->ranParameter_Value.choice.valueEnum; - } - else if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valueBool) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBoolPresent = true; - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBool = - pE2_RANparameter_Item->ranParameter_Value.choice.valueBool; - } - else if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valueBitS) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitSPresent = true; - addBitString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueBitS, - pE2_RANparameter_Item->ranParameter_Value.choice.valueBitS.size, - pE2_RANparameter_Item->ranParameter_Value.choice.valueBitS.buf, - pE2_RANparameter_Item->ranParameter_Value.choice.valueBitS.bits_unused); - } - else if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valueOctS) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valueOctS, - pE2_RANparameter_Item->ranParameter_Value.choice.valueOctS.size, - pE2_RANparameter_Item->ranParameter_Value.choice.valueOctS.buf); - } - else if (pE2_RANparameter_Item->ranParameter_Value.present == E2_RANparameter_Value_PR_valuePrtS) { - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtSPresent = true; - addOctetString(pDynMemHead, &pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterList[index].ranParameterValue.valuePrtS, - pE2_RANparameter_Item->ranParameter_Value.choice.valuePrtS.size, - pE2_RANparameter_Item->ranParameter_Value.choice.valuePrtS.buf); - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - return e2err_RICSubscriptionRequestNRTRanParameterItemRanParameterValueEmptyFail; - } - } - else { - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - return e2err_RICSubscriptionRequestNRTAllocActionDefinitionFail; - } - index++; - } - pRICActionDefinitionChoice->actionDefinitionNRTFormat1->ranParameterCount = index; - } - ASN_STRUCT_FREE(asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition, pE2_E2SM_gNB_NRT_ActionDefinition); - return e2err_OK; - case RC_WMORE: - if (debug) - printf("Decode failed. More data needed. Buffer size %zu, %s, consumed %zu\n",pRICActionDefinitionChoice->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition.name, rval.consumed); - - return e2err_RICNRTActionDefinitionChoiceWMOREFail; - case RC_FAIL: - if (debug) - printf("Decode failed. Buffer size %zu, %s, consumed %zu\n",pRICActionDefinitionChoice->octetString.contentLength, - asn_DEF_E2_E2SM_gNB_NRT_ActionDefinition.name, rval.consumed); - - return e2err_RICNRTActionDefinitionChoiceDecodeFAIL; - default: - return e2err_RICNRTActionDefinitionChoiceDecodeDefaultFail; - } -} -////////////////////////////////////////////////////////////////////// uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSubscriptionResponse_t* pRICSubscriptionResponse) { E2AP_PDU_t* pE2AP_PDU = (E2AP_PDU_t*)pE2AP_PDU_pointer; @@ -2170,7 +913,7 @@ uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSu pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID; - // RICcause + // Cause if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) { pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest; pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = @@ -2181,6 +924,11 @@ uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSu pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService; } + else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_e2Node) { + pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_e2Node; + pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = + pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.e2Node; + } else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) { pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport; pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = @@ -2240,56 +988,46 @@ uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, RICSub return e2err_RICsubscriptionFailureRANfunctionIDMissing; } - // RICaction-NotAdmitted-List + // Cause if (asnRicSubscriptionFailure->protocolIEs.list.count > 2 && - asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_RICactions_NotAdmitted) { + asnRicSubscriptionFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) { pRICsubscriptionFailure_IEs = asnRicSubscriptionFailure->protocolIEs.list.array[2]; - uint64_t index = 0; - while ((index < maxofRICactionID) && (index < pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.count)) { - RICaction_NotAdmitted_ItemIEs_t* pRICaction_NotAdmitted_ItemIEs = - (RICaction_NotAdmitted_ItemIEs_t*)pRICsubscriptionFailure_IEs->value.choice.RICaction_NotAdmitted_List.list.array[index]; - - // RICActionID - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.ricActionID; - - // RICcause - if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricRequest) { - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricRequest; - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricRequest; - } - else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_ricService) { - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_ricService; - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.ricService; - } - else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_transport) { - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_transport; - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.transport; - } - else if (pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_protocol) { - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_protocol; - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.protocol; - } - else if(pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.present == Cause_PR_misc) { - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.content = Cause_PR_misc; - pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].cause.causeVal = - pRICaction_NotAdmitted_ItemIEs->value.choice.RICaction_NotAdmitted_Item.cause.choice.misc; - } - index++; + if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricRequest) { + pRICSubscriptionFailure->cause.content = Cause_PR_ricRequest; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricRequest; + } + else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_ricService) { + pRICSubscriptionFailure->cause.content = Cause_PR_ricService; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.ricService; + } + else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) { + pRICSubscriptionFailure->cause.content = Cause_PR_e2Node; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.e2Node; + } + else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_transport) { + pRICSubscriptionFailure->cause.content = Cause_PR_transport; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.transport; + } + else if (pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_protocol) { + pRICSubscriptionFailure->cause.content = Cause_PR_protocol; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.protocol; + } + else if(pRICsubscriptionFailure_IEs->value.choice.Cause.present == Cause_PR_misc) { + pRICSubscriptionFailure->cause.content = Cause_PR_misc; + pRICSubscriptionFailure->cause.causeVal = + pRICsubscriptionFailure_IEs->value.choice.Cause.choice.misc; } - pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = index; - - // CriticalityDiagnostics. OPTIONAL - } else { ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); - return e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing; + return e2err_RICsubscriptionFailureCauseMissing; } + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); return e2err_OK; } @@ -2393,7 +1131,7 @@ uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, return e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing; } - // RICcause + // Cause if (asnRicSubscriptionDeleteFailure->protocolIEs.list.count > 2 && asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]->id == ProtocolIE_ID_id_Cause) { pRICsubscriptionDeleteFailure_IEs = asnRicSubscriptionDeleteFailure->protocolIEs.list.array[2]; @@ -2407,6 +1145,11 @@ uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, pRICSubscriptionDeleteFailure->cause.causeVal = pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.ricService; } + else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_e2Node) { + pRICSubscriptionDeleteFailure->cause.content = Cause_PR_e2Node; + pRICSubscriptionDeleteFailure->cause.causeVal = + pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.choice.e2Node; + } else if (pRICsubscriptionDeleteFailure_IEs->value.choice.Cause.present == Cause_PR_transport) { pRICSubscriptionDeleteFailure->cause.content = Cause_PR_transport; pRICSubscriptionDeleteFailure->cause.causeVal = @@ -2432,92 +1175,3 @@ uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t* pE2AP_PDU_pointer, ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pE2AP_PDU); return e2err_OK; } - -////////////////////////////////////////////////////////////////////// -uint64_t allocActionDefinitionX2Format1(mem_track_hdr_t* pDynMemHead, E2SMgNBX2actionDefinition_t** pActionDefinition) { - *pActionDefinition = mem_track_alloc(pDynMemHead, sizeof(E2SMgNBX2actionDefinition_t)); - if(*pActionDefinition) - return e2err_OK; - else - return e2err_RICSubscriptionRequestAllocactionDefinitionX2Format1Fail; -} - -////////////////////////////////////////////////////////////////////// -uint64_t allocActionDefinitionX2Format2(mem_track_hdr_t* pDynMemHead, E2SMgNBX2ActionDefinitionFormat2_t** pActionDefinition) { - *pActionDefinition = mem_track_alloc(pDynMemHead, sizeof(E2SMgNBX2ActionDefinitionFormat2_t)); - if(*pActionDefinition) - return e2err_OK; - else - return e2err_RICSubscriptionRequestAllocactionDefinitionX2Format2Fail; -} - -////////////////////////////////////////////////////////////////////// -uint64_t allocActionDefinitionNRTFormat1(mem_track_hdr_t* pDynMemHead, E2SMgNBNRTActionDefinitionFormat1_t** pActionDefinition) { - *pActionDefinition = mem_track_alloc(pDynMemHead, sizeof(E2SMgNBNRTActionDefinitionFormat1_t)); - if(*pActionDefinition) - return e2err_OK; - else - return e2err_RICSubscriptionRequestAllocactionDefinitionNRTFormat1Fail; -} - -////////////////////////////////////////////////////////////////////// -bool addOctetString(mem_track_hdr_t* pDynMemHead, DynOctetString_t* pOctetString, uint64_t bufferSize, void* pData) -{ - pOctetString->data = mem_track_alloc(pDynMemHead, bufferSize); - if (pOctetString->data) { - pOctetString->length = bufferSize; - memcpy(pOctetString->data,pData,bufferSize); - return true; - } - else - return false; -} - -////////////////////////////////////////////////////////////////////// -bool addBitString(mem_track_hdr_t* pDynMemHead, DynBitString_t* pBitString, uint64_t bufferSize, void* pData, uint8_t unusedBits) -{ - pBitString->data = mem_track_alloc(pDynMemHead, bufferSize); - if (pBitString->data) { - pBitString->byteLength = bufferSize; - pBitString->unusedBits = unusedBits; // Unused trailing bits in the last octet (0..7) - memcpy(pBitString->data,pData,bufferSize); - return true; - } - else - return false; -} - -////////////////////////////////////////////////////////////////////// -void mem_track_init(mem_track_hdr_t *curr) -{ - *curr=(mem_track_hdr_t)MEM_TRACK_HDR_INIT; -} - -////////////////////////////////////////////////////////////////////// -void* mem_track_alloc(mem_track_hdr_t *curr, size_t sz) -{ - mem_track_t *newentry = (mem_track_t *)malloc(sizeof(mem_track_t)+sz); - newentry->next=0; - newentry->sz=sz; - memset(newentry->ptr,0,newentry->sz); - - if (!curr->next) { - curr->next = newentry; - } else { - mem_track_t *iter=curr->next; - for(;iter->next;iter=iter->next); - iter->next = newentry; - } - return newentry->ptr; -} - -////////////////////////////////////////////////////////////////////// -void mem_track_free(mem_track_hdr_t *curr) -{ - mem_track_t *itecurr,*itenext; - for(itecurr=curr->next; itecurr; itecurr=itenext){ - itenext = itecurr->next; - free(itecurr); - } - mem_track_init(curr); -}