ADDED RLC FLAG FOR ASSERTING ON MISSING PDUS
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4847 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -282,6 +282,10 @@ void rlc_am_receive_process_data_pdu (rlc_am_entity_t *rlcP, u32_t frame, u8_t e
|
||||
free_mem_block (tbP);
|
||||
LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d][PROCESS RX PDU] PDU DISCARDED, STATUS REQUESTED:\n", frame, rlcP->module_id, rlcP->rb_id);
|
||||
rlcP->status_requested = 1;
|
||||
#if defined(RLC_STOP_ON_LOST_PDU)
|
||||
AssertFatal( 0 == 1,
|
||||
"[FRAME %05d][RLC_AM][MOD %d][RB %d] LOST PDU DETECTED\n", frame, rlcP->module_id, rlcP->rb_id);
|
||||
#endif
|
||||
} else {
|
||||
// 5.1.3.2.3
|
||||
// Actions when a RLC data PDU is placed in the reception buffer
|
||||
@@ -333,6 +337,7 @@ void rlc_am_receive_process_data_pdu (rlc_am_entity_t *rlcP, u32_t frame, u8_t e
|
||||
}
|
||||
rlc_am_rx_list_reassemble_rlc_sdus(rlcP,frame,eNB_flag);
|
||||
}
|
||||
|
||||
if (rlcP->t_reordering.running) {
|
||||
if ((rlcP->vr_x == rlcP->vr_r) || ((rlc_am_in_rx_window(rlcP, pdu_info->sn) == 0) && (rlcP->vr_x != rlcP->vr_mr))) {
|
||||
rlc_am_stop_and_reset_timer_reordering(rlcP,frame);
|
||||
|
||||
@@ -29,13 +29,11 @@ Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis
|
||||
#define RLC_AM_MODULE
|
||||
#define RLC_AM_RX_LIST_C
|
||||
//-----------------------------------------------------------------------------
|
||||
#ifdef USER_MODE
|
||||
#include <assert.h>
|
||||
#endif
|
||||
//-----------------------------------------------------------------------------
|
||||
//#include "rtos_header.h"
|
||||
#include "platform_types.h"
|
||||
//-----------------------------------------------------------------------------
|
||||
#include "assertions.h"
|
||||
#include "list.h"
|
||||
#include "rlc_am.h"
|
||||
#include "LAYER2/MAC/extern.h"
|
||||
@@ -450,6 +448,12 @@ void rlc_am_rx_list_reassemble_rlc_sdus(rlc_am_entity_t* rlcP,u32_t frame, u8_t
|
||||
}
|
||||
rlc_am_rx_pdu_management = ((rlc_am_rx_pdu_management_t*)(cursor->data));
|
||||
} else {
|
||||
#if defined(RLC_STOP_ON_LOST_PDU)
|
||||
if (list2_get_head(&rlcP->receiver_buffer) != cursor) {
|
||||
AssertFatal( 0 == 1,
|
||||
"[FRAME %05d][RLC_AM][MOD %d][RB %d] LOST PDU DETECTED\n", frame, rlcP->module_id, rlcP->rb_id);
|
||||
}
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,20 +70,24 @@ signed int rlc_um_get_pdu_infos(u32_t frame,rlc_um_pdu_sn_10_t* headerP, s16_t t
|
||||
while (li_to_read) {
|
||||
li_length_in_bytes = li_length_in_bytes ^ 3;
|
||||
if (li_length_in_bytes == 2) {
|
||||
AssertFatal( total_sizeP >= ((uint64_t)(&e_li->b2) - (uint64_t)headerP),
|
||||
"DECODING PDU TOO FAR PDU size %d", total_sizeP);
|
||||
pdu_infoP->li_list[pdu_infoP->num_li] = ((u16_t)(e_li->b1 << 4)) & 0x07F0;
|
||||
pdu_infoP->li_list[pdu_infoP->num_li] |= (((u8_t)(e_li->b2 >> 4)) & 0x000F);
|
||||
li_to_read = e_li->b1 & 0x80;
|
||||
pdu_infoP->header_size += 2;
|
||||
} else {
|
||||
AssertFatal( total_sizeP >= ((uint64_t)(&e_li->b3) - (uint64_t)headerP),
|
||||
"DECODING PDU TOO FAR PDU size %d", total_sizeP);
|
||||
pdu_infoP->li_list[pdu_infoP->num_li] = ((u16_t)(e_li->b2 << 8)) & 0x0700;
|
||||
pdu_infoP->li_list[pdu_infoP->num_li] |= e_li->b3;
|
||||
li_to_read = e_li->b2 & 0x08;
|
||||
e_li++;
|
||||
pdu_infoP->header_size += 1;
|
||||
}
|
||||
AssertFatal( pdu_infoP->num_li >= RLC_AM_MAX_SDU_IN_PDU, "[FRAME %05d][RLC_UM][MOD XX][RB XX][GET PDU INFO] SN %04d TOO MANY LIs ", frame, pdu_infoP->sn);
|
||||
sum_li += pdu_infoP->li_list[pdu_infoP->num_li];
|
||||
pdu_infoP->num_li = pdu_infoP->num_li + 1;
|
||||
AssertFatal( pdu_infoP->num_li > RLC_AM_MAX_SDU_IN_PDU, "[FRAME %05d][RLC_UM][MOD XX][RB XX][GET PDU INFO] SN %04d TOO MANY LIs ", frame, pdu_infoP->sn);
|
||||
if (pdu_infoP->num_li > RLC_AM_MAX_SDU_IN_PDU) {
|
||||
return -2;
|
||||
}
|
||||
@@ -230,9 +234,9 @@ void rlc_um_try_reassembly(rlc_um_entity_t *rlcP, u32_t frame, u8_t eNB_flag, si
|
||||
rlc_um_reassembly (data, size, rlcP,frame);
|
||||
rlc_um_send_sdu(rlcP,frame,eNB_flag);
|
||||
} else {
|
||||
//clear sdu already done
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
//clear sdu already done
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
}
|
||||
rlcP->reassembly_missing_sn_detected = 0;
|
||||
break;
|
||||
@@ -246,8 +250,13 @@ void rlc_um_try_reassembly(rlc_um_entity_t *rlcP, u32_t frame, u8_t eNB_flag, si
|
||||
//LOG_D(RLC, "[MSC_NBOX][FRAME %05d][RLC_UM][MOD %02d][RB %02d][Missing SN detected][RLC_UM][MOD %02d][RB %02d]\n",
|
||||
// frame, rlcP->module_id,rlcP->rb_id, rlcP->module_id,rlcP->rb_id);
|
||||
rlcP->reassembly_missing_sn_detected = 1; // not necessary but for readability of the code
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
#if defined(RLC_STOP_ON_LOST_PDU)
|
||||
AssertFatal( rlcP->reassembly_missing_sn_detected == 1,
|
||||
"[RLC_UM][MOD %d][RB %d][FRAME %05d] MISSING PDU DETECTED\n",
|
||||
rlcP->module_id, rlcP->rb_id, frame);
|
||||
#endif
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -308,8 +317,8 @@ void rlc_um_try_reassembly(rlc_um_entity_t *rlcP, u32_t frame, u8_t eNB_flag, si
|
||||
if (rlcP->reassembly_missing_sn_detected) {
|
||||
reassembly_start_index = 1;
|
||||
data = &data[li_array[0]];
|
||||
//rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += li_array[0];
|
||||
//rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += li_array[0];
|
||||
} else {
|
||||
reassembly_start_index = 0;
|
||||
}
|
||||
@@ -361,13 +370,14 @@ void rlc_um_try_reassembly(rlc_um_entity_t *rlcP, u32_t frame, u8_t eNB_flag, si
|
||||
default:
|
||||
LOG_W(RLC, "[MSC_NBOX][FRAME %05d][RLC_UM][MOD %02d][RB %02d][Missing SN detected][RLC_UM][MOD %02d][RB %02d]\n",
|
||||
frame, rlcP->module_id,rlcP->rb_id, rlcP->module_id,rlcP->rb_id);
|
||||
#ifdef USER_MODE
|
||||
assert(1 != 1);
|
||||
#endif
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
rlcP->stat_rx_data_pdu_dropped += 1;
|
||||
rlcP->stat_rx_data_bytes_dropped += tb_ind->size;
|
||||
|
||||
rlcP->reassembly_missing_sn_detected = 1;
|
||||
#if defined(RLC_STOP_ON_LOST_PDU)
|
||||
AssertFatal( rlcP->reassembly_missing_sn_detected == 1,
|
||||
"[RLC_UM][MOD %d][RB %d][FRAME %05d] MISSING PDU DETECTED\n", rlcP->module_id, rlcP->rb_id, frame);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -380,6 +390,10 @@ void rlc_um_try_reassembly(rlc_um_entity_t *rlcP, u32_t frame, u8_t eNB_flag, si
|
||||
frame, rlcP->module_id,rlcP->rb_id, sn, rlcP->module_id,rlcP->rb_id);
|
||||
rlcP->reassembly_missing_sn_detected = 1;
|
||||
rlc_um_clear_rx_sdu(rlcP);
|
||||
#if defined(RLC_STOP_ON_LOST_PDU)
|
||||
AssertFatal( rlcP->reassembly_missing_sn_detected == 1,
|
||||
"[FRAME %05d][RLC_UM][MOD %d][RB %d] MISSING PDU DETECTED\n", frame, rlcP->module_id, rlcP->rb_id);
|
||||
#endif
|
||||
}
|
||||
sn = (sn + 1) % rlcP->rx_sn_modulo;
|
||||
if ((sn == rlcP->vr_uh) || (sn == end_snP)){
|
||||
|
||||
Reference in New Issue
Block a user