From 88d7ad11a287721c8558482701077db80d2c27ae Mon Sep 17 00:00:00 2001 From: luis_pereira87 Date: Sat, 3 Jul 2021 08:54:16 +0100 Subject: [PATCH] Improved fix gNB downlink MAC short/long header accordingly with RLC buffer size --- .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 18cd8ebde4..fdfc603cfa 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -1101,19 +1101,21 @@ void nr_schedule_ue_spec(module_id_t module_id, int dlsch_total_bytes = 0; if (sched_ctrl->num_total_bytes > 0) { tbs_size_t len = 0; - while (size > 3) { + + // Check MAC header short/long format and size + // Check if data from RLC is equal or longer than 256B or not. + // Data from RLC was checked before, in function nr_store_dlsch_buffer + int header_size = sizeof(NR_MAC_SUBHEADER_SHORT); + if (sched_ctrl->num_total_bytes >= 256) { + header_size = sizeof(NR_MAC_SUBHEADER_LONG); + } + + while (size > header_size) { // Reserve space for short or long header. - // Check if data from RLC is equal or longer than 256B or not. - // Data from RLC was checked before, in function nr_store_dlsch_buffer uint8_t *header = buf; - if (sched_ctrl->num_total_bytes >= 256) { - buf += sizeof(NR_MAC_SUBHEADER_LONG); - size -= sizeof(NR_MAC_SUBHEADER_LONG); - } else { - buf += sizeof(NR_MAC_SUBHEADER_SHORT); - size -= sizeof(NR_MAC_SUBHEADER_SHORT); - } + buf += header_size; + size -= header_size; /* limit requested number of bytes to what preprocessor specified, or * such that TBS is full */ @@ -1143,7 +1145,7 @@ void nr_schedule_ue_spec(module_id_t module_id, if (len == 0) break; - if (sched_ctrl->num_total_bytes >= 256) { + if (header_size == sizeof(NR_MAC_SUBHEADER_LONG)) { ((NR_MAC_SUBHEADER_LONG *) header)->R = 0; ((NR_MAC_SUBHEADER_LONG *) header)->F = 1; ((NR_MAC_SUBHEADER_LONG *) header)->LCID = lcid; @@ -1162,13 +1164,8 @@ void nr_schedule_ue_spec(module_id_t module_id, } if (len == 0) { /* RLC did not have data anymore, mark buffer as unused */ - if (sched_ctrl->num_total_bytes >= 256) { - buf -= sizeof(NR_MAC_SUBHEADER_LONG); - size += sizeof(NR_MAC_SUBHEADER_LONG); - } else { - buf -= sizeof(NR_MAC_SUBHEADER_SHORT); - size += sizeof(NR_MAC_SUBHEADER_SHORT); - } + buf -= header_size; + size += header_size; } } else if (get_softmodem_params()->phy_test || get_softmodem_params()->do_ra || get_softmodem_params()->sa) {