[Ndn-interest] NFD Interest Aggregation at Intermediate Router

Stefano Lupo lupos at tcd.ie
Wed Mar 13 16:46:30 PDT 2019

Hello everyone.

Sorry in advance if this has been discussed elsewhere, or if I am 
overlooking something! I am currently working on a project using NDN and 
have encountered a problem with interests not being aggregated as I 
thought they would be. To highlight the issue consider the following case:

                 ---- B


G --- E


                 ---- A

In this example, G is the producer of some data under //test/g/, A and B 
are consumers interested in the data G produces and E is an intermediate 
router connecting G to A/B. Each of these nodes are running in a docker 
container on the same machine and I set up the faces and routes before 
hand using /nfdc/ in the following manner:

- On *nodeA*: /nfdc face create udp://nodee.com; nfdc route add /test/g 

/- //On *node**B*: //nfdc face create udp://nodee.com; nfdc route add 
/test/g <face_id_of_e>/

/- //On *nodeE*: ///nfdc face create udp://nodeg.com; nfdc route add 
/test/g <face_id_of_g>//

Note I don't make faces / routes in the direction of the dataflow (i.e. 
there is no premade face/route from E --> A) as I don't think they are 
needed. Also these host names resolve correctly through the use of an 
overlay network in docker.


Node G also runs NFD and a jNDN app which registers the prefix //test/g 
/and I can control when to call /face.processEvents() /using a key 
stroke, so that I can control when things happen.

I then ran this test with NFD's /Forwarder/ and /ContentStore/ modules 
set to a log level of DEBUG so I could see what was going on:

- On *node A*: /ndnpeek /test/g/0 -l 1000000

/    - /This expresses an interest for //test/g/0/ with a long timeout 
for those who might not be familiar

/    - /This reaches node E who creates a PIT entry and forwards it to 
node G as expected

     - This then reaches node G who's NFD forwards it on to the jNDN app 
for handling

         - However the app does *not* respond with the Data or even see 
the Interest yet, as I will manually call /face.processEvents()/ with a 
key stroke/later


/- /On *node B*: /ndnpeek /test/g/0 -l 1000000/

     - This again reaches node E

     - Node E does *not* create a *new *PIT entry (or at least the 
/nPitEntries/ from the output of /nfdc status/ doesn't change), but 
presumably adds node B's face to the existing entry.

     - *However, node E then forwards a _second_ Interest to G with the 
same name of //test/g/0/*

**- This second interest reaches node G's NFD who proceeds to forward 
the second interest to the jNDN app.

     - This is the behavior I wasn't expecting!

- On *node G*: I finally call /face.processEvents()/

     - Node G then sees the *two* Interests (which have the *exact same 
name*) and responds to them with the appropriate Data

     - Whichever Data packet reaches node G's NFD first is then 
forwarded to node E and onto nodes A and B

     - The Data packet that reaches node G's NFD second is then marked 
as unsolicited and dropped by the NFD

Is this intended behavior or have I set something up wrong? The packet 
produced by G is multicasted back to both A and B through E indicating 
that the PIT entries are correct, but it seems odd that the application 
level producer at node G must see both of these interests? For context I 
am currently prototyping a small P2P multiplayer game that runs over 
NDN, meaning Interest aggregation could save producers a lot of cycles 
and network traffic.

The logs produced by the NFDs at each of the nodes are available at this 
repo <https://github.com/stefano-lupo/NFD-Interest-Aggregation-Logs> if 
anyone would like to take a look - I included copies which have only 
(what I think is) the relevant information and some comments on what 

Thanks in advance for any information.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndn-interest/attachments/20190313/69a76f1c/attachment.html>

More information about the Ndn-interest mailing list