A number of new variables have to be added to each TCP control block. These variables are used to record the CC values to send, and receive from the peer and the connection duration. The TF_REQ_CC flag is set when a new control block is initialised. Its value is non-zero if the tcp_do_rfc1644 flag is non-zero. The PRU_SEND_EOF flag is set when the MSG_EOF flag is used in the call to sendto(). They are declared in the file: /usr/src/linux/include/net/sock.h in the sock structure as follows:
TF_REQ_CC:1, /* CC options are required */
TF_SENDSYN:1, /* send a SYN with this segment */
TF_SENDFIN:1, /* send a FIN with this segment */
TF_RCVD_CC:1, /* set if received CC options from host */
TOF_CC:1 /* set if CC received from host */
TOF_CCNEW:1, /* set if CCnew received from host */
TOF_CCECHO:1; /* set if CCecho received from host */
unsigned char tao_test:4, /* set if the TAO test passes */
sent_mss:3, /* set if we have sent a MSS option */
multi_pkts:1; /* seeing multiple segments */
unsigned long ccecho_rcv; /* ccecho value received from host */
unsigned long cc_send; /* cc value to send on this connection */
unsigned long cc_recv; /* cc value received from host */
unsigned long t_duration; /* duration of connection for TIME-WAIT truncation */
__u32 ttcp_datalen; /* length of data in SYN segment */
These variables are initialised in the file: net/ipv4/af_inet.c in the inet_create() function. TF_REQ_CC is set to the value of the tcp_do_rfc1644, and the rest are set to zero.