Finalizing interest limits. Now everything seem to work.
To work correctly, a lot of parameters have to be adjusted, including average
contentObject size, averageRTT, queues on nodes.
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 51b3ba4..3c092e9 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -82,8 +82,12 @@
if (m_bucketMax > 0)
{
+ //NS_LOG_ERROR ("Limits enabled: " << m_bucketMax << ", current: " << m_bucket);
if (m_bucket+1.0 > m_bucketMax)
- return false;
+ {
+ //NS_LOG_ERROR ("Returning false");
+ return false;
+ }
m_bucket += 1.0;
}
@@ -95,11 +99,31 @@
CcnxFace::LeakBucket (const Time &interval)
{
const double leak = m_bucketLeak * interval.ToDouble (Time::S);
- m_bucket -= std::max (0.0, m_bucket - leak);
+ m_bucket = std::max (0.0, m_bucket - leak);
NS_LOG_ERROR ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
}
+void
+CcnxFace::SetBucketMax (double bucket)
+{
+ NS_LOG_FUNCTION (this << bucket);
+ m_bucketMax = bucket;
+}
+
+void
+CcnxFace::SetBucketLeak (double leak)
+{
+ NS_LOG_FUNCTION (this << leak);
+ m_bucketLeak = leak;
+}
+
+void
+CcnxFace::LeakBucketByOnePacket ()
+{
+ m_bucket = std::max (0.0, m_bucket-1.0);
+}
+
bool
CcnxFace::Send (Ptr<Packet> packet)
{
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index 40de808..0499abb 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -165,13 +165,13 @@
*
* @param bucket maximum value for Interest allowance. If < 0, then limit will be disabled
*/
- inline void
+ void
SetBucketMax (double bucket);
/**
* @brief Set a normalized value (one second) for Interest allowance bucket leak
*/
- inline void
+ void
SetBucketLeak (double leak);
/**
@@ -182,7 +182,7 @@
void
LeakBucket (const Time &interval);
- inline void
+ void
LeakBucketByOnePacket ();
/**
@@ -248,24 +248,6 @@
return m_id;
}
-void
-CcnxFace::SetBucketMax (double bucket)
-{
- m_bucketMax = bucket;
-}
-
-void
-CcnxFace::SetBucketLeak (double leak)
-{
- m_bucketLeak = leak;
-}
-
-void
-CcnxFace::LeakBucketByOnePacket ()
-{
- m_bucket -= std::max (0.0, m_bucket-1.0);
-}
-
} // namespace ns3
#endif //CCNX_FACE_H
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 187a020..5484fb7 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -584,6 +584,8 @@
CcnxL3Protocol::LeakBuckets ()
{
NS_LOG_FUNCTION (this);
+ NS_LOG_ERROR ("Bucket Interval: " << m_bucketLeakInterval.ToDouble(Time::S));
+
BOOST_FOREACH (const Ptr<CcnxFace> &face, m_faces)
{
face->LeakBucket (m_bucketLeakInterval);