From aac9c6119d1fd4dafa07901d2b1bd9b8461af380 Mon Sep 17 00:00:00 2001 From: fnabet <fabrice.nabet@alcatelonetouch.com> Date: Thu, 23 Feb 2017 17:44:47 +0100 Subject: [PATCH] RLC AM fix in Retx PDU segment --- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c index 85138afed30..1697b9cac55 100644 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c @@ -352,6 +352,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment( { /* Step 1 */ /* Find the SDU index in the original PDU containing retx_so_start */ + uint16_t temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1)); sdu_size_t sdu_size = 0; sdu_size_t data_size = 0; sdu_size_t header_segment_length = RLC_AM_PDU_SEGMENT_HEADER_MIN_SIZE; @@ -361,7 +362,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* Read first LI */ - sdu_size = RLC_AM_PDU_GET_LI(*pdu_original_header_p + *(pdu_original_header_p + 1),li_bit_offset); + sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset); pdu_original_header_p += li_jump_offset; li_bit_offset ^= 0x4; li_jump_offset ^= 0x3; @@ -372,7 +373,8 @@ mem_block_t* rlc_am_retransmit_get_am_segment( sdu_index ++; if (sdu_index < pdu_mngt->nb_sdus) { - sdu_size = RLC_AM_PDU_GET_LI(*pdu_original_header_p + *(pdu_original_header_p + 1),li_bit_offset); + temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1)); + sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset); pdu_original_header_p += li_jump_offset; li_bit_offset ^= 0x4; li_jump_offset ^= 0x3; @@ -389,7 +391,8 @@ mem_block_t* rlc_am_retransmit_get_am_segment( /* there must be at least one SDU more */ AssertFatal (sdu_index < pdu_mngt->nb_sdus, "RLC AM PDU Segment Error: sdu_index=%d nb_sdus=%d sn=%d LcId=%d !\n", sdu_index,pdu_mngt->nb_sdus,sn,rlc_pP->channel_id); - sdu_size = RLC_AM_PDU_GET_LI(*pdu_original_header_p + *(pdu_original_header_p + 1),li_bit_offset); + temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1)); + sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset); pdu_original_header_p += li_jump_offset; li_bit_offset ^= 0x4; li_jump_offset ^= 0x3; @@ -405,7 +408,8 @@ mem_block_t* rlc_am_retransmit_get_am_segment( sdu_segment_index ++; if (sdu_index < pdu_mngt->nb_sdus) { - sdu_size = RLC_AM_PDU_GET_LI(*pdu_original_header_p + *(pdu_original_header_p + 1),li_bit_offset); + temp_read = ((*pdu_original_header_p) << 8) | (*(pdu_original_header_p + 1)); + sdu_size = RLC_AM_PDU_GET_LI(temp_read,li_bit_offset); pdu_original_header_p += li_jump_offset; li_bit_offset ^= 0x4; li_jump_offset ^= 0x3; @@ -578,7 +582,7 @@ mem_block_t* rlc_am_retransmit_get_am_segment( li_bit_offset ^= 0x4; li_jump_offset ^= 0x3; - temp = ((*pdu_segment_header_p) << 8) + *(pdu_segment_header_p + 1); + temp = ((*pdu_segment_header_p) << 8) | (*(pdu_segment_header_p + 1)); index ++; } } -- GitLab