Bug #2870
closedBroadcast strategy forwards Interests to multiple FIB entries
0%
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,
- register prefixes /a/b and /a/b/c on different faces from within an application (using the JAVA CCL)
- set a broadcast strategy with
nfdc set-strategy / /localhost/nfd/strategy/broadcast
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
Updated by Junxiao Shi over 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.
Updated by Junxiao Shi over 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
Updated by Andrew Brown over 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 ""
Updated by Junxiao Shi over 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.
Updated by Andrew Brown over 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?
Updated by Alex Afanasyev over 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)}
Updated by Andrew Brown over 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?
Updated by Junxiao Shi over 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.