--- a/src/internet-stack/rtt-estimator.cc Sat Dec 13 23:26:01 2008 -0500
+++ b/src/internet-stack/rtt-estimator.cc Sat Dec 13 23:44:20 2008 -0500
@@ -51,6 +51,11 @@
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 @@
{
// 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
--- a/src/internet-stack/rtt-estimator.h Sat Dec 13 23:26:01 2008 -0500
+++ b/src/internet-stack/rtt-estimator.h Sat Dec 13 23:44:20 2008 -0500
@@ -76,6 +76,7 @@
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
};