Commit 4158dd2e authored by Lionel Gauthier's avatar Lionel Gauthier

TX SDU RLC am was blocked if last SDU transmitted was lost in the air, due to BO computation

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7450 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 24cbca8b
This diff is collapsed.
...@@ -62,12 +62,13 @@ typedef struct rlc_am_entity_s { ...@@ -62,12 +62,13 @@ typedef struct rlc_am_entity_s {
rb_id_t rb_id; /*!< \brief Radio bearer identifier, for statistics and trace purpose. */ rb_id_t rb_id; /*!< \brief Radio bearer identifier, for statistics and trace purpose. */
logical_chan_id_t channel_id; /*!< \brief Transport channel identifier. */ logical_chan_id_t channel_id; /*!< \brief Transport channel identifier. */
boolean_t is_data_plane; /*!< \brief To know if the RLC belongs to a data radio bearer or a signalling radio bearer, for statistics and trace purpose. */ boolean_t is_data_plane; /*!< \brief To know if the RLC belongs to a data radio bearer or a signalling radio bearer, for statistics and trace purpose. */
//boolean_t is_enb; /*!< \brief To know if the RLC belongs to a eNB or UE. */
rlc_buffer_occupancy_t sdu_buffer_occupancy; /*!< \brief Number of bytes of unsegmented SDUs. */ rlc_buffer_occupancy_t sdu_buffer_occupancy; /*!< \brief Number of bytes of unsegmented SDUs. */
rlc_buffer_occupancy_t retransmission_buffer_occupancy; /*!< \brief Number of bytes of PDUs in retransmission buffer waiting for a ACK. */ rlc_buffer_occupancy_t retransmission_buffer_occupancy; /*!< \brief Number of bytes of PDUs in retransmission buffer waiting for a ACK. */
rlc_buffer_occupancy_t status_buffer_occupancy; /*!< \brief Number of bytes of control PDUs waiting for transmission. */ rlc_buffer_occupancy_t status_buffer_occupancy; /*!< \brief Number of bytes of control PDUs waiting for transmission. */
rlc_am_control_pdu_info_t control_pdu_info;
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// TX BUFFERS // TX BUFFERS
//--------------------------------------------------------------------- //---------------------------------------------------------------------
...@@ -86,6 +87,7 @@ typedef struct rlc_am_entity_s { ...@@ -86,6 +87,7 @@ typedef struct rlc_am_entity_s {
signed int retrans_num_bytes_to_retransmit; /*!< \brief Number of bytes in the retransmission buffer to be retransmitted. */ signed int retrans_num_bytes_to_retransmit; /*!< \brief Number of bytes in the retransmission buffer to be retransmitted. */
unsigned int num_nack_so; /*!< \brief Number of segment offsets asked to be retransmitted by peer RLC entity. */ unsigned int num_nack_so; /*!< \brief Number of segment offsets asked to be retransmitted by peer RLC entity. */
unsigned int num_nack_sn; /*!< \brief Number of segment asked to be retransmitted by peer RLC entity. */ unsigned int num_nack_sn; /*!< \brief Number of segment asked to be retransmitted by peer RLC entity. */
boolean_t force_poll; /*!< \brief force poll due to t_poll_retransmit time-out. */
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// RX BUFFERS // RX BUFFERS
......
...@@ -35,10 +35,7 @@ ...@@ -35,10 +35,7 @@
#include "rlc.h" #include "rlc.h"
#include "LAYER2/MAC/extern.h" #include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h" #include "UTIL/LOG/log.h"
//#define TRACE_RLC_AM_RESEGMENT #include "msc.h"
//#define TRACE_RLC_AM_FORCE_TRAFFIC
//#define TRACE_RLC_AM_NACK
//#define TRACE_RLC_AM_ACK
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void rlc_am_nack_pdu ( void rlc_am_nack_pdu (
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
...@@ -122,7 +119,14 @@ void rlc_am_nack_pdu ( ...@@ -122,7 +119,14 @@ void rlc_am_nack_pdu (
#endif #endif
rlc_pP->stat_tx_pdcp_sdu_discarded += 1; rlc_pP->stat_tx_pdcp_sdu_discarded += 1;
rlc_pP->stat_tx_pdcp_bytes_discarded += rlc_pP->input_sdus[sdu_index].sdu_size; rlc_pP->stat_tx_pdcp_bytes_discarded += rlc_pP->input_sdus[sdu_index].sdu_size;
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" Dropped SDU mui %u cause max_retx %u reached",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP),
rlc_pP->input_sdus[sdu_index].mui,
rlc_pP->max_retx_threshold);
rlc_am_free_in_sdu(ctxt_pP, rlc_pP, sdu_index); rlc_am_free_in_sdu(ctxt_pP, rlc_pP, sdu_index);
} }
} }
} }
...@@ -843,6 +847,11 @@ void rlc_am_retransmit_any_pdu( ...@@ -843,6 +847,11 @@ void rlc_am_retransmit_any_pdu(
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] RE-SEND DATA PDU SN %04d\n", LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] RE-SEND DATA PDU SN %04d\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
sn); sn);
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), sn);
#endif
rlc_am_nack_pdu (ctxt_pP, rlc_pP, sn, 0, 0x7FFF); rlc_am_nack_pdu (ctxt_pP, rlc_pP, sn, 0, 0x7FFF);
// no need for update rlc_pP->nb_bytes_requested_by_mac // no need for update rlc_pP->nb_bytes_requested_by_mac
pdu_p = rlc_am_retransmit_get_copy(ctxt_pP, rlc_pP, sn); pdu_p = rlc_am_retransmit_get_copy(ctxt_pP, rlc_pP, sn);
...@@ -873,6 +882,11 @@ void rlc_am_retransmit_any_pdu( ...@@ -873,6 +882,11 @@ void rlc_am_retransmit_any_pdu(
found_pdu_sn); found_pdu_sn);
if (rlc_pP->nb_bytes_requested_by_mac > 4) { if (rlc_pP->nb_bytes_requested_by_mac > 4) {
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u (subseg)",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), found_pdu_sn);
#endif
rlc_am_nack_pdu (ctxt_pP, rlc_pP, found_pdu_sn, 0, 0x7FFF); rlc_am_nack_pdu (ctxt_pP, rlc_pP, found_pdu_sn, 0, 0x7FFF);
pdu_p = rlc_am_retransmit_get_subsegment(ctxt_pP, rlc_pP, found_pdu_sn, &rlc_pP->nb_bytes_requested_by_mac); pdu_p = rlc_am_retransmit_get_subsegment(ctxt_pP, rlc_pP, found_pdu_sn, &rlc_pP->nb_bytes_requested_by_mac);
pdu_sn_10_p = (rlc_am_pdu_sn_10_t*) (&pdu_p->data[sizeof(struct mac_tb_req)]); pdu_sn_10_p = (rlc_am_pdu_sn_10_t*) (&pdu_p->data[sizeof(struct mac_tb_req)]);
......
...@@ -84,26 +84,25 @@ void rlc_am_pdu_polling ( ...@@ -84,26 +84,25 @@ void rlc_am_pdu_polling (
(rlc_pP->c_pdu_without_poll >= rlc_pP->poll_pdu) || (rlc_pP->c_pdu_without_poll >= rlc_pP->poll_pdu) ||
(rlc_pP->c_byte_without_poll >= rlc_pP->poll_byte) || (rlc_pP->c_byte_without_poll >= rlc_pP->poll_byte) ||
((rlc_pP->sdu_buffer_occupancy == 0) && (rlc_pP->retrans_num_bytes_to_retransmit == 0)) || ((rlc_pP->sdu_buffer_occupancy == 0) && (rlc_pP->retrans_num_bytes_to_retransmit == 0)) ||
(rlc_pP->vt_s == rlc_pP->vt_ms) (rlc_pP->vt_s == rlc_pP->vt_ms) ||
(rlc_pP->force_poll == TRUE)
) { ) {
rlc_pP->force_poll = FALSE;
if (rlc_pP->c_pdu_without_poll >= rlc_pP->poll_pdu) { if (rlc_pP->c_pdu_without_poll >= rlc_pP->poll_pdu) {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX NUM PDU THRESHOLD %d HAS BEEN REACHED\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX NUM PDU THRESHOLD %d HAS BEEN REACHED\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
rlc_pP->poll_pdu); rlc_pP->poll_pdu);
} } else
if (rlc_pP->c_byte_without_poll >= rlc_pP->poll_byte) { if (rlc_pP->c_byte_without_poll >= rlc_pP->poll_byte) {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX NUM BYTES THRESHOLD %d HAS BEEN REACHED\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX NUM BYTES THRESHOLD %d HAS BEEN REACHED\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
rlc_pP->poll_byte); rlc_pP->poll_byte);
} } else
if ((rlc_pP->sdu_buffer_occupancy == 0) && (rlc_pP->retrans_num_bytes_to_retransmit == 0)) { if ((rlc_pP->sdu_buffer_occupancy == 0) && (rlc_pP->retrans_num_bytes_to_retransmit == 0)) {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX BUFFERS ARE EMPTY\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE TX BUFFERS ARE EMPTY\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
} } else
if (rlc_pP->vt_s == rlc_pP->vt_ms) { if (rlc_pP->vt_s == rlc_pP->vt_ms) {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE OF WINDOW STALLING\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[POLL] SET POLL BECAUSE OF WINDOW STALLING\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
......
...@@ -44,9 +44,6 @@ ...@@ -44,9 +44,6 @@
//#define TRACE_RLC_AM_STATUS_CREATION 1 //#define TRACE_RLC_AM_STATUS_CREATION 1
rlc_am_control_pdu_info_t g_rlc_am_control_pdu_info;
# if defined(ENABLE_ITTI) # if defined(ENABLE_ITTI)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
...@@ -288,7 +285,7 @@ rlc_am_receive_process_control_pdu( ...@@ -288,7 +285,7 @@ rlc_am_receive_process_control_pdu(
rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p = (rlc_am_pdu_sn_10_t*)*first_byte_ppP; rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p = (rlc_am_pdu_sn_10_t*)*first_byte_ppP;
sdu_size_t initial_pdu_size = *tb_size_in_bytes_pP; sdu_size_t initial_pdu_size = *tb_size_in_bytes_pP;
if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, tb_size_in_bytes_pP, &g_rlc_am_control_pdu_info) >= 0) { if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, tb_size_in_bytes_pP, &rlc_pP->control_pdu_info) >= 0) {
rlc_am_tx_buffer_display(ctxt_pP, rlc_pP, " TX BUFFER BEFORE PROCESS OF STATUS PDU"); rlc_am_tx_buffer_display(ctxt_pP, rlc_pP, " TX BUFFER BEFORE PROCESS OF STATUS PDU");
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" RX CONTROL PDU VT(A) %04d VT(S) %04d POLL_SN %04d ACK_SN %04d\n", LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" RX CONTROL PDU VT(A) %04d VT(S) %04d POLL_SN %04d ACK_SN %04d\n",
...@@ -296,10 +293,10 @@ rlc_am_receive_process_control_pdu( ...@@ -296,10 +293,10 @@ rlc_am_receive_process_control_pdu(
rlc_pP->vt_a, rlc_pP->vt_a,
rlc_pP->vt_s, rlc_pP->vt_s,
rlc_pP->poll_sn, rlc_pP->poll_sn,
g_rlc_am_control_pdu_info.ack_sn); rlc_pP->control_pdu_info.ack_sn);
rlc_am_display_control_pdu_infos(&g_rlc_am_control_pdu_info); rlc_am_display_control_pdu_infos(&rlc_pP->control_pdu_info);
rlc_sn_t ack_sn = g_rlc_am_control_pdu_info.ack_sn; rlc_sn_t ack_sn = rlc_pP->control_pdu_info.ack_sn;
rlc_sn_t sn_cursor = rlc_pP->vt_a; rlc_sn_t sn_cursor = rlc_pP->vt_a;
rlc_sn_t nack_sn; rlc_sn_t nack_sn;
unsigned int nack_index; unsigned int nack_index;
...@@ -325,13 +322,13 @@ rlc_am_receive_process_control_pdu( ...@@ -325,13 +322,13 @@ rlc_am_receive_process_control_pdu(
// - if t-PollRetransmit is running: // - if t-PollRetransmit is running:
// - stop and reset t-PollRetransmit. // - stop and reset t-PollRetransmit.
assert(ack_sn < RLC_AM_SN_MODULO); assert(ack_sn < RLC_AM_SN_MODULO);
assert(g_rlc_am_control_pdu_info.num_nack < RLC_AM_MAX_NACK_IN_STATUS_PDU); assert(rlc_pP->control_pdu_info.num_nack < RLC_AM_MAX_NACK_IN_STATUS_PDU);
if (rlc_am_in_tx_window(ctxt_pP, rlc_pP, ack_sn) > 0) { if (rlc_am_in_tx_window(ctxt_pP, rlc_pP, ack_sn) > 0) {
rlc_pP->num_nack_so = 0; rlc_pP->num_nack_so = 0;
rlc_pP->num_nack_sn = 0; rlc_pP->num_nack_sn = 0;
if (g_rlc_am_control_pdu_info.num_nack == 0) { if (rlc_pP->control_pdu_info.num_nack == 0) {
while (sn_cursor != ack_sn) { while (sn_cursor != ack_sn) {
if (sn_cursor == rlc_pP->poll_sn) { if (sn_cursor == rlc_pP->poll_sn) {
rlc_am_stop_and_reset_timer_poll_retransmit(ctxt_pP, rlc_pP); rlc_am_stop_and_reset_timer_poll_retransmit(ctxt_pP, rlc_pP);
...@@ -342,7 +339,7 @@ rlc_am_receive_process_control_pdu( ...@@ -342,7 +339,7 @@ rlc_am_receive_process_control_pdu(
} }
} else { } else {
nack_index = 0; nack_index = 0;
nack_sn = g_rlc_am_control_pdu_info.nack_list[nack_index].nack_sn; nack_sn = rlc_pP->control_pdu_info.nack_list[nack_index].nack_sn;
while (sn_cursor != ack_sn) { while (sn_cursor != ack_sn) {
if (sn_cursor == rlc_pP->poll_sn) { if (sn_cursor == rlc_pP->poll_sn) {
...@@ -357,20 +354,20 @@ rlc_am_receive_process_control_pdu( ...@@ -357,20 +354,20 @@ rlc_am_receive_process_control_pdu(
rlc_am_nack_pdu (ctxt_pP, rlc_am_nack_pdu (ctxt_pP,
rlc_pP, rlc_pP,
sn_cursor, sn_cursor,
g_rlc_am_control_pdu_info.nack_list[nack_index].so_start, rlc_pP->control_pdu_info.nack_list[nack_index].so_start,
g_rlc_am_control_pdu_info.nack_list[nack_index].so_end); rlc_pP->control_pdu_info.nack_list[nack_index].so_end);
nack_index = nack_index + 1; nack_index = nack_index + 1;
if (nack_index == g_rlc_am_control_pdu_info.num_nack) { if (nack_index == rlc_pP->control_pdu_info.num_nack) {
nack_sn = 0xFFFF; // value never reached by sn nack_sn = 0xFFFF; // value never reached by sn
} else { } else {
nack_sn = g_rlc_am_control_pdu_info.nack_list[nack_index].nack_sn; nack_sn = rlc_pP->control_pdu_info.nack_list[nack_index].nack_sn;
} }
} }
if ((nack_index < g_rlc_am_control_pdu_info.num_nack) && (nack_index > 0)) { if ((nack_index < rlc_pP->control_pdu_info.num_nack) && (nack_index > 0)) {
if (g_rlc_am_control_pdu_info.nack_list[nack_index].nack_sn != g_rlc_am_control_pdu_info.nack_list[nack_index-1].nack_sn) { if (rlc_pP->control_pdu_info.nack_list[nack_index].nack_sn != rlc_pP->control_pdu_info.nack_list[nack_index-1].nack_sn) {
sn_cursor = (sn_cursor + 1) & RLC_AM_SN_MASK; sn_cursor = (sn_cursor + 1) & RLC_AM_SN_MASK;
} }
} else { } else {
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "rlc_am.h" #include "rlc_am.h"
#include "LAYER2/MAC/extern.h" #include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h" #include "UTIL/LOG/log.h"
#include "msc.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
rlc_am_check_timer_poll_retransmit( rlc_am_check_timer_poll_retransmit(
...@@ -76,10 +77,16 @@ rlc_am_check_timer_poll_retransmit( ...@@ -76,10 +77,16 @@ rlc_am_check_timer_poll_retransmit(
rlc_pP->t_poll_retransmit.running = 0; rlc_pP->t_poll_retransmit.running = 0;
rlc_pP->t_poll_retransmit.timed_out = 1; rlc_pP->t_poll_retransmit.timed_out = 1;
rlc_pP->stat_timer_poll_retransmit_timed_out += 1; rlc_pP->stat_timer_poll_retransmit_timed_out += 1;
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit timed-out",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] TIME-OUT\n", LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] TIME-OUT\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
rlc_pP->force_poll= TRUE;
//#warning TO DO rlc_am_check_timer_poll_retransmit //#warning TO DO rlc_am_check_timer_poll_retransmit
rlc_pP->t_poll_retransmit.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_poll_retransmit.ms_duration; rlc_pP->t_poll_retransmit.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_poll_retransmit.ms_duration;
} }
...@@ -109,6 +116,11 @@ rlc_am_stop_and_reset_timer_poll_retransmit( ...@@ -109,6 +116,11 @@ rlc_am_stop_and_reset_timer_poll_retransmit(
rlc_pP->t_poll_retransmit.ms_time_out = 0; rlc_pP->t_poll_retransmit.ms_time_out = 0;
rlc_pP->t_poll_retransmit.ms_start = 0; rlc_pP->t_poll_retransmit.ms_start = 0;
rlc_pP->t_poll_retransmit.timed_out = 0; rlc_pP->t_poll_retransmit.timed_out = 0;
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit stopped & reseted",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
...@@ -120,16 +132,30 @@ rlc_am_start_timer_poll_retransmit( ...@@ -120,16 +132,30 @@ rlc_am_start_timer_poll_retransmit(
{ {
rlc_pP->t_poll_retransmit.timed_out = 0; rlc_pP->t_poll_retransmit.timed_out = 0;
if (rlc_pP->t_poll_retransmit.ms_duration > 0) { if (rlc_pP->t_poll_retransmit.running == 0) {
rlc_pP->t_poll_retransmit.running = 1; if (rlc_pP->t_poll_retransmit.ms_duration > 0) {
rlc_pP->t_poll_retransmit.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_poll_retransmit.ms_duration; rlc_pP->t_poll_retransmit.running = 1;
rlc_pP->t_poll_retransmit.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); rlc_pP->t_poll_retransmit.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_poll_retransmit.ms_duration;
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] STARTED (TIME-OUT = FRAME %05d)\n", rlc_pP->t_poll_retransmit.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP);
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] STARTED (TIME-OUT = FRAME %05d)\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
rlc_pP->t_poll_retransmit.ms_time_out); rlc_pP->t_poll_retransmit.ms_time_out);
} else { #if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit started (TO %u ms)",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_poll_retransmit.ms_time_out);
#endif
} else {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] NOT STARTED, CAUSE CONFIGURED 0 ms\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] NOT STARTED, CAUSE CONFIGURED 0 ms\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
}
} else {
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit not restarted (TO %u ms)",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_poll_retransmit.ms_time_out);
#endif
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "rlc_am.h" #include "rlc_am.h"
# include "LAYER2/MAC/extern.h" # include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h" #include "UTIL/LOG/log.h"
#include "msc.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
rlc_am_check_timer_reordering( rlc_am_check_timer_reordering(
...@@ -72,6 +73,11 @@ rlc_am_check_timer_reordering( ...@@ -72,6 +73,11 @@ rlc_am_check_timer_reordering(
// - start t-Reordering; // - start t-Reordering;
// - set VR(X) to VR(H). // - set VR(X) to VR(H).
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering timed out",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
rlc_pP->t_reordering.running = 0; rlc_pP->t_reordering.running = 0;
rlc_pP->t_reordering.timed_out = 1; rlc_pP->t_reordering.timed_out = 1;
...@@ -128,6 +134,11 @@ rlc_am_stop_and_reset_timer_reordering( ...@@ -128,6 +134,11 @@ rlc_am_stop_and_reset_timer_reordering(
rlc_pP->t_reordering.ms_time_out = 0; rlc_pP->t_reordering.ms_time_out = 0;
rlc_pP->t_reordering.ms_start = 0; rlc_pP->t_reordering.ms_start = 0;
rlc_pP->t_reordering.timed_out = 0; rlc_pP->t_reordering.timed_out = 0;
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering stopped & reseted",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
...@@ -138,16 +149,23 @@ rlc_am_start_timer_reordering( ...@@ -138,16 +149,23 @@ rlc_am_start_timer_reordering(
{ {
rlc_pP->t_reordering.timed_out = 0; rlc_pP->t_reordering.timed_out = 0;
if (rlc_pP->t_reordering.ms_duration > 0) { if (rlc_pP->t_reordering.running == 0){
rlc_pP->t_reordering.running = 1; if (rlc_pP->t_reordering.ms_duration > 0) {
rlc_pP->t_reordering.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_reordering.ms_duration; rlc_pP->t_reordering.running = 1;
rlc_pP->t_reordering.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); rlc_pP->t_reordering.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_reordering.ms_duration;
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] STARTED (TIME-OUT = FRAME %5u)\n", rlc_pP->t_reordering.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP);
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] STARTED (TIME-OUT = %5u ms)\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
rlc_pP->t_reordering.ms_time_out); rlc_pP->t_reordering.ms_time_out);
} else { #if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering started (TO %u ms)",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_reordering.ms_time_out);
#endif
} else {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] NOT STARTED, CAUSE CONFIGURED 0 ms\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] NOT STARTED, CAUSE CONFIGURED 0 ms\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
}
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "rlc_am.h" #include "rlc_am.h"
#include "LAYER2/MAC/extern.h" #include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h" #include "UTIL/LOG/log.h"
#include "msc.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
rlc_am_check_timer_status_prohibit( rlc_am_check_timer_status_prohibit(
...@@ -69,6 +70,11 @@ rlc_am_check_timer_status_prohibit( ...@@ -69,6 +70,11 @@ rlc_am_check_timer_status_prohibit(
rlc_pP->t_status_prohibit.timed_out = 1; rlc_pP->t_status_prohibit.timed_out = 1;
rlc_pP->stat_timer_status_prohibit_timed_out += 1; rlc_pP->stat_timer_status_prohibit_timed_out += 1;
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit timed out",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] TIME-OUT\n", LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] TIME-OUT\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
//#warning TO DO rlc_am_check_timer_status_prohibit //#warning TO DO rlc_am_check_timer_status_prohibit
...@@ -93,6 +99,11 @@ rlc_am_stop_and_reset_timer_status_prohibit( ...@@ -93,6 +99,11 @@ rlc_am_stop_and_reset_timer_status_prohibit(
rlc_pP->t_status_prohibit.ms_time_out = 0; rlc_pP->t_status_prohibit.ms_time_out = 0;
rlc_pP->t_status_prohibit.ms_start = 0; rlc_pP->t_status_prohibit.ms_start = 0;
rlc_pP->t_status_prohibit.timed_out = 0; rlc_pP->t_status_prohibit.timed_out = 0;
#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit stopped & reseted",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP));
#endif
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -105,17 +116,24 @@ rlc_am_start_timer_status_prohibit( ...@@ -105,17 +116,24 @@ rlc_am_start_timer_status_prohibit(
{ {
rlc_pP->t_status_prohibit.timed_out = 0; rlc_pP->t_status_prohibit.timed_out = 0;
if (rlc_pP->t_status_prohibit.ms_duration > 0) { if (rlc_pP->t_status_prohibit.running == 0){
rlc_pP->t_status_prohibit.running = 1; if (rlc_pP->t_status_prohibit.ms_duration > 0) {
rlc_pP->t_status_prohibit.ms_time_out = rlc_pP->t_status_prohibit.ms_duration + PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); rlc_pP->t_status_prohibit.running = 1;
rlc_pP->t_status_prohibit.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); rlc_pP->t_status_prohibit.ms_time_out = rlc_pP->t_status_prohibit.ms_duration + PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP);
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] STARTED (TIME-OUT = TIME %u)\n", rlc_pP->t_status_prohibit.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP);
LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] STARTED (TIME-OUT = %u ms)\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
rlc_pP->t_status_prohibit.ms_time_out); rlc_pP->t_status_prohibit.ms_time_out);
LOG_D(RLC, "TIME-OUT = FRAME %u\n", rlc_pP->t_status_prohibit.ms_time_out); LOG_D(RLC, "TIME-OUT = FRAME %u\n", rlc_pP->t_status_prohibit.ms_time_out);
} else { #if defined(MESSAGE_CHART_GENERATOR_RLC_MAC)
MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\
"0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit started (TO %u ms)",\
PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_status_prohibit.ms_time_out);
#endif
} else {
LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] NOT STARTED, CAUSE CONFIGURED 0 ms\n", LOG_T(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] NOT STARTED, CAUSE CONFIGURED 0 ms\n",
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP));
}
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment