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.

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
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

rrs created this revision.Jul 10 2019, 9:13 PM
rscheff_gmx.at accepted this revision.Jul 11 2019, 4:18 AM
rscheff_gmx.at added a subscriber: rscheff_gmx.at.

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
tuexen accepted this revision.Jul 11 2019, 6:11 AM
This revision was automatically updated to reflect the committed changes.