X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fasn1codec%2Fsrc%2Fconfiguration_update_wrapper.c;fp=E2Manager%2Fasn1codec%2Fsrc%2Fconfiguration_update_wrapper.c;h=cea1aa9b4499826a3823c83696a9ad77ed4f9e04;hb=07ef76dd471a0892a893c90e0ab06713aee34be1;hp=0000000000000000000000000000000000000000;hpb=59f84608ec15c016958a6e0e0ddd813f376c0925;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/asn1codec/src/configuration_update_wrapper.c b/E2Manager/asn1codec/src/configuration_update_wrapper.c new file mode 100644 index 0000000..cea1aa9 --- /dev/null +++ b/E2Manager/asn1codec/src/configuration_update_wrapper.c @@ -0,0 +1,235 @@ +/* + * + * Copyright 2019 AT&T Intellectual Property + * Copyright 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. + * + */ + +/******************************************************************************* + * + * Copyright (c) 2019 AT&T Intellectual Property. + * + * 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. + * + *******************************************************************************/ + +// Standard Includes: ANSI C/C++, MSA, and Third-Party Libraries + +// Platform Includes: Platform specific classes, functions, and libraries + +// Local Includes: Application specific classes, functions, and libraries + +#include +#include +#undef NDEBUG +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Build and pack ENB Configuration Update Acknowledge (successful outcome response). + * Abort the process on allocation failure. + * packed_buf_size - in: size of packed_buf; out: number of chars used. + */ +bool +build_pack_x2enb_configuration_update_ack( + size_t* packed_buf_size, + unsigned char* packed_buf, + size_t err_buf_size, + char* err_buf) +{ + bool rc = true; + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + SuccessfulOutcome_t *successfulOutcome = calloc(1, sizeof(SuccessfulOutcome_t)); + ENBConfigurationUpdateAcknowledge_t *enbConfigurationUpdateAcknowledge; + ENBConfigurationUpdateAcknowledge_IEs_t *enbConfigurationUpdateAcknowledge_IEs = calloc(1, sizeof(ENBConfigurationUpdateAcknowledge_IEs_t)); + + assert(pdu != 0); + assert(successfulOutcome != 0); + assert(enbConfigurationUpdateAcknowledge_IEs != 0); + + pdu->present = E2AP_PDU_PR_successfulOutcome; + pdu->choice.successfulOutcome = successfulOutcome; + + successfulOutcome->procedureCode = ProcedureCode_id_eNBConfigurationUpdate; + successfulOutcome->criticality = Criticality_reject; + successfulOutcome->value.present = SuccessfulOutcome__value_PR_ENBConfigurationUpdateAcknowledge; + enbConfigurationUpdateAcknowledge = &successfulOutcome->value.choice.ENBConfigurationUpdateAcknowledge; + + enbConfigurationUpdateAcknowledge_IEs->id = ProtocolIE_ID_id_CriticalityDiagnostics; + enbConfigurationUpdateAcknowledge_IEs->criticality = Criticality_ignore; + enbConfigurationUpdateAcknowledge_IEs->value.present = ENBConfigurationUpdateAcknowledge_IEs__value_PR_CriticalityDiagnostics; + + ASN_SEQUENCE_ADD(&enbConfigurationUpdateAcknowledge->protocolIEs, enbConfigurationUpdateAcknowledge_IEs); + + rc = per_pack_pdu(pdu, packed_buf_size, packed_buf,err_buf_size, err_buf); + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return rc; +} + +/* + * Build and pack ENB Configuration Update Failure (unsuccessful outcome message). + * Abort the process on allocation failure. + * packed_buf_size - in: size of packed_buf; out: number of chars used. + */ +bool +build_pack_x2enb_configuration_update_failure( + size_t* packed_buf_size, + unsigned char* packed_buf, + size_t err_buf_size, + char* err_buf) +{ + bool rc = true; + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + UnsuccessfulOutcome_t *unsuccessfulOutcome = calloc(1, sizeof(UnsuccessfulOutcome_t)); + ENBConfigurationUpdateFailure_t *enbConfigurationUpdateFailure; + ENBConfigurationUpdateFailure_IEs_t *enbConfigurationUpdateFailure_IEs = calloc(1, sizeof(ENBConfigurationUpdateFailure_IEs_t)); + + assert(pdu != 0); + assert(unsuccessfulOutcome != 0); + assert(enbConfigurationUpdateFailure_IEs != 0); + + + pdu->present = E2AP_PDU_PR_unsuccessfulOutcome; + pdu->choice.unsuccessfulOutcome = unsuccessfulOutcome; + + unsuccessfulOutcome->procedureCode = ProcedureCode_id_eNBConfigurationUpdate; + unsuccessfulOutcome->criticality = Criticality_reject; + unsuccessfulOutcome->value.present = UnsuccessfulOutcome__value_PR_ENBConfigurationUpdateFailure; + enbConfigurationUpdateFailure = &unsuccessfulOutcome->value.choice.ENBConfigurationUpdateFailure; + + enbConfigurationUpdateFailure_IEs->id = ProtocolIE_ID_id_Cause; + enbConfigurationUpdateFailure_IEs->criticality = Criticality_ignore; + enbConfigurationUpdateFailure_IEs->value.present = ENBConfigurationUpdateFailure_IEs__value_PR_Cause; + enbConfigurationUpdateFailure_IEs->value.choice.Cause.present = Cause_PR_protocol; + enbConfigurationUpdateFailure_IEs->value.choice.Cause.choice.protocol= CauseProtocol_abstract_syntax_error_reject; + ASN_SEQUENCE_ADD(&enbConfigurationUpdateFailure->protocolIEs, enbConfigurationUpdateFailure_IEs); + + + rc = per_pack_pdu(pdu, packed_buf_size, packed_buf,err_buf_size, err_buf); + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return rc; +} + +/* + * Build and pack ENDC Configuration Update Acknowledge (successful outcome response). + * Abort the process on allocation failure. + * packed_buf_size - in: size of packed_buf; out: number of chars used. + */ +bool +build_pack_endc_configuration_update_ack( + size_t* packed_buf_size, + unsigned char* packed_buf, + size_t err_buf_size, + char* err_buf) +{ + bool rc = true; + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + SuccessfulOutcome_t *successfulOutcome = calloc(1, sizeof(SuccessfulOutcome_t)); + ENDCConfigurationUpdateAcknowledge_t *endcConfigurationUpdateAcknowledge; + ENDCConfigurationUpdateAcknowledge_IEs_t *endcConfigurationUpdateAcknowledge_IEs = calloc(1, sizeof(ENDCConfigurationUpdateAcknowledge_IEs_t)); + + assert(pdu != 0); + assert(successfulOutcome != 0); + assert(endcConfigurationUpdateAcknowledge_IEs != 0); + + pdu->present = E2AP_PDU_PR_successfulOutcome; + pdu->choice.successfulOutcome = successfulOutcome; + + successfulOutcome->procedureCode = ProcedureCode_id_endcConfigurationUpdate; + successfulOutcome->criticality = Criticality_reject; + successfulOutcome->value.present = SuccessfulOutcome__value_PR_ENDCConfigurationUpdateAcknowledge; + endcConfigurationUpdateAcknowledge = &successfulOutcome->value.choice.ENDCConfigurationUpdateAcknowledge; + ASN_SEQUENCE_ADD(&endcConfigurationUpdateAcknowledge->protocolIEs, endcConfigurationUpdateAcknowledge_IEs); + + endcConfigurationUpdateAcknowledge_IEs->id = ProtocolIE_ID_id_RespondingNodeType_EndcConfigUpdate; + endcConfigurationUpdateAcknowledge_IEs->criticality = Criticality_reject; + endcConfigurationUpdateAcknowledge_IEs->value.present = ENDCConfigurationUpdateAcknowledge_IEs__value_PR_RespondingNodeType_EndcConfigUpdate; + endcConfigurationUpdateAcknowledge_IEs->value.choice.RespondingNodeType_EndcConfigUpdate.present = RespondingNodeType_EndcConfigUpdate_PR_respond_eNB; + + ProtocolIE_Container_119P95_t *enb_ENDCConfigUpdateAckIEs_Container = calloc(1, sizeof(ProtocolIE_Container_119P95_t)); + assert(enb_ENDCConfigUpdateAckIEs_Container != 0); + endcConfigurationUpdateAcknowledge_IEs->value.choice.RespondingNodeType_EndcConfigUpdate.choice.respond_eNB = (struct ProtocolIE_Container*)enb_ENDCConfigUpdateAckIEs_Container; + + //Leave the respond_eNB container empty (ENB_ENDCConfigUpdateAckIEs_t is an empty element). + + rc = per_pack_pdu(pdu, packed_buf_size, packed_buf,err_buf_size, err_buf); + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return rc; +} + +/* + * Build and pack ENDC Configuration Update Failure (unsuccessful outcome message). + * Abort the process on allocation failure. + * packed_buf_size - in: size of packed_buf; out: number of chars used. + */ +bool +build_pack_endc_configuration_update_failure( + size_t* packed_buf_size, + unsigned char* packed_buf, + size_t err_buf_size, + char* err_buf) +{ + bool rc = true; + E2AP_PDU_t *pdu = calloc(1, sizeof(E2AP_PDU_t)); + UnsuccessfulOutcome_t *unsuccessfulOutcome = calloc(1, sizeof(UnsuccessfulOutcome_t)); + ENDCConfigurationUpdateFailure_t *endcConfigurationUpdateFailure; + ENDCConfigurationUpdateFailure_IEs_t *endcConfigurationUpdateFailure_IEs = calloc(1, sizeof(ENDCConfigurationUpdateFailure_IEs_t)); + + assert(pdu != 0); + assert(unsuccessfulOutcome != 0); + assert(endcConfigurationUpdateFailure_IEs != 0); + + + pdu->present = E2AP_PDU_PR_unsuccessfulOutcome; + pdu->choice.unsuccessfulOutcome = unsuccessfulOutcome; + + unsuccessfulOutcome->procedureCode = ProcedureCode_id_endcConfigurationUpdate; + unsuccessfulOutcome->criticality = Criticality_reject; + unsuccessfulOutcome->value.present = UnsuccessfulOutcome__value_PR_ENDCConfigurationUpdateFailure; + endcConfigurationUpdateFailure = &unsuccessfulOutcome->value.choice.ENDCConfigurationUpdateFailure; + + endcConfigurationUpdateFailure_IEs->id = ProtocolIE_ID_id_Cause; + endcConfigurationUpdateFailure_IEs->criticality = Criticality_ignore; + endcConfigurationUpdateFailure_IEs->value.present = ENDCConfigurationUpdateFailure_IEs__value_PR_Cause; + endcConfigurationUpdateFailure_IEs->value.choice.Cause.present = Cause_PR_protocol; + endcConfigurationUpdateFailure_IEs->value.choice.Cause.choice.protocol= CauseProtocol_abstract_syntax_error_reject; + ASN_SEQUENCE_ADD(&endcConfigurationUpdateFailure->protocolIEs, endcConfigurationUpdateFailure_IEs); + + rc = per_pack_pdu(pdu, packed_buf_size, packed_buf,err_buf_size, err_buf); + + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return rc; +} +