Add a minimum RTO (adapted from Mathieu, bug 418)

This commit is contained in:
Raj Bhattacharjea
2008-12-13 23:44:20 -05:00
parent 7175cad6df
commit 71efdc0b02
2 changed files with 16 additions and 2 deletions

View File

@@ -51,6 +51,11 @@ RttEstimator::GetTypeId (void)
TimeValue (Seconds (1.0)),
MakeTimeAccessor (&RttEstimator::est),
MakeTimeChecker ())
.AddAttribute ("MinRTO",
"Minimum retransmit timeout value",
TimeValue (Seconds (0.2)),
MakeTimeAccessor (&RttEstimator::minrto),
MakeTimeChecker ())
;
return tid;
}
@@ -217,9 +222,17 @@ Time RttMeanDeviation::RetransmitTimeout ()
{
// If not enough samples, justjust return 2 times estimate
//if (nSamples < 2) return est * 2;
Time retval;
if (variance < est / Scalar (4.0))
return est * Scalar (2 * multiplier); // At least twice current est
return (est + Scalar (4) * variance) * Scalar (multiplier); // As suggested by Jacobson
{
retval = est * Scalar (2 * multiplier); // At least twice current est
}
else
{
retval = (est + Scalar (4) * variance) * Scalar (multiplier); // As suggested by Jacobson
}
retval = Max (retval, minrto);
return retval;
}
Ptr<RttEstimator> RttMeanDeviation::Copy () const

View File

@@ -76,6 +76,7 @@ private:
double m_maxMultiplier;
public:
Time est; // Current estimate
Time minrto; // minimum value of the timeout
uint32_t nSamples;// Number of samples
double multiplier; // RTO Multiplier
};