Bug #5167
closedForwarder::insertDeadNonceList should not add the same nonce multiple times
100%
Description
Thanks to John DeHart for debugging and finding the issue.
Files
Updated by Junxiao Shi over 3 years ago
- File issues5167_20210604.txz issues5167_20210604.txz added
This bug can possibly cause seemingly persistent loop, if a FIB entry has a large number of nexthops, such as the /ndn/broadcast
prefix used on the global NDN testbed.
This condition can be simulated on two physical servers with the following steps:
Install
nfd
,nfd-autoreg
, andndnping
packages on node F.
The default configuration ofnfd-autoreg
would insert/ndn/broadcast
route on every UDP face.NFD version 0.7.1-23-g6a699be8 starting Built with GNU C++ version 9.3.0, with GNU libstdc++ version 20200808, with Boost version 1.71.0, with libpcap version 1.9.1 (with TPACKET_V3), with WebSocket++ version 0.8.1, with ndn-cxx version 0.7.1-33-g3f13f359
Run the attached program on node G with this command line:
go run . --target fde0:fd0a:3557:c346::6 --pairs 32 --delay 200ms
This program creates 64 faces on NFD side.
Face creation is triggered by sending an Interest that violates ScopeControl; that Interest would be dropped by NFD forwarding, but the face remains in place.
More importantly,nfd-autoreg
service would insert a/ndn/broadcast
route toward the face.These faces are then pairs into 32 loop pairs.
Whenever an Interest is received on one face in a loop pair, it is sent out via the other face in the loop pair after a 200ms delay.
The program also prints a log line when an Interest is received on a face.Send a burst of Interests under
/ndn/broadcast
prefix on node F.ndnping -i 1 -c 1000 /ndn/broadcast
This transmits 1000 Interests within 1 second.
From the program log on G we can see that Interests are coming into the program continuously, several minutes after the
ndnping
consumer program has exited.
This is, however, not necessarily a persistent loop.
With the above parameters, the traffic stops after about 3 minutes.
Different parameters (e.g. --pairs 512
or --delay 500ms
) could make the looping traffic more than 10 minutes, but probably not forever.
Nevertheless, this is not expected behavior of a network forwarder: the forwarder should have detected an Interest loop when the same Interest arrives for the second time.
Updated by Davide Pesavento over 3 years ago
- Status changed from New to In Progress
- Assignee set to Davide Pesavento
Updated by Davide Pesavento over 3 years ago
- Category changed from Forwarding to Tables
- Status changed from In Progress to Code review
- Assignee changed from Davide Pesavento to Varun Patil
- % Done changed from 0 to 80
Updated by Davide Pesavento over 3 years ago
- Status changed from Code review to Closed
- % Done changed from 80 to 100