utils: ndn::Limits now uses double for the internal limits parameter and invalid when (by default) it is set to a negative value
python: rescanned bindings
diff --git a/utils/ndn-limits.cc b/utils/ndn-limits.cc
index ddd9a05..2e4a9ec 100644
--- a/utils/ndn-limits.cc
+++ b/utils/ndn-limits.cc
@@ -38,30 +38,6 @@
.SetGroupName ("Ndn")
.SetParent <Object> ()
.AddConstructor <Limits> ()
-
- .AddAttribute ("ExpDecayTau", "Parameter 'tau' for the exponential delay of the current maximum limit variable",
- TimeValue (Seconds (100.0)),
- MakeTimeAccessor (&Limits::m_exponentialDecayTau),
- MakeTimeChecker ()
- )
-
- .AddAttribute ("NonDecreasePeriod", "Only one decrease is allowed per one NonDecreasePeriod",
- TimeValue (Seconds (0.1)),
- MakeTimeAccessor (&Limits::m_nonDecreasePeriod),
- MakeTimeChecker ()
- )
-
- .AddAttribute ("AdditiveIncrease", "Parameter for additive increase",
- DoubleValue (1.0),
- MakeDoubleAccessor (&Limits::m_additiveIncrease),
- MakeDoubleChecker<double> ()
- )
-
- .AddAttribute ("MultiplicativeDecrease", "Parameter for multiplicative decrease",
- DoubleValue (0.5),
- MakeDoubleAccessor (&Limits::m_multiplicativeDecrease),
- MakeDoubleChecker<double> ()
- )
.AddTraceSource ("CurMaxLimit",
"Current maximum limit",
@@ -75,66 +51,26 @@
}
void
-Limits::SetMaxLimit (uint32_t max)
+Limits::SetMaxLimit (double max)
{
m_maxLimit = max;
m_curMaxLimit = max;
}
-uint32_t
+double
Limits::GetMaxLimit () const
{
return m_maxLimit;
}
void
-Limits::DecayCurrentLimit ()
+Limits::UpdateCurrentLimit (double limit)
{
- if (!IsEnabled ()) return;
+ NS_ASSERT_MSG (limit >= 0.0, "Limit should be greater or equal to zero");
- if (!m_lastDecay.IsZero ())
- {
- double timeDiff = (Simulator::Now () - m_lastDecay).ToDouble (Time::S);
-
- NS_LOG_DEBUG ("m_maxLimit - (m_maxLimit - m_curMaxLimit) * exp (-timeDiff / tau)");
- NS_LOG_DEBUG (m_maxLimit << " - " << " ( " << m_maxLimit << " - " << (double)m_curMaxLimit << " ) " << " * " << " exp (- " << timeDiff << " / " << m_exponentialDecayTau.ToDouble (Time::S) << " ) ");
-
- m_curMaxLimit = m_maxLimit - (m_maxLimit - m_curMaxLimit) * exp (-timeDiff / m_exponentialDecayTau.ToDouble (Time::S));
- }
-
- m_lastDecay = Simulator::Now ();
+ m_curMaxLimit = std::min (limit, m_maxLimit);
}
-void
-Limits::IncreaseLimit ()
-{
- if (!IsEnabled ()) return;
-
- // Additive increase
- m_curMaxLimit = std::min (1.0 * m_maxLimit,
- (double)m_curMaxLimit + m_additiveIncrease / (double)m_curMaxLimit);
-}
-
-void
-Limits::DecreaseLimit ()
-{
- if (!IsEnabled ()) return;
-
-// m_curMaxLimit = std::max (0.0,
-// (double)m_curMaxLimit - m_multiplicativeDecrease / (double)m_curMaxLimit);
-// }
-
- if (m_lastDecrease.IsZero () ||
- (!m_lastDecrease.IsZero () && Simulator::Now () - m_lastDecrease > m_nonDecreasePeriod)) // allow
- {
- // Multiplicative decrease... almost
- m_curMaxLimit = m_multiplicativeDecrease * m_curMaxLimit;
-
- m_lastDecrease = Simulator::Now ();
- }
-}
-
-
bool
Limits::IsBelowLimit ()
{
@@ -144,19 +80,15 @@
{
// static UniformVariable acceptanceProbability (0, m_curMaxLimit);
// double value = acceptanceProbability.GetValue ();
- double value = m_outstanding+ 1;
+ double value = m_outstanding + 1;
if (m_outstanding < value)
{
m_outstanding += 1.0;
- // if (Simulator::GetContext () == 6) std::cout << "." << std::flush;
return true;
}
else
return false;
-
- // m_outstanding += 1;
- // return true;
}
else
return false;
@@ -165,9 +97,7 @@
void
Limits::RemoveOutstanding ()
{
- if (!IsEnabled ()) return; //limits are disabled
-
- // if (Simulator::GetContext () == 6) std::cout << "*" << std::flush;
+ if (!IsEnabled ()) return;
NS_LOG_DEBUG (m_outstanding);
NS_ASSERT_MSG (m_outstanding >= (uint32_t)1, "Should not be possible, unless we decreasing this number twice somewhere");
diff --git a/utils/ndn-limits.h b/utils/ndn-limits.h
index 034c979..ed559c6 100644
--- a/utils/ndn-limits.h
+++ b/utils/ndn-limits.h
@@ -45,7 +45,7 @@
* \param prefix smart pointer to the prefix for the FIB entry
*/
Limits ()
- : m_maxLimit (0)
+ : m_maxLimit (-1)
, m_curMaxLimit (0)
, m_outstanding (0)
{ }
@@ -54,40 +54,31 @@
* @brief Set limit for the number of outstanding interests
*/
void
- SetMaxLimit (uint32_t max);
+ SetMaxLimit (double max);
/**
* @brief Get limit for the number of outstanding interests
*/
- uint32_t
+ double
GetMaxLimit () const;
/**
* @brief Check whether limits are enabled or not
*/
inline bool
- IsEnabled () const;
+ IsEnabled () const
+ {
+ return m_maxLimit > 0.0;
+ }
/**
- * @brief Decay current limit (exponential decaying)
+ * @brief Update a current value of the limit
*
- * If needed, this method should be called externally periodically (doesn't matter how often, decaying amount will remain the same).
- * Decaying is most likely needed for per-prefix limits, but definitely not needed for per-face limits.
+ * If limit is larger than previously set value of maximum limit (SetMaxLimit), then the current limit will
+ * be limited to that maximum value
*/
void
- DecayCurrentLimit ();
-
- /**
- * @brief Increase current limit (additive increase)
- */
- void
- IncreaseLimit ();
-
- /**
- * @brief Decrease current limit (multiplicative decrease)
- */
- void
- DecreaseLimit ();
+ UpdateCurrentLimit (double limit);
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
@@ -106,25 +97,11 @@
RemoveOutstanding ();
public:
- uint32_t m_maxLimit;
+ double m_maxLimit;
- TracedValue< double > m_curMaxLimit;
- TracedValue< uint32_t > m_outstanding;
-
- Time m_exponentialDecayTau;
- Time m_nonDecreasePeriod;
- double m_additiveIncrease;
- double m_multiplicativeDecrease;
-
- Time m_lastDecrease;
- Time m_lastDecay;
+ TracedValue< double > m_curMaxLimit;
+ TracedValue< double > m_outstanding;
};
-
-inline bool
-Limits::IsEnabled () const
-{
- return m_maxLimit != 0;
-}
} // namespace ndn