FreeBSD currently reuses the TCP timestamp used in the transmission of a SYN-ACK segment when sending retransmissions. However, this only happens if done via the syncache code. The timestamp is not kept constant when retransmitting SYN segments or retransmitting the SYN-ACK from the generic code. FreeBSD also validates when receiving the ACK (third message of the handshake) that the timestamp was used.
This is inconsistent and also does not follow the specification. Other implementations (Mac OS X, Linux and Solaris) also do not show this behaviour.
Therefore, this patch changes the behaviour to consistently use an up to date timestamp also on SYN-ACK retransmissions.