diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 10fff1677a..4d0af37fbe 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -1470,8 +1470,7 @@ void *rrc_nrue(void *notUsed) case NRRRC_FRAME_PROCESS: LOG_D(NR_RRC, "Received %s: frame %d\n", ITTI_MSG_NAME(msg_p), NRRRC_FRAME_PROCESS(msg_p).frame); // increase the timers every 10ms (every new frame) - NR_UE_Timers_Constants_t *timers = &NR_UE_rrc_inst[instance].timers_and_constants; - nr_rrc_handle_timers(timers); + nr_rrc_handle_timers(rrc, instance); NR_UE_RRC_SI_INFO *SInfo = &NR_UE_rrc_inst[instance].perNB[NRRRC_FRAME_PROCESS(msg_p).gnb_id].SInfo; nr_rrc_SI_timers(SInfo); break; diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index 1b4df0d797..b9f0155d6d 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -105,7 +105,7 @@ void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti); void *rrc_nrue_task(void *args_p); void *rrc_nrue(void *args_p); -void nr_rrc_handle_timers(NR_UE_Timers_Constants_t *timers); +void nr_rrc_handle_timers(NR_UE_RRC_INST_t *rrc, instance_t instance); /**\brief RRC NSA UE task. \param void *args_p Pointer on arguments to start the task. */ diff --git a/openair2/RRC/NR_UE/rrc_timers_and_constants.c b/openair2/RRC/NR_UE/rrc_timers_and_constants.c index 0a7010850d..c4a4c20183 100644 --- a/openair2/RRC/NR_UE/rrc_timers_and_constants.c +++ b/openair2/RRC/NR_UE/rrc_timers_and_constants.c @@ -98,8 +98,9 @@ void nr_rrc_SI_timers(NR_UE_RRC_SI_INFO *SInfo) } } -void nr_rrc_handle_timers(NR_UE_Timers_Constants_t *timers) +void nr_rrc_handle_timers(NR_UE_RRC_INST_t *rrc, instance_t instance) { + NR_UE_Timers_Constants_t *timers = &rrc->timers_and_constants; // T304 if (timers->T304_active == true) { timers->T304_cnt += 10; @@ -120,6 +121,14 @@ void nr_rrc_handle_timers(NR_UE_Timers_Constants_t *timers) AssertFatal(false, "Radio link failure! Not handled yet!\n"); } } + if (timers->T311_active == true) { + timers->T311_cnt += 10; + if(timers->T311_cnt >= timers->T311_k) { + // Upon T311 expiry, the UE shall perform the actions upon going to RRC_IDLE + // with release cause 'RRC connection failure' + nr_rrc_going_to_IDLE(instance, RRC_CONNECTION_FAILURE, NULL); + } + } } void nr_rrc_set_T304(NR_UE_Timers_Constants_t *tac, NR_ReconfigurationWithSync_t *reconfigurationWithSync)