Project

General

Profile

Actions

Bug #2870

closed

Broadcast strategy forwards Interests to multiple FIB entries

Added by Andrew Brown almost 9 years ago. Updated almost 9 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Category:
Forwarding
Target version:
Start date:
06/10/2015
Due date:
% Done:

0%

Estimated time:

Description

afterReceiveInterest() method in the broadcast strategy should only be called once with the latest prefix matched from the FIB entry list.
If the chosen FIB entry has multiple next hops, the broadcast strategy will forward the Interest to all of these hops/faces.

In some simple testing, the Interest was forwarded to multiple FIB entries.
For example,

  1. register prefixes /a/b and /a/b/c on different faces from within an application (using the JAVA CCL)
  2. set a broadcast strategy with nfdc set-strategy / /localhost/nfd/strategy/broadcast
  3. ndn-tlv-peek -p -f -r /a/b/c to send an Interest

Expected: the Interest is only forwarded to the /a/b/c registered prefix

Actual: it was forwarded to both

NFD version 0.3.2

Actions #1

Updated by Junxiao Shi almost 9 years ago

  • Description updated (diff)
  • Category set to Forwarding
  • Target version set to v0.4

Please post nfd-status -br output after both prefix registrations are complete, so that I can determine whether it's a misunderstanding or a real bug.

Actions #2

Updated by Junxiao Shi almost 9 years ago

  • Subject changed from Broadcast strategy causes Interests to forward to multiple FIB entries (not just next hops) to Broadcast strategy forwards Interests to multiple FIB entries
Actions #3

Updated by Andrew Brown almost 9 years ago

$ nfd-status -br
FIB:
  /localhost/nfd nexthops={faceid=1 (cost=0)}
  /localhop/nfd/rib nexthops={faceid=263 (cost=0)}
  /a/b nexthops={faceid=339 (cost=0)}
  /a/b/c nexthops={faceid=338 (cost=0), faceid=339 (cost=0)}
  /localhost/nfd/rib nexthops={faceid=263 (cost=0)}
RIB:
  /localhost/nfd/rib route={faceid=263 (origin=0 cost=0 ChildInherit)}
  /localhop/nfd/rib route={faceid=263 (origin=0 cost=0 ChildInherit)}
  /a/b/c route={faceid=338 (origin=0 cost=0 ChildInherit)}
  /a/b route={faceid=339 (origin=0 cost=0 ChildInherit)}
$ ndn-tlv-peek -p -f -r /a/b/c; echo ""
Actions #4

Updated by Junxiao Shi almost 9 years ago

  • Status changed from New to Rejected

This behavior is by design.

The /a/b/c FIB entry in note-3 clearly shows that there are two nexthops, so that the Interest is forwarded to both faces.

See RibMgmt "route inheritence" section on why this FIB entry has two nexthops.

Actions #5

Updated by Andrew Brown almost 9 years ago

Makes sense (I was looking at the RIB). I tried to modify this by adding Capture flags to both prefixes, then either one, but found that the FIB entry still contains both faces. Isn't there a way for the Capture flag to limit the faces in that FIB entry?

Actions #6

Updated by Alex Afanasyev almost 9 years ago

Here is my quick experiment that does not confirm the issue:

Before

[cawka@alex ndn-cxx (master)]$ nfd-status -br
FIB:
  /localhost/nfd nexthops={faceid=1 (cost=0)}
  /localhost/nfd/rib nexthops={faceid=264 (cost=0)}
RIB:
  /localhost/nfd/rib route={faceid=264 (origin=0 cost=0 ChildInherit)}

====
Commands:

[cawka@alex ndn-cxx (master)]$ nfdc register -C /a/b 254
Successful in name registration: ControlParameters(Name: /a/b, FaceId: 254, Origin: 255, Cost: 0, Flags: 3, )
[cawka@alex ndn-cxx (master)]$ nfdc register -C /a/b/c 255
Successful in name registration: ControlParameters(Name: /a/b/c, FaceId: 255, Origin: 255, Cost: 0, Flags: 3, )

====

After

[cawka@alex ndn-cxx (master)]$ nfd-status -br
FIB:
  /localhost/nfd nexthops={faceid=1 (cost=0)}
  /a/b nexthops={faceid=254 (cost=0)}
  /a/b/c nexthops={faceid=255 (cost=0)}
  /localhost/nfd/rib nexthops={faceid=264 (cost=0)}
RIB:
  /localhost/nfd/rib route={faceid=264 (origin=0 cost=0 ChildInherit)}
  /a/b/c route={faceid=255 (origin=255 cost=0 ChildInherit RibCapture)}
  /a/b route={faceid=254 (origin=255 cost=0 ChildInherit RibCapture)}
Actions #7

Updated by Andrew Brown almost 9 years ago

Ok, I'll look into the CCL code; I am using .setCapture(true) but I'm seeing what I describe; BTW what is .setCaptureOk() for?

Actions #8

Updated by Junxiao Shi almost 9 years ago

.setCaptureOk should refer to CCN_FORW_CAPTURE_OK, which is not supported by NFD.

Please send further questions about CCL to ndn-lib mailing list.

Actions

Also available in: Atom PDF