Page MenuHomeFreeBSD

Fix window update issue when scaling disabled
ClosedPublic

Authored by shurd on Jan 11 2019, 5:16 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Apr 20, 4:18 AM
Unknown Object (File)
Fri, Apr 19, 6:35 AM
Unknown Object (File)
Tue, Apr 9, 1:17 PM
Unknown Object (File)
Tue, Apr 9, 4:47 AM
Unknown Object (File)
Tue, Apr 9, 4:34 AM
Unknown Object (File)
Tue, Mar 26, 12:03 AM
Unknown Object (File)
Jan 14 2024, 5:59 PM
Unknown Object (File)
Dec 20 2023, 10:36 AM
Subscribers

Details

Summary

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

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
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.