1 #ifndef _NF_CONNTRACK_COMMON_H 2 #define _NF_CONNTRACK_COMMON_H 3 /* Connection state tracking for netfilter. This is separated from, 4 but required by, the NAT layer; it can also be used by an iptables 5 extension. */ 6 enum ip_conntrack_info { 7 /* Part of an established connection (either direction). */ 8 IP_CT_ESTABLISHED, 9 10 /* Like NEW, but related to an existing connection, or ICMP error 11 (in either direction). */ 12 IP_CT_RELATED, 13 14 /* Started a new connection to track (only 15 IP_CT_DIR_ORIGINAL); may be a retransmission. */ 16 IP_CT_NEW, 17 18 /* >= this indicates reply direction */ 19 IP_CT_IS_REPLY, 20 21 /* Number of distinct IP_CT types (no NEW in reply dirn). */ 22 IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1 23 }; 24 25 /* Bitset representing status of connection. */ 26 enum ip_conntrack_status { 27 /* It's an expected connection: bit 0 set. This bit never changed */ 28 IPS_EXPECTED_BIT = 0, 29 IPS_EXPECTED = (1 << IPS_EXPECTED_BIT), 30 31 /* We've seen packets both ways: bit 1 set. Can be set, not unset. */ 32 IPS_SEEN_REPLY_BIT = 1, 33 IPS_SEEN_REPLY = (1 << IPS_SEEN_REPLY_BIT), 34 35 /* Conntrack should never be early-expired. */ 36 IPS_ASSURED_BIT = 2, 37 IPS_ASSURED = (1 << IPS_ASSURED_BIT), 38 39 /* Connection is confirmed: originating packet has left box */ 40 IPS_CONFIRMED_BIT = 3, 41 IPS_CONFIRMED = (1 << IPS_CONFIRMED_BIT), 42 43 /* Connection needs src nat in orig dir. This bit never changed. */ 44 IPS_SRC_NAT_BIT = 4, 45 IPS_SRC_NAT = (1 << IPS_SRC_NAT_BIT), 46 47 /* Connection needs dst nat in orig dir. This bit never changed. */ 48 IPS_DST_NAT_BIT = 5, 49 IPS_DST_NAT = (1 << IPS_DST_NAT_BIT), 50 51 /* Both together. */ 52 IPS_NAT_MASK = (IPS_DST_NAT | IPS_SRC_NAT), 53 54 /* Connection needs TCP sequence adjusted. */ 55 IPS_SEQ_ADJUST_BIT = 6, 56 IPS_SEQ_ADJUST = (1 << IPS_SEQ_ADJUST_BIT), 57 58 /* NAT initialization bits. */ 59 IPS_SRC_NAT_DONE_BIT = 7, 60 IPS_SRC_NAT_DONE = (1 << IPS_SRC_NAT_DONE_BIT), 61 62 IPS_DST_NAT_DONE_BIT = 8, 63 IPS_DST_NAT_DONE = (1 << IPS_DST_NAT_DONE_BIT), 64 65 /* Both together */ 66 IPS_NAT_DONE_MASK = (IPS_DST_NAT_DONE | IPS_SRC_NAT_DONE), 67 68 /* Connection is dying (removed from lists), can not be unset. */ 69 IPS_DYING_BIT = 9, 70 IPS_DYING = (1 << IPS_DYING_BIT), 71 72 /* Connection has fixed timeout. */ 73 IPS_FIXED_TIMEOUT_BIT = 10, 74 IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), 75 76 /* Conntrack is a template */ 77 IPS_TEMPLATE_BIT = 11, 78 IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT), 79 80 /* Conntrack is a fake untracked entry */ 81 IPS_UNTRACKED_BIT = 12, 82 IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT), 83 }; 84 85 /* Connection tracking event types */ 86 enum ip_conntrack_events { 87 IPCT_NEW, /* new conntrack */ 88 IPCT_RELATED, /* related conntrack */ 89 IPCT_DESTROY, /* destroyed conntrack */ 90 IPCT_REPLY, /* connection has seen two-way traffic */ 91 IPCT_ASSURED, /* connection status has changed to assured */ 92 IPCT_PROTOINFO, /* protocol information has changed */ 93 IPCT_HELPER, /* new helper has been set */ 94 IPCT_MARK, /* new mark has been set */ 95 IPCT_NATSEQADJ, /* NAT is doing sequence adjustment */ 96 IPCT_SECMARK, /* new security mark has been set */ 97 }; 98 99 enum ip_conntrack_expect_events { 100 IPEXP_NEW, /* new expectation */ 101 IPEXP_DESTROY, /* destroyed expectation */ 102 }; 103 104 /* expectation flags */ 105 #define NF_CT_EXPECT_PERMANENT 0x1 106 #define NF_CT_EXPECT_INACTIVE 0x2 107 #define NF_CT_EXPECT_USERSPACE 0x4 108 109 #ifdef __KERNEL__ 110 struct ip_conntrack_stat { 111 unsigned int searched; 112 unsigned int found; 113 unsigned int new; 114 unsigned int invalid; 115 unsigned int ignore; 116 unsigned int delete; 117 unsigned int delete_list; 118 unsigned int insert; 119 unsigned int insert_failed; 120 unsigned int drop; 121 unsigned int early_drop; 122 unsigned int error; 123 unsigned int expect_new; 124 unsigned int expect_create; 125 unsigned int expect_delete; 126 unsigned int search_restart; 127 }; 128 129 /* call to create an explicit dependency on nf_conntrack. */ 130 extern void need_conntrack(void); 131 132 #endif /* __KERNEL__ */ 133 134 #endif /* _NF_CONNTRACK_COMMON_H */ 135