Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 1 | #ifndef _NF_CONNTRACK_TCP_H |
| 2 | #define _NF_CONNTRACK_TCP_H |
| 3 | /* TCP tracking. */ |
| 4 | |
Arnd Bergmann | 60c195c | 2009-02-26 00:51:43 +0100 | [diff] [blame] | 5 | #include <linux/types.h> |
| 6 | |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 7 | /* This is exposed to userspace (ctnetlink) */ |
| 8 | enum tcp_conntrack { |
| 9 | TCP_CONNTRACK_NONE, |
| 10 | TCP_CONNTRACK_SYN_SENT, |
| 11 | TCP_CONNTRACK_SYN_RECV, |
| 12 | TCP_CONNTRACK_ESTABLISHED, |
| 13 | TCP_CONNTRACK_FIN_WAIT, |
| 14 | TCP_CONNTRACK_CLOSE_WAIT, |
| 15 | TCP_CONNTRACK_LAST_ACK, |
| 16 | TCP_CONNTRACK_TIME_WAIT, |
| 17 | TCP_CONNTRACK_CLOSE, |
Jozsef Kadlecsik | 874ab92 | 2009-06-02 13:58:56 +0200 | [diff] [blame] | 18 | TCP_CONNTRACK_LISTEN, /* obsolete */ |
| 19 | #define TCP_CONNTRACK_SYN_SENT2 TCP_CONNTRACK_LISTEN |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 20 | TCP_CONNTRACK_MAX, |
| 21 | TCP_CONNTRACK_IGNORE |
| 22 | }; |
| 23 | |
| 24 | /* Window scaling is advertised by the sender */ |
| 25 | #define IP_CT_TCP_FLAG_WINDOW_SCALE 0x01 |
| 26 | |
| 27 | /* SACK is permitted by the sender */ |
| 28 | #define IP_CT_TCP_FLAG_SACK_PERM 0x02 |
| 29 | |
| 30 | /* This sender sent FIN first */ |
Patrick McHardy | f79e780 | 2007-01-09 14:34:14 -0800 | [diff] [blame] | 31 | #define IP_CT_TCP_FLAG_CLOSE_INIT 0x04 |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 32 | |
Patrick McHardy | a09113c | 2007-02-07 15:05:33 -0800 | [diff] [blame] | 33 | /* Be liberal in window checking */ |
| 34 | #define IP_CT_TCP_FLAG_BE_LIBERAL 0x08 |
| 35 | |
Patrick McHardy | ae37504 | 2008-07-31 00:38:01 -0700 | [diff] [blame] | 36 | /* Has unacknowledged data */ |
| 37 | #define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10 |
| 38 | |
Jozsef Kadlecsik | bfcaa502 | 2009-05-25 17:23:15 +0200 | [diff] [blame] | 39 | /* The field td_maxack has been set */ |
| 40 | #define IP_CT_TCP_FLAG_MAXACK_SET 0x20 |
| 41 | |
Pablo Neira Ayuso | c8e2078 | 2007-03-14 16:45:19 -0700 | [diff] [blame] | 42 | struct nf_ct_tcp_flags { |
Arnd Bergmann | 60c195c | 2009-02-26 00:51:43 +0100 | [diff] [blame] | 43 | __u8 flags; |
| 44 | __u8 mask; |
Pablo Neira Ayuso | c8e2078 | 2007-03-14 16:45:19 -0700 | [diff] [blame] | 45 | }; |
| 46 | |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 47 | #ifdef __KERNEL__ |
| 48 | |
| 49 | struct ip_ct_tcp_state { |
| 50 | u_int32_t td_end; /* max of seq + len */ |
| 51 | u_int32_t td_maxend; /* max of ack + max(win, 1) */ |
| 52 | u_int32_t td_maxwin; /* max(win) */ |
Jozsef Kadlecsik | bfcaa502 | 2009-05-25 17:23:15 +0200 | [diff] [blame] | 53 | u_int32_t td_maxack; /* max of ack */ |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 54 | u_int8_t td_scale; /* window scale factor */ |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 55 | u_int8_t flags; /* per direction options */ |
| 56 | }; |
| 57 | |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 58 | struct ip_ct_tcp { |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 59 | struct ip_ct_tcp_state seen[2]; /* connection parameters per direction */ |
| 60 | u_int8_t state; /* state of the connection (enum tcp_conntrack) */ |
| 61 | /* For detecting stale connections */ |
| 62 | u_int8_t last_dir; /* Direction of the last packet (enum ip_conntrack_dir) */ |
| 63 | u_int8_t retrans; /* Number of retransmitted packets */ |
| 64 | u_int8_t last_index; /* Index of the last packet */ |
| 65 | u_int32_t last_seq; /* Last sequence number seen in dir */ |
| 66 | u_int32_t last_ack; /* Last sequence number seen in opposite dir */ |
| 67 | u_int32_t last_end; /* Last seq + len */ |
George Hansper | c1fe3ca | 2006-09-20 12:03:23 -0700 | [diff] [blame] | 68 | u_int16_t last_win; /* Last window advertisement seen in dir */ |
Pablo Neira Ayuso | c4832c7 | 2009-11-23 10:34:39 +0100 | [diff] [blame] | 69 | /* For SYN packets while we may be out-of-sync */ |
| 70 | u_int8_t last_wscale; /* Last window scaling factor seen */ |
| 71 | u_int8_t last_flags; /* Last flags set */ |
Yasuyuki Kozakai | 9fb9cbb | 2005-11-09 16:38:16 -0800 | [diff] [blame] | 72 | }; |
| 73 | |
| 74 | #endif /* __KERNEL__ */ |
| 75 | |
| 76 | #endif /* _NF_CONNTRACK_TCP_H */ |