Page MenuHomeFreeBSD

Fix window update issue when scaling disabled

Authored by shurd on Jan 11 2019, 5:16 PM.
Referenced Files
Unknown Object (File)
Wed, May 10, 8:25 AM
Unknown Object (File)
Thu, May 4, 7:16 PM
Unknown Object (File)
Apr 18 2023, 1:53 PM
Unknown Object (File)
Apr 10 2023, 1:53 AM
Unknown Object (File)
Feb 25 2023, 2:16 AM
Unknown Object (File)
Feb 4 2023, 8:04 PM
Unknown Object (File)
Jan 13 2023, 1:55 PM
Unknown Object (File)
Jan 9 2023, 7:55 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 - subversion
Lint Not Applicable
Tests Not Applicable

Event Timeline

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.