From 9026fda4b962a09c720ef32ee669e8569556087e Mon Sep 17 00:00:00 2001 From: Lionel Gauthier Date: Thu, 15 May 2014 14:12:08 +0000 Subject: [PATCH] Skip re-init of RLC that erased the internal state variables (VR(R), etc). Configurable ulsh consecutive max error global variable. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5323 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair1/PHY/defs.h | 2 +- openair1/PHY/extern.h | 1 + openair1/PHY/vars.h | 2 + openair1/SCHED/phy_procedures_lte_eNb.c | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h | 3 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c | 63 ++++++++--------- .../RLC/UM_v9.3.0/rlc_um_control_primitives.c | 67 ++++++++++--------- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h | 2 +- openair2/RRC/LITE/rrc_eNB.c | 2 +- openair2/RRC/LITE/rrc_eNB_S1AP.c | 8 ++- .../CENTOS-LTE-EPC-INTEGRATION/start_enb.bash | 50 +++++++++++--- targets/RTAI/USER/lte-softmodem.c | 23 ++++--- 12 files changed, 137 insertions(+), 88 deletions(-) diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 974efd45b0..fa1f154829 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -179,7 +179,7 @@ enum transmission_access_mode{ #endif /// Top-level PHY Data Structure for eNB -typedef struct { +typedef struct PHY_VARS_eNB_s{ /// Module ID indicator for this instance module_id_t Mod_id; uint8_t local_flag; diff --git a/openair1/PHY/extern.h b/openair1/PHY/extern.h index 47ec2901be..98684fe5e9 100755 --- a/openair1/PHY/extern.h +++ b/openair1/PHY/extern.h @@ -60,6 +60,7 @@ extern unsigned char NB_UE_INST; extern unsigned char NB_RN_INST; #endif +extern unsigned int ULSCH_max_consecutive_errors; extern int flag_LA; extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX]; extern double sinr_bler_map_up[MCS_COUNT][2][16]; diff --git a/openair1/PHY/vars.h b/openair1/PHY/vars.h index a055a73d03..65ad5e97b5 100755 --- a/openair1/PHY/vars.h +++ b/openair1/PHY/vars.h @@ -66,6 +66,8 @@ unsigned char NB_RN_INST=0; unsigned char NB_INST=0; #endif +unsigned int ULSCH_max_consecutive_errors = 20; + int flag_LA=0; int flagMag; //extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 7572c1f3ac..dcf7c3e0ef 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -3061,7 +3061,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui // If we've dropped the UE, go back to PRACH mode for this UE //#if !defined(EXMIMO_IOT) - if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) { + if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == ULSCH_max_consecutive_errors) { LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n", phy_vars_eNB->Mod_id,frame,last_slot>>1, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]); phy_vars_eNB->eNB_UE_stats[i].mode = PRACH; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h index 8ecb75c0d3..f54d15414c 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h @@ -187,7 +187,8 @@ typedef struct rlc_am_entity_s { // note occupancy of other buffers is deducted from nb elements in lists rlc_buffer_occupancy_t buffer_occupancy_retransmission_buffer; /*!< \brief Number of PDUs. */ - boolean_t allocation; /*!< \brief Boolean for rlc_am_entity_t struct allocation. */ + //boolean_t allocation; /*!< \brief Boolean for rlc_am_entity_t struct allocation. */ + boolean_t initialized; /*!< \brief Boolean for rlc_am_entity_t struct initialization. */ } rlc_am_entity_t; /** @} */ # endif diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c index 11396b435b..2c3ba4f79a 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c @@ -42,39 +42,42 @@ Address : EURECOM, void rlc_am_init(rlc_am_entity_t *rlc_pP, frame_t frameP) //----------------------------------------------------------------------------- { - int saved_allocation = rlc_pP->allocation; - LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] STATE VARIABLES, BUFFERS, LISTS\n", frameP); - memset(rlc_pP, 0, sizeof(rlc_am_entity_t)); - rlc_pP->allocation = saved_allocation; + if (rlc_pP->initialized == TRUE) { + LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] ALREADY DONE, DOING NOTHING\n", frameP); + } else { + LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] STATE VARIABLES, BUFFERS, LISTS\n", frameP); + memset(rlc_pP, 0, sizeof(rlc_am_entity_t)); - list2_init(&rlc_pP->receiver_buffer, "RX BUFFER"); - list_init(&rlc_pP->pdus_to_mac_layer, "PDUS TO MAC"); - list_init(&rlc_pP->control_pdu_list, "CONTROL PDU LIST"); - list_init(&rlc_pP->segmentation_pdu_list, "SEGMENTATION PDU LIST"); - //LOG_D(RLC,"RLC_AM_SDU_CONTROL_BUFFER_SIZE %d sizeof(rlc_am_tx_sdu_management_t) %d \n", RLC_AM_SDU_CONTROL_BUFFER_SIZE, sizeof(rlc_am_tx_sdu_management_t)); - - rlc_pP->input_sdus = calloc(1, RLC_AM_SDU_CONTROL_BUFFER_SIZE*sizeof(rlc_am_tx_sdu_management_t)); - rlc_pP->pdu_retrans_buffer = calloc(1, (uint16_t)((unsigned int)RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE*(unsigned int)sizeof(rlc_am_tx_data_pdu_management_t))); - LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] input_sdus[] = %p element size=%d\n", frameP, rlc_pP->input_sdus,sizeof(rlc_am_tx_sdu_management_t)); - LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] pdu_retrans_buffer[] = %p element size=%d\n", frameP, rlc_pP->pdu_retrans_buffer,sizeof(rlc_am_tx_data_pdu_management_t)); + list2_init(&rlc_pP->receiver_buffer, "RX BUFFER"); + list_init(&rlc_pP->pdus_to_mac_layer, "PDUS TO MAC"); + list_init(&rlc_pP->control_pdu_list, "CONTROL PDU LIST"); + list_init(&rlc_pP->segmentation_pdu_list, "SEGMENTATION PDU LIST"); + //LOG_D(RLC,"RLC_AM_SDU_CONTROL_BUFFER_SIZE %d sizeof(rlc_am_tx_sdu_management_t) %d \n", RLC_AM_SDU_CONTROL_BUFFER_SIZE, sizeof(rlc_am_tx_sdu_management_t)); - // TX state variables - //rlc_pP->vt_a = 0; - rlc_pP->vt_ms = rlc_pP->vt_a + RLC_AM_WINDOW_SIZE; - //rlc_pP->vt_s = 0; - //rlc_pP->poll_sn = 0; - // TX counters - //rlc_pP->c_pdu_without_poll = 0; - //rlc_pP->c_byte_without_poll = 0; - // RX state variables - //rlc_pP->vr_r = 0; - rlc_pP->vr_mr = rlc_pP->vr_r + RLC_AM_WINDOW_SIZE; - //rlc_pP->vr_x = 0; - //rlc_pP->vr_ms = 0; - //rlc_pP->vr_h = 0; + rlc_pP->input_sdus = calloc(1, RLC_AM_SDU_CONTROL_BUFFER_SIZE*sizeof(rlc_am_tx_sdu_management_t)); + rlc_pP->pdu_retrans_buffer = calloc(1, (uint16_t)((unsigned int)RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE*(unsigned int)sizeof(rlc_am_tx_data_pdu_management_t))); + LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] input_sdus[] = %p element size=%d\n", frameP, rlc_pP->input_sdus,sizeof(rlc_am_tx_sdu_management_t)); + LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] pdu_retrans_buffer[] = %p element size=%d\n", frameP, rlc_pP->pdu_retrans_buffer,sizeof(rlc_am_tx_data_pdu_management_t)); - rlc_pP->last_frame_status_indication = 123456; // any value > 1 - rlc_pP->first_retrans_pdu_sn = -1; + // TX state variables + //rlc_pP->vt_a = 0; + rlc_pP->vt_ms = rlc_pP->vt_a + RLC_AM_WINDOW_SIZE; + //rlc_pP->vt_s = 0; + //rlc_pP->poll_sn = 0; + // TX counters + //rlc_pP->c_pdu_without_poll = 0; + //rlc_pP->c_byte_without_poll = 0; + // RX state variables + //rlc_pP->vr_r = 0; + rlc_pP->vr_mr = rlc_pP->vr_r + RLC_AM_WINDOW_SIZE; + //rlc_pP->vr_x = 0; + //rlc_pP->vr_ms = 0; + //rlc_pP->vr_h = 0; + + rlc_pP->last_frame_status_indication = 123456; // any value > 1 + rlc_pP->first_retrans_pdu_sn = -1; + rlc_pP->initialized = TRUE; + } } //----------------------------------------------------------------------------- void rlc_am_cleanup(rlc_am_entity_t *rlc_pP) diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c index 555d591b26..f444d67b31 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c @@ -227,9 +227,6 @@ void config_req_rlc_um_asn1 ( ul_sn_FieldLength, mbms_flagP); } - if (mbms_flagP == MBMS_FLAG_YES) { - rlc_p->allocation = TRUE; - } } } //----------------------------------------------------------------------------- @@ -239,43 +236,47 @@ rlc_um_init (rlc_um_entity_t * const rlc_pP) //----------------------------------------------------------------------------- AssertFatal(rlc_pP, "Bad RLC UM pointer (NULL)"); - int saved_allocation = rlc_pP->allocation; - memset (rlc_pP, 0, sizeof (rlc_um_entity_t)); - rlc_pP->allocation = saved_allocation; - // TX SIDE - list_init (&rlc_pP->pdus_to_mac_layer, NULL); + if (rlc_pP->initialized) { + LOG_D(RLC, "[FRAME XXXXX][RLC_UM][MOD XX][RB XX][INIT] ALREADY DONE, DOING NOTHING\n"); + } else { + LOG_D(RLC, "[FRAME XXXXX][RLC_UM][MOD XX][RB XX][INIT] STATE VARIABLES, BUFFERS, LISTS\n"); + memset (rlc_pP, 0, sizeof (rlc_um_entity_t)); + // TX SIDE + list_init (&rlc_pP->pdus_to_mac_layer, NULL); - rlc_pP->protocol_state = RLC_NULL_STATE; - //rlc_pP->nb_sdu = 0; - //rlc_pP->next_sdu_index = 0; - //rlc_pP->current_sdu_index = 0; + rlc_pP->protocol_state = RLC_NULL_STATE; + //rlc_pP->nb_sdu = 0; + //rlc_pP->next_sdu_index = 0; + //rlc_pP->current_sdu_index = 0; - //rlc_pP->vt_us = 0; + //rlc_pP->vt_us = 0; - // RX SIDE - list_init (&rlc_pP->pdus_from_mac_layer, NULL); - //rlc_pP->vr_ur = 0; - //rlc_pP->vr_ux = 0; - //rlc_pP->vr_uh = 0; - //rlc_pP->output_sdu_size_to_write = 0; - //rlc_pP->output_sdu_in_construction = NULL; + // RX SIDE + list_init (&rlc_pP->pdus_from_mac_layer, NULL); + //rlc_pP->vr_ur = 0; + //rlc_pP->vr_ux = 0; + //rlc_pP->vr_uh = 0; + //rlc_pP->output_sdu_size_to_write = 0; + //rlc_pP->output_sdu_in_construction = NULL; - rlc_pP->rx_sn_length = 10; - rlc_pP->rx_header_min_length_in_bytes = 2; - rlc_pP->tx_sn_length = 10; - rlc_pP->tx_header_min_length_in_bytes = 2; + rlc_pP->rx_sn_length = 10; + rlc_pP->rx_header_min_length_in_bytes = 2; + rlc_pP->tx_sn_length = 10; + rlc_pP->tx_header_min_length_in_bytes = 2; - // SPARE : not 3GPP - rlc_pP->size_input_sdus_buffer =128; + // SPARE : not 3GPP + rlc_pP->size_input_sdus_buffer =128; - if ((rlc_pP->input_sdus == NULL) && (rlc_pP->size_input_sdus_buffer > 0)) { - rlc_pP->input_sdus = calloc(1 , rlc_pP->size_input_sdus_buffer * sizeof (void *)); + if ((rlc_pP->input_sdus == NULL) && (rlc_pP->size_input_sdus_buffer > 0)) { + rlc_pP->input_sdus = calloc(1 , rlc_pP->size_input_sdus_buffer * sizeof (void *)); + } + if (rlc_pP->dar_buffer == NULL) { + rlc_pP->dar_buffer = calloc (1, 1024 * sizeof (void *)); + } + + rlc_pP->first_pdu = 1; + rlc_pP->initialized = TRUE; } - if (rlc_pP->dar_buffer == NULL) { - rlc_pP->dar_buffer = calloc (1, 1024 * sizeof (void *)); - } - - rlc_pP->first_pdu = 1; } //----------------------------------------------------------------------------- void diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h index a8f032745e..3192c76ec8 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h @@ -64,7 +64,7 @@ typedef struct rlc_um_timer_s { typedef struct rlc_um_entity_s { module_id_t enb_module_id; /*!< \brief eNB Virtualization index for this protocol instance. */ module_id_t ue_module_id; /*!< \brief UE Virtualization index for this protocol instance. */ - boolean_t allocation; /*!< \brief Boolean for rlc_am_entity_t struct allocation. */ + boolean_t initialized; /*!< \brief Boolean for rlc_am_entity_t struct initialization. */ boolean_t is_uplink_downlink; /*!< \brief Is this instance is a transmitter, a receiver or both? */ rlc_protocol_state_t protocol_state; /*!< \brief Protocol state, can be RLC_NULL_STATE, RLC_DATA_TRANSFER_READY_STATE, RLC_LOCAL_SUSPEND_STATE. */ 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. */ diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 8ae6f746e2..b451e9c7fd 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -521,7 +521,7 @@ void rrc_eNB_free_UE_index( AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE inst invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX, enb_mod_idP); - LOG_I(RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP, + LOG_W(RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP, eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE; eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0; diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index c95d505865..9a7fe7d379 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -74,8 +74,8 @@ static const uint16_t S1AP_INTEGRITY_EIA2_MASK = 0x2; #ifdef Rel10 # define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_eia0_v920 #else -#ifdef EXMIMO_IOT -# define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_eia2 +#ifndef EXMIMO_IOT +# define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_eia2 #else # define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_reserved #endif @@ -151,6 +151,10 @@ static uint8_t get_UE_index_from_eNB_ue_s1ap_id(uint8_t mod_id, uint32_t eNB_ue_ } } } + LOG_D(RRC, + "[eNB %d] return UE_INDEX_INVALID for eNB_ue_s1ap_id %u\n", + mod_id, + eNB_ue_s1ap_id); return UE_INDEX_INVALID; } diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash index 5cb1da5f61..0a06fcafc6 100755 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash +++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash @@ -36,7 +36,7 @@ # company Eurecom # email: lionel.gauthier@eurecom.fr ########################################### -# NO INPUT PARAMETER FOR THIS SCRIPT +# INPUT PARAMETER FOR THIS SCRIPT: 'rebuild', 'build' or implicit 'start' ######################################### # This script start a ENB # The MME is provided to EURECOM by external partner, and should be started by your own. @@ -114,6 +114,40 @@ else fi fi +clean() { + cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean || exit 1 + cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean || exit 1 + make --directory=$OPENAIR_TARGETS/RTAI/USER clean || exit 1 + find $OPENAIR_TARGETS/RTAI/USER -name *.a -delete + find $OPENAIR_TARGETS/RTAI/USER -name *.d -delete + find $OPENAIR_TARGETS/RTAI/USER -name *.o -delete + find $OPENAIR_TARGETS/RTAI/USER -name *.ko -delete +} + +build() { + cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make || exit 1 + cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make || exit 1 + make --directory=$OPENAIR_TARGETS/RTAI/USER $MAKE_LTE_ACCESS_STRATUM_TARGET_RT -j`grep -c ^processor /proc/cpuinfo ` || exit 1 +} + +################################################## +# process script parameters +################################################## +for arg in "$@" +do + case "$arg" in + rebuild) clean;build;build;build;build + ;; + + build) build + ;; + + *) + ;; + esac +done + + ################################################## # LAUNCH eNB @@ -149,13 +183,8 @@ fi echo_warning "HARD REAL TIME MODE" PATH=$PATH:/usr/realtime/bin -#make --directory=$OPENAIR_TARGETS/RTAI/USER drivers || exit 1 -# 2 lines below replace the line above -cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean && make || exit 1 -cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make || exit 1 cd $THIS_SCRIPT_PATH -make --directory=$OPENAIR_TARGETS/RTAI/USER $MAKE_LTE_ACCESS_STRATUM_TARGET_RT -j`grep -c ^processor /proc/cpuinfo ` || exit 1 if [ ! -f /tmp/init_rt_done.tmp ]; then echo_warning "STARTING REAL TIME (RTAI)" @@ -174,12 +203,13 @@ fi cd $OPENAIR_TARGETS/RTAI/USER bash ./init_exmimo2.sh echo_warning "STARTING SOFTMODEM..." -./lte-softmodem -K $ITTI_LOG_FILE -O $CONFIG_FILE_ENB 2>&1 -#cat /dev/rtf62 > $STDOUT_LOG_FILE +cat /dev/rtf62 > $STDOUT_LOG_FILE & +./lte-softmodem -K $ITTI_LOG_FILE -O $CONFIG_FILE_ENB --ulsch-max-errors=40 2>&1 cd $THIS_SCRIPT_PATH - +sync pkill tshark - +pkill cat +sync cat $STDOUT_LOG_FILE | grep -v '[PHY]' | grep -v '[MAC]' | grep -v '[EMU]' | \ grep -v '[OCM]' | grep -v '[OMG]' | \ grep -v 'RLC not configured' | grep -v 'check if serving becomes' | \ diff --git a/targets/RTAI/USER/lte-softmodem.c b/targets/RTAI/USER/lte-softmodem.c index 0aaa37896a..ec8d753a3b 100644 --- a/targets/RTAI/USER/lte-softmodem.c +++ b/targets/RTAI/USER/lte-softmodem.c @@ -1103,6 +1103,7 @@ static void get_options (int argc, char **argv) enum long_option_e { LONG_OPTION_START = 0x100, /* Start after regular single char options */ + LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS, LONG_OPTION_CALIB_UE_RX, LONG_OPTION_CALIB_UE_RX_MED, LONG_OPTION_CALIB_UE_RX_BYP, @@ -1113,17 +1114,23 @@ static void get_options (int argc, char **argv) }; static const struct option long_options[] = { - {"calib-ue-rx", required_argument, NULL, LONG_OPTION_CALIB_UE_RX}, - {"calib-ue-rx-med", required_argument, NULL, LONG_OPTION_CALIB_UE_RX_MED}, - {"calib-ue-rx-byp", required_argument, NULL, LONG_OPTION_CALIB_UE_RX_BYP}, - {"debug-ue-prach", no_argument, NULL, LONG_OPTION_DEBUG_UE_PRACH}, - {"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT}, - {NULL, 0, NULL, 0}}; + {"ulsch-max-errors",required_argument, NULL, LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS}, + {"calib-ue-rx", required_argument, NULL, LONG_OPTION_CALIB_UE_RX}, + {"calib-ue-rx-med", required_argument, NULL, LONG_OPTION_CALIB_UE_RX_MED}, + {"calib-ue-rx-byp", required_argument, NULL, LONG_OPTION_CALIB_UE_RX_BYP}, + {"debug-ue-prach", no_argument, NULL, LONG_OPTION_DEBUG_UE_PRACH}, + {"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:UVR",long_options,NULL)) != -1) { switch (c) { + case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS: + ULSCH_max_consecutive_errors = atoi(optarg); + printf("Set ULSCH_max_consecutive_errors = %d\n",ULSCH_max_consecutive_errors); + break; + case LONG_OPTION_CALIB_UE_RX: mode = rx_calib_ue; rx_input_level_dBm = atoi(optarg); @@ -1371,10 +1378,10 @@ int main(int argc, char **argv) { set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1); #endif set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1); - set_comp_log(RLC, LOG_INFO, LOG_HIGH, 1); + set_comp_log(RLC, LOG_TRACE, LOG_HIGH, 1); set_comp_log(PDCP, LOG_DEBUG, LOG_HIGH, 1); set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1); - set_comp_log(RRC, LOG_INFO, LOG_HIGH, 1); + set_comp_log(RRC, LOG_DEBUG, LOG_HIGH, 1); #if defined(ENABLE_ITTI) set_comp_log(EMU, LOG_INFO, LOG_MED, 1); # if defined(ENABLE_USE_MME)