rrc,feature: Use t301 to set time that the enb waits for the UE RRCConnectionSetupComplete or ReestablishmentComplete

master
Francisco 3 years ago committed by Francisco Paisana
parent 0349949cce
commit 3f75538660

@ -28,6 +28,7 @@ public:
enum activity_timeout_type_t { enum activity_timeout_type_t {
MSG3_RX_TIMEOUT = 0, ///< Msg3 has its own timeout to quickly remove fake UEs from random PRACHs MSG3_RX_TIMEOUT = 0, ///< Msg3 has its own timeout to quickly remove fake UEs from random PRACHs
UE_INACTIVITY_TIMEOUT, ///< UE inactivity timeout (usually bigger than reestablishment timeout) UE_INACTIVITY_TIMEOUT, ///< UE inactivity timeout (usually bigger than reestablishment timeout)
MSG5_RX_TIMEOUT, ///< UE timeout for receiving RRCConnectionSetupComplete / RRCReestablishmentComplete
nulltype nulltype
}; };

@ -43,7 +43,12 @@ rrc::ue::ue(rrc* outer_rrc, uint16_t rnti_, const sched_interface::ue_cfg_t& sch
mac_ctrl(rnti, ue_cell_list, bearer_list, parent->cfg, parent->mac, *parent->cell_common_list, sched_ue_cfg) mac_ctrl(rnti, ue_cell_list, bearer_list, parent->cfg, parent->mac, *parent->cell_common_list, sched_ue_cfg)
{} {}
rrc::ue::~ue() {} rrc::ue::~ue()
{
if (old_reest_rnti != SRSRAN_INVALID_RNTI and parent->users.count(old_reest_rnti) > 0) {
parent->rem_user(old_reest_rnti);
}
}
int rrc::ue::init() int rrc::ue::init()
{ {
@ -194,19 +199,23 @@ void rrc::ue::activity_timer_expired(const activity_timeout_type_t type)
parent->logger.info("Activity timer for rnti=0x%x expired after %d ms", rnti, activity_timer.time_elapsed()); parent->logger.info("Activity timer for rnti=0x%x expired after %d ms", rnti, activity_timer.time_elapsed());
if (parent->s1ap->user_exists(rnti)) { if (parent->s1ap->user_exists(rnti)) {
if (type == UE_INACTIVITY_TIMEOUT) { switch (type) {
parent->s1ap->user_release(rnti, asn1::s1ap::cause_radio_network_opts::user_inactivity); case UE_INACTIVITY_TIMEOUT:
con_release_result = procedure_result_code::activity_timeout; parent->s1ap->user_release(rnti, asn1::s1ap::cause_radio_network_opts::user_inactivity);
} else if (type == MSG3_RX_TIMEOUT) { con_release_result = procedure_result_code::activity_timeout;
// MSG3 timeout, no need to notify S1AP, just remove UE break;
parent->rem_user_thread(rnti); case MSG3_RX_TIMEOUT:
con_release_result = procedure_result_code::msg3_timeout; case MSG5_RX_TIMEOUT:
} else { // MSG3 timeout, no need to notify S1AP, just remove UE
// Unhandled activity timeout, just remove UE and log an error parent->rem_user_thread(rnti);
parent->rem_user_thread(rnti); con_release_result = procedure_result_code::msg3_timeout;
con_release_result = procedure_result_code::activity_timeout; break;
parent->logger.error( default:
"Unhandled reason for activity timer expiration. rnti=0x%x, cause %d", rnti, static_cast<unsigned>(type)); // Unhandled activity timeout, just remove UE and log an error
parent->rem_user_thread(rnti);
con_release_result = procedure_result_code::activity_timeout;
parent->logger.error(
"Unhandled reason for activity timer expiration. rnti=0x%x, cause %d", rnti, static_cast<unsigned>(type));
} }
} else { } else {
parent->rem_user_thread(rnti); parent->rem_user_thread(rnti);
@ -256,6 +265,9 @@ void rrc::ue::set_activity_timeout(activity_timeout_type_t type)
case UE_INACTIVITY_TIMEOUT: case UE_INACTIVITY_TIMEOUT:
deadline_ms = parent->cfg.inactivity_timeout_ms; deadline_ms = parent->cfg.inactivity_timeout_ms;
break; break;
case MSG5_RX_TIMEOUT:
deadline_ms = get_ue_cc_cfg(UE_PCELL_CC_IDX)->sib2.ue_timers_and_consts.t301.to_number();
break;
default: default:
parent->logger.error("Unknown timeout type %d", type); parent->logger.error("Unknown timeout type %d", type);
} }
@ -617,7 +629,7 @@ void rrc::ue::handle_rrc_con_reest_req(rrc_conn_reest_request_s* msg)
old_reest_rnti = old_rnti; old_reest_rnti = old_rnti;
state = RRC_STATE_WAIT_FOR_CON_REEST_COMPLETE; state = RRC_STATE_WAIT_FOR_CON_REEST_COMPLETE;
set_activity_timeout(UE_INACTIVITY_TIMEOUT); set_activity_timeout(MSG5_RX_TIMEOUT);
} }
void rrc::ue::send_connection_reest(uint8_t ncc) void rrc::ue::send_connection_reest(uint8_t ncc)
@ -700,6 +712,7 @@ void rrc::ue::handle_rrc_con_reest_complete(rrc_conn_reest_complete_s* msg, srsr
// remove old RNTI // remove old RNTI
parent->rem_user(old_reest_rnti); parent->rem_user(old_reest_rnti);
old_reest_rnti = SRSRAN_INVALID_RNTI;
state = RRC_STATE_REESTABLISHMENT_COMPLETE; state = RRC_STATE_REESTABLISHMENT_COMPLETE;

Loading…
Cancel
Save