UeRelease support at LteEnbMac and schedulers (PF and RR)
authorMarco Miozzo <marco.miozzo@cttc.es>
Tue, 04 Dec 2012 11:19:32 +0100
changeset 9465 731494b1b3f1
parent 9462 9cf5d80c8782
child 9466 19ea1eaed7be
UeRelease support at LteEnbMac and schedulers (PF and RR)
src/lte/model/lte-enb-mac.cc
src/lte/model/pf-ff-mac-scheduler.cc
src/lte/model/rr-ff-mac-scheduler.cc
src/lte/test/test-lte-rrc.cc
--- a/src/lte/model/lte-enb-mac.cc	Mon Dec 03 18:48:23 2012 +0100
+++ b/src/lte/model/lte-enb-mac.cc	Tue Dec 04 11:19:32 2012 +0100
@@ -368,7 +368,7 @@
   m_ulCeReceived.clear ();
   m_dlInfoListReceived.clear ();
   m_ulInfoListReceived.clear ();
-m_miDlHarqProcessesPackets.clear ();
+  m_miDlHarqProcessesPackets.clear ();
   delete m_macSapProvider;
   delete m_cmacSapProvider;
   delete m_schedSapUser;
@@ -769,6 +769,7 @@
   params.m_rnti = rnti;
   m_cschedSapProvider->CschedUeReleaseReq (params);
   m_rlcAttached.erase (rnti);
+  m_miDlHarqProcessesPackets.erase (rnti);
 }
 
 void
--- a/src/lte/model/pf-ff-mac-scheduler.cc	Mon Dec 03 18:48:23 2012 +0100
+++ b/src/lte/model/pf-ff-mac-scheduler.cc	Tue Dec 04 11:19:32 2012 +0100
@@ -382,7 +382,24 @@
 PfFfMacScheduler::DoCschedLcReleaseReq (const struct FfMacCschedSapProvider::CschedLcReleaseReqParameters& params)
 {
   NS_LOG_FUNCTION (this);
-  // TODO: Implementation of the API
+  for (uint16_t i = 0; i < params.m_logicalChannelIdentity.size (); i++)
+    {
+      std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+      std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator temp;
+      while (it!=m_rlcBufferReq.end ())
+        {
+          if (((*it).first.m_rnti == params.m_rnti) && ((*it).first.m_lcId == params.m_logicalChannelIdentity.at (i)))
+            {
+              temp = it;
+              it++;
+              m_rlcBufferReq.erase (temp);
+            }
+          else
+            {
+              it++;
+            }
+        }
+    }
   return;
 }
 
@@ -390,7 +407,34 @@
 PfFfMacScheduler::DoCschedUeReleaseReq (const struct FfMacCschedSapProvider::CschedUeReleaseReqParameters& params)
 {
   NS_LOG_FUNCTION (this);
-  // TODO: Implementation of the API
+  
+  m_uesTxMode.erase (params.m_rnti);
+  m_dlHarqCurrentProcessId.erase (params.m_rnti);
+  m_dlHarqProcessesStatus.erase  (params.m_rnti);
+  m_dlHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_dlHarqProcessesRlcPduListBuffer.erase  (params.m_rnti);
+  m_ulHarqCurrentProcessId.erase  (params.m_rnti);
+  m_ulHarqProcessesStatus.erase  (params.m_rnti);
+  m_ulHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_flowStatsDl.erase  (params.m_rnti);
+  m_flowStatsUl.erase  (params.m_rnti);
+  m_ceBsrRxed.erase (params.m_rnti);
+  std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+  std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator temp;
+  while (it!=m_rlcBufferReq.end ())
+    {
+      if ((*it).first.m_rnti == params.m_rnti)
+        {
+          temp = it;
+          it++;
+          m_rlcBufferReq.erase (temp);
+        }
+      else
+        {
+          it++;
+        }
+    }
+
   return;
 }
 
--- a/src/lte/model/rr-ff-mac-scheduler.cc	Mon Dec 03 18:48:23 2012 +0100
+++ b/src/lte/model/rr-ff-mac-scheduler.cc	Tue Dec 04 11:19:32 2012 +0100
@@ -350,7 +350,7 @@
 RrFfMacScheduler::DoCschedLcConfigReq (const struct FfMacCschedSapProvider::CschedLcConfigReqParameters& params)
 {
   NS_LOG_FUNCTION (this);
-  // Not used at this stage
+  // Not used at this stage (LCs updated by DoSchedDlRlcBufferReq)
   return;
 }
 
@@ -358,7 +358,21 @@
 RrFfMacScheduler::DoCschedLcReleaseReq (const struct FfMacCschedSapProvider::CschedLcReleaseReqParameters& params)
 {
   NS_LOG_FUNCTION (this);
-  // TODO: Implementation of the API
+    for (uint16_t i = 0; i < params.m_logicalChannelIdentity.size (); i++)
+    {
+     std::list<FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+      while (it!=m_rlcBufferReq.end ())
+        {
+          if (((*it).m_rnti == params.m_rnti)&&((*it).m_logicalChannelIdentity == params.m_logicalChannelIdentity.at (i)))
+            {
+              it = m_rlcBufferReq.erase (it);
+            }
+          else
+            {
+              it++;
+            }
+        }
+    }
   return;
 }
 
@@ -366,7 +380,30 @@
 RrFfMacScheduler::DoCschedUeReleaseReq (const struct FfMacCschedSapProvider::CschedUeReleaseReqParameters& params)
 {
   NS_LOG_FUNCTION (this);
-  // TODO: Implementation of the API
+  
+  m_uesTxMode.erase (params.m_rnti);
+  m_dlHarqCurrentProcessId.erase (params.m_rnti);
+  m_dlHarqProcessesStatus.erase  (params.m_rnti);
+  m_dlHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_dlHarqProcessesRlcPduListBuffer.erase  (params.m_rnti);
+  m_ulHarqCurrentProcessId.erase  (params.m_rnti);
+  m_ulHarqProcessesStatus.erase  (params.m_rnti);
+  m_ulHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_ceBsrRxed.erase (params.m_rnti);
+  std::list<FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+  while (it != m_rlcBufferReq.end ())
+    {
+      NS_LOG_DEBUG (this << " Erase RNTI " << (*it).m_rnti << " LC " << (uint16_t)(*it).m_logicalChannelIdentity);
+      if ((*it).m_rnti == params.m_rnti)
+        {
+          it = m_rlcBufferReq.erase (it);
+        }
+      else
+        {
+          it++;
+        }
+    }
+    
   return;
 }
 
--- a/src/lte/test/test-lte-rrc.cc	Mon Dec 03 18:48:23 2012 +0100
+++ b/src/lte/test/test-lte-rrc.cc	Tue Dec 04 11:19:32 2012 +0100
@@ -84,7 +84,7 @@
 }
 
 LteRrcConnectionEstablishmentTestCase::LteRrcConnectionEstablishmentTestCase (uint32_t nUes, uint32_t nBearers, uint32_t tConnBase, uint32_t tConnIncrPerUe, uint32_t delayDiscStart, bool useIdealRrc)
-  : TestCase (BuildNameString (nUes, nBearers, tConnBase, tConnIncrPerUe, delayDiscStart)),
+  : TestCase (BuildNameString (nUes, nBearers, tConnBase, tConnIncrPerUe, delayDiscStart, useIdealRrc)),
     m_nUes (nUes),
     m_nBearers (nBearers),
     m_tConnBase (tConnBase),
@@ -275,13 +275,14 @@
       AddTestCase (new LteRrcConnectionEstablishmentTestCase (  4,        0,        20,              0,             1, useIdealRrc));
       AddTestCase (new LteRrcConnectionEstablishmentTestCase (  4,        0,        20,            300,             1, useIdealRrc));
       AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 20,        0,        10,              1,             1, useIdealRrc));
-  AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 50,        0,         0,              0,             1));, useIdealRrc
+      AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 50,        0,         0,              0,             1, useIdealRrc));
   // // time consuming tests with a lot of UEs
   // AddTestCase (new LteRrcConnectionEstablishmentTestCase (100,        0,        10,              0,             1));
   // AddTestCase (new LteRrcConnectionEstablishmentTestCase (100,        0,        10,              1,             1));
   // AddTestCase (new LteRrcConnectionEstablishmentTestCase (200,        0,        10,              0,             1));
   // AddTestCase (new LteRrcConnectionEstablishmentTestCase (200,        0,        10,              1,             1));
 
+    }
 }
 
 static LteRrcTestSuite g_lteRrcTestSuiteInstance;