Fixed UE measurements timing issue (when reportInterval > 200 ms, or when time-to-trigger < 200 ms)

This commit is contained in:
Budiarto Herman
2013-07-09 14:53:20 +03:00
parent 7553c905c7
commit 5f541bc22f
2 changed files with 27 additions and 3 deletions

View File

@@ -45,7 +45,6 @@ NS_LOG_COMPONENT_DEFINE ("LteUeRrc");
namespace ns3 {
/////////////////////////////
// CMAC SAP forwarder
/////////////////////////////
@@ -1885,7 +1884,10 @@ LteUeRrc::VarMeasReportListAdd (uint8_t measId, ConcernedCells_t enteringCells)
NS_ASSERT (!measReportIt->second.cellsTriggeredList.empty ());
measReportIt->second.numberOfReportsSent = 0;
SendMeasurementReport (measId);
measReportIt->second.periodicReportTimer
= Simulator::Schedule (UE_MEASUREMENTS_DELAY,
&LteUeRrc::SendMeasurementReport,
this, measId);
std::map<uint8_t, std::list<PendingTrigger_t> >::iterator
enteringTriggerIt = m_enteringTriggerQueue.find (measId);
@@ -1943,6 +1945,8 @@ LteUeRrc::VarMeasReportListErase (uint8_t measId, ConcernedCells_t leavingCells,
if (reportOnLeave)
{
// TODO: this might fail because the VarMeasReportList entry might have been deleted already
// TODO: this might produce unexpectedly repeating measurement report
SendMeasurementReport (measId);
}

View File

@@ -35,6 +35,26 @@
namespace ns3 {
/**
* \brief Artificial delay of UE measurements procedure
*
* i.e. the period between the time layer-1-filtered measurements from PHY
* layer is received and the earliest time the actual measurement report
* submission to the serving cell is invoked.
*
* This delay exists because of racing condition between several UE measurements
* functions which happen to be scheduled at the same time. The delay ensures
* that:
* - measurements (e.g. layer-3-filtering) is always performed before
* reporting, thus the latter always uses the newest layer-1-filtered
* measurements from PHY; and
* - time-to-trigger is always performed just before the reporting, so there
* would still be chance to cancel the reporting if necessary.
*/
static const Time UE_MEASUREMENTS_DELAY = MicroSeconds (1);
class LteRlc;
class LteMacSapProvider;
class LteUeCmacSapUser;
@@ -287,7 +307,7 @@ private:
LteMacSapProvider* m_macSapProvider;
LtePdcpSapUser* m_drbPdcpSapUser;
LteAsSapProvider* m_asSapProvider;
LteAsSapUser* m_asSapUser;