[ndnSIM] Access outgoing data pipeline from strategy

Spyridon (Spyros) Mastorakis mastorakis at cs.ucla.edu
Sun Jul 9 15:47:38 PDT 2017


Hi Rakesh,

I would like to make 2 comments about your code:

1) m_forwarder is already a reference to an object of type Forwarder, so you tried to get a reference out of a reference.

2) The m_cs attribute is declared as a private member of the Forwarder class.

Please let me know if you have any questions.

Thank you,

Spyridon (Spyros) Mastorakis
Personal Website: http://cs.ucla.edu/~mastorakis/ <http://cs.ucla.edu/~mastorakis/>
Internet Research Laboratory
Computer Science Department
UCLA

> On Jul 9, 2017, at 10:30 AM, Rakesh Ranjan Jha <rakeshranjan.jha at gmail.com> wrote:
> 
> 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/69800647/attachment.html>


More information about the ndnSIM mailing list