Compare commits

...

2 Commits

Author SHA1 Message Date
Bartosz Podrygajlo
91e754301f Better stubs for test_nr_ue_ra_procedures 2026-03-30 10:30:15 +02:00
francescomani
aff1911074 pre-store pucch_ResourceCommon to avoid segfault in scheduling PUCCH at UE 2026-03-30 09:55:17 +02:00
6 changed files with 58 additions and 23 deletions

View File

@@ -292,6 +292,7 @@ typedef struct {
int n_CCE;
int N_CCE;
int initial_pucch_id;
int pucch_ResourceCommon;
} PUCCH_sched_t;
typedef struct {

View File

@@ -237,7 +237,7 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const frame_t frame, const int slot)
void nr_ra_backoff_setting(RA_config_t *ra);
void nr_get_RA_window(NR_UE_MAC_INST_t *mac);
void prepare_msg4_msgb_feedback(NR_UE_MAC_INST_t *mac, int pid, int ack_nack);
void configure_initial_pucch(PUCCH_sched_t *pucch, int res_ind);
void configure_initial_pucch(PUCCH_sched_t *pucch, int res_ind, long *pucch_ResourceCommon);
void release_PUCCH_SRS(NR_UE_MAC_INST_t *mac);
void nr_ue_reset_sync_state(NR_UE_MAC_INST_t *mac, bool reconf);
void nr_ue_send_synch_request(NR_UE_MAC_INST_t *mac, module_id_t module_id, int cc_id, const fapi_nr_synch_request_t *sync_req);

View File

@@ -1199,6 +1199,8 @@ void prepare_msg4_msgb_feedback(NR_UE_MAC_INST_t *mac, int pid, int ack_nack)
.n_harq = 1};
current_harq->active = false;
current_harq->ack_received = false;
const NR_UE_UL_BWP_t *current_UL_BWP = mac->current_UL_BWP;
configure_initial_pucch(&pucch, current_harq->pucch_resource_indicator, current_UL_BWP->pucch_ConfigCommon->pucch_ResourceCommon);
RA_config_t *ra = &mac->ra;
ra->ra_pucch = calloc_or_fail(1, sizeof(*ra->ra_pucch));

View File

@@ -1540,8 +1540,7 @@ int nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
// configure pucch from Table 9.2.1-1
// only for ack/nack
if (pucch->initial_pucch_id > -1 && pucch->pucch_resource == NULL) {
const int idx = *current_UL_BWP->pucch_ConfigCommon->pucch_ResourceCommon;
const initial_pucch_resource_t pucch_resourcecommon = get_initial_pucch_resource(idx);
const initial_pucch_resource_t pucch_resourcecommon = get_initial_pucch_resource(pucch->pucch_ResourceCommon);
pucch_pdu->format_type = pucch_resourcecommon.format;
pucch_pdu->start_symbol_index = pucch_resourcecommon.startingSymbolIndex;
pucch_pdu->nr_of_symbols = pucch_resourcecommon.nrofSymbols;
@@ -1551,7 +1550,7 @@ int nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
pucch_pdu->prb_size = 1; // format 0 or 1
int RB_BWP_offset;
if (pucch->initial_pucch_id == 15)
if (pucch->pucch_ResourceCommon == 15)
RB_BWP_offset = pucch_pdu->bwp_size >> 2;
else
RB_BWP_offset = pucch_resourcecommon.PRB_offset;
@@ -2269,7 +2268,7 @@ void multiplex_pucch_resource(NR_UE_MAC_INST_t *mac, PUCCH_sched_t *pucch, int n
}
}
void configure_initial_pucch(PUCCH_sched_t *pucch, int res_ind)
void configure_initial_pucch(PUCCH_sched_t *pucch, int res_ind, long *pucch_ResourceCommon)
{
/* see TS 38.213 9.2.1 PUCCH Resource Sets */
int delta_PRI = res_ind;
@@ -2280,6 +2279,8 @@ void configure_initial_pucch(PUCCH_sched_t *pucch, int res_ind)
int r_PUCCH = ((2 * n_CCE_0) / N_CCE_0) + (2 * delta_PRI);
pucch->initial_pucch_id = r_PUCCH;
pucch->pucch_resource = NULL;
AssertFatal(pucch_ResourceCommon, "pucch_ResourceCommon NULL\n");
pucch->pucch_ResourceCommon = *pucch_ResourceCommon;
}
/*******************************************************************
@@ -2468,7 +2469,7 @@ bool get_downlink_ack(NR_UE_MAC_INST_t *mac, frame_t frame, int slot, PUCCH_sche
NR_PUCCH_Config_t *pucch_Config = current_UL_BWP ? current_UL_BWP->pucch_Config : NULL;
if (!(pucch_Config && pucch_Config->resourceSetToAddModList && pucch_Config->resourceSetToAddModList->list.array[0]))
configure_initial_pucch(pucch, res_ind);
configure_initial_pucch(pucch, res_ind, current_UL_BWP->pucch_ConfigCommon->pucch_ResourceCommon);
else {
int resource_set_id = find_pucch_resource_set(pucch_Config, O_ACK);
int n_list = pucch_Config->resourceSetToAddModList->list.count;

View File

@@ -8,7 +8,7 @@ add_test(NAME test_nr_ue_power_procedures
COMMAND ./test_nr_ue_power_procedures)
add_executable(test_nr_ue_ra_procedures test_nr_ue_ra_procedures.cpp)
target_link_libraries(test_nr_ue_ra_procedures PRIVATE nr_ue_ra_procedures nr_ue_power_procedures GTest::gtest minimal_lib)
target_link_libraries(test_nr_ue_ra_procedures PRIVATE nr_ue_ra_procedures nr_ue_power_procedures GTest::gtest minimal_lib MAC_UE_NR)
add_dependencies(tests test_nr_ue_ra_procedures)
add_test(NAME test_nr_ue_ra_procedures
COMMAND ./test_nr_ue_ra_procedures)

View File

@@ -6,6 +6,8 @@
extern "C" {
#include "openair2/LAYER2/NR_MAC_UE/mac_proto.h"
#include "executables/softmodem-common.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
#include "common/utils/ocp_itti/intertask_interface.h"
static softmodem_params_t softmodem_params;
softmodem_params_t *get_softmodem_params(void)
@@ -18,7 +20,13 @@ void nr_mac_rrc_ra_ind(const module_id_t mod_id, bool success)
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, const int rnti, bool prepare_payload)
{
}
tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP,
void nr_mac_rlc_status_ind(uint16_t ue_id, frame_t frame, int n_ch, const logical_chan_id_t *ch, mac_rlc_status_resp_t *ret)
{
}
void nr_mac_rrc_inactivity_timer_ind(const module_id_t mod_id)
{
}
tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP,
const uint16_t ue_id,
const bool gnb_flagP,
const logical_chan_id_t channel_idP,
@@ -27,32 +35,55 @@ tbs_size_t nr_mac_rlc_data_req(const module_id_t module_idP,
{
return 0;
}
fapi_nr_ul_config_request_pdu_t *lockGet_ul_config(NR_UE_MAC_INST_t *mac, frame_t frame_tx, int slot_tx, uint8_t pdu_type)
{
return nullptr;
}
void release_ul_config(fapi_nr_ul_config_request_pdu_t *configPerSlot, bool clearIt)
void nr_mac_rlc_data_ind(const module_id_t module_idP,
const uint16_t ue_id,
const bool gnb_flagP,
const nr_rlc_data_ind_t *data,
int num_data)
{
}
void remove_ul_config_last_item(fapi_nr_ul_config_request_pdu_t *pdu)
bool nr_rlc_activate_srb0(int ue_id,
void *data,
void (*send_initial_ul_rrc_message)(int ue_id, const uint8_t *sdu, sdu_size_t sdu_len, void *data))
{
return true;
}
int nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
int slot,
frame_t frame,
uint16_t rnti,
PUCCH_sched_t *pucch,
fapi_nr_ul_config_pucch_pdu *pucch_pdu)
int nr_rlc_module_init(nr_rlc_op_mode_t mode)
{
return 0;
}
NR_UE_DL_BWP_t *get_dl_bwp_structure(NR_UE_MAC_INST_t *mac, int bwp_id, bool setup)
MessageDef *itti_alloc_new_message(task_id_t origin_task_id, instance_t originInstance, MessagesIds message_id)
{
return NULL;
}
NR_UE_UL_BWP_t *get_ul_bwp_structure(NR_UE_MAC_INST_t *mac, int bwp_id, bool setup)
int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *message)
{
return 0;
}
typedef uint32_t channel_t;
int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
const int CC_id,
const uint8_t gNB_index,
const int hfn,
const frame_t frame,
const int slot,
const rnti_t rnti,
const uint32_t cellid,
const long arfcn,
const channel_t channel,
const uint8_t *pduP,
const sdu_size_t pdu_len)
{
return 0;
}
void nr_mac_rrc_meas_ind_ue(module_id_t module_id,
uint32_t gNB_index,
uint16_t Nid_cell,
bool csi_meas,
bool is_neighboring_cell,
int rsrp_dBm)
{
return NULL;
}
}
#include <cstdio>