From e6e25275edb6cd86666406458c17b44a32f7c15d Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 29 Mar 2024 15:08:44 +0100 Subject: [PATCH] Bugfix: make preamble_list an array - It is only a couple of bytes - It hid a bug: if two preambles, L1_nr_prach_procedures() overwrote the preamble of the first with the second one --- executables/nr-ue.c | 4 ---- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 3 --- nfapi/oai_integration/nfapi_vnf.c | 5 ----- .../nfapi/public_inc/nfapi_nr_interface_scf.h | 2 +- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 13 +++++-------- openair1/PHY/defs_gNB.h | 3 --- openair1/SCHED_NR/nr_prach_procedures.c | 1 - openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 6 ++---- openair2/NR_PHY_INTERFACE/NR_IF_Module.c | 4 ---- 9 files changed, 8 insertions(+), 33 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 37b61db343..221e97e475 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -213,10 +213,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) .rach_ind = *rach_ind, }; send_nsa_standalone_msg(&UL_INFO, rach_ind->header.message_id); - for (int i = 0; i < rach_ind->number_of_pdus; i++) - { - free_and_zero(rach_ind->pdu_list[i].preamble_list); - } free_and_zero(rach_ind->pdu_list); free_and_zero(rach_ind); } diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 3e54b75375..f2046aa456 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -397,9 +397,6 @@ int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) rach_ind->pdu_list[i].avg_rssi = ind->pdu_list[i].avg_rssi; rach_ind->pdu_list[i].avg_snr = ind->pdu_list[i].avg_snr; rach_ind->pdu_list[i].num_preamble = ind->pdu_list[i].num_preamble; - rach_ind->pdu_list[i].preamble_list = CALLOC(ind->pdu_list[i].num_preamble, sizeof(nfapi_nr_prach_indication_preamble_t)); - AssertFatal(rach_ind->pdu_list[i].preamble_list != NULL, - "Memory not allocated for rach_ind->pdu_list[i].preamble_list in phy_nr_rach_indication."); for (int j = 0; j < ind->pdu_list[i].num_preamble; j++) { rach_ind->pdu_list[i].preamble_list[j].preamble_index = ind->pdu_list[i].preamble_list[j].preamble_index; rach_ind->pdu_list[i].preamble_list[j].timing_advance = ind->pdu_list[i].preamble_list[j].timing_advance; diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index 93666157d3..b3e34ee1b7 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -731,7 +731,6 @@ int phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) rach_ind->pdu_list[i].num_preamble = ind->pdu_list[i].num_preamble; rach_ind->pdu_list[i].freq_index = ind->pdu_list[i].freq_index; rach_ind->pdu_list[i].symbol_index = ind->pdu_list[i].symbol_index; - rach_ind->pdu_list[i].preamble_list = CALLOC(ind->pdu_list[i].num_preamble, sizeof(nfapi_nr_prach_indication_preamble_t)); AssertFatal(rach_ind->pdu_list[i].preamble_list != NULL, "Memory not allocated for rach_ind->pdu_list[i].preamble_list in phy_nr_rach_indication."); for (int j = 0; j < ind->number_of_pdus; j++) { @@ -742,10 +741,6 @@ int phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) if (!put_queue(&gnb_rach_ind_queue, rach_ind)) { LOG_E(NR_MAC, "Put_queue failed for rach_ind\n"); - for (int i = 0; i < ind->number_of_pdus; i++) - { - free(rach_ind->pdu_list[i].preamble_list); - } free(rach_ind->pdu_list); free(rach_ind); } diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h index f3f0775ccc..d3452a4212 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h @@ -1759,7 +1759,7 @@ typedef struct{ uint8_t avg_rssi; uint8_t avg_snr; uint8_t num_preamble; - nfapi_nr_prach_indication_preamble_t* preamble_list; + nfapi_nr_prach_indication_preamble_t preamble_list[64]; }nfapi_nr_prach_indication_pdu_t; diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index e11e2a1d16..7cbf2c41fd 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -6302,14 +6302,11 @@ static uint8_t unpack_nr_rach_indication_body(nfapi_nr_prach_indication_pdu_t *v return 0; } - if (value->num_preamble > 0) { - value->preamble_list = nfapi_p7_allocate(sizeof(*value->preamble_list) * value->num_preamble, config); - for (int i = 0; i < value->num_preamble; i++) { - nfapi_nr_prach_indication_preamble_t *preamble = &(value->preamble_list[i]); - if (!(pull8(ppReadPackedMsg, &preamble->preamble_index, end) && pull16(ppReadPackedMsg, &preamble->timing_advance, end) - && pull32(ppReadPackedMsg, &preamble->preamble_pwr, end))) { - return 0; - } + for (int i = 0; i < value->num_preamble; i++) { + nfapi_nr_prach_indication_preamble_t *preamble = &(value->preamble_list[i]); + if (!(pull8(ppReadPackedMsg, &preamble->preamble_index, end) && pull16(ppReadPackedMsg, &preamble->timing_advance, end) + && pull32(ppReadPackedMsg, &preamble->preamble_pwr, end))) { + return 0; } } return 1; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index c4ef28bc0b..abc0ac2a2a 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -531,7 +531,6 @@ typedef struct { #define MAX_NUM_NR_RX_RACH_PDUS 4 -#define MAX_NUM_NR_RX_PRACH_PREAMBLES 4 #define MAX_UL_PDUS_PER_SLOT 8 #define MAX_NUM_NR_SRS_PDUS 8 // the current RRC resource allocation is that each UE gets its @@ -573,8 +572,6 @@ typedef struct PHY_VARS_gNB_s { nfapi_nr_uci_t uci_pdu_list[MAX_NUM_NR_UCI_PDUS]; /// NFAPI PRACH information nfapi_nr_prach_indication_pdu_t prach_pdu_indication_list[MAX_NUM_NR_RX_RACH_PDUS]; - /// NFAPI PRACH information - nfapi_nr_prach_indication_preamble_t preamble_list[MAX_NUM_NR_RX_PRACH_PREAMBLES]; nfapi_nr_ul_tti_request_t UL_tti_req; nfapi_nr_uci_indication_t uci_indication; diff --git a/openair1/SCHED_NR/nr_prach_procedures.c b/openair1/SCHED_NR/nr_prach_procedures.c index f1d09f0b18..dd77115817 100644 --- a/openair1/SCHED_NR/nr_prach_procedures.c +++ b/openair1/SCHED_NR/nr_prach_procedures.c @@ -185,7 +185,6 @@ void L1_nr_prach_procedures(PHY_VARS_gNB *gNB,int frame,int slot) { ind->avg_snr = 0xff; // invalid for now ind->num_preamble = 1; - ind->preamble_list = gNB->preamble_list; ind->preamble_list[0].preamble_index = max_preamble[0]; ind->preamble_list[0].timing_advance = max_preamble_delay[0]; ind->preamble_list[0].preamble_pwr = 0xffffffff; diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index cd8835d57e..fe36aa3425 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -125,16 +125,14 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rach_ind->pdu_list[pdu_index].freq_index = prach_pdu->num_ra; rach_ind->pdu_list[pdu_index].avg_rssi = 128; rach_ind->pdu_list[pdu_index].avg_snr = 0xff; // invalid for now - rach_ind->pdu_list[pdu_index].num_preamble = 1; const int num_p = rach_ind->pdu_list[pdu_index].num_preamble; - rach_ind->pdu_list[pdu_index].preamble_list = calloc(num_p, sizeof(nfapi_nr_prach_indication_preamble_t)); + AssertFatal(num_p == 1, "can handle only one preamble in preamble_list\n"); + rach_ind->pdu_list[pdu_index].num_preamble = 1; rach_ind->pdu_list[pdu_index].preamble_list[0].preamble_index = prach_pdu->ra_PreambleIndex; rach_ind->pdu_list[pdu_index].preamble_list[0].timing_advance = 0; rach_ind->pdu_list[pdu_index].preamble_list[0].preamble_pwr = 0xffffffff; if (!put_queue(&nr_rach_ind_queue, rach_ind)) { - for (int pdu_index = 0; pdu_index < rach_ind->number_of_pdus; pdu_index++) - free(rach_ind->pdu_list[pdu_index].preamble_list); free(rach_ind->pdu_list); free(rach_ind); } diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c index e7a3ec7fe8..6f3cd0a744 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c @@ -255,10 +255,6 @@ static void free_unqueued_nfapi_indications(nfapi_nr_rach_indication_t *rach_ind nfapi_nr_crc_indication_t *crc_ind) { if (rach_ind && rach_ind->number_of_pdus > 0) { - for(int i = 0; i < rach_ind->number_of_pdus; i++) - { - free_and_zero(rach_ind->pdu_list[i].preamble_list); - } free_and_zero(rach_ind->pdu_list); free_and_zero(rach_ind); }