bugfix, s1ap: allow source enb to release old UE ctxt in case a connectionRequest arrives with repeated m-TMSI

master
Francisco 3 years ago committed by Andre Puschmann
parent 52247a46e5
commit 0996e50dce

@ -392,7 +392,7 @@ void rrc::ue::handle_rrc_con_req(rrc_conn_request_s* msg)
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);
user.second->state = RRC_STATE_IDLE; // Set old rnti to IDLE so that enb doesn't send RRC Connection Release
parent->s1ap->user_release(user.first, asn1::s1ap::cause_radio_network_opts::radio_conn_with_ue_lost);
parent->s1ap->user_release(user.first, asn1::s1ap::cause_radio_network_opts::interaction_with_other_proc);
break;
}
}

@ -1402,10 +1402,13 @@ bool s1ap::ue::send_uectxtreleaserequest(const cause_c& cause)
return false;
}
if (ts1_reloc_overall.is_running()) {
if (ts1_reloc_overall.is_running() and cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network and
(cause.radio_network().value == asn1::s1ap::cause_radio_network_opts::user_inactivity or
cause.radio_network().value == asn1::s1ap::cause_radio_network_opts::radio_conn_with_ue_lost)) {
logger.info("Ignoring UE context release request from lower layers for UE rnti=0x%x performing S1 Handover.",
ctxt.rnti);
// leave the UE context alive until ts1_reloc_overall expiry
// Leave the UE context alive during S1 Handover until ts1_reloc_overall expiry. Ignore releases due to
// UE inactivity or RLF
return false;
}

Loading…
Cancel
Save