blob: fdb61448ebac772045f922d026da8112b5a29a25 [file] [log] [blame]
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2//
3// Copyright (c) 2006 Georgia Tech Research Corporation
4// (c) 2013 University of Arizona
5// (c) 2013 University of California, Los Angeles
6//
7// This program is free software; you can redistribute it and/or modify
8// it under the terms of the GNU General Public License version 2 as
9// published by the Free Software Foundation;
10//
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15//
16// You should have received a copy of the GNU General Public License
17// along with this program; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// Author: Rajib Bhattacharjea<raj.b@gatech.edu>
21// Cheng Yi <yic@email.arizona.edu>
22// Alexander Afanasyev <alexander.afanasyev@ucla.edu>
23//
24
25// Georgia Tech Network Simulator - Round Trip Time Estimation Class
26// George F. Riley. Georgia Tech, Spring 2002
27
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080028#ifndef NDN_RTT_MEAN_DEVIATION_H
29#define NDN_RTT_MEAN_DEVIATION_H
30
Alexander Afanasyev0c395372014-12-20 15:54:02 -080031#include "ndn-rtt-estimator.hpp"
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080032
33namespace ns3 {
34namespace ndn {
35
36/**
Alexander Afanasyev79206512013-07-27 16:49:12 -070037 * \ingroup ndn-apps
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080038 *
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080039 * \brief The modified version of "Mean--Deviation" RTT estimator, as discussed by Van Jacobson that
40 *better suits NDN communication model
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080041 *
42 * This class implements the "Mean--Deviation" RTT estimator, as discussed
43 * by Van Jacobson and Michael J. Karels, in
44 * "Congestion Avoidance and Control", SIGCOMM 88, Appendix A
45 *
46 */
47class RttMeanDeviation : public RttEstimator {
48public:
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080049 static TypeId
50 GetTypeId(void);
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080051
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080052 RttMeanDeviation();
53 RttMeanDeviation(const RttMeanDeviation&);
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080054
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080055 virtual TypeId
56 GetInstanceTypeId(void) const;
Yaogong Wang87cd0652013-05-28 11:00:45 -040057
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080058 void
59 SentSeq(SequenceNumber32 seq, uint32_t size);
60 Time
61 AckSeq(SequenceNumber32 ackSeq);
62 void
63 Measurement(Time measure);
64 Time
65 RetransmitTimeout();
66 Ptr<RttEstimator>
67 Copy() const;
68 void
69 Reset();
70 void
71 Gain(double g);
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080072
73private:
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080074 double m_gain; // Filter gain
75 double m_gain2; // Filter gain
76 Time m_variance; // Current variance
Alexander Afanasyevd9a7f192013-03-07 13:58:14 -080077};
78
79} // namespace ndn
80} // namespace ns3
81
82#endif // NDN_RTT_MEAN_DEVIATION