From 406cf9fe4482596a9a21d464e13e4e53b35167a6 Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Wed, 15 Jan 2014 13:56:05 +0000 Subject: [PATCH] ADDED ITTI RLC PDU MESSAGES git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4884 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c | 734 +++++++++++------- .../LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c | 4 - .../RLC/AM_v9.3.0/rlc_am_status_report.c | 2 +- 3 files changed, 439 insertions(+), 301 deletions(-) diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c index 9b1bb1a4fb..b8a3c1b9a8 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c @@ -32,6 +32,9 @@ Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +#endif #include "rlc_am.h" #include "rlc_am_segment.h" #include "rlc_am_timer_poll_retransmit.h" @@ -47,33 +50,37 @@ Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis //#define TRACE_RLC_AM_TX //#define TRACE_RLC_AM_RX //#define TRACE_RLC_AM_BO +#define TRACE_RLC_AM_PDU 1 + +extern rlc_am_control_pdu_info_t g_rlc_am_control_pdu_info; + //----------------------------------------------------------------------------- u32_t -rlc_am_get_buffer_occupancy_in_bytes (rlc_am_entity_t *rlcP,u32 frame) +rlc_am_get_buffer_occupancy_in_bytes (rlc_am_entity_t *rlc_pP,u32 frameP) { //----------------------------------------------------------------------------- u32_t max_li_overhead; u32_t header_overhead; // priority of control trafic - if (rlcP->status_requested) { - if (rlcP->t_status_prohibit.running == 0) { + if (rlc_pP->status_requested) { + if (rlc_pP->t_status_prohibit.running == 0) { #ifdef TRACE_RLC_AM_BO - if (((15 + rlcP->num_nack_sn*(10+1) + rlcP->num_nack_so*(15+15+1) + 7) >> 3) > 0) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : CONTROL PDU %d bytes \n", frame, rlcP->module_id, rlcP->rb_id, ((15 + rlcP->num_nack_sn*(10+1) + rlcP->num_nack_so*(15+15+1) + 7) >> 3)); + if (((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3) > 0) { + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : CONTROL PDU %d bytes \n", frameP, rlc_pP->module_id, rlc_pP->rb_id, ((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3)); } #endif - return ((15 + rlcP->num_nack_sn*(10+1) + rlcP->num_nack_so*(15+15+1) + 7) >> 3); + return ((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3); } } // data traffic - if (rlcP->nb_sdu_no_segmented <= 1) { + if (rlc_pP->nb_sdu_no_segmented <= 1) { max_li_overhead = 0; } else { - max_li_overhead = (((rlcP->nb_sdu_no_segmented - 1) * 3) / 2) + ((rlcP->nb_sdu_no_segmented - 1) % 2); + max_li_overhead = (((rlc_pP->nb_sdu_no_segmented - 1) * 3) / 2) + ((rlc_pP->nb_sdu_no_segmented - 1) % 2); } - if (rlcP->sdu_buffer_occupancy == 0) { + if (rlc_pP->sdu_buffer_occupancy == 0) { header_overhead = 0; } else { header_overhead = 2; @@ -81,26 +88,26 @@ rlc_am_get_buffer_occupancy_in_bytes (rlc_am_entity_t *rlcP,u32 frame) #ifdef TRACE_RLC_AM_BO - if ((rlcP->status_buffer_occupancy + rlcP->retransmission_buffer_occupancy + rlcP->sdu_buffer_occupancy + max_li_overhead + header_overhead) > 0) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : STATUS BUFFER %d bytes \n", frame, rlcP->module_id, rlcP->rb_id, rlcP->status_buffer_occupancy); - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : RETRANS BUFFER %d bytes \n", frame, rlcP->module_id,rlcP->rb_id, rlcP->retransmission_buffer_occupancy); - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : SDU BUFFER %d bytes + li_overhead %d bytes header_overhead %d bytes (nb sdu not segmented %d)\n", frame, rlcP->module_id,rlcP->rb_id, rlcP->sdu_buffer_occupancy, max_li_overhead, header_overhead, rlcP->nb_sdu_no_segmented); + if ((rlc_pP->status_buffer_occupancy + rlc_pP->retransmission_buffer_occupancy + rlc_pP->sdu_buffer_occupancy + max_li_overhead + header_overhead) > 0) { + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : STATUS BUFFER %d bytes \n", frameP, rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->status_buffer_occupancy); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : RETRANS BUFFER %d bytes \n", frameP, rlc_pP->module_id,rlc_pP->rb_id, rlc_pP->retransmission_buffer_occupancy); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BO : SDU BUFFER %d bytes + li_overhead %d bytes header_overhead %d bytes (nb sdu not segmented %d)\n", frameP, rlc_pP->module_id,rlc_pP->rb_id, rlc_pP->sdu_buffer_occupancy, max_li_overhead, header_overhead, rlc_pP->nb_sdu_no_segmented); } #endif - return rlcP->status_buffer_occupancy + rlcP->retransmission_buffer_occupancy + rlcP->sdu_buffer_occupancy + max_li_overhead + header_overhead; + return rlc_pP->status_buffer_occupancy + rlc_pP->retransmission_buffer_occupancy + rlc_pP->sdu_buffer_occupancy + max_li_overhead + header_overhead; } //----------------------------------------------------------------------------- -void rlc_am_release (rlc_am_entity_t *rlcP) +void rlc_am_release (rlc_am_entity_t *rlc_pP) //----------------------------------------------------------------------------- { } //----------------------------------------------------------------------------- -void config_req_rlc_am (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, module_id_t module_idP, rlc_am_info_t * config_amP, rb_id_t rb_idP, rb_type_t rb_typeP) +void config_req_rlc_am (rlc_am_entity_t *rlc_pP, u32_t frameP, u8_t eNB_flagP, module_id_t module_idP, rlc_am_info_t * config_amP, rb_id_t rb_idP, rb_type_t rb_typeP) { //----------------------------------------------------------------------------- LOG_D(RLC, "[MSC_MSG][FRAME %05d][RRC_%s][MOD %02d][][--- CONFIG_REQ (max_retx_threshold=%d poll_pdu=%d poll_byte=%d t_poll_retransmit=%d t_reord=%d t_status_prohibit=%d) --->][RLC_AM][MOD %02d][RB %02d]\n", - frame, + frameP, ( Mac_rlc_xface->Is_cluster_head[module_idP] == 1) ? "eNB":"UE", module_idP, config_amP->max_retx_threshold, @@ -112,9 +119,9 @@ void config_req_rlc_am (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, modu module_idP, rb_idP); - rlc_am_init(rlcP,frame); - rlc_am_set_debug_infos(rlcP, frame, eNB_flagP, module_idP, rb_idP, rb_typeP); - rlc_am_configure(rlcP,frame, + rlc_am_init(rlc_pP,frameP); + rlc_am_set_debug_infos(rlc_pP, frameP, eNB_flagP, module_idP, rb_idP, rb_typeP); + rlc_am_configure(rlc_pP,frameP, config_amP->max_retx_threshold, config_amP->poll_pdu, config_amP->poll_byte, @@ -131,7 +138,7 @@ u32_t am_t_Reordering_tab[T_Reordering_spare1]={0,5,10,15,20,25,30,35,40,45,50,5 u32_t t_StatusProhibit_tab[T_StatusProhibit_spare8]={0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,300,350,400,450,500}; //----------------------------------------------------------------------------- -void config_req_rlc_am_asn1 (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, module_id_t module_idP, struct RLC_Config__am * config_amP, rb_id_t rb_idP, rb_type_t rb_typeP) +void config_req_rlc_am_asn1 (rlc_am_entity_t *rlc_pP, u32_t frameP, u8_t eNB_flagP, module_id_t module_idP, struct RLC_Config__am * config_amP, rb_id_t rb_idP, rb_type_t rb_typeP) { //----------------------------------------------------------------------------- if ( (config_amP->ul_AM_RLC.maxRetxThreshold <= UL_AM_RLC__maxRetxThreshold_t32) && @@ -142,7 +149,7 @@ void config_req_rlc_am_asn1 (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, (config_amP->dl_AM_RLC.t_StatusProhibit<T_StatusProhibit_spare8) ){ LOG_D(RLC, "[MSC_MSG][FRAME %05d][RRC_%s][MOD %02d][][--- CONFIG_REQ (max_retx_threshold=%d poll_pdu=%d poll_byte=%d t_poll_retransmit=%d t_reord=%d t_status_prohibit=%d) --->][RLC_AM][MOD %02d][RB %02d]\n", - frame, + frameP, ( Mac_rlc_xface->Is_cluster_head[module_idP] == 1) ? "eNB":"UE", module_idP, maxRetxThreshold_tab[config_amP->ul_AM_RLC.maxRetxThreshold], @@ -154,9 +161,9 @@ void config_req_rlc_am_asn1 (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, module_idP, rb_idP); - rlc_am_init(rlcP,frame); - rlc_am_set_debug_infos(rlcP, frame, eNB_flagP, module_idP, rb_idP, rb_typeP); - rlc_am_configure(rlcP,frame, + rlc_am_init(rlc_pP,frameP); + rlc_am_set_debug_infos(rlc_pP, frameP, eNB_flagP, module_idP, rb_idP, rb_typeP); + rlc_am_configure(rlc_pP,frameP, maxRetxThreshold_tab[config_amP->ul_AM_RLC.maxRetxThreshold], pollPDU_tab[config_amP->ul_AM_RLC.pollPDU], pollByte_tab[config_amP->ul_AM_RLC.pollByte], @@ -167,7 +174,7 @@ void config_req_rlc_am_asn1 (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, } else { LOG_D(RLC, "[MSC_MSG][FRAME %05d][RRC_%s][MOD %02d][][--- ILLEGAL CONFIG_REQ (max_retx_threshold=%d poll_pdu=%d poll_byte=%d t_poll_retransmit=%d t_reord=%d t_status_prohibit=%d) --->][RLC_AM][MOD %02d][RB %02d], RLC-AM NOT CONFIGURED\n", - frame, + frameP, ( Mac_rlc_xface->Is_cluster_head[module_idP] == 1) ? "eNB":"UE", module_idP, config_amP->ul_AM_RLC.maxRetxThreshold, @@ -182,7 +189,7 @@ void config_req_rlc_am_asn1 (rlc_am_entity_t *rlcP, u32_t frame, u8_t eNB_flagP, } //----------------------------------------------------------------------------- -void rlc_am_stat_req (rlc_am_entity_t *rlcP, +void rlc_am_stat_req (rlc_am_entity_t *rlc_pP, unsigned int* stat_tx_pdcp_sdu, unsigned int* stat_tx_pdcp_bytes, unsigned int* stat_tx_pdcp_sdu_discarded, @@ -212,38 +219,38 @@ void rlc_am_stat_req (rlc_am_entity_t *rlcP, unsigned int* stat_timer_status_prohibit_timed_out) //----------------------------------------------------------------------------- { - *stat_tx_pdcp_sdu = rlcP->stat_tx_pdcp_sdu; - *stat_tx_pdcp_bytes = rlcP->stat_tx_pdcp_bytes; - *stat_tx_pdcp_sdu_discarded = rlcP->stat_tx_pdcp_sdu_discarded; - *stat_tx_pdcp_bytes_discarded = rlcP->stat_tx_pdcp_bytes_discarded; - *stat_tx_data_pdu = rlcP->stat_tx_data_pdu; - *stat_tx_data_bytes = rlcP->stat_tx_data_bytes; - *stat_tx_retransmit_pdu_by_status = rlcP->stat_tx_retransmit_pdu_by_status; - *stat_tx_retransmit_bytes_by_status = rlcP->stat_tx_retransmit_bytes_by_status; - *stat_tx_retransmit_pdu = rlcP->stat_tx_retransmit_pdu; - *stat_tx_retransmit_bytes = rlcP->stat_tx_retransmit_bytes; - *stat_tx_control_pdu = rlcP->stat_tx_control_pdu; - *stat_tx_control_bytes = rlcP->stat_tx_control_bytes; - *stat_rx_pdcp_sdu = rlcP->stat_rx_pdcp_sdu; - *stat_rx_pdcp_bytes = rlcP->stat_rx_pdcp_bytes; - *stat_rx_data_pdus_duplicate = rlcP->stat_rx_data_pdus_duplicate; - *stat_rx_data_bytes_duplicate = rlcP->stat_rx_data_bytes_duplicate; - *stat_rx_data_pdu = rlcP->stat_rx_data_pdu; - *stat_rx_data_bytes = rlcP->stat_rx_data_bytes; - *stat_rx_data_pdu_dropped = rlcP->stat_rx_data_pdu_dropped; - *stat_rx_data_bytes_dropped = rlcP->stat_rx_data_bytes_dropped; - *stat_rx_data_pdu_out_of_window = rlcP->stat_rx_data_pdu_out_of_window; - *stat_rx_data_bytes_out_of_window = rlcP->stat_rx_data_bytes_out_of_window; - *stat_rx_control_pdu = rlcP->stat_rx_control_pdu; - *stat_rx_control_bytes = rlcP->stat_rx_control_bytes; - *stat_timer_reordering_timed_out = rlcP->stat_timer_reordering_timed_out; - *stat_timer_poll_retransmit_timed_out = rlcP->stat_timer_poll_retransmit_timed_out; - *stat_timer_status_prohibit_timed_out = rlcP->stat_timer_status_prohibit_timed_out; + *stat_tx_pdcp_sdu = rlc_pP->stat_tx_pdcp_sdu; + *stat_tx_pdcp_bytes = rlc_pP->stat_tx_pdcp_bytes; + *stat_tx_pdcp_sdu_discarded = rlc_pP->stat_tx_pdcp_sdu_discarded; + *stat_tx_pdcp_bytes_discarded = rlc_pP->stat_tx_pdcp_bytes_discarded; + *stat_tx_data_pdu = rlc_pP->stat_tx_data_pdu; + *stat_tx_data_bytes = rlc_pP->stat_tx_data_bytes; + *stat_tx_retransmit_pdu_by_status = rlc_pP->stat_tx_retransmit_pdu_by_status; + *stat_tx_retransmit_bytes_by_status = rlc_pP->stat_tx_retransmit_bytes_by_status; + *stat_tx_retransmit_pdu = rlc_pP->stat_tx_retransmit_pdu; + *stat_tx_retransmit_bytes = rlc_pP->stat_tx_retransmit_bytes; + *stat_tx_control_pdu = rlc_pP->stat_tx_control_pdu; + *stat_tx_control_bytes = rlc_pP->stat_tx_control_bytes; + *stat_rx_pdcp_sdu = rlc_pP->stat_rx_pdcp_sdu; + *stat_rx_pdcp_bytes = rlc_pP->stat_rx_pdcp_bytes; + *stat_rx_data_pdus_duplicate = rlc_pP->stat_rx_data_pdus_duplicate; + *stat_rx_data_bytes_duplicate = rlc_pP->stat_rx_data_bytes_duplicate; + *stat_rx_data_pdu = rlc_pP->stat_rx_data_pdu; + *stat_rx_data_bytes = rlc_pP->stat_rx_data_bytes; + *stat_rx_data_pdu_dropped = rlc_pP->stat_rx_data_pdu_dropped; + *stat_rx_data_bytes_dropped = rlc_pP->stat_rx_data_bytes_dropped; + *stat_rx_data_pdu_out_of_window = rlc_pP->stat_rx_data_pdu_out_of_window; + *stat_rx_data_bytes_out_of_window = rlc_pP->stat_rx_data_bytes_out_of_window; + *stat_rx_control_pdu = rlc_pP->stat_rx_control_pdu; + *stat_rx_control_bytes = rlc_pP->stat_rx_control_bytes; + *stat_timer_reordering_timed_out = rlc_pP->stat_timer_reordering_timed_out; + *stat_timer_poll_retransmit_timed_out = rlc_pP->stat_timer_poll_retransmit_timed_out; + *stat_timer_status_prohibit_timed_out = rlc_pP->stat_timer_status_prohibit_timed_out; } //----------------------------------------------------------------------------- void -rlc_am_get_pdus (rlc_am_entity_t *rlcP,u32_t frame) +rlc_am_get_pdus (rlc_am_entity_t *rlc_pP,u32_t frameP) { //----------------------------------------------------------------------------- int display_flag = 0; @@ -255,14 +262,14 @@ rlc_am_get_pdus (rlc_am_entity_t *rlcP,u32_t frame) // AMD PDUs. - switch (rlcP->protocol_state) { + switch (rlc_pP->protocol_state) { case RLC_NULL_STATE: break; case RLC_DATA_TRANSFER_READY_STATE: // TRY TO SEND CONTROL PDU FIRST - if ((rlcP->nb_bytes_requested_by_mac > 2) && (rlcP->status_requested)) { + if ((rlc_pP->nb_bytes_requested_by_mac > 2) && (rlc_pP->status_requested)) { // When STATUS reporting has been triggered, the receiving side of an AM RLC entity shall: // - if t-StatusProhibit is not running: // - at the first transmission opportunity indicated by lower layer, construct a STATUS PDU and deliver it to lower layer; @@ -273,30 +280,30 @@ rlc_am_get_pdus (rlc_am_entity_t *rlcP,u32_t frame) // // When a STATUS PDU has been delivered to lower layer, the receiving side of an AM RLC entity shall: // - start t-StatusProhibit. - if (rlcP->t_status_prohibit.running == 0) { - rlc_am_send_status_pdu(rlcP,frame); - mem_block_t* pdu = list_remove_head(&rlcP->control_pdu_list); + if (rlc_pP->t_status_prohibit.running == 0) { + rlc_am_send_status_pdu(rlc_pP,frameP); + mem_block_t* pdu = list_remove_head(&rlc_pP->control_pdu_list); if (pdu) { - list_add_tail_eurecom (pdu, &rlcP->pdus_to_mac_layer); - rlcP->status_requested = 0; - rlc_am_start_timer_status_prohibit(rlcP,frame); + list_add_tail_eurecom (pdu, &rlc_pP->pdus_to_mac_layer); + rlc_pP->status_requested = 0; + rlc_am_start_timer_status_prohibit(rlc_pP,frameP); return; } } else { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] DELAYED SENT STATUS PDU BECAUSE T-STATUS-PROHIBIT RUNNING (TIME-OUT FRAME %05d)\n",frame, rlcP->module_id, rlcP->rb_id, rlcP->t_status_prohibit.frame_time_out); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] DELAYED SENT STATUS PDU BECAUSE T-STATUS-PROHIBIT RUNNING (TIME-OUT FRAME %05d)\n",frameP, rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->t_status_prohibit.frame_time_out); } } - /*while ((rlcP->nb_bytes_requested_by_mac > 0) && (stay_on_this_list)) { - mem_block_t* pdu = list_get_head(&rlcP->control_pdu_list); + /*while ((rlc_pP->nb_bytes_requested_by_mac > 0) && (stay_on_this_list)) { + mem_block_t* pdu = list_get_head(&rlc_pP->control_pdu_list); if (pdu != NULL { - if ( ((rlc_am_tx_control_pdu_management_t*)(pdu->data))->size <= rlcP->nb_bytes_requested_by_mac) { - pdu = list_remove_head(&rlcP->control_pdu_list); + if ( ((rlc_am_tx_control_pdu_management_t*)(pdu->data))->size <= rlc_pP->nb_bytes_requested_by_mac) { + pdu = list_remove_head(&rlc_pP->control_pdu_list); #ifdef TRACE_RLC_AM_TX - msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND CONTROL PDU\n", ((rlc_am_entity_t *) rlcP)->module_id,((rlc_am_entity_t *) rlcP)->rb_id, frame); + msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND CONTROL PDU\n", ((rlc_am_entity_t *) rlc_pP)->module_id,((rlc_am_entity_t *) rlc_pP)->rb_id, frameP); #endif - list_add_tail_eurecom (pdu, &rlcP->pdus_to_mac_layer); - rlcP->nb_bytes_requested_by_mac = rlcP->nb_bytes_requested_by_mac - ((rlc_am_tx_control_pdu_management_t*)(pdu->data))->size; + list_add_tail_eurecom (pdu, &rlc_pP->pdus_to_mac_layer); + rlc_pP->nb_bytes_requested_by_mac = rlc_pP->nb_bytes_requested_by_mac - ((rlc_am_tx_control_pdu_management_t*)(pdu->data))->size; } else { stay_on_this_list = 0; } @@ -305,113 +312,113 @@ rlc_am_get_pdus (rlc_am_entity_t *rlcP,u32_t frame) } }*/ // THEN TRY TO SEND RETRANS PDU - if (rlcP->first_retrans_pdu_sn >= 0) { + if (rlc_pP->first_retrans_pdu_sn >= 0) { rlc_am_tx_data_pdu_management_t* tx_data_pdu_management; // tx min 3 bytes because of the size of the RLC header - while ((rlcP->nb_bytes_requested_by_mac > 2) && - (rlcP->first_retrans_pdu_sn >= 0) && - (rlcP->first_retrans_pdu_sn != rlcP->vt_s)) { + while ((rlc_pP->nb_bytes_requested_by_mac > 2) && + (rlc_pP->first_retrans_pdu_sn >= 0) && + (rlc_pP->first_retrans_pdu_sn != rlc_pP->vt_s)) { - tx_data_pdu_management = &rlcP->pdu_retrans_buffer[rlcP->first_retrans_pdu_sn]; + tx_data_pdu_management = &rlc_pP->pdu_retrans_buffer[rlc_pP->first_retrans_pdu_sn]; - if ((tx_data_pdu_management->header_and_payload_size <= rlcP->nb_bytes_requested_by_mac) && (tx_data_pdu_management->retx_count >= 0) && (tx_data_pdu_management->nack_so_start == 0) && (tx_data_pdu_management->nack_so_stop == 0x7FFF)) { - mem_block_t* copy = rlc_am_retransmit_get_copy(rlcP, frame,rlcP->first_retrans_pdu_sn); - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RE-SEND DATA PDU SN %04d %d BYTES\n",frame, rlcP->module_id,rlcP->rb_id, rlcP->first_retrans_pdu_sn, tx_data_pdu_management->header_and_payload_size); - rlcP->stat_tx_data_pdu += 1; - rlcP->stat_tx_retransmit_pdu += 1; - rlcP->stat_tx_retransmit_pdu_by_status += 1; - rlcP->stat_tx_data_bytes += tx_data_pdu_management->header_and_payload_size; - rlcP->stat_tx_retransmit_bytes += tx_data_pdu_management->header_and_payload_size; - rlcP->stat_tx_retransmit_bytes_by_status += tx_data_pdu_management->header_and_payload_size; + if ((tx_data_pdu_management->header_and_payload_size <= rlc_pP->nb_bytes_requested_by_mac) && (tx_data_pdu_management->retx_count >= 0) && (tx_data_pdu_management->nack_so_start == 0) && (tx_data_pdu_management->nack_so_stop == 0x7FFF)) { + mem_block_t* copy = rlc_am_retransmit_get_copy(rlc_pP, frameP,rlc_pP->first_retrans_pdu_sn); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RE-SEND DATA PDU SN %04d %d BYTES\n",frameP, rlc_pP->module_id,rlc_pP->rb_id, rlc_pP->first_retrans_pdu_sn, tx_data_pdu_management->header_and_payload_size); + rlc_pP->stat_tx_data_pdu += 1; + rlc_pP->stat_tx_retransmit_pdu += 1; + rlc_pP->stat_tx_retransmit_pdu_by_status += 1; + rlc_pP->stat_tx_data_bytes += tx_data_pdu_management->header_and_payload_size; + rlc_pP->stat_tx_retransmit_bytes += tx_data_pdu_management->header_and_payload_size; + rlc_pP->stat_tx_retransmit_bytes_by_status += tx_data_pdu_management->header_and_payload_size; - list_add_tail_eurecom (copy, &rlcP->pdus_to_mac_layer); - rlcP->nb_bytes_requested_by_mac = rlcP->nb_bytes_requested_by_mac - tx_data_pdu_management->header_and_payload_size; + list_add_tail_eurecom (copy, &rlc_pP->pdus_to_mac_layer); + rlc_pP->nb_bytes_requested_by_mac = rlc_pP->nb_bytes_requested_by_mac - tx_data_pdu_management->header_and_payload_size; tx_data_pdu_management->retx_count += 1; return; - } else if ((tx_data_pdu_management->retx_count >= 0) && (rlcP->nb_bytes_requested_by_mac >= RLC_AM_MIN_SEGMENT_SIZE_REQUEST)) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND SEGMENT OF DATA PDU SN %04d MAC BYTES %d SIZE %d RTX COUNT %d nack_so_start %d nack_so_stop %04X(hex)\n", frame, rlcP->module_id,rlcP->rb_id, - rlcP->first_retrans_pdu_sn, - rlcP->nb_bytes_requested_by_mac, + } else if ((tx_data_pdu_management->retx_count >= 0) && (rlc_pP->nb_bytes_requested_by_mac >= RLC_AM_MIN_SEGMENT_SIZE_REQUEST)) { + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND SEGMENT OF DATA PDU SN %04d MAC BYTES %d SIZE %d RTX COUNT %d nack_so_start %d nack_so_stop %04X(hex)\n", frameP, rlc_pP->module_id,rlc_pP->rb_id, + rlc_pP->first_retrans_pdu_sn, + rlc_pP->nb_bytes_requested_by_mac, tx_data_pdu_management->header_and_payload_size, tx_data_pdu_management->retx_count, tx_data_pdu_management->nack_so_start, tx_data_pdu_management->nack_so_stop); - mem_block_t* copy = rlc_am_retransmit_get_subsegment(rlcP, frame, rlcP->first_retrans_pdu_sn, &rlcP->nb_bytes_requested_by_mac); - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND SEGMENT OF DATA PDU SN %04d (NEW SO %05d)\n", frame, rlcP->module_id,rlcP->rb_id, rlcP->first_retrans_pdu_sn, tx_data_pdu_management->nack_so_start); - rlcP->stat_tx_data_pdu += 1; - rlcP->stat_tx_retransmit_pdu += 1; - rlcP->stat_tx_retransmit_pdu_by_status += 1; - rlcP->stat_tx_data_bytes += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); - rlcP->stat_tx_retransmit_bytes += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); - rlcP->stat_tx_retransmit_bytes_by_status += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); - list_add_tail_eurecom (copy, &rlcP->pdus_to_mac_layer); + mem_block_t* copy = rlc_am_retransmit_get_subsegment(rlc_pP, frameP, rlc_pP->first_retrans_pdu_sn, &rlc_pP->nb_bytes_requested_by_mac); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] SEND SEGMENT OF DATA PDU SN %04d (NEW SO %05d)\n", frameP, rlc_pP->module_id,rlc_pP->rb_id, rlc_pP->first_retrans_pdu_sn, tx_data_pdu_management->nack_so_start); + rlc_pP->stat_tx_data_pdu += 1; + rlc_pP->stat_tx_retransmit_pdu += 1; + rlc_pP->stat_tx_retransmit_pdu_by_status += 1; + rlc_pP->stat_tx_data_bytes += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); + rlc_pP->stat_tx_retransmit_bytes += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); + rlc_pP->stat_tx_retransmit_bytes_by_status += (((struct mac_tb_req*)(copy->data))->tb_size_in_bits >> 3); + list_add_tail_eurecom (copy, &rlc_pP->pdus_to_mac_layer); } else { break; } // update first_retrans_pdu_sn - while ((rlcP->first_retrans_pdu_sn != rlcP->vt_s) && - (!(rlcP->pdu_retrans_buffer[rlcP->first_retrans_pdu_sn].flags.retransmit))) { - rlcP->first_retrans_pdu_sn = (rlcP->first_retrans_pdu_sn+1) & RLC_AM_SN_MASK; - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] UPDATED first_retrans_pdu_sn SN %04d\n", frame, rlcP->module_id, rlcP->rb_id, rlcP->first_retrans_pdu_sn); + while ((rlc_pP->first_retrans_pdu_sn != rlc_pP->vt_s) && + (!(rlc_pP->pdu_retrans_buffer[rlc_pP->first_retrans_pdu_sn].flags.retransmit))) { + rlc_pP->first_retrans_pdu_sn = (rlc_pP->first_retrans_pdu_sn+1) & RLC_AM_SN_MASK; + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] UPDATED first_retrans_pdu_sn SN %04d\n", frameP, rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->first_retrans_pdu_sn); }; display_flag = 1; - if (rlcP->first_retrans_pdu_sn == rlcP->vt_s) { + if (rlc_pP->first_retrans_pdu_sn == rlc_pP->vt_s) { // no more pdu to be retransmited - rlcP->first_retrans_pdu_sn = -1; + rlc_pP->first_retrans_pdu_sn = -1; display_flag = 0; - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] CLEAR first_retrans_pdu_sn\n",frame, rlcP->module_id, rlcP->rb_id); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] CLEAR first_retrans_pdu_sn\n",frameP, rlc_pP->module_id, rlc_pP->rb_id); } if (display_flag > 0) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] UPDATED first_retrans_pdu_sn %04d\n", frame, rlcP->module_id, rlcP->rb_id, rlcP->first_retrans_pdu_sn); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] UPDATED first_retrans_pdu_sn %04d\n", frameP, rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->first_retrans_pdu_sn); } return; /* ONLY ONE TB PER TTI - if ((tx_data_pdu_management->retx_count >= 0) && (rlcP->nb_bytes_requested_by_mac < RLC_AM_MIN_SEGMENT_SIZE_REQUEST)) { + if ((tx_data_pdu_management->retx_count >= 0) && (rlc_pP->nb_bytes_requested_by_mac < RLC_AM_MIN_SEGMENT_SIZE_REQUEST)) { #ifdef TRACE_RLC_AM_TX - msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BREAK LOOP ON RETRANSMISSION BECAUSE ONLY %d BYTES ALLOWED TO TRANSMIT BY MAC\n",frame, ((rlc_am_entity_t *) rlcP)->module_id,((rlc_am_entity_t *) rlcP)->rb_id, rlcP->nb_bytes_requested_by_mac); + msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] BREAK LOOP ON RETRANSMISSION BECAUSE ONLY %d BYTES ALLOWED TO TRANSMIT BY MAC\n",frameP, ((rlc_am_entity_t *) rlc_pP)->module_id,((rlc_am_entity_t *) rlc_pP)->rb_id, rlc_pP->nb_bytes_requested_by_mac); #endif break; }*/ } } - if ((rlcP->nb_bytes_requested_by_mac > 2) && (rlcP->vt_s != rlcP->vt_ms)) { - rlc_am_segment_10(rlcP,frame); - list_add_list (&rlcP->segmentation_pdu_list, &rlcP->pdus_to_mac_layer); - if (rlcP->pdus_to_mac_layer.head != NULL) { - rlcP->stat_tx_data_pdu += 1; - rlcP->stat_tx_data_bytes += (((struct mac_tb_req*)(rlcP->pdus_to_mac_layer.head->data))->tb_size_in_bits >> 3); + if ((rlc_pP->nb_bytes_requested_by_mac > 2) && (rlc_pP->vt_s != rlc_pP->vt_ms)) { + rlc_am_segment_10(rlc_pP,frameP); + list_add_list (&rlc_pP->segmentation_pdu_list, &rlc_pP->pdus_to_mac_layer); + if (rlc_pP->pdus_to_mac_layer.head != NULL) { + rlc_pP->stat_tx_data_pdu += 1; + rlc_pP->stat_tx_data_bytes += (((struct mac_tb_req*)(rlc_pP->pdus_to_mac_layer.head->data))->tb_size_in_bits >> 3); return; } } - if ((rlcP->pdus_to_mac_layer.head == NULL) && (rlc_am_is_timer_poll_retransmit_timed_out(rlcP)) && (rlcP->nb_bytes_requested_by_mac > 2)) { - rlc_am_retransmit_any_pdu(rlcP,frame); + if ((rlc_pP->pdus_to_mac_layer.head == NULL) && (rlc_am_is_timer_poll_retransmit_timed_out(rlc_pP)) && (rlc_pP->nb_bytes_requested_by_mac > 2)) { + rlc_am_retransmit_any_pdu(rlc_pP,frameP); return; } else { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] COULD NOT RETRANSMIT ANY PDU BECAUSE ",frame, rlcP->module_id, rlcP->rb_id); - if (rlcP->pdus_to_mac_layer.head != NULL) { + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] COULD NOT RETRANSMIT ANY PDU BECAUSE ",frameP, rlc_pP->module_id, rlc_pP->rb_id); + if (rlc_pP->pdus_to_mac_layer.head != NULL) { LOG_D(RLC, "THERE ARE SOME PDUS READY TO TRANSMIT "); } - if (!(rlc_am_is_timer_poll_retransmit_timed_out(rlcP))) { - LOG_D(RLC, "TIMER POLL DID NOT TIMED OUT (RUNNING = %d NUM PDUS TO RETRANS = %d NUM BYTES TO RETRANS = %d) ", rlcP->t_poll_retransmit.running, rlcP->retrans_num_pdus, rlcP->retrans_num_bytes_to_retransmit); + if (!(rlc_am_is_timer_poll_retransmit_timed_out(rlc_pP))) { + LOG_D(RLC, "TIMER POLL DID NOT TIMED OUT (RUNNING = %d NUM PDUS TO RETRANS = %d NUM BYTES TO RETRANS = %d) ", rlc_pP->t_poll_retransmit.running, rlc_pP->retrans_num_pdus, rlc_pP->retrans_num_bytes_to_retransmit); } - if (rlcP->nb_bytes_requested_by_mac <= 2) { - LOG_D(RLC, "NUM BYTES REQUESTED BY MAC = %d", rlcP->nb_bytes_requested_by_mac); + if (rlc_pP->nb_bytes_requested_by_mac <= 2) { + LOG_D(RLC, "NUM BYTES REQUESTED BY MAC = %d", rlc_pP->nb_bytes_requested_by_mac); } LOG_D(RLC, "\n"); } break; default: - LOG_E(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_DATA_REQ UNKNOWN PROTOCOL STATE 0x%02X\n", frame, rlcP->module_id, rlcP->rb_id, rlcP->protocol_state); + LOG_E(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_DATA_REQ UNKNOWN PROTOCOL STATE 0x%02X\n", frameP, rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->protocol_state); } } //----------------------------------------------------------------------------- void -rlc_am_rx (void *argP, u32_t frame, u8_t eNB_flag, struct mac_data_ind data_indP) +rlc_am_rx (void *argP, u32_t frameP, u8_t eNB_flagP, struct mac_data_ind data_indP) { //----------------------------------------------------------------------------- @@ -425,7 +432,7 @@ rlc_am_rx (void *argP, u32_t frame, u8_t eNB_flag, struct mac_data_ind data_indP break; case RLC_DATA_TRANSFER_READY_STATE: - rlc_am_receive_routing (rlc, frame, eNB_flag, data_indP); + rlc_am_receive_routing (rlc, frameP, eNB_flagP, data_indP); break; default: @@ -435,14 +442,14 @@ rlc_am_rx (void *argP, u32_t frame, u8_t eNB_flag, struct mac_data_ind data_indP //----------------------------------------------------------------------------- struct mac_status_resp -rlc_am_mac_status_indication (void *rlcP, u32 frame, u16 tb_sizeP, struct mac_status_ind tx_statusP) +rlc_am_mac_status_indication (void *rlc_pP, u32 frameP, u16 tb_sizeP, struct mac_status_ind tx_statusP) { //----------------------------------------------------------------------------- struct mac_status_resp status_resp; u16_t sdu_size = 0; u16_t sdu_remaining_size = 0; s32_t diff_time=0; - rlc_am_entity_t *rlc = (rlc_am_entity_t *) rlcP; + rlc_am_entity_t *rlc = (rlc_am_entity_t *) rlc_pP; status_resp.buffer_occupancy_in_bytes = 0; status_resp.buffer_occupancy_in_pdus = 0; @@ -451,24 +458,24 @@ rlc_am_mac_status_indication (void *rlcP, u32 frame, u16 tb_sizeP, struct mac_st status_resp.head_sdu_is_segmented = 0; status_resp.rlc_info.rlc_protocol_state = rlc->protocol_state; - if (rlc->last_frame_status_indication != frame) { - rlc_am_check_timer_poll_retransmit(rlc,frame); - rlc_am_check_timer_reordering(rlc,frame); - rlc_am_check_timer_status_prohibit(rlc,frame); + if (rlc->last_frame_status_indication != frameP) { + rlc_am_check_timer_poll_retransmit(rlc,frameP); + rlc_am_check_timer_reordering(rlc,frameP); + rlc_am_check_timer_status_prohibit(rlc,frameP); } - rlc->last_frame_status_indication = frame; + rlc->last_frame_status_indication = frameP; rlc->nb_bytes_requested_by_mac = tb_sizeP; - status_resp.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(rlc,frame); + status_resp.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(rlc,frameP); if ((rlc->input_sdus[rlc->current_sdu_index].mem_block != NULL) && (status_resp.buffer_occupancy_in_bytes)) { //status_resp.buffer_occupancy_in_bytes += ((rlc_am_entity_t *) rlc)->tx_header_min_length_in_bytes; status_resp.buffer_occupancy_in_pdus = rlc->nb_sdu; - diff_time = frame - ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_creation_time; + diff_time = frameP - ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_creation_time; - status_resp.head_sdu_creation_time = (diff_time > 0 ) ? (u32_t) diff_time : (u32_t)(0xffffffff - diff_time + frame) ; + status_resp.head_sdu_creation_time = (diff_time > 0 ) ? (u32_t) diff_time : (u32_t)(0xffffffff - diff_time + frameP) ; sdu_size = ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_size; sdu_remaining_size = ((rlc_am_tx_sdu_management_t *) (rlc->input_sdus[rlc->current_sdu_index].mem_block->data))->sdu_remaining_size; @@ -487,14 +494,14 @@ rlc_am_mac_status_indication (void *rlcP, u32 frame, u16 tb_sizeP, struct mac_st #ifdef TRACE_RLC_AM_TX_STATUS if (tb_sizeP > 0) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_STATUS_INDICATION (DATA) %d bytes -> %d bytes\n", frame, rlc->module_id, rlc->rb_id, tb_sizeP, status_resp.buffer_occupancy_in_bytes); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_STATUS_INDICATION (DATA) %d bytes -> %d bytes\n", frameP, rlc->module_id, rlc->rb_id, tb_sizeP, status_resp.buffer_occupancy_in_bytes); /*if ((tx_statusP.tx_status == MAC_TX_STATUS_SUCCESSFUL) && (tx_statusP.no_pdu)) { msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_STATUS_INDICATION TX STATUS SUCCESSFUL %d PDUs\n",rlc->module_id, -rlc->rb_id, frame, tx_statusP.no_pdu); +rlc->rb_id, frameP, tx_statusP.no_pdu); } if ((tx_statusP.tx_status == MAC_TX_STATUS_UNSUCCESSFUL) && (tx_statusP.no_pdu)) { msg ("[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_STATUS_INDICATION TX STATUS UNSUCCESSFUL %d PDUs\n",rlc->module_id, rlc->rb_id, -frame, tx_statusP.no_pdu); +frameP, tx_statusP.no_pdu); }*/ } #endif @@ -502,205 +509,340 @@ frame, tx_statusP.no_pdu); } //----------------------------------------------------------------------------- struct mac_data_req -rlc_am_mac_data_request (void *rlcP,u32 frame) +rlc_am_mac_data_request (void *rlc_pP,u32 frameP) { //----------------------------------------------------------------------------- struct mac_data_req data_req; - rlc_am_entity_t *l_rlc = (rlc_am_entity_t *) rlcP; - unsigned int nb_bytes_requested_by_mac = ((rlc_am_entity_t *) rlcP)->nb_bytes_requested_by_mac; + rlc_am_entity_t *l_rlc_p = (rlc_am_entity_t *) rlc_pP; + unsigned int nb_bytes_requested_by_mac = ((rlc_am_entity_t *) rlc_pP)->nb_bytes_requested_by_mac; +#ifdef TRACE_RLC_AM_PDU + rlc_am_pdu_info_t pdu_info; + rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p; + mem_block_t *tb_p; + s16_t tb_size_in_bytes; + int num_nack; + char message_string[9000]; + size_t message_string_size = 0; + MessageDef *msg_p; + int octet_index, index; +#endif - rlc_am_get_pdus (rlcP,frame); + rlc_am_get_pdus (rlc_pP,frameP); list_init (&data_req.data, NULL); - list_add_list (&l_rlc->pdus_to_mac_layer, &data_req.data); - //((rlc_am_entity_t *) rlcP)->tx_pdus += data_req.data.nb_elements; + list_add_list (&l_rlc_p->pdus_to_mac_layer, &data_req.data); + //((rlc_am_entity_t *) rlc_pP)->tx_pdus += data_req.data.nb_elements; if ((nb_bytes_requested_by_mac + data_req.data.nb_elements) > 0) { - LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_DATA_REQUEST %05d BYTES REQUESTED -> %d TBs\n", frame, l_rlc->module_id,l_rlc->rb_id, nb_bytes_requested_by_mac, data_req.data.nb_elements); + LOG_D(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] MAC_DATA_REQUEST %05d BYTES REQUESTED -> %d TBs\n", frameP, l_rlc_p->module_id,l_rlc_p->rb_id, nb_bytes_requested_by_mac, data_req.data.nb_elements); } - data_req.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(l_rlc,frame); - data_req.rlc_info.rlc_protocol_state = l_rlc->protocol_state; + data_req.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(l_rlc_p,frameP); + data_req.rlc_info.rlc_protocol_state = l_rlc_p->protocol_state; +#ifdef TRACE_RLC_AM_PDU if (data_req.data.nb_elements > 0) { - LOG_D(RLC, "[RLC_AM][MOD %d][RB %d][FRAME %05d] MAC_DATA_REQUEST %d TBs\n", l_rlc->module_id, l_rlc->rb_id, frame, data_req.data.nb_elements); - mem_block_t *tb; - rlc[l_rlc->module_id].m_mscgen_trace_length = sprintf(rlc[l_rlc->module_id].m_mscgen_trace, "[MSC_MSG][FRAME %05d][RLC_AM][MOD %02d][RB %02d][--- MAC_DATA_REQ/ %d TB(s) ", - frame, - l_rlc->module_id, - l_rlc->rb_id, - data_req.data.nb_elements); - - tb = data_req.data.head; - - while (tb != NULL) { - - if ((((struct mac_tb_req *) (tb->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], " SN %d %d Bytes ", - (((struct mac_tb_req *) (tb->data))->data_ptr[1]) + (((u16_t)((((struct mac_tb_req *) (tb->data))->data_ptr[0]) & 0x03)) << 8), - ((struct mac_tb_req *) (tb->data))->tb_size_in_bits>>3); + + tb_p = data_req.data.head; + + while (tb_p != NULL) { + + rlc_am_pdu_sn_10_p = (rlc_am_pdu_sn_10_t*)((struct mac_tb_req *) (tb_p->data))->data_ptr; + tb_size_in_bytes = ((struct mac_tb_req *) (tb_p->data))->tb_size_in_bits >> 3; + + if ((((struct mac_tb_req *) (tb_p->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { + if (rlc_am_get_data_pdu_infos(frameP,rlc_am_pdu_sn_10_p, tb_size_in_bytes, &pdu_info) >= 0) { +# if defined(ENABLE_ITTI) + message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); + message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); + message_string_size += sprintf(&message_string[message_string_size], "Header size : %u\n", pdu_info.header_size); + message_string_size += sprintf(&message_string[message_string_size], "Payload size: %u\n", pdu_info.payload_size); + if (pdu_info.rf) { + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA REQ: AMD PDU segment\n\n"); + } else { + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA REQ: AMD PDU\n\n"); + } + message_string_size += sprintf(&message_string[message_string_size], "Header :\n"); + message_string_size += sprintf(&message_string[message_string_size], " D/C : %u\n", pdu_info.d_c); + message_string_size += sprintf(&message_string[message_string_size], " RF : %u\n", pdu_info.rf); + message_string_size += sprintf(&message_string[message_string_size], " P : %u\n", pdu_info.p); + message_string_size += sprintf(&message_string[message_string_size], " FI : %u\n", pdu_info.fi); + message_string_size += sprintf(&message_string[message_string_size], " E : %u\n", pdu_info.e); + message_string_size += sprintf(&message_string[message_string_size], " SN : %u\n", pdu_info.sn); + if (pdu_info.rf) { + message_string_size += sprintf(&message_string[message_string_size], " LSF : %u\n", pdu_info.lsf); + message_string_size += sprintf(&message_string[message_string_size], " SO : %u\n", pdu_info.so); + } + if (pdu_info.e) { + message_string_size += sprintf(&message_string[message_string_size], "\nHeader extension : \n"); + for (index=0; index < pdu_info.num_li; index++) { + message_string_size += sprintf(&message_string[message_string_size], " LI : %u\n", pdu_info.li_list[index]); + } + } + message_string_size += sprintf(&message_string[message_string_size], "\nPayload : \n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + message_string_size += sprintf(&message_string[message_string_size], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + for (octet_index = 0; octet_index < pdu_info.payload_size; octet_index++) { + if ((octet_index % 16) == 0){ + if (octet_index != 0) { + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + } + message_string_size += sprintf(&message_string[message_string_size], " %04d |", octet_index); + } + /* + * Print every single octet in hexadecimal form + */ + message_string_size += sprintf(&message_string[message_string_size], " %02x", pdu_info.payload[octet_index]); + /* + * Align newline and pipes according to the octets in groups of 2 + */ + } + /* + * Append enough spaces and put final pipe + */ + for (index = octet_index; index < 16; ++index) { + message_string_size += sprintf(&message_string[message_string_size], " "); + } + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + + msg_p = itti_alloc_new_message_sized (l_rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_DATA_PDU_REQ, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rlc_am_data_pdu_req.size = message_string_size; + memcpy(&msg_p->ittiMsg.rlc_am_data_pdu_req.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, l_rlc_p->module_id + NB_eNB_INST, msg_p); +# else + rlc_am_display_data_pdu_infos(l_rlc_p, frameP, pdu_info); +# endif + } } else { - if ((((struct mac_tb_req *) (tb->data))->data_ptr[1] & 0x02) == 0 ) { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], " STATUS ACK SN %d ... %d Bytes ", - (((struct mac_tb_req *) (tb->data))->data_ptr[1] >> 2) + (((u16_t)((((struct mac_tb_req *) (tb->data))->data_ptr[0]) & 0x0F)) << 8), - ((struct mac_tb_req *) (tb->data))->tb_size_in_bits>>3); - } else { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], " STATUS ACK SN %d %d Bytes ", - (((struct mac_tb_req *) (tb->data))->data_ptr[1] >> 2) + (((u16_t)((((struct mac_tb_req *) (tb->data))->data_ptr[0]) & 0x0F)) << 8), - ((struct mac_tb_req *) (tb->data))->tb_size_in_bits>>3); + if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, &tb_size_in_bytes, &g_rlc_am_control_pdu_info) >= 0) { + tb_size_in_bytes = ((struct mac_tb_req *) (tb_p->data))->tb_size_in_bits >> 3; //tb_size_in_bytes modified by rlc_am_get_control_pdu_infos! + +# if defined(ENABLE_ITTI) + message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); + message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA REQ: STATUS PDU\n\n"); + message_string_size += sprintf(&message_string[message_string_size], "Header :\n"); + message_string_size += sprintf(&message_string[message_string_size], " D/C : %u\n", g_rlc_am_control_pdu_info.d_c); + message_string_size += sprintf(&message_string[message_string_size], " CPT : %u\n", g_rlc_am_control_pdu_info.cpt); + message_string_size += sprintf(&message_string[message_string_size], " ACK_SN : %u\n", g_rlc_am_control_pdu_info.ack_sn); + message_string_size += sprintf(&message_string[message_string_size], " E1 : %u\n", g_rlc_am_control_pdu_info.e1); + for (num_nack = 0; num_nack < g_rlc_am_control_pdu_info.num_nack; num_nack++) { + if (g_rlc_am_control_pdu_info.nack_list[num_nack].e2) { + message_string_size += sprintf(&message_string[message_string_size], " NACK SN %04d SO START %05d SO END %05d", + g_rlc_am_control_pdu_info.nack_list[num_nack].nack_sn, + g_rlc_am_control_pdu_info.nack_list[num_nack].so_start, + g_rlc_am_control_pdu_info.nack_list[num_nack].so_end); + } else { + message_string_size += sprintf(&message_string[message_string_size], " NACK SN %04d", g_rlc_am_control_pdu_info.nack_list[num_nack].nack_sn); + } + } + msg_p = itti_alloc_new_message_sized (l_rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_STATUS_PDU_REQ, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rlc_am_status_pdu_req.size = message_string_size; + memcpy(&msg_p->ittiMsg.rlc_am_status_pdu_req.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, l_rlc_p->module_id + NB_eNB_INST, msg_p); +# endif } } - tb = tb->next; + tb_p = tb_p->next; } - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], "BO=%d --->][MAC_%s][MOD %02d][]\n", - data_req.buffer_occupancy_in_bytes, - (l_rlc->is_enb) ? "eNB":"UE", - l_rlc->module_id); - rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length] = 0; - LOG_D(RLC, "%s", rlc[l_rlc->module_id].m_mscgen_trace); } - +#endif return data_req; } //----------------------------------------------------------------------------- void -rlc_am_mac_data_indication (void *rlcP, u32_t frame, u8 eNB_flag, struct mac_data_ind data_indP) +rlc_am_mac_data_indication (void *rlc_pP, u32_t frameP, u8 eNB_flagP, struct mac_data_ind data_indP) { //----------------------------------------------------------------------------- - rlc_am_entity_t *l_rlc = (rlc_am_entity_t *) rlcP; - rlc_am_pdu_info_t pdu_info; - rlc_am_control_pdu_info_t control_pdu_info; - mem_block_t *tb; + rlc_am_entity_t *l_rlc_p = (rlc_am_entity_t *) rlc_pP; + /*rlc_am_control_pdu_info_t control_pdu_info; int num_li; - int num_nack; - s16_t tb_size; - - if (data_indP.data.nb_elements > 0) { - LOG_D(RLC, "[RLC_AM][MOD %d][RB %d][FRAME %05d] MAC_DATA_IND %d TBs\n", l_rlc->module_id, l_rlc->rb_id, frame, data_indP.data.nb_elements); - rlc[l_rlc->module_id].m_mscgen_trace_length = sprintf(rlc[l_rlc->module_id].m_mscgen_trace, "[MSC_MSG][FRAME %05d][MAC_%s][MOD %02d][][--- MAC_DATA_IND/ %d TB(s) ", - frame, - (l_rlc->is_enb) ? "eNB":"UE", - l_rlc->module_id, - data_indP.data.nb_elements); - - tb = data_indP.data.head; - while (tb != NULL) { - if ((((struct mac_tb_ind *) (tb->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { - rlc_am_get_data_pdu_infos(frame,(rlc_am_pdu_sn_10_t*) ((struct mac_tb_ind *) (tb->data))->data_ptr, (s16_t) ((struct mac_tb_ind *) (tb->data))->size, &pdu_info); - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], - "\\nSN %d %c%c%c%c%c", - (((struct mac_tb_ind *) (tb->data))->data_ptr[1]) + (((u16_t)((((struct mac_tb_ind *) (tb->data))->data_ptr[0]) & 0x03)) << 8), - (((struct mac_tb_ind *) (tb->data))->data_ptr[0] & 0x40) ? 'R':'_', - (((struct mac_tb_ind *) (tb->data))->data_ptr[0] & 0x20) ? 'P':'_', - (((struct mac_tb_ind *) (tb->data))->data_ptr[0] & 0x10) ? '}':'{', - (((struct mac_tb_ind *) (tb->data))->data_ptr[0] & 0x08) ? '{':'}', - (((struct mac_tb_ind *) (tb->data))->data_ptr[0] & 0x04) ? 'E':'_'); - num_li = 0; - if (pdu_info.num_li > 0) { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], "/LI("); - while (num_li != (pdu_info.num_li - 1)) { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], "%d,", - pdu_info.li_list[num_li]); - num_li += 1; - } - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], "%d)", pdu_info.li_list[num_li]); - } + s16_t tb_size;*/ +#ifdef TRACE_RLC_AM_PDU + rlc_am_pdu_info_t pdu_info; + rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p; + mem_block_t *tb_p; + s16_t tb_size_in_bytes; + int num_nack; + char message_string[7000]; + size_t message_string_size = 0; + MessageDef *msg_p; + int octet_index, index; +#endif - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], - "/%d Bytes ", - ((struct mac_tb_ind *) (tb->data))->size); - } else { - tb_size = (s16_t) ((struct mac_tb_ind *) (tb->data))->size; - rlc_am_get_control_pdu_infos((rlc_am_pdu_sn_10_t*) ((struct mac_tb_ind *) (tb->data))->data_ptr, - &tb_size, - &control_pdu_info); - - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], - "\\nSTATUS ACK SN %d", - control_pdu_info.ack_sn); - num_nack = 0; - while (num_nack != control_pdu_info.num_nack) { - if (control_pdu_info.nack_list[num_nack].e2) { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], - "\\nNACK SN %d {%d:%d}", - control_pdu_info.nack_list[num_nack].nack_sn, - control_pdu_info.nack_list[num_nack].so_start, - control_pdu_info.nack_list[num_nack].so_end); - } else { - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], - "\\nNACK SN %d", - control_pdu_info.nack_list[num_nack].nack_sn); - } - num_nack += 1; - } - } - tb = tb->next; - } - rlc[l_rlc->module_id].m_mscgen_trace_length += sprintf(&rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length], " --->][RLC_AM][MOD %02d][RB %02d]\n", - l_rlc->module_id, - l_rlc->rb_id); - - rlc[l_rlc->module_id].m_mscgen_trace[rlc[l_rlc->module_id].m_mscgen_trace_length] = 0; - LOG_D(RLC, "%s", rlc[l_rlc->module_id].m_mscgen_trace); - } - rlc_am_rx (rlcP, frame, eNB_flag, data_indP); +#ifdef TRACE_RLC_AM_PDU + if (data_indP.data.nb_elements > 0) { + + tb_p = data_indP.data.head; + + while (tb_p != NULL) { + + rlc_am_pdu_sn_10_p = (rlc_am_pdu_sn_10_t*)((struct mac_tb_ind *) (tb_p->data))->data_ptr; + tb_size_in_bytes = ((struct mac_tb_ind *) (tb_p->data))->size; + + if ((((struct mac_tb_ind *) (tb_p->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { + if (rlc_am_get_data_pdu_infos(frameP,rlc_am_pdu_sn_10_p, tb_size_in_bytes, &pdu_info) >= 0) { +# if defined(ENABLE_ITTI) + + + + message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); + message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); + message_string_size += sprintf(&message_string[message_string_size], "Header size : %u\n", pdu_info.header_size); + message_string_size += sprintf(&message_string[message_string_size], "Payload size: %u\n", pdu_info.payload_size); + if (pdu_info.rf) { + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA IND: AMD PDU segment\n\n"); + } else { + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA IND: AMD PDU\n\n"); + } + message_string_size += sprintf(&message_string[message_string_size], "Header :\n"); + message_string_size += sprintf(&message_string[message_string_size], " D/C : %u\n", pdu_info.d_c); + message_string_size += sprintf(&message_string[message_string_size], " RF : %u\n", pdu_info.rf); + message_string_size += sprintf(&message_string[message_string_size], " P : %u\n", pdu_info.p); + message_string_size += sprintf(&message_string[message_string_size], " FI : %u\n", pdu_info.fi); + message_string_size += sprintf(&message_string[message_string_size], " E : %u\n", pdu_info.e); + message_string_size += sprintf(&message_string[message_string_size], " SN : %u\n", pdu_info.sn); + if (pdu_info.rf) { + message_string_size += sprintf(&message_string[message_string_size], " LSF : %u\n", pdu_info.lsf); + message_string_size += sprintf(&message_string[message_string_size], " SO : %u\n", pdu_info.so); + } + if (pdu_info.e) { + message_string_size += sprintf(&message_string[message_string_size], "\nHeader extension : \n"); + for (index=0; index < pdu_info.num_li; index++) { + message_string_size += sprintf(&message_string[message_string_size], " LI : %u\n", pdu_info.li_list[index]); + } + } + message_string_size += sprintf(&message_string[message_string_size], "\nPayload : \n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + message_string_size += sprintf(&message_string[message_string_size], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + for (octet_index = 0; octet_index < pdu_info.payload_size; octet_index++) { + if ((octet_index % 16) == 0){ + if (octet_index != 0) { + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + } + message_string_size += sprintf(&message_string[message_string_size], " %04d |", octet_index); + } + /* + * Print every single octet in hexadecimal form + */ + message_string_size += sprintf(&message_string[message_string_size], " %02x", pdu_info.payload[octet_index]); + /* + * Align newline and pipes according to the octets in groups of 2 + */ + } + /* + * Append enough spaces and put final pipe + */ + for (index = octet_index; index < 16; ++index) { + message_string_size += sprintf(&message_string[message_string_size], " "); + } + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + + msg_p = itti_alloc_new_message_sized (l_rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_DATA_PDU_IND, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rlc_am_data_pdu_ind.size = message_string_size; + memcpy(&msg_p->ittiMsg.rlc_am_data_pdu_ind.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, l_rlc_p->module_id + NB_eNB_INST, msg_p); +# else + rlc_am_display_data_pdu_infos(l_rlc_p, frameP, pdu_info); +# endif + } + } else { + if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, &tb_size_in_bytes, &g_rlc_am_control_pdu_info) >= 0) { + +# if defined(ENABLE_ITTI) + message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); + message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); + message_string_size += sprintf(&message_string[message_string_size], "PDU type : RLC AM DATA IND: STATUS PDU\n\n"); + message_string_size += sprintf(&message_string[message_string_size], "Header :\n"); + message_string_size += sprintf(&message_string[message_string_size], " D/C : %u\n", g_rlc_am_control_pdu_info.d_c); + message_string_size += sprintf(&message_string[message_string_size], " CPT : %u\n", g_rlc_am_control_pdu_info.cpt); + message_string_size += sprintf(&message_string[message_string_size], " ACK_SN : %u\n", g_rlc_am_control_pdu_info.ack_sn); + message_string_size += sprintf(&message_string[message_string_size], " E1 : %u\n", g_rlc_am_control_pdu_info.e1); + for (num_nack = 0; num_nack < g_rlc_am_control_pdu_info.num_nack; num_nack++) { + if (g_rlc_am_control_pdu_info.nack_list[num_nack].e2) { + message_string_size += sprintf(&message_string[message_string_size], " NACK SN %04d SO START %05d SO END %05d", + g_rlc_am_control_pdu_info.nack_list[num_nack].nack_sn, + g_rlc_am_control_pdu_info.nack_list[num_nack].so_start, + g_rlc_am_control_pdu_info.nack_list[num_nack].so_end); + } else { + message_string_size += sprintf(&message_string[message_string_size], " NACK SN %04d", g_rlc_am_control_pdu_info.nack_list[num_nack].nack_sn); + } + } + msg_p = itti_alloc_new_message_sized (l_rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_STATUS_PDU_IND, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rlc_am_status_pdu_ind.size = message_string_size; + memcpy(&msg_p->ittiMsg.rlc_am_status_pdu_ind.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, l_rlc_p->module_id + NB_eNB_INST, msg_p); +# endif + } + } + tb_p = tb_p->next; + } + } +#endif + rlc_am_rx (rlc_pP, frameP, eNB_flagP, data_indP); } //----------------------------------------------------------------------------- void -rlc_am_data_req (void *rlcP, u32_t frame, mem_block_t * sduP) +rlc_am_data_req (void *rlc_pP, u32_t frameP, mem_block_t * sdu_pP) { //----------------------------------------------------------------------------- - rlc_am_entity_t *rlc = (rlc_am_entity_t *) rlcP; + rlc_am_entity_t *rlc_p = (rlc_am_entity_t *) rlc_pP; u32_t mui; u16_t data_offset; u16_t data_size; u8_t conf; - if ((rlc->input_sdus[rlc->next_sdu_index].mem_block == NULL) && - (rlc->input_sdus[rlc->next_sdu_index].flags.segmented == 0) && - (((rlc->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE) != rlc->current_sdu_index)) { + if ((rlc_p->input_sdus[rlc_p->next_sdu_index].mem_block == NULL) && + (rlc_p->input_sdus[rlc_p->next_sdu_index].flags.segmented == 0) && + (((rlc_p->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE) != rlc_p->current_sdu_index)) { - memset(&rlc->input_sdus[rlc->next_sdu_index], 0, sizeof(rlc_am_tx_sdu_management_t)); - rlc->input_sdus[rlc->next_sdu_index].mem_block = sduP; + memset(&rlc_p->input_sdus[rlc_p->next_sdu_index], 0, sizeof(rlc_am_tx_sdu_management_t)); + rlc_p->input_sdus[rlc_p->next_sdu_index].mem_block = sdu_pP; - mui = ((struct rlc_am_data_req *) (sduP->data))->mui; - data_offset = ((struct rlc_am_data_req *) (sduP->data))->data_offset; - data_size = ((struct rlc_am_data_req *) (sduP->data))->data_size; - conf = ((struct rlc_am_data_req *) (sduP->data))->conf; + mui = ((struct rlc_am_data_req *) (sdu_pP->data))->mui; + data_offset = ((struct rlc_am_data_req *) (sdu_pP->data))->data_offset; + data_size = ((struct rlc_am_data_req *) (sdu_pP->data))->data_size; + conf = ((struct rlc_am_data_req *) (sdu_pP->data))->conf; - rlc->stat_tx_pdcp_sdu += 1; - rlc->stat_tx_pdcp_bytes += data_size; + rlc_p->stat_tx_pdcp_sdu += 1; + rlc_p->stat_tx_pdcp_bytes += data_size; - rlc->input_sdus[rlc->next_sdu_index].mui = mui; - rlc->input_sdus[rlc->next_sdu_index].sdu_size = data_size; - //rlc->input_sdus[rlc->next_sdu_index].confirm = conf; + rlc_p->input_sdus[rlc_p->next_sdu_index].mui = mui; + rlc_p->input_sdus[rlc_p->next_sdu_index].sdu_size = data_size; + //rlc_p->input_sdus[rlc_p->next_sdu_index].confirm = conf; - rlc->sdu_buffer_occupancy += data_size; - rlc->nb_sdu += 1; - rlc->nb_sdu_no_segmented += 1; + rlc_p->sdu_buffer_occupancy += data_size; + rlc_p->nb_sdu += 1; + rlc_p->nb_sdu_no_segmented += 1; - rlc->input_sdus[rlc->next_sdu_index].first_byte = (u8_t*)(&sduP->data[data_offset]); - rlc->input_sdus[rlc->next_sdu_index].sdu_remaining_size = rlc->input_sdus[rlc->next_sdu_index].sdu_size; - rlc->input_sdus[rlc->next_sdu_index].sdu_segmented_size = 0; - rlc->input_sdus[rlc->next_sdu_index].sdu_creation_time = frame; - rlc->input_sdus[rlc->next_sdu_index].nb_pdus = 0; - rlc->input_sdus[rlc->next_sdu_index].nb_pdus_ack = 0; - //rlc->input_sdus[rlc->next_sdu_index].nb_pdus_time = 0; - //rlc->input_sdus[rlc->next_sdu_index].nb_pdus_internal_use = 0; - rlc->input_sdus[rlc->next_sdu_index].flags.discarded = 0; - rlc->input_sdus[rlc->next_sdu_index].flags.segmented = 0; - rlc->input_sdus[rlc->next_sdu_index].flags.segmentation_in_progress = 0; - rlc->input_sdus[rlc->next_sdu_index].flags.no_new_sdu_segmented_in_last_pdu = 0; - //rlc->input_sdus[rlc->next_sdu_index].li_index_for_discard = -1; - rlc->next_sdu_index = (rlc->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; - LOG_I(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RLC_AM_DATA_REQ size %d Bytes, NB SDU %d current_sdu_index=%d next_sdu_index=%d conf %d mui %d\n", frame, rlc->module_id, rlc->rb_id, data_size, rlc->nb_sdu, rlc->current_sdu_index, rlc->next_sdu_index, conf, mui); + rlc_p->input_sdus[rlc_p->next_sdu_index].first_byte = (u8_t*)(&sdu_pP->data[data_offset]); + rlc_p->input_sdus[rlc_p->next_sdu_index].sdu_remaining_size = rlc_p->input_sdus[rlc_p->next_sdu_index].sdu_size; + rlc_p->input_sdus[rlc_p->next_sdu_index].sdu_segmented_size = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].sdu_creation_time = frameP; + rlc_p->input_sdus[rlc_p->next_sdu_index].nb_pdus = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].nb_pdus_ack = 0; + //rlc_p->input_sdus[rlc_p->next_sdu_index].nb_pdus_time = 0; + //rlc_p->input_sdus[rlc_p->next_sdu_index].nb_pdus_internal_use = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].flags.discarded = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].flags.segmented = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].flags.segmentation_in_progress = 0; + rlc_p->input_sdus[rlc_p->next_sdu_index].flags.no_new_sdu_segmented_in_last_pdu = 0; + //rlc_p->input_sdus[rlc_p->next_sdu_index].li_index_for_discard = -1; + rlc_p->next_sdu_index = (rlc_p->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE; + LOG_I(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RLC_AM_DATA_REQ size %d Bytes, NB SDU %d current_sdu_index=%d next_sdu_index=%d conf %d mui %d\n", frameP, rlc_p->module_id, rlc_p->rb_id, data_size, rlc_p->nb_sdu, rlc_p->current_sdu_index, rlc_p->next_sdu_index, conf, mui); } else { - LOG_W(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RLC_AM_DATA_REQ BUFFER FULL, NB SDU %d current_sdu_index=%d next_sdu_index=%d size_input_sdus_buffer=%d\n", frame, rlc->module_id, rlc->rb_id, rlc->nb_sdu, rlc->current_sdu_index, rlc->next_sdu_index, RLC_AM_SDU_CONTROL_BUFFER_SIZE); - LOG_W(RLC, " input_sdus[].mem_block=%p next input_sdus[].flags.segmented=%d\n", rlc->input_sdus[rlc->next_sdu_index].mem_block, rlc->input_sdus[rlc->next_sdu_index].flags.segmented); - rlc->stat_tx_pdcp_sdu_discarded += 1; - rlc->stat_tx_pdcp_bytes_discarded += ((struct rlc_am_data_req *) (sduP->data))->data_size; - free_mem_block (sduP); + LOG_W(RLC, "[FRAME %05d][RLC_AM][MOD %02d][RB %02d] RLC_AM_DATA_REQ BUFFER FULL, NB SDU %d current_sdu_index=%d next_sdu_index=%d size_input_sdus_buffer=%d\n", frameP, rlc_p->module_id, rlc_p->rb_id, rlc_p->nb_sdu, rlc_p->current_sdu_index, rlc_p->next_sdu_index, RLC_AM_SDU_CONTROL_BUFFER_SIZE); + LOG_W(RLC, " input_sdus[].mem_block=%p next input_sdus[].flags.segmented=%d\n", rlc_p->input_sdus[rlc_p->next_sdu_index].mem_block, rlc_p->input_sdus[rlc_p->next_sdu_index].flags.segmented); + rlc_p->stat_tx_pdcp_sdu_discarded += 1; + rlc_p->stat_tx_pdcp_bytes_discarded += ((struct rlc_am_data_req *) (sdu_pP->data))->data_size; + free_mem_block (sdu_pP); } } diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c index 549a2e20df..c95bbd38b8 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c @@ -263,10 +263,6 @@ void rlc_am_receive_process_data_pdu (rlc_am_entity_t *rlcP, u32_t frame, u8_t e if (rlc_am_get_data_pdu_infos(frame,rlc_am_pdu_sn_10, tb_size_in_bytesP, pdu_info) >= 0) { - -#ifdef TRACE_RLC_AM_RX - rlc_am_display_data_pdu_infos(rlcP, frame, pdu_info); -#endif ((rlc_am_rx_pdu_management_t*)(tbP->data))->all_segments_received = 0; if (rlc_am_in_rx_window(rlcP, pdu_info->sn)) { diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c index 7679203948..ce3e646903 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c @@ -40,7 +40,7 @@ Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis #include "UTIL/LOG/log.h" #define TRACE_STATUS_CREATION -static rlc_am_control_pdu_info_t g_rlc_am_control_pdu_info; +rlc_am_control_pdu_info_t g_rlc_am_control_pdu_info; //----------------------------------------------------------------------------- u16_t rlc_am_read_bit_field(u8_t** dataP, unsigned int* bit_posP, signed int bits_to_readP) { //----------------------------------------------------------------------------- -- GitLab