Hello, I am working with the code for the TCP Stack. I noticed that support for Challenge Acks have been added since the latest release (10.2.0), and I think I may have found a bug in how they relate to TCP timestamps. All line numbers below are those in commit e66e064c45687b5d294565dbd829b419848f7992. Looking at tcp_input.c, at lines 1594 to 1604, I see code that expects a timestamp to be in every segment during the session, if they were negotiated when the connection was being established. ( https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L1595 ) Looking at tcp_input.c, at lines 2161 and 2188, I see that Challenge ACKs are sent via calls to tcp_respond(). ( https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L2161 and https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L2188 ) Looking at tcp_subr.c, at line 978, I see that the segment sent by tcp_respond() never contains TCP options. (https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_subr.c#L978) Therefore, it seems to me that Challenge ACKs will never contain any TCP options. This violates the condition that once timestamps are negotiated, they must be present in every segment. Please let me know if I am mistaken, or if this is actually a bug. Sam KumarReceived on Mon Dec 28 2015 - 07:25:38 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:01 UTC