--- /dev/null
+/*
+==================================================================================
+ Copyright (c) 2019 AT&T Intellectual Property.
+ Copyright (c) 2019 Nokia
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================================
+*/
+
+#if DEBUG
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "E2AP_if.h"
+
+const size_t cDataBufferSize = 2048;
+
+typedef union {
+ uint32_t nodeID;
+ uint8_t octets[4];
+} IdOctects_t;
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionRequest() {
+ RICSubscriptionRequest_t ricSubscriptionRequest;
+ ricSubscriptionRequest.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionRequest.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionRequest.ranFunctionID = 33;
+
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.octetString.contentLength = 0;
+
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBIDPresent = true;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalGNBIDPresent = false;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength = 3;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0] = 1;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1] = 2;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2] = 3;
+
+// ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cMacroENBIDP_20Bits;
+// ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cHomeENBID_28Bits;
+// ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cShortMacroENBID_18Bits;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits;
+
+ IdOctects_t eNBOctects;
+ memset(eNBOctects.octets, 0, sizeof(eNBOctects));
+ eNBOctects.octets[0] = 11;
+ eNBOctects.octets[1] = 22;
+ eNBOctects.octets[2] = 31;
+ eNBOctects.octets[3] = 1;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
+ printf("eNBOctects.nodeID = %u\n\n",eNBOctects.nodeID);
+
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceDirection = InterfaceDirection__incoming;
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode = 35; // id-rRCTransfer
+ ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage = cE2InitiatingMessage;
+
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.contentLength = 1;
+ uint64_t index = 0;
+ while (index < ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.contentLength) {
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID = 255; //index;
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType = RICActionType_insert;
+
+ // ricActionDefinition, OPTIONAL. Not used in RIC
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false; //true;
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID = 255;
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID = 222;
+
+ // ricSubsequentActionPresent, OPTIONAL
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType = RICSubsequentActionType_Continue;
+ ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait = RICTimeToWait_w100ms;
+ index++;
+ }
+
+ printRICSubscriptionRequest(&ricSubscriptionRequest);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if (packRICSubscriptionRequest(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionRequest) == e2err_OK)
+ {
+ memset(&ricSubscriptionRequest,0, sizeof ricSubscriptionRequest);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2InitiatingMessage) {
+ if (messageInfo.messageId == cRICSubscriptionRequest) {
+ if ((returnCode = getRICSubscriptionRequestData(pE2AP_PDU, &ricSubscriptionRequest)) == e2err_OK) {
+ printRICSubscriptionRequest(&ricSubscriptionRequest);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionRequestData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionRequest\n");
+ }
+ else
+ printf("Not InitiatingMessage\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionResponse() {
+ // Test RICSubscribeResponse
+ RICSubscriptionResponse_t ricSubscriptionResponse;
+ ricSubscriptionResponse.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionResponse.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionResponse.ranFunctionID = 33;
+ ricSubscriptionResponse.ricActionAdmittedList.contentLength = 16;
+ uint64_t index = 0;
+ while (index < ricSubscriptionResponse.ricActionAdmittedList.contentLength) {
+ ricSubscriptionResponse.ricActionAdmittedList.ricActionID[index] = index;
+ index++;
+ }
+ ricSubscriptionResponse.ricActionNotAdmittedListPresent = true;
+ ricSubscriptionResponse.ricActionNotAdmittedList.contentLength = 16;
+ index = 0;
+ while (index < ricSubscriptionResponse.ricActionNotAdmittedList.contentLength) {
+ ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = index;
+ ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = cRICCauseRadioNetwork;
+ ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = index;
+ index++;
+ }
+
+ printRICSubscriptionResponse(&ricSubscriptionResponse);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if (packRICSubscriptionResponse(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionResponse) == e2err_OK)
+ {
+ memset(&ricSubscriptionResponse,0, sizeof ricSubscriptionResponse);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2SuccessfulOutcome) {
+ if (messageInfo.messageId == cRICSubscriptionResponse) {
+ if ((returnCode = getRICSubscriptionResponseData(pE2AP_PDU, &ricSubscriptionResponse)) == e2err_OK) {
+ printRICSubscriptionResponse(&ricSubscriptionResponse);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionResponseData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionResponse\n");
+ }
+ else
+ printf("Not SuccessfulOutcome\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionFailure() {
+ // Test RICSubscribeFailure
+ RICSubscriptionFailure_t ricSubscriptionFailure;
+ ricSubscriptionFailure.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionFailure.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionFailure.ranFunctionID = 33;
+ ricSubscriptionFailure.ricActionNotAdmittedList.contentLength = 16;
+ uint64_t index = 0;
+ while (index < ricSubscriptionFailure.ricActionNotAdmittedList.contentLength) {
+ ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = index;
+ ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = cRICCauseRadioNetwork;
+ ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = index;
+ index++;
+ }
+ // CriticalityDiagnostics, OPTIONAL. Not used in RIC
+ ricSubscriptionFailure.criticalityDiagnosticsPresent = false;
+ ricSubscriptionFailure.criticalityDiagnostics.procedureCodePresent = true;
+ ricSubscriptionFailure.criticalityDiagnostics.procedureCode = 1;
+ ricSubscriptionFailure.criticalityDiagnostics.triggeringMessagePresent = true;
+ ricSubscriptionFailure.criticalityDiagnostics.triggeringMessage = TriggeringMessage__initiating_message;
+ ricSubscriptionFailure.criticalityDiagnostics.procedureCriticalityPresent = true;
+ ricSubscriptionFailure.criticalityDiagnostics.procedureCriticality = Criticality__reject;
+
+ ricSubscriptionFailure.criticalityDiagnostics.iEsCriticalityDiagnosticsPresent = false;
+ ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIELength = 256;
+ uint16_t index2 = 0;
+ while (index2 < ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIELength) {
+ ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iECriticality = Criticality__reject;
+ ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iE_ID = index2;
+ ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].typeOfError = TypeOfError_missing;
+ index2++;
+ }
+
+ printRICSubscriptionFailure(&ricSubscriptionFailure);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if (packRICSubscriptionFailure(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionFailure) == e2err_OK)
+ {
+ memset(&ricSubscriptionFailure,0, sizeof ricSubscriptionFailure);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2UnsuccessfulOutcome) {
+ if (messageInfo.messageId == cRICSubscriptionFailure) {
+ if ((returnCode = getRICSubscriptionFailureData(pE2AP_PDU, &ricSubscriptionFailure)) == e2err_OK) {
+ printRICSubscriptionFailure(&ricSubscriptionFailure);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionFailureData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionFailure\n");
+ }
+ else
+ printf("Not UnuccessfulOutcome\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICIndication() {
+ // Test RICIndication
+ RICIndication_t ricIndication;
+
+ ricIndication.ricRequestID.ricRequestorID = 1;
+ ricIndication.ricRequestID.ricRequestSequenceNumber = 22;
+ ricIndication.ranFunctionID = 33;
+ ricIndication.ricActionID = 44;
+ ricIndication.ricIndicationSN = 55;
+ ricIndication.ricIndicationType = RICIndicationType_RICIndicationTypeReport;
+
+ ricIndication.ricIndicationHeader.interfaceID.globalGNBIDPresent = false;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBIDPresent = true;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.contentLength = 3;
+
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0] = 1;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1] = 2;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2] = 3;
+
+// ricIndication.ricIndicationHeader.interfaceID.globalENBID.nodeID.bits = cMacroENBIDP_20Bits;
+// ricIndication.ricIndicationHeader.interfaceID.globalENBID.nodeID.bits = cHomeENBID_28Bits;
+// ricIndication.ricIndicationHeader.interfaceID.globalENBID.nodeID.bits = cShortMacroENBID_18Bits;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits;
+
+ IdOctects_t eNBOctects;
+ memset(eNBOctects.octets, 0, sizeof(eNBOctects));
+ eNBOctects.octets[0] = 11;
+ eNBOctects.octets[1] = 22;
+ eNBOctects.octets[2] = 31;
+ eNBOctects.octets[3] = 1;
+ ricIndication.ricIndicationHeader.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
+ printf("eNBOctects.nodeID = %u",eNBOctects.nodeID);
+
+ ricIndication.ricIndicationHeader.interfaceDirection = InterfaceDirection__incoming;
+
+ char data[] = "Hello world";
+ ricIndication.ricIndicationMessage.interfaceMessage.contentLength = sizeof(data);
+ memcpy(ricIndication.ricIndicationMessage.interfaceMessage.data,data,sizeof(data));
+
+ printRICIndication(&ricIndication);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if (packRICIndication(&dataBufferSize, dataBuffer, logBuffer, &ricIndication) == e2err_OK)
+ {
+ memset(&ricIndication,0, sizeof ricIndication);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2InitiatingMessage) {
+ if (messageInfo.messageId == cRICIndication) {
+ // RICindication
+ if ((returnCode = getRICIndicationData(pE2AP_PDU, &ricIndication)) == e2err_OK) {
+ printRICIndication(&ricIndication);
+ return true;
+ }
+ else
+ printf("Error in getRICIndicationData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICIndication\n");
+ }
+ else
+ printf("Not InitiatingMessage\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionDeleteRequest() {
+
+ RICSubscriptionDeleteRequest_t ricSubscriptionDeleteRequest;
+ ricSubscriptionDeleteRequest.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionDeleteRequest.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionDeleteRequest.ranFunctionID = 33;
+
+ printRICSubscriptionDeleteRequest(&ricSubscriptionDeleteRequest);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[cDataBufferSize];
+ if ((packRICSubscriptionDeleteRequest(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteRequest)) == e2err_OK)
+ {
+ memset(&ricSubscriptionDeleteRequest,0, sizeof ricSubscriptionDeleteRequest);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2InitiatingMessage) {
+ if (messageInfo.messageId == cRICSubscriptionDeleteRequest) {
+ if ((returnCode = getRICSubscriptionDeleteRequestData(pE2AP_PDU, &ricSubscriptionDeleteRequest)) == e2err_OK) {
+ printRICSubscriptionDeleteRequest(&ricSubscriptionDeleteRequest);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionDeleteRequestData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionDeleteRequest\n");
+ }
+ else
+ printf("Not InitiatingMessage\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionDeleteResponse() {
+
+ RICSubscriptionDeleteResponse_t ricSubscriptionDeleteResponse;
+ ricSubscriptionDeleteResponse.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionDeleteResponse.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionDeleteResponse.ranFunctionID = 33;
+
+ printRICSubscriptionDeleteResponse(&ricSubscriptionDeleteResponse);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if ((packRICSubscriptionDeleteResponse(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteResponse)) == e2err_OK)
+ {
+ memset(&ricSubscriptionDeleteResponse,0, sizeof ricSubscriptionDeleteResponse);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2SuccessfulOutcome) {
+ if (messageInfo.messageId == cRICsubscriptionDeleteResponse) {
+ if ((returnCode = getRICSubscriptionDeleteResponseData(pE2AP_PDU, &ricSubscriptionDeleteResponse)) == e2err_OK) {
+ printRICSubscriptionDeleteResponse(&ricSubscriptionDeleteResponse);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionDeleteResponseData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionDeleteResponse\n");
+ }
+ else
+ printf("Not SuccessfulOutcome\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+bool TestRICSubscriptionDeleteFailure() {
+
+ RICSubscriptionDeleteFailure_t ricSubscriptionDeleteFailure;
+ ricSubscriptionDeleteFailure.ricRequestID.ricRequestorID = 1;
+ ricSubscriptionDeleteFailure.ricRequestID.ricRequestSequenceNumber = 22;
+ ricSubscriptionDeleteFailure.ranFunctionID = 33;
+ ricSubscriptionDeleteFailure.ricCause.content = cRICCauseRadioNetwork;
+ ricSubscriptionDeleteFailure.ricCause.cause = 3;
+
+ printRICSubscriptionDeleteFailure(&ricSubscriptionDeleteFailure);
+
+ uint64_t logBufferSize = 1024;
+ char logBuffer[logBufferSize];
+ uint64_t dataBufferSize = cDataBufferSize;
+ byte dataBuffer[dataBufferSize];
+ if ((packRICSubscriptionDeleteFailure(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteFailure)) == e2err_OK)
+ {
+ memset(&ricSubscriptionDeleteFailure,0, sizeof ricSubscriptionDeleteFailure);
+ uint64_t returnCode;
+ E2MessageInfo_t messageInfo;
+ e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
+ if (pE2AP_PDU != 0) {
+ if (messageInfo.messageType == cE2UnsuccessfulOutcome) {
+ if (messageInfo.messageId == cRICsubscriptionDeleteFailure) {
+ if ((returnCode = getRICSubscriptionDeleteFailureData(pE2AP_PDU, &ricSubscriptionDeleteFailure)) == e2err_OK) {
+ printRICSubscriptionDeleteFailure(&ricSubscriptionDeleteFailure);
+ return true;
+ }
+ else
+ printf("Error in getRICSubscriptionDeleteFailureData. ReturnCode = %s",getE2ErrorString(returnCode));
+ }
+ else
+ printf("Not RICSubscriptionDeleteFailure\n");
+ }
+ else
+ printf("Not UnuccessfulOutcome\n");
+ }
+ else
+ printf("%s",logBuffer);
+ }
+ else
+ printf("%s",logBuffer);
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+void printDataBuffer(const size_t byteCount, const uint8_t* pData) {
+
+ uint64_t index = 0;
+ while (index < byteCount) {
+ if (index % 50 == 0) {
+ printf("\n");
+ }
+ printf("%u ",pData[index]);
+ index++;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+void printRICSubscriptionRequest(const RICSubscriptionRequest_t* pRICSubscriptionRequest) {
+ printf("pRICSubscriptionRequest->ricRequestID.ricRequestorID = %u\n", pRICSubscriptionRequest->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber = %u\n", pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionRequest->ranFunctionID = %u\n",pRICSubscriptionRequest->ranFunctionID);
+
+ printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeIDbits = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.bits);
+ printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID);
+ printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceDirection = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceDirection);
+ printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode);
+ printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage);
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength = %u\n",
+ (unsigned)pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength);
+
+ uint64_t index = 0;
+ while (index < pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength) {
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID = %li\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID);
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType = %li\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType);
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = %i\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent);
+ if(pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent)
+ {
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID = %li\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID);
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID = %i\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID);
+ }
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = %i\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent);
+ if(pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent)
+ {
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType = %li\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType);
+ printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait = %li\n",
+ pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait);
+ }
+ printf("\n\n");
+ index++;
+ }
+ printf("\n\n");
+}
+
+//////////////////////////////////////////////////////////////////////
+void printRICSubscriptionResponse(const RICSubscriptionResponse_t* pRICSubscriptionResponse) {
+
+ printf("pRICSubscriptionResponse->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionResponse->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber = %u\n", pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionResponse->ranFunctionID = %u\n",pRICSubscriptionResponse->ranFunctionID);
+ printf("pRICSubscriptionResponse->ricActionAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionResponse->ricActionAdmittedList.contentLength);
+ uint64_t index = 0;
+ while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength) {
+ printf("pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] = %lu\n",pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index]);
+ index++;
+ }
+ printf("pRICSubscriptionResponse->ricActionNotAdmittedListPresent = %u\n",pRICSubscriptionResponse->ricActionNotAdmittedListPresent);
+ printf("pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength);
+ index = 0;
+ while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength) {
+ printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = %lu\n",
+ pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID);
+ printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = %u\n",
+ (unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content);
+ printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = %u\n",
+ (unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause);
+ index++;
+ }
+ printf("\n");
+}
+
+//////////////////////////////////////////////////////////////////////
+void printRICSubscriptionFailure(const RICSubscriptionFailure_t* pRICSubscriptionFailure) {
+
+ printf("pRICSubscriptionFailure->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionFailure->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionFailure->ranFunctionID = %i\n",pRICSubscriptionFailure->ranFunctionID);
+ printf("pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength);
+ uint64_t index = 0;
+ while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength) {
+ printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = %lu\n",
+ pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID);
+ printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = %u\n",
+ (unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content);
+ printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = %u\n",
+ (unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause);
+ index++;
+ }
+ if (pRICSubscriptionFailure->criticalityDiagnosticsPresent) {
+ printf("pRICSubscriptionFailure->criticalityDiagnosticsPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnosticsPresent);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCodePresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.procedureCodePresent);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCode = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.procedureCode);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessagePresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessagePresent);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessage = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessage);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticalityPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticalityPresent);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticality = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticality);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.iEsCriticalityDiagnosticsPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.iEsCriticalityDiagnosticsPresent);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength);
+ index = 0;
+ while (index < pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength) {
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iECriticality = %u\n",
+ (unsigned)pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iECriticality);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iE_ID = %u\n",
+ pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iE_ID);
+ printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].typeOfError = %u\n",
+ (unsigned)pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].typeOfError);
+ index++;
+ }
+ }
+ printf("\n");
+}
+
+//////////////////////////////////////////////////////////////////////
+void printRICIndication(const RICIndication_t* pRICIndication) {
+
+ printf("pRICIndication->ricRequestID.ricRequestorID = %u\n",pRICIndication->ricRequestID.ricRequestorID);
+ printf("pRICIndication->ricRequestID.ricRequestSequenceNumber = %u\n",pRICIndication->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICIndication->ranFunctionID = %u\n",pRICIndication->ranFunctionID);
+ printf("pRICIndication->ricActionID = %lu\n",pRICIndication->ricActionID);
+ printf("pRICIndication->ricIndicationSN = %u\n",pRICIndication->ricIndicationSN);
+ printf("pRICIndication->ricIndicationType = %u\n",(unsigned)pRICIndication->ricIndicationType);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBIDPresent = %u\n",pRICIndication->ricIndicationHeader.interfaceID.globalENBIDPresent);
+ if (pRICIndication->ricIndicationHeader.interfaceID.globalENBIDPresent) {
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.contentLength = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.contentLength);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.nodeID.bits = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.nodeID.bits);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalENBID.nodeID.nodeID = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalENBID.nodeID.nodeID);
+ }
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBIDPresent = %u\n",pRICIndication->ricIndicationHeader.interfaceID.globalGNBIDPresent);
+ if(pRICIndication->ricIndicationHeader.interfaceID.globalGNBIDPresent){
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.contentLength = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.contentLength);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[0] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[0]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[1] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[1]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[2] = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.pLMNIdentity.pLMNIdentityVal[2]);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.nodeID.bits = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.nodeID.bits);
+ printf("pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.nodeID.nodeID = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceID.globalGNBID.nodeID.nodeID);
+ }
+ printf("pRICIndication->ricIndicationHeader.interfaceDirection = %u\n",(unsigned)pRICIndication->ricIndicationHeader.interfaceDirection);
+ printf("pRICIndication->ricIndicationMessage.interfaceMessage.contentLength = %u\n",(unsigned)pRICIndication->ricIndicationMessage.interfaceMessage.contentLength);
+
+ printf("pRICIndication->ricIndicationMessage.interfaceMessage.data = ");
+ printDataBuffer(pRICIndication->ricIndicationMessage.interfaceMessage.contentLength,pRICIndication->ricIndicationMessage.interfaceMessage.data);
+ printf("\n");
+}
+
+void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
+
+ printf("\npRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionDeleteRequest->ranFunctionID = %i\n",pRICSubscriptionDeleteRequest->ranFunctionID);
+ printf("\n");
+}
+
+void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
+
+ printf("\npRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionDeleteResponse->ranFunctionID = %i\n",pRICSubscriptionDeleteResponse->ranFunctionID);
+ printf("\n");
+}
+
+void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
+
+ printf("\npRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID);
+ printf("pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber);
+ printf("pRICSubscriptionDeleteFailure->ranFunctionID = %i\n",pRICSubscriptionDeleteFailure->ranFunctionID);
+ printf("pRICSubscriptionDeleteFailure->ricCause.content = %i\n",pRICSubscriptionDeleteFailure->ricCause.content);
+ printf("pRICSubscriptionDeleteFailure->ricCause.cause = %i\n",pRICSubscriptionDeleteFailure->ricCause.cause);
+ printf("\n");
+}
+
+#endif