32 #include "ns3/simulator.h"
33 #include "ns3/double.h"
34 #include "ns3/integer.h"
35 #include "ns3/uinteger.h"
38 NS_LOG_COMPONENT_DEFINE(
"ndn.RttEstimator");
50 TypeId(
"ns3::ndn::RttEstimator")
52 .AddAttribute(
"MaxMultiplier",
"Maximum RTO Multiplier", UintegerValue(64),
53 MakeUintegerAccessor(&RttEstimator::m_maxMultiplier),
54 MakeUintegerChecker<uint16_t>())
55 .AddAttribute(
"InitialEstimation",
"Initial RTT estimation", TimeValue(Seconds(1.0)),
56 MakeTimeAccessor(&RttEstimator::m_initialEstimatedRtt), MakeTimeChecker())
57 .AddAttribute(
"MinRTO",
"Minimum retransmit timeout value",
63 .AddAttribute(
"MaxRTO",
"Maximum retransmit timeout value", TimeValue(Seconds(200.0)),
72 NS_LOG_FUNCTION(
this << minRto);
84 NS_LOG_FUNCTION(
this << maxRto);
96 NS_LOG_FUNCTION(
this << estimate);
112 NS_LOG_FUNCTION(
this);
121 NS_LOG_FUNCTION(
this);
132 NS_LOG_FUNCTION(
this);
137 ObjectBase::ConstructSelf(AttributeConstructionList());
146 , m_maxMultiplier(c.m_maxMultiplier)
147 , m_initialEstimatedRtt(c.m_initialEstimatedRtt)
148 , m_currentEstimatedRtt(c.m_currentEstimatedRtt)
149 , m_minRto(c.m_minRto)
150 , m_maxRto(c.m_maxRto)
151 , m_nSamples(c.m_nSamples)
152 , m_multiplier(c.m_multiplier)
153 , m_history(c.m_history)
155 NS_LOG_FUNCTION(
this);
160 NS_LOG_FUNCTION(
this);
172 NS_LOG_FUNCTION(
this << seq << size);
176 m_next = seq + SequenceNumber32(size);
180 if ((seq >= i->seq) && (seq < (i->seq + SequenceNumber32(i->count)))) {
183 if ((seq + SequenceNumber32(size)) > m_next) {
184 m_next = seq + SequenceNumber32(size);
185 i->count = ((seq + SequenceNumber32(size)) - i->seq);
196 NS_LOG_FUNCTION(
this << ackSeq);
200 Time m = Seconds(0.0);
204 if (!h.
retx && ackSeq >= (h.
seq + SequenceNumber32(h.
count))) {
205 m = Simulator::Now() - h.
time;
212 if ((h.
seq + SequenceNumber32(h.
count)) > ackSeq)
222 NS_LOG_FUNCTION(
this);
231 NS_LOG_FUNCTION(
this);
233 NS_LOG_DEBUG(
"Multiplier increased to " <<
m_multiplier);
239 NS_LOG_FUNCTION(
this);
246 NS_LOG_FUNCTION(
this);
RttHistory(SequenceNumber32 s, uint32_t c, Time t)
virtual void SentSeq(SequenceNumber32 seq, uint32_t size)
Note that a particular sequence has been sent.
static TypeId GetTypeId(void)
NS_OBJECT_ENSURE_REGISTERED(ContentStore)
void SetMaxRto(Time maxRto)
Sets the Maximum RTO.
virtual void Measurement(Time t)=0
Add a new measurement to the estimator.
virtual Time AckSeq(SequenceNumber32 ackSeq)
Note that a particular ack sequence has been received.
virtual void Reset()
Resets the estimation to its initial state.
virtual void ClearSent()
Clear all history entries.
void SetMinRto(Time minRto)
Sets the Minimum RTO.
void SetCurrentEstimate(Time estimate)
Sets the current RTT estimate (forcefully).
virtual TypeId GetInstanceTypeId(void) const
virtual void IncreaseMultiplier()
Increase the estimation multiplier up to MaxMultiplier.
virtual void ResetMultiplier()
Resets the estimation multiplier to 1.
Time GetMinRto(void) const
Get the Minimum RTO.
Time GetCurrentEstimate(void) const
gets the current RTT estimate.
Base class for all RTT Estimators.
Helper class to store RTT measurements.
Time GetMaxRto(void) const
Get the Maximum RTO.
Time m_currentEstimatedRtt