src/internet-stack/rtt-estimator.cc
changeset 7044 f94b264549d1
parent 7040 444bb5c76bff
equal deleted inserted replaced
7043:1a8ff65327d0 7044:f94b264549d1
    63 }
    63 }
    64 
    64 
    65 void 
    65 void 
    66 RttEstimator::SetMinRto (Time minRto)
    66 RttEstimator::SetMinRto (Time minRto)
    67 {
    67 {
    68   minrto = minRto.To ();
    68   minrto = minRto;
    69 }
    69 }
    70 Time 
    70 Time 
    71 RttEstimator::GetMinRto (void) const
    71 RttEstimator::GetMinRto (void) const
    72 {
    72 {
    73   return minrto;
    73   return Time (minrto);
    74 }
    74 }
    75 void 
    75 void 
    76 RttEstimator::SetEstimate (Time estimate)
    76 RttEstimator::SetEstimate (Time estimate)
    77 {
    77 {
    78   est = estimate.To ();
    78   est = estimate;
    79 }
    79 }
    80 Time 
    80 Time 
    81 RttEstimator::GetEstimate (void) const
    81 RttEstimator::GetEstimate (void) const
    82 {
    82 {
    83   return est;
    83   return Time (est);
    84 }
    84 }
    85 
    85 
    86 
    86 
    87 //RttHistory methods
    87 //RttHistory methods
    88 RttHistory::RttHistory (SequenceNumber32 s, uint32_t c, Time t)
    88 RttHistory::RttHistory (SequenceNumber32 s, uint32_t c, Time t)
   224 {
   224 {
   225 }
   225 }
   226 
   226 
   227 void RttMeanDeviation::Measurement (Time m)
   227 void RttMeanDeviation::Measurement (Time m)
   228 {
   228 {
   229   int64x64_t sample = m.To ();
       
   230   if (nSamples)
   229   if (nSamples)
   231     { // Not first
   230     { // Not first
   232       int64x64_t err = sample - est;
   231       int64x64_t err = m - est;
   233       est = est + gain * err;         // estimated rtt
   232       est = est + gain * err;         // estimated rtt
   234       variance = variance + gain * (Abs (err) - variance); // variance of rtt
   233       variance = variance + gain * (Abs (err) - variance); // variance of rtt
   235     }
   234     }
   236   else
   235   else
   237     { // First sample
   236     { // First sample
   238       est = sample;                        // Set estimate to current
   237       est = m;                        // Set estimate to current
   239       //variance = sample / 2;               // And variance to current / 2
   238       //variance = sample / 2;               // And variance to current / 2
   240       variance = sample; // try this
   239       variance = m; // try this
   241     }
   240     }
   242   nSamples++;
   241   nSamples++;
   243 }
   242 }
   244 
   243 
   245 Time RttMeanDeviation::RetransmitTimeout ()
   244 Time RttMeanDeviation::RetransmitTimeout ()
   254   else
   253   else
   255     {
   254     {
   256       retval = (est + 4 * variance) * multiplier; // As suggested by Jacobson
   255       retval = (est + 4 * variance) * multiplier; // As suggested by Jacobson
   257     }
   256     }
   258   retval = Max (retval, minrto);
   257   retval = Max (retval, minrto);
   259   return retval;
   258   return Time (retval);
   260 }
   259 }
   261 
   260 
   262 Ptr<RttEstimator> RttMeanDeviation::Copy () const
   261 Ptr<RttEstimator> RttMeanDeviation::Copy () const
   263 {
   262 {
   264   return CopyObject<RttMeanDeviation> (this);
   263   return CopyObject<RttMeanDeviation> (this);