NS-3 based Named Data Networking (NDN) simulator
ndnSIM: NDN, CCN, CCNx, content centric networks
API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
ndn-limits-window.h
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2011 University of California, Los Angeles
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
19  */
20 
21 #ifndef _NDN_LIMITS_WINDOW_H_
22 #define _NDN_LIMITS_WINDOW_H_
23 
24 #include "ndn-limits.h"
25 
26 namespace ns3 {
27 namespace ndn {
28 
33 class LimitsWindow :
34  public Limits
35 {
36 public:
37  typedef Limits super;
38 
39  static TypeId
40  GetTypeId ();
41 
46  : m_outstanding (0)
47  { }
48 
52  virtual
54 
55  // from ndn::Limits
56 
57  virtual void
58  SetLimits (double rate, double delay)
59  {
60  super::SetLimits (rate, delay);
61 
62  m_curMaxLimit = GetMaxRate () * GetMaxDelay ();
63  }
64 
65  virtual
66  double
67  GetMaxLimit () const
68  {
69  return GetMaxRate () * GetMaxDelay ();
70  }
71 
72  virtual void
73  UpdateCurrentLimit (double limit);
74 
75  virtual double
76  GetCurrentLimit () const
77  {
78  return m_curMaxLimit;
79  }
80 
81  virtual double
83  {
84  return m_curMaxLimit / GetMaxDelay ();
85  }
86 
90  virtual bool
91  IsBelowLimit ();
92 
96  virtual void
97  BorrowLimit ();
98 
102  virtual void
103  ReturnLimit ();
104 
105 private:
106  TracedValue< double > m_curMaxLimit;
107  TracedValue< double > m_outstanding;
108 };
109 
110 
111 } // namespace ndn
112 } // namespace ns3
113 
114 #endif // _NDN_LIMITS_WINDOW_H_
LimitsWindow()
Default Constructor.
Abstract class to manage Interest limits.
Definition: ndn-limits.h:35
virtual double GetCurrentLimit() const
Get value of the current limit.
virtual void ReturnLimit()
Decrease current window of outstanding interests.
virtual void SetLimits(double rate, double delay)
Set limit for the number of outstanding interests.
virtual double GetCurrentLimitRate() const
Get value of the current limit in terms of maximum rate that needs to be enforced.
Structure to manage limits for outstanding interests (window-based limiting)
virtual double GetMaxLimit() const
Get maximum limit (interpretation of the limit depends on realization)
virtual double GetMaxDelay() const
Get maximum delay for BDP product for window-based limits.
Definition: ndn-limits.h:80
virtual void SetLimits(double rate, double delay)
Set limit for the number of outstanding interests.
Definition: ndn-limits.h:61
virtual bool IsBelowLimit()
Check if current interest window (number of pending interests) if less than maximum.
virtual double GetMaxRate() const
Get maximum rate that needs to be enforced.
Definition: ndn-limits.h:71
virtual ~LimitsWindow()
Virtual destructor.
virtual void BorrowLimit()
Increase current window of outstanding interests.
virtual void UpdateCurrentLimit(double limit)
Update a current value of the limit.