Added handling of MSG3 timout exipiry in activity_timer_expired(). Avoid notifying S1AP in that case.

This commit is contained in:
Pedro Alvarez 2021-03-30 20:51:02 +01:00
parent 37699f2215
commit 8c7aed1f81
2 changed files with 14 additions and 6 deletions

View File

@ -68,7 +68,7 @@ public:
enum class conn_request_result_t { success, error_mme_not_connected, error_unknown_rnti }; enum class conn_request_result_t { success, error_mme_not_connected, error_unknown_rnti };
/// Possible causes for the RRC to transition to the idle state. /// Possible causes for the RRC to transition to the idle state.
enum class rrc_idle_transition_cause { release, timeout, radio_conn_with_ue_lost }; enum class rrc_idle_transition_cause { release, timeout, radio_conn_with_ue_lost, msg3_timeout, unspecified };
void handle_rrc_con_req(asn1::rrc::rrc_conn_request_s* msg); void handle_rrc_con_req(asn1::rrc::rrc_conn_request_s* msg);
void handle_rrc_con_setup_complete(asn1::rrc::rrc_conn_setup_complete_s* msg, srsran::unique_byte_buffer_t pdu); void handle_rrc_con_setup_complete(asn1::rrc::rrc_conn_setup_complete_s* msg, srsran::unique_byte_buffer_t pdu);

View File

@ -126,12 +126,20 @@ void rrc::ue::activity_timer_expired(activity_timeout_type_t type)
ue_cell_list.get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->enb_cc_idx, ue_cell_list.get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->enb_cc_idx,
static_cast<unsigned>(rrc_idle_transition_cause::radio_conn_with_ue_lost), static_cast<unsigned>(rrc_idle_transition_cause::radio_conn_with_ue_lost),
rnti); rnti);
} else if (type == MSG3_RX_TIMEOUT) {
// MSG3 timeout, no need to notify S1AP, just remove UE
parent->rem_user_thread(rnti);
event_logger::get().log_rrc_disconnect(ue_cell_list.get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->enb_cc_idx,
static_cast<unsigned>(rrc_idle_transition_cause::msg3_timeout),
rnti);
} else { } else {
parent->s1ap->user_release(rnti, asn1::s1ap::cause_radio_network_opts::unspecified); // Unhandled activity timeout, just remove UE and log an error
event_logger::get().log_rrc_disconnect( parent->rem_user_thread(rnti);
ue_cell_list.get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->enb_cc_idx, event_logger::get().log_rrc_disconnect(ue_cell_list.get_ue_cc_idx(UE_PCELL_CC_IDX)->cell_common->enb_cc_idx,
static_cast<unsigned>(rrc_idle_transition_cause::radio_conn_with_ue_lost), static_cast<unsigned>(rrc_idle_transition_cause::msg3_timeout),
rnti); rnti);
parent->logger.error(
"Unhandled reason for activity timer expiration. rnti=0x%x, cause %d", rnti, static_cast<unsigned>(type));
} }
} else { } else {
if (rnti != SRSRAN_MRNTI) { if (rnti != SRSRAN_MRNTI) {