Date: Sun, 21 Jun 2009 20:45:58 GMT From: Andre Oppermann <andre@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 164830 for review Message-ID: <200906212045.n5LKjw6H066204@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=164830 Change 164830 by andre@andre_t61 on 2009/06/21 20:45:25 Undo the following changes which happend before the branch point of tcp_new. The original version was correct based on a full reading of RFC1323 and the consesus of IETF TCPM. Eventually the problem this was supposed to solve had a different origin. See mainling list archives. svn r173771 silby Comment out the syncache's test which ensures that hosts which negotiate TCP timestamps in the initial SYN packet actually use them in the rest of the connection. Unfortunately, during the 7.0 testing cycle users have already found network devices that violate this constraint. RFC 1323 states 'and may send a TSopt in other segments' rather than 'and MUST send', so we must allow it. svn r174545 kmacy Remove spurious timestamp check. RFC 1323 explicitly states that timestamps MAY be transmitted if negotiated. Affected files ... .. //depot/projects/tcp_new/netinet/tcp_syncache.c#3 edit Differences ... ==== //depot/projects/tcp_new/netinet/tcp_syncache.c#3 (text+ko) ==== @@ -917,12 +917,24 @@ goto failed; } + /* + * If timestamps were present in the SYN and we accepted + * them in our SYN|ACK we require them to be present from + * now on. And vice versa. + */ + if ((sc->sc_flags & SCF_TIMESTAMP) && !(to->to_flags & TOF_TS)) { + if ((s = tcp_log_addrs(inc, th, NULL, NULL))) + log(LOG_DEBUG, "%s; %s: Timestamp missing, " + "segment rejected\n", s, __func__); + goto failed; + } if (!(sc->sc_flags & SCF_TIMESTAMP) && (to->to_flags & TOF_TS)) { if ((s = tcp_log_addrs(inc, th, NULL, NULL))) log(LOG_DEBUG, "%s; %s: Timestamp not expected, " "segment rejected\n", s, __func__); goto failed; } + /* * If timestamps were negotiated the reflected timestamp * must be equal to what we actually sent in the SYN|ACK.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906212045.n5LKjw6H066204>