diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index 4aa42d298baceacf7a9be460ac8d79887a7627fb..6926e8cbd2bb98bdc6de839fcfe8c991260d7d06 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -475,7 +475,6 @@ boolean_t pdcp_data_ind( sdu_list_p = &pdcp_sdu_list; - if (sdu_buffer_sizeP == 0) { LOG_W(PDCP, "SDU buffer size is zero! Ignoring this chunk!\n"); if (enb_flagP) @@ -486,18 +485,34 @@ boolean_t pdcp_data_ind( } /* - * Check if incoming SDU is long enough to carry a PDU header + * Parse the PDU placed at the beginning of SDU to check + * if incoming SN is in line with RX window */ + if (MBMS_flagP == 0 ) { - if (srb_flagP) { - pdcp_header_len = PDCP_CONTROL_PLANE_DATA_PDU_SN_SIZE; - pdcp_tailer_len = PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE; + if (srb_flagP) { //SRB1/2 + pdcp_header_len = PDCP_CONTROL_PLANE_DATA_PDU_SN_SIZE; + pdcp_tailer_len = PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE; + sequence_number = pdcp_get_sequence_number_of_pdu_with_SRB_sn((unsigned char*)sdu_buffer_pP->data); + } else { // DRB + pdcp_tailer_len = 0; + if (pdcp_p->seq_num_size == PDCP_SN_7BIT){ + pdcp_header_len = PDCP_USER_PLANE_DATA_PDU_SHORT_SN_HEADER_SIZE; + sequence_number = pdcp_get_sequence_number_of_pdu_with_short_sn((unsigned char*)sdu_buffer_pP->data); + }else if (pdcp_p->seq_num_size == PDCP_SN_12BIT){ + pdcp_header_len = PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE; + sequence_number = pdcp_get_sequence_number_of_pdu_with_long_sn((unsigned char*)sdu_buffer_pP->data); } else { - pdcp_header_len = PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE; - pdcp_tailer_len = 0; + //sequence_number = 4095; + LOG_E(PDCP,"wrong sequence number (%d) for this pdcp entity \n", pdcp_p->seq_num_size); } - - if (sdu_buffer_sizeP < pdcp_header_len + pdcp_tailer_len ) { + //uint8_t dc = pdcp_get_dc_filed((unsigned char*)sdu_buffer_pP->data); + } + + /* + * Check if incoming SDU is long enough to carry a PDU header + */ + if (sdu_buffer_sizeP < pdcp_header_len + pdcp_tailer_len ) { LOG_W(PDCP, "Incoming (from RLC) SDU is short of size (size:%d)! Ignoring...\n", sdu_buffer_sizeP); free_mem_block(sdu_buffer_pP); if (enb_flagP) @@ -506,96 +521,96 @@ boolean_t pdcp_data_ind( stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); return FALSE; } - + + if (pdcp_is_rx_seq_number_valid(sequence_number, pdcp_p, srb_flagP) == TRUE) { + LOG_D(PDCP, "Incoming PDU has a sequence number (%d) in accordance with RX window\n", sequence_number); + /* if (dc == PDCP_DATA_PDU ) + LOG_D(PDCP, "Passing piggybacked SDU to NAS driver...\n"); + else + LOG_D(PDCP, "Passing piggybacked SDU to RRC ...\n");*/ + } else { + LOG_W(PDCP, "Incoming PDU has an unexpected sequence number (%d), RX window snychronisation have probably been lost!\n", sequence_number); /* - * Parse the PDU placed at the beginning of SDU to check - * if incoming SN is in line with RX window + * XXX Till we implement in-sequence delivery and duplicate discarding + * mechanism all out-of-order packets will be delivered to RRC/IP */ - if (MBMS_flagP == 0 ) { - if (srb_flagP) { //SRB1/2 - sequence_number = pdcp_get_sequence_number_of_pdu_with_SRB_sn((unsigned char*)sdu_buffer_pP->data); - } else { // DRB - if (pdcp_p->seq_num_size == PDCP_SN_7BIT){ - sequence_number = pdcp_get_sequence_number_of_pdu_with_short_sn((unsigned char*)sdu_buffer_pP->data); - }else if (pdcp_p->seq_num_size == PDCP_SN_12BIT){ - sequence_number = pdcp_get_sequence_number_of_pdu_with_long_sn((unsigned char*)sdu_buffer_pP->data); - } else { - //sequence_number = 4095; - LOG_E(PDCP,"wrong sequence number (%d) for this pdcp entity \n", pdcp_p->seq_num_size); - } - //uint8_t dc = pdcp_get_dc_filed((unsigned char*)sdu_buffer_pP->data); - } - } - if (pdcp_is_rx_seq_number_valid(sequence_number, pdcp_p, srb_flagP) == TRUE) { - LOG_D(PDCP, "Incoming PDU has a sequence number (%d) in accordance with RX window\n", sequence_number); - /* if (dc == PDCP_DATA_PDU ) - LOG_D(PDCP, "Passing piggybacked SDU to NAS driver...\n"); - else - LOG_D(PDCP, "Passing piggybacked SDU to RRC ...\n");*/ - } else { - LOG_W(PDCP, "Incoming PDU has an unexpected sequence number (%d), RX window snychronisation have probably been lost!\n", sequence_number); - /* - * XXX Till we implement in-sequence delivery and duplicate discarding - * mechanism all out-of-order packets will be delivered to RRC/IP - */ #if 0 - LOG_D(PDCP, "Ignoring PDU...\n"); - free_mem_block(sdu_buffer); - return FALSE; + LOG_D(PDCP, "Ignoring PDU...\n"); + free_mem_block(sdu_buffer); + return FALSE; #else - LOG_W(PDCP, "Delivering out-of-order SDU to upper layer...\n"); + LOG_W(PDCP, "Delivering out-of-order SDU to upper layer...\n"); #endif - } + } // SRB1/2: control-plane data - if (srb_flagP){ -#if defined(ENABLE_SECURITY) - if (pdcp_p->security_activated == 1) { - if (enb_flagP == ENB_FLAG_NO) - start_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); - else - start_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); - - pdcp_validate_security(pdcp_p, - srb_flagP, - rb_idP, - pdcp_header_len, - sequence_number, - sdu_buffer_pP->data, - sdu_buffer_sizeP - pdcp_tailer_len); - if (enb_flagP == ENB_FLAG_NO) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); - - } -#endif -//rrc_lite_data_ind(module_id, //Modified MW - L2 Interface - pdcp_rrc_data_ind(enb_mod_idP, - ue_mod_idP, - frameP, - enb_flagP, - rb_id, - sdu_buffer_sizeP - pdcp_header_len - pdcp_tailer_len, - (uint8_t*)&sdu_buffer_pP->data[pdcp_header_len]); - free_mem_block(sdu_buffer_pP); - // free_mem_block(new_sdu); - if (enb_flagP) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); - return TRUE; - } - payload_offset=PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE; + if (srb_flagP){ #if defined(ENABLE_SECURITY) if (pdcp_p->security_activated == 1) { - pdcp_validate_security(pdcp_p, rb_idP % maxDRB, pdcp_header_len, - sequence_number, sdu_buffer_pP->data, - sdu_buffer_sizeP - pdcp_tailer_len); + if (enb_flagP == ENB_FLAG_NO) + start_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); + else + start_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); + + pdcp_validate_security(pdcp_p, + srb_flagP, + rb_idP, + pdcp_header_len, + sequence_number, + sdu_buffer_pP->data, + sdu_buffer_sizeP - pdcp_tailer_len); + if (enb_flagP == ENB_FLAG_NO) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); + } +#endif + //rrc_lite_data_ind(module_id, //Modified MW - L2 Interface + pdcp_rrc_data_ind(enb_mod_idP, + ue_mod_idP, + frameP, + enb_flagP, + rb_id, + sdu_buffer_sizeP - pdcp_header_len - pdcp_tailer_len, + (uint8_t*)&sdu_buffer_pP->data[pdcp_header_len]); + free_mem_block(sdu_buffer_pP); + // free_mem_block(new_sdu); + if (enb_flagP) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); + return TRUE; + } + /* + * DRBs + */ + payload_offset=pdcp_header_len;// PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE; +#if defined(ENABLE_SECURITY) + if (pdcp_p->security_activated == 1) { + if (enb_flagP == ENB_FLAG_NO) + start_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); + else + start_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); + + pdcp_validate_security(pdcp_p, + srb_flagP, + rb_idP, + pdcp_header_len, + sequence_number, + sdu_buffer_pP->data, + sdu_buffer_sizeP - pdcp_tailer_len); + if (enb_flagP == ENB_FLAG_NO) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].validate_security); + + } + #endif } else { payload_offset=0; } + #if defined(USER_MODE) && defined(OAI_EMU) if (oai_emulation.info.otg_enabled == 1) { module_id_t src_id, dst_id; diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile index 00f2f8aa89344261432f5f3c49df855098e7e73e..4317eec1af647747288d5f734cf1630ed4b6b562 100644 --- a/targets/RTAI/USER/Makefile +++ b/targets/RTAI/USER/Makefile @@ -124,7 +124,7 @@ CFLAGS += -DEXMIMO_IOT endif ifdef RRC_MSG_PRINT -CFLAG += ENABLE_RRG_MSG +CFLAG += -DRRC_MSG_PRINT endif CFLAGS += $(L2_incl) $(ENB_APP_incl) $(UTIL_incl) $(UTILS_incl) diff --git a/targets/RTAI/USER/lte-softmodem.c b/targets/RTAI/USER/lte-softmodem.c index 1df2cb3ebb3474fa23ee63185d6b85c2c0ae47f2..21c668eeb614f89ee831bbb7410e9c648b8fecaa 100644 --- a/targets/RTAI/USER/lte-softmodem.c +++ b/targets/RTAI/USER/lte-softmodem.c @@ -238,6 +238,7 @@ static uint32_t txgain[4] = {20,20,20,20}; static runmode_t mode; static int rx_input_level_dBm; +static int log_messages=0; #ifdef XFORMS extern int otg_enabled; static char do_forms=0; @@ -1119,7 +1120,7 @@ static void get_options (int argc, char **argv) {"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT}, {NULL, 0, NULL, 0}}; - while ((c = getopt_long (argc, argv, "C:dF:K:qO:ST:UV",long_options,NULL)) != -1) + while ((c = getopt_long (argc, argv, "C:dF:K:qO:ST:UVR",long_options,NULL)) != -1) { switch (c) { @@ -1255,10 +1256,12 @@ static void get_options (int argc, char **argv) case 'V': ouput_vcd = 1; break; - /* case 'q': + case 'q': opp_enabled = 1; break; - */ + case 'R' : + log_messages =1; + break; default: break; } @@ -1382,7 +1385,9 @@ int main(int argc, char **argv) { set_comp_log(OSA, LOG_DEBUG, LOG_HIGH, 1); #endif #endif - set_comp_log(ENB_APP, LOG_INFO, LOG_HIGH, 1);; + set_comp_log(ENB_APP, LOG_INFO, LOG_HIGH, 1); + if (log_messages == 1) + set_component_filelog(RRC); } if (ouput_vcd) {