From b3e974db9bb3f6337d1922bd68cca8e7fe0a2e03 Mon Sep 17 00:00:00 2001 From: Francisco Date: Tue, 19 Oct 2021 12:42:41 +0100 Subject: [PATCH] nr,gnb,rrc: avoid warning when eutra requests sgnb release and destroys the UE before acknowledgement --- srsenb/hdr/stack/rrc/rrc_endc.h | 2 -- srsenb/src/stack/rrc/rrc.cc | 11 ++++++----- srsenb/src/stack/rrc/rrc_endc.cc | 8 ++------ 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/srsenb/hdr/stack/rrc/rrc_endc.h b/srsenb/hdr/stack/rrc/rrc_endc.h index a1f81433a..d835a4842 100644 --- a/srsenb/hdr/stack/rrc/rrc_endc.h +++ b/srsenb/hdr/stack/rrc/rrc_endc.h @@ -127,7 +127,6 @@ private: // FSM guards bool requires_rel_req(const sgnb_rel_req_ev& ev); - bool skip_rel_req(const sgnb_rel_req_ev& ev); // FSM transition handlers void handle_sgnb_add_req_ack(wait_sgnb_add_req_resp_st& s, const sgnb_add_req_ack_ev& ev); @@ -168,7 +167,6 @@ protected: upd< endc_activated_st, rrc_reest_rx_ev, &fsm::handle_rrc_reest >, // +---------------------------+--------------------------+------------------------+------------------------------+-------------------------+ to_state< wait_sgnb_rel_req_resp_st, sgnb_rel_req_ev, &fsm::handle_sgnb_rel_req, &fsm::requires_rel_req >, - to_state< endc_deactivated_st, sgnb_rel_req_ev, &fsm::handle_sgnb_rel_req, &fsm::skip_rel_req >, row< wait_sgnb_rel_req_resp_st, endc_deactivated_st, sgnb_rel_req_ack_ev >, to_state< endc_disabled_st, disable_endc_ev, &fsm::handle_endc_disabled > >; diff --git a/srsenb/src/stack/rrc/rrc.cc b/srsenb/src/stack/rrc/rrc.cc index 4213f8d1a..a8e523301 100644 --- a/srsenb/src/stack/rrc/rrc.cc +++ b/srsenb/src/stack/rrc/rrc.cc @@ -605,13 +605,14 @@ void rrc::sgnb_addition_complete(uint16_t eutra_rnti, uint16_t nr_rnti) void rrc::sgnb_release_ack(uint16_t eutra_rnti) { - logger.info("Received SgNB release acknowledgement for rnti=0x%x", eutra_rnti); auto ue_it = users.find(eutra_rnti); - if (ue_it == users.end()) { - logger.warning("rnti=0x%x does not exist", eutra_rnti); - return; + if (ue_it != users.end()) { + logger.info("Received SgNB release acknowledgement for rnti=0x%x", eutra_rnti); + ue_it->second->endc_handler->trigger(ue::rrc_endc::sgnb_rel_req_ack_ev{}); + } else { + // The EUTRA does not need to wait for Release Ack in case it wants to destroy the EUTRA UE + logger.info("Received SgNB release acknowledgement for already released rnti=0x%x", eutra_rnti); } - ue_it->second->endc_handler->trigger(ue::rrc_endc::sgnb_rel_req_ack_ev{}); } /******************************************************************************* diff --git a/srsenb/src/stack/rrc/rrc_endc.cc b/srsenb/src/stack/rrc/rrc_endc.cc index 119464d2f..49f3676b2 100644 --- a/srsenb/src/stack/rrc/rrc_endc.cc +++ b/srsenb/src/stack/rrc/rrc_endc.cc @@ -383,12 +383,8 @@ void rrc::ue::rrc_endc::handle_endc_disabled(const disable_endc_ev& ev) bool rrc::ue::rrc_endc::requires_rel_req(const sgnb_rel_req_ev& ev) { - return not is_in_state() and not is_in_state(); -} - -bool rrc::ue::rrc_endc::skip_rel_req(const sgnb_rel_req_ev& ev) -{ - return not requires_rel_req(ev) and not is_in_state(); + return not is_in_state() and not is_in_state() and + not is_in_state(); } } // namespace srsenb