diff --git a/src/mpi/model/distributed-simulator-impl.cc b/src/mpi/model/distributed-simulator-impl.cc index 2436392ea..1d8d9a908 100644 --- a/src/mpi/model/distributed-simulator-impl.cc +++ b/src/mpi/model/distributed-simulator-impl.cc @@ -76,7 +76,7 @@ LbtsMessage::IsFinished () return m_isFinished; } -Time DistributedSimulatorImpl::m_lookAhead = Seconds (0); +Time DistributedSimulatorImpl::m_lookAhead = Seconds (-1); TypeId DistributedSimulatorImpl::GetTypeId (void) @@ -167,14 +167,15 @@ DistributedSimulatorImpl::CalculateLookAhead (void) #ifdef NS3_MPI if (MpiInterface::GetSize () <= 1) { - DistributedSimulatorImpl::m_lookAhead = Seconds (0); - m_grantedTime = Seconds (0); + m_lookAhead = Seconds (0); } else { - DistributedSimulatorImpl::m_lookAhead = GetMaximumSimulationTime (); - - m_grantedTime = GetMaximumSimulationTime (); + if (m_lookAhead == Seconds (-1)) + { + m_lookAhead = GetMaximumSimulationTime (); + } + // else it was already set by SetLookAhead NodeContainer c = NodeContainer::GetGlobal (); for (NodeContainer::Iterator iter = c.Begin (); iter != c.End (); ++iter) @@ -221,15 +222,17 @@ DistributedSimulatorImpl::CalculateLookAhead (void) TimeValue delay; channel->GetAttribute ("Delay", delay); - if (delay.Get ().GetSeconds () < DistributedSimulatorImpl::m_lookAhead.GetSeconds ()) + if (delay.Get () < m_lookAhead) { - DistributedSimulatorImpl::m_lookAhead = delay.Get (); - m_grantedTime = delay.Get (); + m_lookAhead = delay.Get (); } } } } + // m_lookAhead is now set + m_grantedTime = m_lookAhead; + /* * Compute the maximum inter-task latency and use that value * for tasks with no inter-task links. @@ -277,6 +280,20 @@ DistributedSimulatorImpl::CalculateLookAhead (void) #endif } +void +DistributedSimulatorImpl::SetMaximumLookAhead (const Time lookAhead) +{ + if (lookAhead > 0) + { + NS_LOG_FUNCTION (this << lookAhead); + m_lookAhead = lookAhead; + } + else + { + NS_LOG_WARN ("attempted to set look ahead negative: " << lookAhead); + } +} + void DistributedSimulatorImpl::SetScheduler (ObjectFactory schedulerFactory) { diff --git a/src/mpi/model/distributed-simulator-impl.h b/src/mpi/model/distributed-simulator-impl.h index e591794f3..5223a5942 100644 --- a/src/mpi/model/distributed-simulator-impl.h +++ b/src/mpi/model/distributed-simulator-impl.h @@ -122,6 +122,7 @@ public: virtual Time Now (void) const; virtual Time GetDelayLeft (const EventId &id) const; virtual Time GetMaximumSimulationTime (void) const; + virtual void SetMaximumLookAhead (const Time lookAhead); virtual void SetScheduler (ObjectFactory schedulerFactory); virtual uint32_t GetSystemId (void) const; virtual uint32_t GetContext (void) const;