From 289fdfe3814b70fc486c75e1daac105a0c304ccd Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Thu, 29 Aug 2024 23:52:00 +0200 Subject: [PATCH] Use F1AP Setup Failure enc/dec lib in stack --- openair2/F1AP/f1ap_cu_interface_management.c | 68 +++----------------- openair2/F1AP/f1ap_du_interface_management.c | 23 ++----- 2 files changed, 17 insertions(+), 74 deletions(-) diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index c3a9f39d7d..49f887ad49 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -126,70 +126,22 @@ int CU_send_F1_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_setup_resp_t *f1ap_set return 0; } +/** + * @brief F1 Setup Failure encoding and transmission + */ int CU_send_F1_SETUP_FAILURE(sctp_assoc_t assoc_id, const f1ap_setup_failure_t *fail) { LOG_D(F1AP, "CU_send_F1_SETUP_FAILURE\n"); - F1AP_F1AP_PDU_t pdu= {0}; - uint8_t *buffer=NULL; - uint32_t len=0; - /* Create */ - /* 0. Message Type */ - asn1cCalloc(pdu.choice.unsuccessfulOutcome, UnsuccessfulOutcome); - pdu.present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; - UnsuccessfulOutcome->procedureCode = F1AP_ProcedureCode_id_F1Setup; - UnsuccessfulOutcome->criticality = F1AP_Criticality_reject; - UnsuccessfulOutcome->value.present = F1AP_UnsuccessfulOutcome__value_PR_F1SetupFailure; - F1AP_F1SetupFailure_t *out = &pdu.choice.unsuccessfulOutcome->value.choice.F1SetupFailure; - /* mandatory */ - /* c1. Transaction ID (integer value)*/ - asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie1); - ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; - ie1->criticality = F1AP_Criticality_reject; - ie1->value.present = F1AP_F1SetupFailureIEs__value_PR_TransactionID; - ie1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(0, 0); - /* mandatory */ - /* c2. Cause */ - asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie2); - ie2->id = F1AP_ProtocolIE_ID_id_Cause; - ie2->criticality = F1AP_Criticality_ignore; - ie2->value.present = F1AP_F1SetupFailureIEs__value_PR_Cause; - ie2->value.choice.Cause.present = F1AP_Cause_PR_radioNetwork; - ie2->value.choice.Cause.choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified; - - /* optional */ - /* c3. TimeToWait */ - if (0) { - asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie3); - ie3->id = F1AP_ProtocolIE_ID_id_TimeToWait; - ie3->criticality = F1AP_Criticality_ignore; - ie3->value.present = F1AP_F1SetupFailureIEs__value_PR_TimeToWait; - ie3->value.choice.TimeToWait = F1AP_TimeToWait_v10s; - } - - /* optional */ - /* c4. CriticalityDiagnostics*/ - if (0) { - asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie4); - ie4->id = F1AP_ProtocolIE_ID_id_CriticalityDiagnostics; - ie4->criticality = F1AP_Criticality_ignore; - ie4->value.present = F1AP_F1SetupFailureIEs__value_PR_CriticalityDiagnostics; - asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.procedureCode, - F1AP_ProcedureCode_id_UEContextSetup); - asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.triggeringMessage, - F1AP_TriggeringMessage_initiating_message); - asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.procedureCriticality, - F1AP_Criticality_reject); - asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.transactionID, - 0); - } - - /* encode */ - if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { + uint8_t *buffer = NULL; + uint32_t len = 0; + /* Encode F1 Setup Failure */ + F1AP_F1AP_PDU_t *pdu = encode_f1ap_setup_failure(fail); + if (f1ap_encode_pdu(pdu, &buffer, &len) < 0) { LOG_E(F1AP, "Failed to encode F1 setup failure\n"); + ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu); return -1; } - - ASN_STRUCT_RESET(asn_DEF_F1AP_F1AP_PDU, &pdu); + ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu); f1ap_itti_send_sctp_data_req(assoc_id, buffer, len); return 0; } diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c index 5d1f44dbdc..62da719aa0 100644 --- a/openair2/F1AP/f1ap_du_interface_management.c +++ b/openair2/F1AP/f1ap_du_interface_management.c @@ -337,25 +337,16 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, sctp_assoc_t assoc_id, uint return 0; } -// SETUP FAILURE +/** + * @brief F1 Setup Failure handler (DU) + */ int DU_handle_F1_SETUP_FAILURE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu) { - F1AP_F1SetupFailure_t *out; - F1AP_F1SetupFailureIEs_t *ie; - f1ap_setup_failure_t fail = {0}; - out = &pdu->choice.unsuccessfulOutcome->value.choice.F1SetupFailure; - /* Transaction ID */ - F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, F1AP_ProtocolIE_ID_id_TransactionID, true); - /* Cause */ - F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, - F1AP_ProtocolIE_ID_id_Cause, true); - - if(0) { - /* TimeToWait */ - F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, - F1AP_ProtocolIE_ID_id_TimeToWait, true); + f1ap_setup_failure_t fail; + if (!decode_f1ap_setup_failure(pdu, &fail)) { + LOG_E(F1AP, "Failed to decode F1AP Setup Failure\n"); + return -1; } - f1_setup_failure(&fail); return 0; }