blob: 17724c62de97c272ccba7960a7187b7f4325b56b [file] [log] [blame]
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +02001#ifndef __NETNS_CONNTRACK_H
2#define __NETNS_CONNTRACK_H
3
Alexey Dobriyan63c9a262008-10-08 11:35:04 +02004#include <linux/list.h>
Eric Dumazetea781f12009-03-25 21:05:46 +01005#include <linux/list_nulls.h>
Arun Sharma600634972011-07-26 16:09:06 -07006#include <linux/atomic.h>
Florian Westphal95005072014-06-10 23:12:56 +02007#include <linux/workqueue.h>
Gao fengd2ba1fde2012-05-28 21:04:12 +00008#include <linux/netfilter/nf_conntrack_tcp.h>
Davide Carattic51d3902016-11-15 15:08:25 +01009#ifdef CONFIG_NF_CT_PROTO_DCCP
10#include <linux/netfilter/nf_conntrack_dccp.h>
11#endif
Davide Carattia85406a2016-11-15 15:08:26 +010012#ifdef CONFIG_NF_CT_PROTO_SCTP
13#include <linux/netfilter/nf_conntrack_sctp.h>
14#endif
Jesper Dangaard Brouer93bb0ce2014-03-03 14:46:13 +010015#include <linux/seqlock.h>
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020016
Alexey Dobriyan80250702008-10-08 11:35:08 +020017struct ctl_table_header;
Alexey Dobriyan6058fa62008-10-08 11:35:07 +020018struct nf_conntrack_ecache;
19
Gao feng2c352f42012-05-28 21:04:09 +000020struct nf_proto_net {
21#ifdef CONFIG_SYSCTL
22 struct ctl_table_header *ctl_table_header;
23 struct ctl_table *ctl_table;
Gao feng2c352f42012-05-28 21:04:09 +000024#endif
25 unsigned int users;
26};
27
Gao feng15f585b2012-05-28 21:04:11 +000028struct nf_generic_net {
29 struct nf_proto_net pn;
30 unsigned int timeout;
31};
32
Gao fengd2ba1fde2012-05-28 21:04:12 +000033struct nf_tcp_net {
34 struct nf_proto_net pn;
35 unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
36 unsigned int tcp_loose;
37 unsigned int tcp_be_liberal;
38 unsigned int tcp_max_retrans;
39};
40
Gao feng0ce490a2012-05-28 21:04:13 +000041enum udp_conntrack {
42 UDP_CT_UNREPLIED,
43 UDP_CT_REPLIED,
44 UDP_CT_MAX
45};
46
47struct nf_udp_net {
48 struct nf_proto_net pn;
49 unsigned int timeouts[UDP_CT_MAX];
50};
51
Gao feng4b626b92012-05-28 21:04:14 +000052struct nf_icmp_net {
53 struct nf_proto_net pn;
54 unsigned int timeout;
55};
56
Davide Carattic51d3902016-11-15 15:08:25 +010057#ifdef CONFIG_NF_CT_PROTO_DCCP
58struct nf_dccp_net {
59 struct nf_proto_net pn;
60 int dccp_loose;
61 unsigned int dccp_timeout[CT_DCCP_MAX + 1];
62};
63#endif
64
Davide Carattia85406a2016-11-15 15:08:26 +010065#ifdef CONFIG_NF_CT_PROTO_SCTP
66struct nf_sctp_net {
67 struct nf_proto_net pn;
68 unsigned int timeouts[SCTP_CONNTRACK_MAX];
69};
70#endif
71
Gao feng524a53e2012-05-28 21:04:10 +000072struct nf_ip_net {
Gao feng15f585b2012-05-28 21:04:11 +000073 struct nf_generic_net generic;
Gao fengd2ba1fde2012-05-28 21:04:12 +000074 struct nf_tcp_net tcp;
Gao feng0ce490a2012-05-28 21:04:13 +000075 struct nf_udp_net udp;
Gao feng4b626b92012-05-28 21:04:14 +000076 struct nf_icmp_net icmp;
Gao feng7080ba02012-05-28 21:04:15 +000077 struct nf_icmp_net icmpv6;
Davide Carattic51d3902016-11-15 15:08:25 +010078#ifdef CONFIG_NF_CT_PROTO_DCCP
79 struct nf_dccp_net dccp;
80#endif
Davide Carattia85406a2016-11-15 15:08:26 +010081#ifdef CONFIG_NF_CT_PROTO_SCTP
82 struct nf_sctp_net sctp;
83#endif
Gao feng524a53e2012-05-28 21:04:10 +000084};
85
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010086struct ct_pcpu {
87 spinlock_t lock;
88 struct hlist_nulls_head unconfirmed;
89 struct hlist_nulls_head dying;
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010090};
91
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +020092struct netns_ct {
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020093 atomic_t count;
Alexey Dobriyan9b03f382008-10-08 11:35:03 +020094 unsigned int expect_count;
Florian Westphal95005072014-06-10 23:12:56 +020095#ifdef CONFIG_NF_CONNTRACK_EVENTS
96 struct delayed_work ecache_dwork;
97 bool ecache_dwork_pending;
98#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +010099#ifdef CONFIG_SYSCTL
100 struct ctl_table_header *sysctl_header;
101 struct ctl_table_header *acct_sysctl_header;
102 struct ctl_table_header *tstamp_sysctl_header;
103 struct ctl_table_header *event_sysctl_header;
104 struct ctl_table_header *helper_sysctl_header;
105#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +0100106 unsigned int sysctl_log_invalid; /* Log invalid packets */
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +0100107 int sysctl_events;
108 int sysctl_acct;
109 int sysctl_auto_assign_helper;
110 bool auto_assign_helper_warned;
111 int sysctl_tstamp;
112 int sysctl_checksum;
113
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +0100114 struct ct_pcpu __percpu *pcpu_lists;
Tejun Heo7d720c32010-02-16 15:20:26 +0000115 struct ip_conntrack_stat __percpu *stat;
Pablo Neira Ayuso70e99422011-11-22 00:16:51 +0100116 struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb;
117 struct nf_exp_event_notifier __rcu *nf_expect_event_cb;
Gao feng524a53e2012-05-28 21:04:10 +0000118 struct nf_ip_net nf_ct_proto;
Florian Westphalc539f012013-01-11 06:30:44 +0000119#if defined(CONFIG_NF_CONNTRACK_LABELS)
120 unsigned int labels_used;
Florian Westphalc539f012013-01-11 06:30:44 +0000121#endif
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +0200122};
123#endif