HomeFreeBSD

tcp: fix simultaneous open and refine e80062a2d43

Description

tcp: fix simultaneous open and refine e80062a2d43

  • The soisconnected() call on transition from SYN_RCVD to ESTABLISHED is also necessary for a half-synchronized connection. Fix that just setting the flag, when we transfer SYN-SENT -> SYN-RECEIVED.
  • Provide a comment that explains at what conditions the call to soisconnected() is necessary.
  • Hence mechanically rename the TF_INCQUEUE flag to TF_SONOTCONN.
  • Extend the change to the BBR and RACK stacks.

Note: the interaction between the accept_filter(9) and the socket layer
is not fully consistent, yet. For most accept filters this call to
soisconnected() will not move the connection from the incomplete queue
to the complete. The move would happen only when the filter has received
the desired data, and soisconnected() would be called once again from
sorwakeup(). Ideally, we should mark socket as connected only there,
and leave the soisconnected() from SYN_RCVD->ESTABLISHED only for the
simultaneous open case. However, this doesn't yet work.

Reviewed by: rscheff, tuexen, rrs
Differential revision: https://reviews.freebsd.org/D36641

Details

Provenance
glebiusAuthored on Sep 21 2022, 9:02 PM
Reviewer
rscheff
Differential Revision
D36641: tcp: fix simultaneous open and refine e80062a2d43
Parents
rGd819ddba9aa4: lio: Remove unneeded include.
Branches
Unknown
Tags
Unknown