[ndnSIM] fw: Keep both the CS of NFD and ndnSIM
Change-Id: I0c7abbc09a1be393eddfe8ef3cd7ab60b1622996
Ref: #2231
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 7e0df65..5cb10de 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -154,11 +154,23 @@
// cancel unsatisfy & straggler timer
this->cancelUnsatisfyAndStragglerTimer(*pitEntry);
- // is pending?
- if (!pitEntry->hasInRecords()) {
- m_cs.find(interest,
- bind(&Forwarder::onContentStoreHit, this, ref(inFace), pitEntry, _1, _2),
- bind(&Forwarder::onContentStoreMiss, this, ref(inFace), pitEntry, _1));
+ const pit::InRecordCollection& inRecords = pitEntry->getInRecords();
+ bool isPending = inRecords.begin() != inRecords.end();
+ if (!isPending) {
+ 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);
@@ -320,7 +332,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<Face*> pendingDownstreams;
// foreach PitEntry
@@ -370,7 +385,10 @@
fw::UnsolicitedDataDecision decision = m_unsolicitedDataPolicy->decide(inFace, data);
if (decision == fw::UnsolicitedDataDecision::CACHE) {
// 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 fca81eb..8c6f1df 100644
--- a/daemon/fw/forwarder.hpp
+++ b/daemon/fw/forwarder.hpp
@@ -39,6 +39,8 @@
#include "table/dead-nonce-list.hpp"
#include "table/network-region-table.hpp"
+#include "ns3/ndnSIM/model/cs/ndn-content-store.hpp"
+
namespace nfd {
namespace fw {
@@ -173,6 +175,13 @@
return m_networkRegionTable;
}
+public: // allow enabling ndnSIM content store (will be removed in the future)
+ void
+ setCsFromNdnSim(ns3::Ptr<ns3::ndn::ContentStore> cs)
+ {
+ m_csFromNdnSim = cs;
+ }
+
PUBLIC_WITH_TESTS_ELSE_PRIVATE: // pipelines
/** \brief incoming Interest pipeline
*/
@@ -291,6 +300,8 @@
DeadNonceList m_deadNonceList;
NetworkRegionTable m_networkRegionTable;
+ ns3::Ptr<ns3::ndn::ContentStore> m_csFromNdnSim;
+
// allow Strategy (base class) to enter pipelines
friend class fw::Strategy;
};