• Paolo Abeni's avatar
    mptcp: cope with later TCP fallback · 8ab183de
    Paolo Abeni authored
    With MPTCP v1, passive connections can fallback to TCP after the
    subflow becomes established:
    
    syn + MP_CAPABLE ->
                   <- syn, ack + MP_CAPABLE
    
    ack, seq = 3    ->
            // OoO packet is accepted because in-sequence
            // passive socket is created, is in ESTABLISHED
    	// status and tentatively as MP_CAPABLE
    
    ack, seq = 2     ->
            // no MP_CAPABLE opt, subflow should fallback to TCP
    
    We can't use the 'subflow' socket fallback, as we don't have
    it available for passive connection.
    
    Instead, when the fallback is detected, replace the mptcp
    socket with the underlying TCP subflow. Beyond covering
    the above scenario, it makes a TCP fallback socket as efficient
    as plain TCP ones.
    Co-developed-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: default avatarChristoph Paasch <cpaasch@apple.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8ab183de
protocol.c 29.3 KB