[ndnSIM] Relationship between ndnSIM (2.0) and NFD.

Spyridon (Spyros) Mastorakis spiros.mastorakis at gmail.com
Tue May 12 08:18:54 PDT 2015

Hi Anil,

currently the code of NFD version 0.2.0 (or at least a big part of it including all the forwarding pipelines, CS, FIB, PIT etc) is a part of the ndnSIM 2.0 codebase. The near future plan is to decouple NFD from ndnSIM, so that we can port new versions of NFD in an easy way (actually this has already been done, since I have a workable version of ndnSIM 2.0 using NFD 0.3.1 as a submodule. I am not sure, though, when these changes would be merged). In the current ndnSIM codebase, you can see how we ported NFD to ndnSIM by looking for 4 or 5 commits, the title of which starts with “NFD:”. For example:


Currently, the NFD ported in ndnSIM is being started by ndnSIM itself:


You cannot start a NFD instance externally to the simulator, since NFD is currently a part of the simulator and is controlled by the simulator. You cannot set up any IP addresses or UDP/TCP transport, since this NFD works “locally” on each simulated node.

Did you try to port NLSR directly to the simulator? Or you are working on a custom NLSR version? From the logs, I guess that the first one is the case. I can see that you are trying to use ndn::Face, however, this is not currently supported by ndnSIM. The plan is to be supported in the near future. Here is the redmine issue for that:


When this task is done, you will be able to port directly real-world applications to ndnSIM. 

Please let me know if you need anything else.

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

> On May 12, 2015, at 1:07 AM, Anil Jangam <anilj.mailing at gmail.com> wrote:
> Hi,
> In ndnSIM 2.0, is it required to run the NFD in the background for the simulator to run? I want to understand the relationship of NFD wrt ndnSIM.
> The release notes of ndnSIM 2.0 says that NDN forwarding and management is implemented using NFD source. What does this really mean? For example, when we configure the face-uri of the link between the nodes in the scenario, do we have to provide a real IP address and port or just any arbitrary name (e.g. udp://cs.com) would work?
> The initial 3 node scenario that I am currently testing, I am getting the following exception. 
> Installing NDN stack on nodes
> Installing global routing interface on nodes
> terminate called after throwing an instance of 'ndn::Transport::Error'
>   what():  error while connecting to the forwarder
> Thread [1] 4723 [core: 2] (Suspended : Signal : SIGABRT:Aborted)	
> __GI_raise() at raise.c:56 0x7fffe90a1cc9	
> __GI_abort() at abort.c:89 0x7fffe90a50d8	
> __gnu_cxx::__verbose_terminate_handler() at 0x7fffe99ac6b5	
> 0x7fffe99aa836
> std::terminate() at 0x7fffe99aa863	
> __cxa_rethrow() at 0x7fffe99aaaf6	
> ndn::Face::processEvents() at face.cpp:445 0x7ffff5ac9572	
> ns3::ndn::NlsrApp::startEventLoop() at ndn-nlsr-app.cpp:288 0x7ffff58b47da	
> ns3::ndn::NlsrApp::StartApplication() at ndn-nlsr-app.cpp:346 0x7ffff58b4e6c	
> ns3::EventMemberImpl0::Notify() at make-event.h:94 0x7fffef3643b6
> <...more frames...>
> I looked for references the error, and it says (according to this note), that NFD is not running.
> I have configured the node as follows.
> 0s 0 ConfParameter:writeLog(): [DEBUG] Router Name: /cs/memphis/rtr0
> 0s 0 ConfParameter:writeLog(): [DEBUG] Site Name: /edu/memphis
> 0s 0 ConfParameter:writeLog(): [DEBUG] Network: /ndn
> 0s 0 ConfParameter:writeLog(): [DEBUG] Router Prefix: /ndn/edu/memphis/cs/memphis/rtr0
> 0s 0 ConfParameter:writeLog(): [DEBUG] ChronoSync sync Prefix: /ndn/NLSR/sync
> 0s 0 ConfParameter:writeLog(): [DEBUG] ChronoSync LSA prefix: /ndn/NLSR/LSA
> 0s 0 ConfParameter:writeLog(): [DEBUG] Hello Interest retry number: 10
> 0s 0 ConfParameter:writeLog(): [DEBUG] Hello Interest resend second: 1
> 0s 0 ConfParameter:writeLog(): [DEBUG] Info Interest interval: 60
> 0s 0 ConfParameter:writeLog(): [DEBUG] LSA refresh time: 1800
> 0s 0 ConfParameter:writeLog(): [DEBUG] LSA Interest lifetime: 4 seconds
> 0s 0 ConfParameter:writeLog(): [DEBUG] Router dead interval: 3600
> 0s 0 ConfParameter:writeLog(): [DEBUG] Max Faces Per Prefix: 3
> 0s 0 ConfParameter:writeLog(): [DEBUG] Hyperbolic Routing: 0
> 0s 0 ConfParameter:writeLog(): [DEBUG] Hyp R: 123.45
> 0s 0 ConfParameter:writeLog(): [DEBUG] Hyp theta: 1.45
> 0s 0 ConfParameter:writeLog(): [DEBUG] Log Directory: 
> 0s 0 ConfParameter:writeLog(): [DEBUG] Seq Directory: 
> 0s 0 ConfParameter:writeLog(): [DEBUG] Adjacency LSA build interval: 5
> 0s 0 ConfParameter:writeLog(): [DEBUG] First Hello Interest interval: 10
> 0s 0 ConfParameter:writeLog(): [DEBUG] Routing calculation interval: 15
> 0s 0 AdjacencyList:writeLog(): [DEBUG] -------Adjacency List--------
> 0s 0 AdjacencyList:writeLog(): [DEBUG] Number of neighbors: 1
> 0s 0 Adjacent:writeLog(): [DEBUG] Adjacent : /toNode
> 0s 0 Adjacent:writeLog(): [DEBUG] Connecting FaceUri: udp://cs.com
> 0s 0 Adjacent:writeLog(): [DEBUG] Link Cost: 20
> 0s 0 Adjacent:writeLog(): [DEBUG] Status: 0
> 0s 0 Adjacent:writeLog(): [DEBUG] Interest Timed out: 0
> 0s 0 NlsrApp:initialize(): [DEBUG] Default NLSR identity: /
> 0s 0 NlsrApp:setInfoInterestFilter(): [DEBUG] Setting interest filter for name: /ndn/edu/memphis/cs/memphis/rtr0
> 0s 0 NlsrApp:setLsaInterestFilter(): [DEBUG] Setting interest filter for name: /ndn/NLSR/LSA/
> Can you please elaborate.
> /anil.

More information about the ndnSIM mailing list