Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jun 2006 15:49:52 +0200
From:      Andre Oppermann <andre@freebsd.org>
To:        Blue <Susan.Lan@zyxel.com.tw>
Cc:        freebsd-net@freebsd.org
Subject:   Re: [freeBSD-6.1RELEASE] wonderings about function tcp_input()
Message-ID:  <4496AB80.5040306@freebsd.org>
In-Reply-To: <449604D0.8090701@zyxel.com.tw>
References:  <449604D0.8090701@zyxel.com.tw>

next in thread | previous in thread | raw e-mail | index | archive | help
Blue wrote:
> Hi, all:
> 
>  I have a question about line 1765 to 1776 in tcp_input():
> 
>    /*
>     * If the ACK bit is off:  if in SYN-RECEIVED state or SENDSYN
>     * flag is on (half-synchronized state), then queue data for
>     * later processing; else drop segment and return.
>     */
>    if ((thflags & TH_ACK) == 0) {
>        if (tp->t_state == TCPS_SYN_RECEIVED ||
>            (tp->t_flags & TF_NEEDSYN))
>            goto step6;
>        else
>            goto drop;
>    }
> 
> My question is: if we are currently in TCPS_SYN_RECEIVED state, why does 
> a segment without ACK bother? Why we need to store the segment and 
> process it? Without considering T/TCP, the code should be:
> 
> if ((thflags & TH_ACK) == 0) {
>    goto drop;
> }

This code is dead at the moment since most of T/TCP (RFC1644) was
removed and the SYN_RECEIVED case is no longer handled here but in
tcp_syncache.c.

-- 
Andre




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4496AB80.5040306>