From 4c9ed9d7ecfc5ed55f427df28b824b0c50e85af5 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 10 Feb 2025 15:46:57 +0100 Subject: [PATCH] Use (CU-initiated) F1 Reset in stack --- openair2/F1AP/f1ap_cu_interface_management.c | 22 ++++++++++++++++++++ openair2/F1AP/f1ap_cu_interface_management.h | 1 + openair2/F1AP/f1ap_cu_task.c | 6 ++++++ openair2/RRC/NR/mac_rrc_dl_direct.c | 4 ++-- openair2/RRC/NR/mac_rrc_dl_f1ap.c | 7 +++++-- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index b81d81c6ba..8a6fd6311d 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -47,6 +47,28 @@ int CU_send_RESET_ACKNOWLEDGE(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack AssertFatal(1 == 0, "Not implemented yet\n"); } +void CU_send_RESET(sctp_assoc_t assoc_id, const f1ap_reset_t *reset) +{ + uint8_t *buffer = NULL; + uint32_t len = 0; + + /* Encode F1 Reset */ + F1AP_F1AP_PDU_t *pdu = encode_f1ap_reset(reset); + if (pdu == NULL) { + LOG_E(F1AP, "failed to create asn.1 message for f1ap reset\n"); + return; + } + + /* encode ASN.1 PER */ + int encoded = f1ap_encode_pdu(pdu, &buffer, &len); + ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu); + if (encoded <= 0) { + LOG_E(F1AP, "Failed to encode F1 reset\n"); + return; + } + f1ap_itti_send_sctp_data_req(assoc_id, buffer, len); +} + /** * @brief F1AP Setup Request decoding (9.2.1.4 of 3GPP TS 38.473) and transfer to RRC */ diff --git a/openair2/F1AP/f1ap_cu_interface_management.h b/openair2/F1AP/f1ap_cu_interface_management.h index 9d0bf4a391..fb39f1ca53 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.h +++ b/openair2/F1AP/f1ap_cu_interface_management.h @@ -36,6 +36,7 @@ /* * Reset */ +void CU_send_RESET(sctp_assoc_t assoc_id, const f1ap_reset_t *reset); int CU_handle_RESET_ACKNOWLEDGE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu); int CU_send_RESET_ACKNOWLEDGE(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack); diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c index fa77f818ea..deb272776f 100644 --- a/openair2/F1AP/f1ap_cu_task.c +++ b/openair2/F1AP/f1ap_cu_task.c @@ -35,6 +35,7 @@ #include "f1ap_cu_rrc_message_transfer.h" #include "f1ap_cu_ue_context_management.h" #include "lib/f1ap_rrc_message_transfer.h" +#include "lib/f1ap_interface_management.h" #include "f1ap_cu_paging.h" #include "f1ap_cu_task.h" #include @@ -151,6 +152,11 @@ void *F1AP_CU_task(void *arg) { &received_msg->ittiMsg.sctp_data_ind); break; + case F1AP_RESET: + CU_send_RESET(assoc_id, &F1AP_RESET(received_msg)); + free_f1ap_reset(&F1AP_RESET(received_msg)); + break; + case F1AP_RESET_ACK: CU_send_RESET_ACKNOWLEDGE(assoc_id, &F1AP_RESET_ACK(received_msg)); break; diff --git a/openair2/RRC/NR/mac_rrc_dl_direct.c b/openair2/RRC/NR/mac_rrc_dl_direct.c index 77113f6c8b..4f8d45ac8c 100644 --- a/openair2/RRC/NR/mac_rrc_dl_direct.c +++ b/openair2/RRC/NR/mac_rrc_dl_direct.c @@ -30,8 +30,8 @@ static void f1_reset_cu_initiated_direct(sctp_assoc_t assoc_id, const f1ap_reset_t *reset) { - (void)reset; - AssertFatal(false, "%s() not implemented yet\n", __func__); + AssertFatal(assoc_id == -1, "illegal assoc_id %d\n", assoc_id); + f1_reset_cu_initiated(reset); } static void f1_reset_acknowledge_du_initiated_direct(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack) diff --git a/openair2/RRC/NR/mac_rrc_dl_f1ap.c b/openair2/RRC/NR/mac_rrc_dl_f1ap.c index 8593ff816a..8a84a7f85d 100644 --- a/openair2/RRC/NR/mac_rrc_dl_f1ap.c +++ b/openair2/RRC/NR/mac_rrc_dl_f1ap.c @@ -35,8 +35,11 @@ static void f1_reset_cu_initiated_f1ap(sctp_assoc_t assoc_id, const f1ap_reset_t *reset) { - (void)reset; - AssertFatal(false, "%s() not implemented yet\n", __func__); + MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, F1AP_RESET); + msg->ittiMsgHeader.originInstance = assoc_id; + f1ap_reset_t *f1ap_msg = &F1AP_RESET(msg); + *f1ap_msg = cp_f1ap_reset(reset); + itti_send_msg_to_task(TASK_CU_F1, 0, msg); } static void f1_reset_acknowledge_du_initiated_f1ap(sctp_assoc_t assoc_id, const f1ap_reset_ack_t *ack)