Page MenuHomeFreeBSD

Fixing the DSACK code to properly clean up after sending a DSACK.
ClosedPublic

Authored by rrs on Jul 10 2019, 9:13 PM.
Tags
None
Referenced Files
F167021277: D20908.id59737.diff
Tue, Aug 18, 3:25 PM
F166927981: D20908.id59737.diff
Mon, Aug 17, 8:07 PM
Unknown Object (File)
Mon, Aug 17, 6:55 AM
Unknown Object (File)
Sun, Aug 16, 7:57 PM
Unknown Object (File)
Sat, Aug 15, 7:46 PM
Unknown Object (File)
Thu, Aug 13, 8:51 PM
Unknown Object (File)
Wed, Aug 12, 12:16 AM
Unknown Object (File)
Mon, Aug 10, 8:51 PM
Subscribers

Details

Summary

The DSACK RFC is quite clear that you only send a DSACK block
once for every received packet. The current implementation of DSACK
on FreeBSD has a flaw in that it only uses new data from a client to
drive it to clean up a DSACK block. This is incorrect, and instead
after a successful transmit any DSACK blocks should be purged.

wIthout this fix once you receive (as a server) a DSACK block
you may get it multiple times.

Test Plan

We have been now running with this at NF for at least a week and
validated that we no longer see the same DSACK sent out multiple
times without having received the same data multiple times.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

rscheff added a subscriber: rscheff.

Sorry for the oversight; Indeed I tested this with continous data from the receiver only, not when the data direction changes :(

This revision is now accepted and ready to land.Jul 11 2019, 4:18 AM
This revision was automatically updated to reflect the committed changes.