Add a minimum RTO (adapted from Mathieu, bug 418)
authorRaj Bhattacharjea <raj.b@gatech.edu>
Sat, 13 Dec 2008 23:44:20 -0500
changeset 4023 d320dea20aca
parent 4022 142c13a3975f
child 4024 dfd0bc16dc99
Add a minimum RTO (adapted from Mathieu, bug 418)
src/internet-stack/rtt-estimator.cc
src/internet-stack/rtt-estimator.h
--- 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
 };