From e487c76260e47bd6ceb285b928245796786a3107 Mon Sep 17 00:00:00 2001 From: francescomani Date: Mon, 21 Nov 2022 11:48:46 +0100 Subject: [PATCH] fix msg4 failing retransmissions --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index b73f82ad6c..277632528f 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1470,9 +1470,17 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra int rbSize = 0; uint8_t tb_scaling = 0; uint32_t tb_size = 0; - uint8_t subheader_len = (mac_sdu_length < 256) ? sizeof(NR_MAC_SUBHEADER_SHORT) : sizeof(NR_MAC_SUBHEADER_LONG); - uint16_t pdu_length = mac_sdu_length + subheader_len + 7; //7 is contetion resolution length - uint16_t *vrb_map = cc[CC_id].vrb_map; + uint16_t pdu_length; + if(current_harq_pid >= 0) { // in case of retransmission + NR_UE_harq_t *harq = &sched_ctrl->harq_processes[current_harq_pid]; + DevAssert(!harq->is_waiting); + pdu_length = harq->tb_size; + } + else { + uint8_t subheader_len = (mac_sdu_length < 256) ? sizeof(NR_MAC_SUBHEADER_SHORT) : sizeof(NR_MAC_SUBHEADER_LONG); + pdu_length = mac_sdu_length + subheader_len + 7; //7 is contetion resolution length + } + // increase PRBs until we get to BWPSize or TBS is bigger than MAC PDU size do { if(rbSize < BWPSize) @@ -1488,6 +1496,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra AssertFatal(tb_size >= pdu_length,"Cannot allocate Msg4\n"); int i = 0; + uint16_t *vrb_map = cc[CC_id].vrb_map; while ((i < rbSize) && (rbStart + rbSize <= BWPSize)) { if (vrb_map[BWPStart + rbStart + i]&SL_to_bitmap(msg4_tda.startSymbolIndex, msg4_tda.nrOfSymbols)) { rbStart += i+1;