• Andrey Vagin's avatar
    tcp: restore rcv_wscale in a repair mode (v2) · bc26ccd8
    Andrey Vagin authored
    rcv_wscale is a symetric parameter with snd_wscale.
    
    Both this parameters are set on a connection handshake.
    
    Without this value a remote window size can not be interpreted correctly,
    because a value from a packet should be shifted on rcv_wscale.
    
    And one more thing is that wscale_ok should be set too.
    
    This patch doesn't break a backward compatibility.
    If someone uses it in a old scheme, a rcv window
    will be restored with the same bug (rcv_wscale = 0).
    
    v2: Save backward compatibility on big-endian system. Before
        the first two bytes were snd_wscale and the second two bytes were
        rcv_wscale. Now snd_wscale is opt_val & 0xFFFF and rcv_wscale >> 16.
        This approach is independent on byte ordering.
    
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
    Cc: James Morris <jmorris@namei.org>
    Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
    Cc: Patrick McHardy <kaber@trash.net>
    CC: Pavel Emelyanov <xemul@parallels.com>
    Signed-off-by: default avatarAndrew Vagin <avagin@openvz.org>
    Acked-by: default avatarPavel Emelyanov <xemul@parallels.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    bc26ccd8
tcp.c 93.7 KB