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