Page MenuHomeFreeBSD

Several LRO fixes

Authored by kbowling on Feb 28 2018, 7:48 AM.



This changeset contains a few tightly intermingled and additive bugfixes from Netflix and LLNW:

  1. rrs - Lets make the LRO code look for true dup-acks and window update acks fly on through and combine.
  2. rrs - Make the LRO engine a bit more aware of ack-only seq space. Lets not have it incorrectly wipe out newer acks for older acks when we have out-of-order acks (common in wifi environments).
  3. jeggleston - LRO eating window updates

Based on all of the above I think we are RFC compliant doing it this way:


"Note that TCP has a heuristic to select the latest window update despite possible datagram reordering; as a result, it may ignore a window update with a smaller window than previously offered if neither the sequence number nor the acknowledgment number is increased."

Test Plan

These changes are in use at LLNW and Netflix

Diff Detail

Lint Skipped
Tests Skipped

Event Timeline

rstone added a subscriber: rstone.

I've written some unit tests that covering these cases here:

I can confirm that the new behaviour is much more sane than the older behaviour.


I think that you mean "old ack" here. As far as I can tell, the only way to reach this point is to have a packet with no payload and th_ack < le->ack_seq.



Fix comment per rstone and jegg


Technically we should only do this (or look at th->th_ack at all) if TH_ACK is set


On the transport call we discussed that this should probably be handled in another patch as it is a generic issue with the LRO code.

sbruno added a subscriber: sbruno.

I'll grab this and shovel it in after builds are done.

This revision was not accepted when it landed; it landed in state Needs Review.Mar 9 2018, 12:08 AM
This revision was automatically updated to reflect the committed changes.