[ndnSIM] fw: Keep both the CS of NFD and ndnSIM
Ref: #2231
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 7e5d883..300dbc8 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -91,9 +91,20 @@
const pit::InRecordCollection& inRecords = pitEntry->getInRecords();
bool isPending = inRecords.begin() != inRecords.end();
if (!isPending) {
- m_cs.find(interest,
- bind(&Forwarder::onContentStoreHit, this, ref(inFace), pitEntry, _1, _2),
- bind(&Forwarder::onContentStoreMiss, this, ref(inFace), pitEntry, _1));
+ if (m_csFromNdnSim == nullptr) {
+ m_cs.find(interest,
+ bind(&Forwarder::onContentStoreHit, this, ref(inFace), pitEntry, _1, _2),
+ bind(&Forwarder::onContentStoreMiss, this, ref(inFace), pitEntry, _1));
+ }
+ else {
+ shared_ptr<Data> match = m_csFromNdnSim->Lookup(interest.shared_from_this());
+ if (match != nullptr) {
+ this->onContentStoreHit(inFace, pitEntry, interest, *match);
+ }
+ else {
+ this->onContentStoreMiss(inFace, pitEntry, interest);
+ }
+ }
}
else {
this->onContentStoreMiss(inFace, pitEntry, interest);
@@ -288,7 +299,10 @@
}
// CS insert
- m_cs.insert(data);
+ if (m_csFromNdnSim == nullptr)
+ m_cs.insert(data);
+ else
+ m_csFromNdnSim->Add(data.shared_from_this());
std::set<shared_ptr<Face> > pendingDownstreams;
// foreach PitEntry
@@ -341,7 +355,10 @@
bool acceptToCache = inFace.isLocal();
if (acceptToCache) {
// CS insert
- m_cs.insert(data, true);
+ if (m_csFromNdnSim == nullptr)
+ m_cs.insert(data, true);
+ else
+ m_csFromNdnSim->Add(data.shared_from_this());
}
NFD_LOG_DEBUG("onDataUnsolicited face=" << inFace.getId() <<
diff --git a/daemon/fw/forwarder.hpp b/daemon/fw/forwarder.hpp
index aa5d19d..c8bd402 100644
--- a/daemon/fw/forwarder.hpp
+++ b/daemon/fw/forwarder.hpp
@@ -37,6 +37,8 @@
#include "table/strategy-choice.hpp"
#include "table/dead-nonce-list.hpp"
+#include "ns3/ndnSIM/model/cs/ndn-content-store.hpp"
+
namespace nfd {
namespace fw {
@@ -104,6 +106,10 @@
DeadNonceList&
getDeadNonceList();
+public: // allow enabling ndnSIM content store (will be removed in the future)
+ void
+ setCsFromNdnSim(ns3::Ptr<ns3::ndn::ContentStore> cs);
+
PUBLIC_WITH_TESTS_ELSE_PRIVATE: // pipelines
/** \brief incoming Interest pipeline
*/
@@ -210,6 +216,8 @@
StrategyChoice m_strategyChoice;
DeadNonceList m_deadNonceList;
+ ns3::Ptr<ns3::ndn::ContentStore> m_csFromNdnSim;
+
static const Name LOCALHOST_NAME;
// allow Strategy (base class) to enter pipelines
@@ -294,6 +302,12 @@
return m_deadNonceList;
}
+inline void
+Forwarder::setCsFromNdnSim(ns3::Ptr<ns3::ndn::ContentStore> cs)
+{
+ m_csFromNdnSim = cs;
+}
+
#ifdef WITH_TESTS
inline void
Forwarder::dispatchToStrategy(shared_ptr<pit::Entry> pitEntry, function<void(fw::Strategy*)> trigger)