diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 18cd8ebde4fb91d5ad78e13dfe7f71e40528b665..f1ad5817e9ede328ac42987b428662bcde818475 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -1102,18 +1102,12 @@ void nr_schedule_ue_spec(module_id_t module_id, if (sched_ctrl->num_total_bytes > 0) { tbs_size_t len = 0; while (size > 3) { - - // 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); - } + // we do not know how much data we will get from RLC, i.e., whether it + // will be longer than 256B or not. Therefore, reserve space for long header, then + // fetch data, then fill real length + NR_MAC_SUBHEADER_LONG *header = (NR_MAC_SUBHEADER_LONG *) buf; + buf += 3; + size -= 3; /* limit requested number of bytes to what preprocessor specified, or * such that TBS is full */ @@ -1143,32 +1137,19 @@ void nr_schedule_ue_spec(module_id_t module_id, if (len == 0) break; - if (sched_ctrl->num_total_bytes >= 256) { - ((NR_MAC_SUBHEADER_LONG *) header)->R = 0; - ((NR_MAC_SUBHEADER_LONG *) header)->F = 1; - ((NR_MAC_SUBHEADER_LONG *) header)->LCID = lcid; - ((NR_MAC_SUBHEADER_LONG *) header)->L1 = (len >> 8) & 0xff; - ((NR_MAC_SUBHEADER_LONG *) header)->L2 = len & 0xff; - } else { - ((NR_MAC_SUBHEADER_SHORT *) header)->R = 0; - ((NR_MAC_SUBHEADER_SHORT *) header)->F = 0; - ((NR_MAC_SUBHEADER_SHORT *) header)->LCID = lcid; - ((NR_MAC_SUBHEADER_SHORT *) header)->L = len & 0xff; - } - + header->R = 0; + header->F = 1; + header->LCID = lcid; + header->L1 = (len >> 8) & 0xff; + header->L2 = len & 0xff; size -= len; buf += len; dlsch_total_bytes += len; } 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 -= 3; + size += 3; } } else if (get_softmodem_params()->phy_test || get_softmodem_params()->do_ra || get_softmodem_params()->sa) {