• Ori Finkelman's avatar
    IPv4 TCP fails to send window scale option when window scale is zero · 89e95a61
    Ori Finkelman authored
    Acknowledge TCP window scale support by inserting the proper option in SYN/ACK
    and SYN headers even if our window scale is zero.
    
    This fixes the following observed behavior:
    
    1. Client sends a SYN with TCP window scaling option and non zero window scale
    value to a Linux box.
    2. Linux box notes large receive window from client.
    3. Linux decides on a zero value of window scale for its part.
    4. Due to compare against requested window scale size option, Linux does not to
     send windows scale TCP option header on SYN/ACK at all.
    
    With the following result:
    
    Client box thinks TCP window scaling is not supported, since SYN/ACK had no
    TCP window scale option, while Linux thinks that TCP window scaling is
    supported (and scale might be non zero), since SYN had  TCP window scale
    option and we have a mismatched idea between the client and server
    regarding window sizes.
    
    Probably it also fixes up the following bug (not observed in practice):
    
    1. Linux box opens TCP connection to some server.
    2. Linux decides on zero value of window scale.
    3. Due to compare against computed window scale size option, Linux does
    not to set windows scale TCP  option header on SYN.
    
    With the expected result that the server OS does not use window scale option
    due to not receiving such an option in the SYN headers, leading to suboptimal
    performance.
    Signed-off-by: default avatarGilad Ben-Yossef <gilad@codefidence.com>
    Signed-off-by: default avatarOri Finkelman <ori@comsleep.com>
    Acked-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    89e95a61
tcp_output.c 74.9 KB