include/linux/tcp.h
/* a global non-zero variable that's incremented
* everytime a new connection has been started
*/
_u32 ttcp_gen;
/* a macro used to increment ttcp_gen and ensures ttcp_gen to be non-zero when it's rounded-up */
#define CC_INC(c) (++(c) == 0 ? ++(c) : (c))
include/net/tcp.h
/* constants used in TCP options */
#define TCPOLEN_CC 6
#define TCPOLEN_CC_NEW 6
#define TCPOLEN_CC_ECHO 6
#define TCPOLEN_CC_ALIGNED 8
include/net/dst.h in struct dst_entry{}
/* the per-host cache
* tao_cc is the CC value contained in the last SYN (no ACK) packet received from the remote host
* tao_ccsent is the CC value contained in the last SYN (no ACK) packet sent to the remote host
*/
struct rt_tao {
__u32 tao_cc;
__u32 tao_ccsent;
} tao;
include/net/sock.h in struct tcp_opt{}
/* the per-connection cache
* t_duration shows how long this connection has been in existence since active open
* cc_send is the CC value contained in every packet sent to the remote host on this connection
* cc_recv is the CC value contained in every packet received from the remote host on this connection
*/
struct tcp_opt_cc {
unsigned long t_duration;
__u32 cc_send;
__u32 cc_recv;
} cc_cache;
/* two booleans for T/TCP states */
char TTCP_SENDSYN, TTCP_SENDFIN;
/* values of T/TCP options parsed from incoming packets */
__u32 cc;
__u32 cc_new;
__u32 cc_echo;
/* a per-connection flag to enable or disable T/TCP */
int do_rfc1644;
/* macros to set two booleans for T/TCP states */
#define TTCP_SENDSYN_ON(sk) ((sk)->tp_pinfo.af_tcp.TTCP_SENDSYN = 1)
#define TTCP_SENDFIN_ON(sk) ((sk)->tp_pinfo.af_tcp.TTCP_SENDFIN = 1)
#define TTCP_SENDSYN_OFF(sk) ((sk)->tp_pinfo.af_tcp.TTCP_SENDSYN = 0)
#define TTCP_SENDFIN_OFF(sk) ((sk)->tp_pinfo.af_tcp.TTCP_SENDFIN = 0)
/* macros to test T/TCP states */
#define TTCP_SYN_SENT(sk) ((sk)->state == TCP_SYN_SENT && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDSYN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDFIN)
#define TTCP_SYN_RECV(sk) ((sk)->state == TCP_SYN_RECV && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDSYN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDFIN)
#define TTCP_ESTABLISHED(sk) ((sk)->state == TCP_ESTABLISHED && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDFIN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDSYN)
#define TTCP_CLOSE_WAIT(sk) ((sk)->state == TCP_CLOSE_WAIT && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDFIN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDSYN)
#define TTCP_LAST_ACK(sk) ((sk)->state == TCP_LAST_ACK && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDFIN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDSYN)
#define TTCP_FIN_WAIT1(sk) ((sk)->state == TCP_FIN_WAIT1 && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDFIN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDSYN)
#define TTCP_CLOSING(sk) ((sk)->state == TCP_CLOSING && (!(sk)->tp_pinfo.af_tcp.TTCP_SENDFIN) && (sk)->tp_pinfo.af_tcp.TTCP_SENDSYN)