NDNLP Implementation of�Best-Effort Link-Layer Reliability
Eric Newberry
Klaus Schneider
The University of Arizona
Background
Terminology and Definitions
Packet Format
Sender - onOutgoingNetworkLayerPacket()
Store LpPacket in TransmitCache
Assign sequence numbers to fragments
Start RTO timer
Send/Retx LpPacket to Transport for transmission
Increment retx[seq]
Call onGiveUp()
retx[seq] >= maxRetx
No
Fragment NetPkt into LpPackets
For each fragment
Create mapping of all fragments in NetPkt
Yes
Cancel all RTO timers for this NetPkt
Delete all LpPackets of NetPkt from TransmitCache
onOutOfOrderAck()
On RTO timer expire
Call onLoss()
Assign next sequential TxSequence and map TxSequence to seq num
Sender - onReceiveLpPacket()
Extract ACKs
Cancel fragment’s RTO timeout timer
Remove ACK’d fragments from TransmitCache
For each received ACK
Receive LpPacket
from Transport
Are there any unacknowledged frame numbers < ACK frame num?
Cancel fragment’s RTO timer and call onOutOfOrderAck()
If yes,
For each frame num < ACK
Reassembly
Map TxSequence to sequence number
Increment number of ACKs w/ greater TxSequences
Is number of greater TxSequences >= MAXGREATER (default: 3)
Yes
Receiver - onReceiveLpPacket()
Reassembly
Receive LpPacket
from Transport
Extract TxSequence from LpPacket
Insert Ack for TxSequence into AckQueue
Send as many Acks in AckQueue as can fit in an IDLE packet
For every Ack in AckQueue
Every 5ms (configurable)
Receiver - Send Subsystem
Search AckCache for pending Acks for frame’s nexthop
Receive network layer packet for transmission
Piggyback as many Acks as possible
Fragmentation
Send frame to Transport for transmission
RTO Calculation