From 0f2cb0aada71e146925c0cff5b4ce50ef19050c0 Mon Sep 17 00:00:00 2001 From: Xu Bo <xubo1@cn.fujtisu.com> Date: Mon, 8 Jan 2018 18:53:30 +0900 Subject: [PATCH] fix the timer between reestablishment and reestablishmentComplete --- openair2/LAYER2/MAC/eNB_scheduler.c | 11 ++++++++++- openair2/RRC/LITE/rrc_eNB.c | 15 ++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 38a34d5eec..35e866248c 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -712,7 +712,16 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer++; if(RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer >= RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer_thres) { - RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer = 0; + RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ue_reestablishment_reject_timer = 0; + for (int ue_id_l = 0; ue_id_l < NUMBER_OF_UE_MAX; ue_id_l++) { + if (reestablish_rnti_map[ue_id_l][0] == rnti) { + // clear currentC-RNTI from map + reestablish_rnti_map[ue_id_l][0] = 0; + reestablish_rnti_map[ue_id_l][1] = 0; + break; + } + } + for (int ii=0; ii<NUMBER_OF_UE_MAX; ii++) { LTE_eNB_ULSCH_t *ulsch = NULL; ulsch = RC.eNB[module_idP][CC_id]->ulsch[ii]; diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 24571ad4f7..886a18a557 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -1195,9 +1195,10 @@ rrc_eNB_generate_RRCConnectionReestablishment( // remove UE after 10 frames after RRCConnectionReestablishmentRelease is triggered //ue_context_pP->ue_context.ue_release_timer_thres = 100; // activate release timer, if RRCComplete not received after 100 frames, remove UE - ue_context_pP->ue_context.ue_reestablishment_timer = 1; + int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered - ue_context_pP->ue_context.ue_reestablishment_timer_thres = 1000; + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 1000; } //----------------------------------------------------------------------------- @@ -5482,12 +5483,12 @@ rrc_eNB_decode_ccch( rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); break; } - if(ue_context_p->ue_context.ue_reestablishment_timer > 0){ + int UE_id = find_UE_id(ctxt_pP->module_id, c_rnti); + if(ue_context_p->ue_context.ue_reestablishment_timer > 0 || RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer > 0){ LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishment(Previous) don't complete, let's reject the UE\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); - ue_context_p->ue_context.ue_reestablishment_timer_thres = 1000; break; } LOG_D(RRC, @@ -6123,6 +6124,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { DCCH, sdu_sizeP); { + int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); + RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0; rnti_t reestablish_rnti = 0; // select C-RNTI from map for (i = 0; i < NUMBER_OF_UE_MAX; i++) { @@ -6163,7 +6166,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { #endif } //ue_context_p->ue_context.ue_release_timer = 0; - ue_context_p->ue_context.ue_reestablishment_timer = 1; + ue_context_p->ue_context.ue_reestablishment_timer = 1; + // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered + ue_context_p->ue_context.ue_reestablishment_timer_thres = 1000; } break; -- GitLab