[ndnSIM] Access outgoing data pipeline from strategy

Rakesh Ranjan Jha rakeshranjan.jha at gmail.com
Sun Jul 9 10:30:52 PDT 2017


Hi,

I'm trying to spontaneously inject a cached data (based on a previously
unfulfilled interest present in PIT and so I have an interest handle to
fetch data) from content store.

However, I'm facing some issues:

1) Derived strategy doesn't seem to have any handle to fowarder although
base strategy has a handle and is friend to forwarder to access pipelines.
In order to workaround this I added my strategy also as a friend and gave
it a reference to forwarder, similar to base strategy. Is there a better
way to access pipeline from strategy?

2) To access data from CS and feed it to outgoing data pipeline, I follow
similar mechanism as done on receiving valid interest from forwarder:
//fowarder.cpp
    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));
    }

//myStrategy.cpp
    if (m_forwarder.m_csFromNdnSim == nullptr) {
        /* m_forwarder is a reference to forwarder */
m_forwarder.m_cs.find(pe->getInterest(),
                  bind(&Forwarder::onContentStoreHit, &m_forwarder,
ref(face), pe, _1, _2),
 bind(&Forwarder::onContentStoreMiss, &m_forwarder, ref(face), pe, _1));
     }

However this fails compilation and I get error as below:

../src/ndnSIM/NFD/daemon/fw/my_strategy.cpp: In member function ‘virtual
void
nfd::fw::MyStrategy::beforeSatisfyInterest(std::shared_ptr<nfd::pit::Entry>,
const nfd::Face&, const ndn::Data&)’:
../src/ndnSIM/NFD/daemon/fw/my_strategy.cpp:243:75: error: no matching
function for call to ‘nfd::cs::Cs::find(const ndn::Interest&,
std::_Bind_helper<false, void (nfd::Forwarder::*)(const nfd::Face&,
std::shared_ptr<nfd::pit::Entry>, const ndn::Interest&, const ndn::Data&),
nfd::Forwarder*, std::reference_wrapper<int>,
std::shared_ptr<nfd::pit::Entry>&, const std::_Placeholder<1>&, const
std::_Placeholder<2>&>::type, std::_Bind_helper<false, void
(nfd::Forwarder::*)(const nfd::Face&, std::shared_ptr<nfd::pit::Entry>,
const ndn::Interest&), nfd::Forwarder*, std::reference_wrapper<int>,
std::shared_ptr<nfd::pit::Entry>&, const std::_Placeholder<1>&>::type)’
      bind(&Forwarder::onContentStoreMiss, &m_forwarder, ref(face), pe,
_1));
                                                                           ^
In file included from ../src/ndnSIM/NFD/daemon/fw/forwarder.hpp:35:0,
                 from ../src/ndnSIM/NFD/daemon/fw/strategy.hpp:29,
                 from ../src/ndnSIM/NFD/daemon/fw/my_strategy.hpp:24,
                 from ../src/ndnSIM/NFD/daemon/fw/my_strategy.cpp:21:
../src/ndnSIM/NFD/daemon/fw/../table/cs.hpp:88:3: note: candidate: void
nfd::cs::Cs::find(const ndn::Interest&, const HitCallback&, const
MissCallback&) const
   find(const Interest& interest,
   ^
../src/ndnSIM/NFD/daemon/fw/../table/cs.hpp:88:3: note:   no known
conversion for argument 2 from ‘std::_Bind_helper<false, void
(nfd::Forwarder::*)(const nfd::Face&, std::shared_ptr<nfd::pit::Entry>,
const ndn::Interest&, const ndn::Data&), nfd::Forwarder*,
std::reference_wrapper<int>, std::shared_ptr<nfd::pit::Entry>&, const
std::_Placeholder<1>&, const std::_Placeholder<2>&>::type {aka
std::_Bind<std::_Mem_fn<void (nfd::Forwarder::*)(const nfd::Face&,
std::shared_ptr<nfd::pit::Entry>, const ndn::Interest&, const
ndn::Data&)>(nfd::Forwarder*, std::reference_wrapper<int>,
std::shared_ptr<nfd::pit::Entry>, std::_Placeholder<1>,
std::_Placeholder<2>)>}’ to ‘const HitCallback& {aka const
std::function<void(const ndn::Interest&, const ndn::Data&)>&}’

Can somebody help me figure out why this fails when similar invocation from
forwarder passes?

Thanks in advance,
Rakesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndnsim/attachments/20170709/fd8d4653/attachment.html>


More information about the ndnSIM mailing list