remove UE on S1AP Release Request if MME S1AP UE ID hasn't been assigned yet

This commit is contained in:
Francisco 2021-04-26 16:39:48 +01:00 committed by Francisco Paisana
parent 3c4512cdd2
commit 6e7d992552
2 changed files with 6 additions and 7 deletions

View File

@ -386,8 +386,10 @@ void rrc::ue::handle_rrc_con_req(rrc_conn_request_s* msg)
for (auto& user : parent->users) { for (auto& user : parent->users) {
if (user.first != rnti && user.second->has_tmsi && user.second->mmec == mmec && user.second->m_tmsi == m_tmsi) { if (user.first != rnti && user.second->has_tmsi && user.second->mmec == mmec && user.second->m_tmsi == m_tmsi) {
parent->logger.info("RRC connection request: UE context already exists. M-TMSI=%d", m_tmsi); parent->logger.info("RRC connection request: UE context already exists. M-TMSI=%d", m_tmsi);
parent->s1ap->user_release(rnti, asn1::s1ap::cause_radio_network_opts::radio_conn_with_ue_lost); if (parent->s1ap->user_release(rnti, asn1::s1ap::cause_radio_network_opts::radio_conn_with_ue_lost)) {
parent->rem_user_thread(user.first); // Do not wait for MME response
parent->rem_user_thread(user.first);
}
break; break;
} }
} }

View File

@ -418,7 +418,7 @@ bool s1ap::user_release(uint16_t rnti, asn1::s1ap::cause_radio_network_e cause_r
return false; return false;
} }
if (u->was_uectxtrelease_requested()) { if (u->was_uectxtrelease_requested() or not u->ctxt.mme_ue_s1ap_id.has_value()) {
logger.warning("UE context for RNTI:0x%x is in zombie state. Releasing...", rnti); logger.warning("UE context for RNTI:0x%x is in zombie state. Releasing...", rnti);
users.erase(u); users.erase(u);
rrc->release_ue(rnti); rrc->release_ue(rnti);
@ -428,10 +428,7 @@ bool s1ap::user_release(uint16_t rnti, asn1::s1ap::cause_radio_network_e cause_r
cause_c cause; cause_c cause;
cause.set_radio_network().value = cause_radio.value; cause.set_radio_network().value = cause_radio.value;
if (u->ctxt.mme_ue_s1ap_id.has_value()) { return u->send_uectxtreleaserequest(cause);
return u->send_uectxtreleaserequest(cause);
}
return true;
} }
bool s1ap::user_exists(uint16_t rnti) bool s1ap::user_exists(uint16_t rnti)