PERFORCE change 164830 for review
Andre Oppermann
andre at FreeBSD.org
Sun Jun 21 20:45:59 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164830
Change 164830 by andre at 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.
More information about the p4-projects
mailing list