nr,gnb,rrc: avoid warning when eutra requests sgnb release and destroys the UE before acknowledgement

master
Francisco 3 years ago committed by Andre Puschmann
parent 0b51848dda
commit b3e974db9b

@ -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 >
>;

@ -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{});
}
/*******************************************************************************

@ -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<endc_disabled_st>() and not is_in_state<endc_deactivated_st>();
}
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<disable_endc_ev>();
return not is_in_state<endc_disabled_st>() and not is_in_state<endc_deactivated_st>() and
not is_in_state<wait_sgnb_rel_req_resp_st>();
}
} // namespace srsenb

Loading…
Cancel
Save