Update of tracing
In CcnxForwardingStrategy (connect using "/NodeList/*/$ns3::CcnxL3Protocol/ForwardingStrategy/<trace>":
(interests)
- OutInterests
In Ccnx (connect using "/NodeList/*/$ns3::CcnxL3Protocol/<trace>":
(interests)
- InInterests
- DropInterests
(nacks)
- OutNacks
- InNacks
- DropNacks
(data)
- OutData
- InData
- DropData
diff --git a/helper/ccnx-stack-helper.cc b/helper/ccnx-stack-helper.cc
index 9699c38..6e2a411 100644
--- a/helper/ccnx-stack-helper.cc
+++ b/helper/ccnx-stack-helper.cc
@@ -200,8 +200,7 @@
Ptr<CcnxL3Protocol> ccnx = CreateObject<CcnxL3Protocol> ();
node->AggregateObject (ccnx);
- ccnx->SetForwardingStrategy
- (DynamicCast<CcnxForwardingStrategy> (m_strategyFactory.Create<Object> ()));
+ ccnx->SetForwardingStrategy (m_strategyFactory.Create<CcnxForwardingStrategy> ());
for (uint32_t index=0; index < node->GetNDevices (); index++)
{
diff --git a/model/ccnx-bestroute-strategy.cc b/model/ccnx-bestroute-strategy.cc
index b850d08..776315f 100644
--- a/model/ccnx-bestroute-strategy.cc
+++ b/model/ccnx-bestroute-strategy.cc
@@ -19,7 +19,10 @@
*/
#include "ccnx-bestroute-strategy.h"
+
#include "ccnx-interest-header.h"
+#include "ccnx-pit.h"
+#include "ccnx-pit-entry.h"
#include "ns3/assert.h"
#include "ns3/log.h"
@@ -96,6 +99,7 @@
ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
metricFace.m_face->Send (packet->Copy ());
+ m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
break; // do only once
diff --git a/model/ccnx-flooding-strategy.cc b/model/ccnx-flooding-strategy.cc
index 4a8dd50..5b8542d 100644
--- a/model/ccnx-flooding-strategy.cc
+++ b/model/ccnx-flooding-strategy.cc
@@ -19,10 +19,13 @@
*/
#include "ccnx-flooding-strategy.h"
+#include "ccnx-interest-header.h"
+#include "ccnx-pit.h"
+#include "ccnx-pit-entry.h"
+
#include "ns3/assert.h"
#include "ns3/log.h"
#include "ns3/simulator.h"
-#include "ccnx-interest-header.h"
#include <boost/ref.hpp>
#include <boost/foreach.hpp>
@@ -114,6 +117,7 @@
// }
metricFace.m_face->Send (packet->Copy ());
+ m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
}
diff --git a/model/ccnx-forwarding-strategy.cc b/model/ccnx-forwarding-strategy.cc
index 4a1c3a8..d09d916 100644
--- a/model/ccnx-forwarding-strategy.cc
+++ b/model/ccnx-forwarding-strategy.cc
@@ -24,6 +24,11 @@
#include "ccnx-forwarding-strategy.h"
#include "ns3/log.h"
#include "ns3/simulator.h"
+#include "ns3/double.h"
+
+#include "ccnx-pit.h"
+#include "ccnx-pit-entry.h"
+
#include "ccnx-interest-header.h"
#include <boost/ref.hpp>
@@ -45,6 +50,10 @@
static TypeId tid = TypeId ("ns3::CcnxForwardingStrategy")
.SetGroupName ("Ccnx")
.SetParent<Object> ()
+
+ .AddTraceSource ("OutInterests", "Interests that were transmitted",
+ MakeTraceSourceAccessor (&CcnxForwardingStrategy::m_transmittedInterestsTrace))
+
;
return tid;
}
@@ -102,6 +111,7 @@
ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
metricFace.m_face->Send (packet->Copy ());
+ m_transmittedInterestsTrace (header, metricFace.m_face);
propagatedCount++;
break; // propagate only one interest
@@ -117,5 +127,4 @@
return propagatedCount > 0;
}
-
} //namespace ns3
diff --git a/model/ccnx-forwarding-strategy.h b/model/ccnx-forwarding-strategy.h
index bb11ec6..73f1165 100644
--- a/model/ccnx-forwarding-strategy.h
+++ b/model/ccnx-forwarding-strategy.h
@@ -24,16 +24,14 @@
#include "ns3/packet.h"
#include "ns3/callback.h"
#include "ns3/object.h"
-
-#include "ccnx.h"
-#include "ccnx-fib.h"
-#include "ccnx-pit.h"
-#include "ccnx-pit-entry.h"
+#include "ns3/traced-callback.h"
namespace ns3 {
class CcnxFace;
class CcnxInterestHeader;
+class CcnxPit;
+class CcnxPitEntry;
/**
* \ingroup ccnx
@@ -74,7 +72,7 @@
*/
void
SetPit (Ptr<CcnxPit> pit);
-
+
protected:
/**
* @brief Propage interest vie a green interface. Fail, if no green interfaces available
@@ -93,10 +91,11 @@
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet);
+
+ TracedCallback<Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace> > m_transmittedInterestsTrace;
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 fb1e5e4..4ee61f7 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -80,25 +80,6 @@
MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
&CcnxL3Protocol::SetBucketLeakInterval),
MakeTimeChecker ())
-
- .AddTraceSource ("TransmittedInterestTrace", "Interests that were transmitted",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_transmittedInterestsTrace))
-
- .AddTraceSource ("ReceivedInterestTrace", "Interests that were received",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_receivedInterestsTrace))
-
- .AddTraceSource ("DroppedInterestTrace", "Interests that were dropped",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_droppedInterestsTrace))
-
- .AddTraceSource ("ReceivedDataTrace", "Data that were received",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_receivedDataTrace))
-
- .AddTraceSource ("TransmittedDataTrace", "Data that were transmitted",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_transmittedDataTrace))
-
- .AddTraceSource ("DroppedDataTrace", "Data that were dropped",
- MakeTraceSourceAccessor (&CcnxL3Protocol::m_droppedDataTrace))
-
;
return tid;
}
@@ -318,18 +299,17 @@
const Ptr<const Packet> &packet)
{
NS_LOG_FUNCTION (incomingFace << header << packet);
+ m_inNacks (header, incomingFace);
tuple<const CcnxPitEntry&,bool,bool> ret = m_pit->Lookup (*header);
CcnxPitEntry const& pitEntry = ret.get<0> ();
bool isNew = ret.get<1> ();
bool isDuplicated = ret.get<2> ();
- // NS_ASSERT_MSG (isDuplicated,
- // "NACK should be a duplicated interest");
if (isNew || !isDuplicated) // potential flow
{
// somebody is doing something bad
- m_droppedInterestsTrace (header, NACK_NONDUPLICATE, m_node->GetObject<Ccnx> (), incomingFace);
+ m_dropNacks (header, NON_DUPLICATED, incomingFace);
return;
}
@@ -342,6 +322,7 @@
"Node " << GetObject<Node> ()->GetId () << ", outgoing entry should exist for face " << boost::cref(*incomingFace) << "\n" <<
"size: " << pitEntry.m_outgoing.size ());
+ // m_dropNacks (header, NON_DUPLICATE, incomingFace);
return;
}
@@ -371,7 +352,7 @@
if (pitEntry.m_incoming.size () == 0) // interest was actually satisfied
{
// no need to do anything
- m_droppedInterestsTrace (header, NACK_AFTER_SATISFIED, m_node->GetObject<Ccnx> (), incomingFace);
+ m_dropNacks (header, AFTER_SATISFIED, incomingFace);
return;
}
@@ -380,7 +361,7 @@
NS_LOG_DEBUG ("Not all outgoing are in vain");
// suppress
// Don't do anything, we are still expecting data from some other face
- m_droppedInterestsTrace (header, NACK_SUPPRESSED, m_node->GetObject<Ccnx> (), incomingFace);
+ m_dropNacks (header, SUPPRESSED, incomingFace);
return;
}
@@ -397,7 +378,10 @@
// // If no interests was propagated, then there is not other option for forwarding or
// // ForwardingStrategy failed to find it.
if (!propagated)
- GiveUpInterest (pitEntry, header);
+ {
+ m_dropNacks (header, NO_FACES, incomingFace); // this headers doesn't have NACK flag set
+ GiveUpInterest (pitEntry, header);
+ }
}
// Processing Interests
@@ -409,7 +393,7 @@
const Ptr<const Packet> &packet)
{
NS_LOG_FUNCTION (incomingFace << header << packet);
- //m_receivedInterestsTrace (header, m_node->GetObject<Ccnx> (), incomingFace);
+ m_inInterests (header, incomingFace);
// Lookup of Pit (and associated Fib) entry for this Interest
tuple<const CcnxPitEntry&,bool,bool> ret = m_pit->Lookup (*header);
@@ -419,24 +403,22 @@
if (isDuplicated)
{
+ m_dropInterests (header, DUPLICATED, incomingFace);
+
/**
* This condition will handle "routing" loops and also recently satisfied interests.
* Every time interest is satisfied, PIT entry (with empty incoming and outgoing faces)
* is kept for another small chunk of time.
*/
- // //Trace duplicate interest
- // m_droppedInterestsTrace (header, NDN_DUPLICATE_INTEREST, m_node->GetObject<Ccnx> (), incomingFace);
-
NS_LOG_DEBUG ("Sending NACK_LOOP");
header->SetNack (CcnxInterestHeader::NACK_LOOP);
Ptr<Packet> nack = Create<Packet> ();
nack->AddHeader (*header);
incomingFace->Send (nack);
+ m_outNacks (header, incomingFace);
- // //Trace duplicate interest
- m_droppedInterestsTrace (header, NDN_DUPLICATE_INTEREST, m_node->GetObject<Ccnx> (), incomingFace);
return;
}
@@ -449,8 +431,8 @@
NS_LOG_LOGIC("Found in cache");
- m_transmittedDataTrace (contentObjectHeader, contentObject, CACHED, m_node->GetObject<Ccnx> (), incomingFace);
incomingFace->Send (contentObject);
+ m_outData (contentObjectHeader, true, incomingFace);
// Set pruning timout on PIT entry (instead of deleting the record)
m_pit->modify (m_pit->iterator_to (pitEntry),
@@ -504,9 +486,8 @@
if (!isRetransmitted &&
pitEntry.AreTherePromisingOutgoingFacesExcept (incomingFace))
{ // Suppress this interest if we're still expecting data from some other face
-
- // We are already expecting data later in future. Suppress the interest
- m_droppedInterestsTrace (header, NDN_SUPPRESSED_INTEREST, m_node->GetObject<Ccnx> (), incomingFace);
+
+ m_dropInterests (header, SUPPRESSED, incomingFace);
return;
}
@@ -534,35 +515,12 @@
// If no interests was propagated, then there is not other option for forwarding or
// ForwardingStrategy failed to find it.
if (!propagated)
- GiveUpInterest (pitEntry, header);
-}
-
-void
-CcnxL3Protocol::GiveUpInterest (const CcnxPitEntry &pitEntry,
- Ptr<CcnxInterestHeader> header)
-{
- Ptr<Packet> packet = Create<Packet> ();
- header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
- packet->AddHeader (*header);
-
- BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
{
- incoming.m_face->Send (packet->Copy ());
-
- //m_droppedInterestsTrace (header, DROP_CONGESTION,
- // m_node->GetObject<Ccnx> (), incomingFace);
+ m_dropInterests (header, NO_FACES, incomingFace);
+ GiveUpInterest (pitEntry, header);
}
- // All incoming interests cannot be satisfied. Remove them
- m_pit->modify (m_pit->iterator_to (pitEntry),
- ll::bind (&CcnxPitEntry::ClearIncoming, ll::_1));
-
- // Set pruning timout on PIT entry (instead of deleting the record)
- m_pit->modify (m_pit->iterator_to (pitEntry),
- ll::bind (&CcnxPitEntry::SetExpireTime, ll::_1,
- Simulator::Now () + m_pit->GetPitEntryPruningTimeout ()));
}
-
// Processing ContentObjects
void
CcnxL3Protocol::OnData (const Ptr<CcnxFace> &incomingFace,
@@ -572,7 +530,7 @@
{
NS_LOG_FUNCTION (incomingFace << header << payload << packet);
- m_receivedDataTrace (header, payload, m_node->GetObject<Ccnx> (), incomingFace);
+ m_inData (header, incomingFace);
// 1. Lookup PIT entry
try
@@ -617,7 +575,10 @@
BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
{
if (incoming.m_face != incomingFace)
- incoming.m_face->Send (packet->Copy ());
+ {
+ incoming.m_face->Send (packet->Copy ());
+ m_outData (header, false, incoming.m_face);
+ }
// successfull forwarded data trace
}
@@ -636,12 +597,36 @@
// (unsolicited data packets should not "poison" content store)
//drop dulicated or not requested data packet
- m_droppedDataTrace (header, payload, NDN_UNSOLICITED_DATA, m_node->GetObject<Ccnx> (), incomingFace);
+ m_dropData (header, UNSOLICITED, incomingFace);
return; // do not process unsoliced data packets
}
}
void
+CcnxL3Protocol::GiveUpInterest (const CcnxPitEntry &pitEntry,
+ Ptr<CcnxInterestHeader> header)
+{
+ Ptr<Packet> packet = Create<Packet> ();
+ header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
+ packet->AddHeader (*header);
+
+ BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
+ {
+ incoming.m_face->Send (packet->Copy ());
+
+ m_outNacks (header, incoming.m_face);
+ }
+ // All incoming interests cannot be satisfied. Remove them
+ m_pit->modify (m_pit->iterator_to (pitEntry),
+ ll::bind (&CcnxPitEntry::ClearIncoming, ll::_1));
+
+ // Set pruning timout on PIT entry (instead of deleting the record)
+ m_pit->modify (m_pit->iterator_to (pitEntry),
+ ll::bind (&CcnxPitEntry::SetExpireTime, ll::_1,
+ Simulator::Now () + m_pit->GetPitEntryPruningTimeout ()));
+}
+
+void
CcnxL3Protocol::SetBucketLeakInterval (Time interval)
{
m_bucketLeakInterval = interval;
diff --git a/model/ccnx-l3-protocol.h b/model/ccnx-l3-protocol.h
index 29500fc..8ac24d6 100644
--- a/model/ccnx-l3-protocol.h
+++ b/model/ccnx-l3-protocol.h
@@ -26,7 +26,6 @@
#include <stdint.h>
#include "ns3/ptr.h"
#include "ns3/net-device.h"
-#include "ns3/traced-callback.h"
#include "ns3/nstime.h"
#include "ns3/simulator.h"
@@ -87,36 +86,6 @@
virtual ~CcnxL3Protocol ();
/**
- * \enum DropReason
- * \brief Reason why a packet has been dropped.
- */
- enum DropReason
- {
- NDN_DUPLICATE_INTEREST, ///< \brief Duplicate Interest
- NDN_SUPPRESSED_INTEREST, ///< \brief Suppressed Interest
- NDN_UNSOLICITED_DATA, ///< \brief Unsolicited ContentObject(duplicate?)
- NDN_PIT_TIMER_EXPIRED,
- INTERFACE_DOWN, ///< \brief Interface is down
-
- NACK_SUPPRESSED,
- NACK_AFTER_SATISFIED,
- NACK_NONDUPLICATE,
-
- DROP_NO_ROUTE, /**< No route to host */
- };
-
- /**
- * \enum DropReason
- * \brief Description of where content object was originated
- */
- enum ContentObjectSource
- {
- APPLICATION,
- FORWARDED,
- CACHED
- };
-
- /**
* \brief Assigns node to the CCNx stack
*
* \param node Simulation node
@@ -243,29 +212,6 @@
Time m_bucketLeakInterval;
EventId m_bucketLeakEvent;
-
- TracedCallback<Ptr<const CcnxInterestHeader>,
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedInterestsTrace;
-
- TracedCallback<Ptr<const CcnxInterestHeader>,
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedInterestsTrace;
-
- TracedCallback<Ptr<const CcnxInterestHeader>,
- DropReason,
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_droppedInterestsTrace;
-
- TracedCallback<Ptr<const CcnxContentObjectHeader>,
- Ptr<const Packet>,/*payload*/
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_receivedDataTrace;
-
- TracedCallback<Ptr<const CcnxContentObjectHeader>,
- Ptr<const Packet>,/*payload*/
- ContentObjectSource,
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_transmittedDataTrace;
- TracedCallback<Ptr<const CcnxContentObjectHeader>,
- Ptr<const Packet>,/*payload*/
- DropReason,
- Ptr<Ccnx>, Ptr<const CcnxFace> > m_droppedDataTrace;
};
} // Namespace ns3
diff --git a/model/ccnx.cc b/model/ccnx.cc
index af551a6..30b290e 100644
--- a/model/ccnx.cc
+++ b/model/ccnx.cc
@@ -23,6 +23,10 @@
#include "ns3/boolean.h"
#include "ccnx.h"
+#include "ccnx-face.h"
+#include "ccnx-forwarding-strategy.h"
+#include "ccnx-interest-header.h"
+#include "ccnx-content-object-header.h"
namespace ns3 {
@@ -34,6 +38,29 @@
static TypeId tid = TypeId ("ns3::Ccnx")
.SetGroupName ("Ccnx")
.SetParent<Object> ()
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ // "OutInterests" trace is inside CcnxForwardingStrategy
+ .AddTraceSource ("InInterests", "InInterests", MakeTraceSourceAccessor (&Ccnx::m_inInterests))
+ .AddTraceSource ("DropInterests", "DropInterests", MakeTraceSourceAccessor (&Ccnx::m_dropInterests))
+
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ .AddTraceSource ("OutNacks", "OutNacks", MakeTraceSourceAccessor (&Ccnx::m_outNacks))
+ .AddTraceSource ("InNacks", "InNacks", MakeTraceSourceAccessor (&Ccnx::m_inNacks))
+ .AddTraceSource ("DropNacks", "DropNacks", MakeTraceSourceAccessor (&Ccnx::m_dropNacks))
+
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ .AddTraceSource ("OutData", "OutData", MakeTraceSourceAccessor (&Ccnx::m_outData))
+ .AddTraceSource ("InData", "InData", MakeTraceSourceAccessor (&Ccnx::m_inData))
+ .AddTraceSource ("DropData", "DropData", MakeTraceSourceAccessor (&Ccnx::m_dropData))
+
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
;
return tid;
}
diff --git a/model/ccnx.h b/model/ccnx.h
index 38c2f74..f87da94 100644
--- a/model/ccnx.h
+++ b/model/ccnx.h
@@ -23,6 +23,7 @@
#include "ns3/object.h"
#include "ns3/callback.h"
+#include "ns3/traced-callback.h"
namespace ns3 {
@@ -79,13 +80,6 @@
class Ccnx : public Object
{
public:
- enum ForwardingStrategy
- {
- NDN_FLOODING = 1,
- NDN_BESTROUTE = 2,
- NDN_RANKING = 3
- };
-
/**
* \brief Interface ID
*
@@ -94,48 +88,6 @@
static TypeId GetTypeId ();
virtual ~Ccnx ();
- // /**
- // * \brief Send an Interest packet to a specified face
- // *
- // * \param face face where to send this packet
- // * \param header Interest header
- // * \param packet fully prepared CCNx packet to send
- // *
- // * Higher-level layers (forwarding strategy in particular) call this
- // * method to send a packet down the stack to the MAC and PHY layers.
- // */
- // virtual void
- // SendInterest (const Ptr<CcnxFace> &face,
- // const Ptr<const CcnxInterestHeader> &header,
- // const Ptr<Packet> &packet) = 0;
-
- // /**
- // * \brief Send a ContentObject packet to a specified face
- // *
- // * \param face face where to send this packet
- // * \param header ContentObject header
- // * \param packet fully prepared CCNx packet to send
- // *
- // * Higher-level layers (forwarding strategy in particular) call this
- // * method to send a packet down the stack to the MAC and PHY layers.
- // */
- // virtual void
- // SendContentObject (const Ptr<CcnxFace> &face,
- // const Ptr<const CcnxContentObjectHeader> &header,
- // const Ptr<Packet> &packet) = 0;
-
- // /**
- // * \brief Lower layers calls this method after demultiplexing
- // *
- // * Lower-layer-dependent implementation of CcnxFace will do actual work
- // * to set up demultiplexing and call this function as a callback
- // *
- // * \param face face from which packet came from
- // * \param p the packet
- // */
- // virtual void
- // Receive (const Ptr<CcnxFace> &face, const Ptr<const Packet> &p) = 0;
-
/**
* \brief Register a new forwarding strategy to be used by this Ccnx
* stack
@@ -197,6 +149,64 @@
*/
virtual Ptr<CcnxFace>
GetFaceByNetDevice (Ptr<NetDevice> netDevice) const = 0;
+
+
+ /**
+ * \enum DropReason
+ * \brief A reason why the packet has been dropped
+ */
+ enum DropReason
+ {
+ DUPLICATED, // Interests
+ SUPPRESSED, // Interests and Nacks
+ NO_FACES, // Interests
+ NON_DUPLICATED, // Nacks
+ AFTER_SATISFIED, // Nacks
+ UNSOLICITED // data
+ };
+
+protected:
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ // transmittedInterestTrace is inside ForwardingStrategy
+
+ TracedCallback<Ptr<const CcnxInterestHeader>,
+ Ptr<const CcnxFace> > m_inInterests;
+
+ TracedCallback<Ptr<const CcnxInterestHeader>,
+ DropReason,
+ Ptr<const CcnxFace> > m_dropInterests;
+
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ TracedCallback<Ptr<const CcnxInterestHeader>,
+ Ptr<const CcnxFace> > m_outNacks;
+
+ TracedCallback<Ptr<const CcnxInterestHeader>,
+ Ptr<const CcnxFace> > m_inNacks;
+
+ TracedCallback<Ptr<const CcnxInterestHeader>,
+ DropReason,
+ Ptr<const CcnxFace> > m_dropNacks;
+
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+
+ TracedCallback<Ptr<const CcnxContentObjectHeader>,
+ bool /*from cache*/,
+ Ptr<const CcnxFace> > m_outData;
+
+ TracedCallback<Ptr<const CcnxContentObjectHeader>,
+ Ptr<const CcnxFace> > m_inData;
+
+ TracedCallback<Ptr<const CcnxContentObjectHeader>,
+ DropReason,
+ Ptr<const CcnxFace> > m_dropData;
};
} // namespace ns3