Page MenuHomeFreeBSD

Fix window update issue when scaling disabled

Authored by shurd on Jan 11 2019, 5:16 PM.



When the TCP window scale option is not used, and the window
opens up enough in one soreceive, a window update will not be sent.

For example, if recwin == 65535, so->so_rcv.sb_hiwat >= 262144, and
so->so_rcv.sb_hiwat <= 524272, the window update will never be sent.
This is because recwin and adv are clamped to TCP_MAXWIN << tp->rcv_scale,
and so will never be >= so->so_rcv.sb_hiwat or <= so->so_rcv.sb_hiwat / 8.

This patch ensures a window update is sent if the window opens by
TCP_MAXWIN << tp->rcv_scale, which should only happen when the window
size goes from zero to the max expressible.

This issue looks like it was introduced in r306769 when recwin was clamped
to TCP_MAXWIN << tp->rcv_scale.

Test Plan

Test RFC1323 extensions enabled and disabled to ensure there
are no regressions.

Diff Detail

rS FreeBSD src repository
Lint OK
No Unit Test Coverage
Build Status
Buildable 21927
Build 21170: arc lint + arc unit

Event Timeline

shurd created this revision.Jan 11 2019, 5:16 PM
This revision was not accepted when it landed; it landed in state Needs Review.Jan 15 2019, 5:40 PM
This revision was automatically updated to reflect the committed changes.