All CCNx faces are now available through FaceList object attribute
diff --git a/apps/ccnx-app.cc b/apps/ccnx-app.cc
index 780eb9f..cc5e9b2 100644
--- a/apps/ccnx-app.cc
+++ b/apps/ccnx-app.cc
@@ -118,7 +118,7 @@
"Ccnx stack should be installed on the node " << GetNode ());
// step 1. Create a face
- m_face = Create<CcnxLocalFace> (/*Ptr<CcnxApp> (this)*/this);
+ m_face = CreateObject<CcnxLocalFace> (/*Ptr<CcnxApp> (this)*/this);
// step 2. Add face to the CCNx stack
GetNode ()->GetObject<Ccnx> ()->AddFace (m_face);
diff --git a/helper/ccnx-stack-helper.cc b/helper/ccnx-stack-helper.cc
index 2631be2..9699c38 100644
--- a/helper/ccnx-stack-helper.cc
+++ b/helper/ccnx-stack-helper.cc
@@ -209,7 +209,7 @@
if (DynamicCast<LoopbackNetDevice> (device) != 0)
continue; // don't create face for a LoopbackNetDevice
- Ptr<CcnxNetDeviceFace> face = Create<CcnxNetDeviceFace> (node, device);
+ Ptr<CcnxNetDeviceFace> face = CreateObject<CcnxNetDeviceFace> (node, device);
ccnx->AddFace (face);
NS_LOG_LOGIC ("Node " << node->GetId () << ": added CcnxNetDeviceFace as face #" << *face);
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index ec35d8b..3e39384 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -25,6 +25,8 @@
#include "ns3/log.h"
#include "ns3/node.h"
#include "ns3/assert.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
#include <boost/ref.hpp>
@@ -38,6 +40,21 @@
static TypeId tid = TypeId ("ns3::CcnxFace")
.SetParent<Object> ()
.SetGroupName ("Ccnx")
+ .AddAttribute ("Id", "Face id (unique integer for the CCNx stack on this node)",
+ TypeId::ATTR_GET, // allow only getting it.
+ UintegerValue (0),
+ MakeUintegerAccessor (&CcnxFace::m_id),
+ MakeUintegerChecker<uint32_t> ())
+
+ .AddAttribute ("BucketMax", "Maximum size of leaky bucket",
+ DoubleValue (-1.0),
+ MakeDoubleAccessor (&CcnxFace::m_bucketMax),
+ MakeDoubleChecker<double> ())
+ .AddAttribute ("BucketLeak", "Normalized bucket leak size",
+ DoubleValue (0.0),
+ MakeDoubleAccessor (&CcnxFace::m_bucketLeak),
+ MakeDoubleChecker<double> ())
+
;
return tid;
}
@@ -108,35 +125,6 @@
return true;
}
-void
-CcnxFace::LeakBucket (const Time &interval)
-{
- const double leak = m_bucketLeak * interval.ToDouble (Time::S);
- m_bucket = std::max (0.0, m_bucket - leak);
-
- // NS_LOG_DEBUG ("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)
{
@@ -166,6 +154,35 @@
return true;
}
+void
+CcnxFace::LeakBucket (const Time &interval)
+{
+ const double leak = m_bucketLeak * interval.ToDouble (Time::S);
+ m_bucket = std::max (0.0, m_bucket - leak);
+
+ // NS_LOG_DEBUG ("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);
+}
+
// void
// CcnxFace::SetMetric (uint16_t metric)
// {
diff --git a/model/ccnx-forwarding-strategy.h b/model/ccnx-forwarding-strategy.h
index aff0909..bb11ec6 100644
--- a/model/ccnx-forwarding-strategy.h
+++ b/model/ccnx-forwarding-strategy.h
@@ -96,6 +96,7 @@
protected:
Ptr<CcnxPit> m_pit;
+ Ptr<Ccnx> m_ccnx; // just for tracing purposes. Should not be used in any other way
};
} //namespace ns3
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index f05a80f..fb1e5e4 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -28,6 +28,7 @@
#include "ns3/uinteger.h"
#include "ns3/trace-source-accessor.h"
#include "ns3/object-vector.h"
+#include "ns3/pointer.h"
#include "ns3/boolean.h"
#include "ns3/string.h"
@@ -63,13 +64,23 @@
.SetParent<Ccnx> ()
.SetGroupName ("Ccnx")
.AddConstructor<CcnxL3Protocol> ()
+ .AddAttribute ("FaceList", "List of faces associated with CCNx stack",
+ ObjectVectorValue (),
+ MakeObjectVectorAccessor (&CcnxL3Protocol::m_faces),
+ MakeObjectVectorChecker<CcnxFace> ())
+
+ .AddAttribute ("ForwardingStrategy", "Forwarding strategy used by CCNx stack",
+ PointerValue (),
+ MakePointerAccessor (&CcnxL3Protocol::SetForwardingStrategy, &CcnxL3Protocol::GetForwardingStrategy),
+ MakePointerChecker<CcnxForwardingStrategy> ())
+
.AddAttribute ("BucketLeakInterval",
"Interval to leak buckets",
StringValue ("10ms"),
MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
&CcnxL3Protocol::SetBucketLeakInterval),
MakeTimeChecker ())
-
+
.AddTraceSource ("TransmittedInterestTrace", "Interests that were transmitted",
MakeTraceSourceAccessor (&CcnxL3Protocol::m_transmittedInterestsTrace))
diff --git a/model/ccnx-local-face.cc b/model/ccnx-local-face.cc
index 1571106..a3267bd 100644
--- a/model/ccnx-local-face.cc
+++ b/model/ccnx-local-face.cc
@@ -38,6 +38,16 @@
namespace ns3
{
+TypeId
+CcnxLocalFace::GetTypeId ()
+{
+ static TypeId tid = TypeId ("ns3::CcnxLocalFace")
+ .SetParent<CcnxFace> ()
+ .SetGroupName ("Ccnx")
+ ;
+ return tid;
+}
+
CcnxLocalFace::CcnxLocalFace (Ptr<CcnxApp> app)
: CcnxFace (app->GetNode ())
, m_app (app)
diff --git a/model/ccnx-local-face.h b/model/ccnx-local-face.h
index 996d969..8855b75 100644
--- a/model/ccnx-local-face.h
+++ b/model/ccnx-local-face.h
@@ -45,6 +45,9 @@
class CcnxLocalFace : public CcnxFace
{
public:
+ static TypeId
+ GetTypeId ();
+
/**
* \brief Default constructor
*/
diff --git a/model/ccnx-net-device-face.cc b/model/ccnx-net-device-face.cc
index d42515f..d4af70f 100644
--- a/model/ccnx-net-device-face.cc
+++ b/model/ccnx-net-device-face.cc
@@ -32,6 +32,16 @@
namespace ns3 {
+TypeId
+CcnxNetDeviceFace::GetTypeId ()
+{
+ static TypeId tid = TypeId ("ns3::CcnxNetDeviceFace")
+ .SetParent<CcnxFace> ()
+ .SetGroupName ("Ccnx")
+ ;
+ return tid;
+}
+
/**
* By default, Ccnx face are created in the "down" state. Before
* becoming useable, the user must invoke SetUp on the face
diff --git a/model/ccnx-net-device-face.h b/model/ccnx-net-device-face.h
index 482d5d3..148da39 100644
--- a/model/ccnx-net-device-face.h
+++ b/model/ccnx-net-device-face.h
@@ -45,6 +45,9 @@
class CcnxNetDeviceFace : public CcnxFace
{
public:
+ static TypeId
+ GetTypeId ();
+
/**
* \brief Constructor
*
diff --git a/wscript b/wscript
index f6aeb90..ae2a7fa 100644
--- a/wscript
+++ b/wscript
@@ -59,8 +59,8 @@
"helper/ccnx-header-helper.h",
"apps/ccnx-app.h",
- "apps/ccnx-consumer.h",
- "apps/ccnx-producer.h",
+ # "apps/ccnx-consumer.h",
+ # "apps/ccnx-producer.h",
"model/hash-helper.h",
"model/ccnx.h",