• Alexander Duyck's avatar
    tcp: Set INET_ECN_xmit configuration in tcp_reinit_congestion_control · 55472017
    Alexander Duyck authored
    When setting congestion control via a BPF program it is seen that the
    SYN/ACK for packets within a given flow will not include the ECT0 flag. A
    bit of simple printk debugging shows that when this is configured without
    BPF we will see the value INET_ECN_xmit value initialized in
    tcp_assign_congestion_control however when we configure this via BPF the
    socket is in the closed state and as such it isn't configured, and I do not
    see it being initialized when we transition the socket into the listen
    state. The result of this is that the ECT0 bit is configured based on
    whatever the default state is for the socket.
    
    Any easy way to reproduce this is to monitor the following with tcpdump:
    tools/testing/selftests/bpf/test_progs -t bpf_tcp_ca
    
    Without this patch the SYN/ACK will follow whatever the default is. If dctcp
    all SYN/ACK packets will have the ECT0 bit set, and if it is not then ECT0
    will be cleared on all SYN/ACK packets. With this patch applied the SYN/ACK
    bit matches the value seen on the other packets in the given stream.
    
    Fixes: 91b5b21c ("bpf: Add support for changing congestion control")
    Signed-off-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    55472017
tcp_cong.c 11.5 KB