UeRelease support at LteEnbMac and schedulers (PF and RR)

This commit is contained in:
Marco Miozzo
2012-12-04 11:19:32 +01:00
parent 3ce181f277
commit 081da74f0f
4 changed files with 91 additions and 8 deletions

View File

@@ -368,7 +368,7 @@ LteEnbMac::DoDispose ()
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 @@ LteEnbMac::DoRemoveUe (uint16_t rnti)
params.m_rnti = rnti;
m_cschedSapProvider->CschedUeReleaseReq (params);
m_rlcAttached.erase (rnti);
m_miDlHarqProcessesPackets.erase (rnti);
}
void

View File

@@ -382,7 +382,24 @@ void
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 @@ void
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;
}

View File

@@ -350,7 +350,7 @@ void
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 @@ void
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 @@ void
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;
}

View File

@@ -84,7 +84,7 @@ std::string LteRrcConnectionEstablishmentTestCase::BuildNameString (uint32_t nUe
}
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 @@ LteRrcTestSuite::LteRrcTestSuite ()
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;