From d425f08b16b82db6ee4b0467ff9a1c910c8d53d4 Mon Sep 17 00:00:00 2001 From: Giulio Carota Date: Fri, 24 Nov 2023 12:24:31 +0100 Subject: [PATCH] Add transaction ID for Setup Req&Resp and use it CU's TransactionID in F1SetupResponse didn't match Setup Request for some DUs, so implement this correctly and answer with correct transaction ID. --- openair2/COMMON/f1ap_messages_types.h | 4 ++++ openair2/F1AP/f1ap_cu_interface_management.c | 8 +++++++- openair2/RRC/NR/rrc_gNB_du.c | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index cb4c65e9e2..e91df060a3 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -146,6 +146,8 @@ typedef struct f1ap_gnb_du_system_info_t { } f1ap_gnb_du_system_info_t; typedef struct f1ap_setup_req_s { + /// ulong transaction id + uint64_t transaction_id; // F1_Setup_Req payload uint64_t gNB_DU_id; @@ -179,6 +181,8 @@ typedef struct served_cells_to_activate_s { } served_cells_to_activate_t; typedef struct f1ap_setup_resp_s { + /// ulong transaction id + uint64_t transaction_id; /// string holding gNB_CU_name char *gNB_CU_name; /// number of DU cells to activate diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index fad6b100ac..a6abaf9a54 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -89,6 +89,12 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance, sctp_assoc_t assoc_id, uint3 MessageDef *message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ); message_p->ittiMsgHeader.originInstance = assoc_id; f1ap_setup_req_t *req = &F1AP_SETUP_REQ(message_p); + + /* Transaction ID*/ + F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupRequestIEs_t, ie, container, F1AP_ProtocolIE_ID_id_TransactionID, true); + req->transaction_id = ie->value.choice.TransactionID; + LOG_D(F1AP, "req->transaction_id %lu \n", req->transaction_id); + /* gNB_DU_id */ // this function exits if the ie is mandatory F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupRequestIEs_t, ie, container, @@ -224,7 +230,7 @@ int CU_send_F1_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_setup_resp_t *f1ap_set ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; ie1->criticality = F1AP_Criticality_reject; ie1->value.present = F1AP_F1SetupResponseIEs__value_PR_TransactionID; - ie1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(0, 0); + ie1->value.choice.TransactionID = f1ap_setup_resp->transaction_id; /* optional */ /* c2. GNB_CU_Name */ diff --git a/openair2/RRC/NR/rrc_gNB_du.c b/openair2/RRC/NR/rrc_gNB_du.c index 122ae46202..14a146154b 100644 --- a/openair2/RRC/NR/rrc_gNB_du.c +++ b/openair2/RRC/NR/rrc_gNB_du.c @@ -168,7 +168,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id) .nrpci = cell_info->nr_pci, .num_SI = 0, }; - f1ap_setup_resp_t resp = {.num_cells_to_activate = 1, .cells_to_activate[0] = cell}; + f1ap_setup_resp_t resp = {.transaction_id = req->transaction_id, .num_cells_to_activate = 1, .cells_to_activate[0] = cell}; if (rrc->node_name != NULL) resp.gNB_CU_name = strdup(rrc->node_name); rrc->mac_rrc.f1_setup_response(assoc_id, &resp);