--- 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;