blob: 440b781baf0bffd3e2a26fc18f22dfbdb9935669 [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
Jesper Dangaard Brouer93bb0ce2014-03-03 14:46:13 +010012#include <linux/seqlock.h>
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020013
Alexey Dobriyan80250702008-10-08 11:35:08 +020014struct ctl_table_header;
Alexey Dobriyan6058fa62008-10-08 11:35:07 +020015struct nf_conntrack_ecache;
16
Gao feng2c352f42012-05-28 21:04:09 +000017struct nf_proto_net {
18#ifdef CONFIG_SYSCTL
19 struct ctl_table_header *ctl_table_header;
20 struct ctl_table *ctl_table;
Gao feng2c352f42012-05-28 21:04:09 +000021#endif
22 unsigned int users;
23};
24
Gao feng15f585b2012-05-28 21:04:11 +000025struct nf_generic_net {
26 struct nf_proto_net pn;
27 unsigned int timeout;
28};
29
Gao fengd2ba1fde2012-05-28 21:04:12 +000030struct nf_tcp_net {
31 struct nf_proto_net pn;
32 unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
33 unsigned int tcp_loose;
34 unsigned int tcp_be_liberal;
35 unsigned int tcp_max_retrans;
36};
37
Gao feng0ce490a2012-05-28 21:04:13 +000038enum udp_conntrack {
39 UDP_CT_UNREPLIED,
40 UDP_CT_REPLIED,
41 UDP_CT_MAX
42};
43
44struct nf_udp_net {
45 struct nf_proto_net pn;
46 unsigned int timeouts[UDP_CT_MAX];
47};
48
Gao feng4b626b92012-05-28 21:04:14 +000049struct nf_icmp_net {
50 struct nf_proto_net pn;
51 unsigned int timeout;
52};
53
Davide Carattic51d3902016-11-15 15:08:25 +010054#ifdef CONFIG_NF_CT_PROTO_DCCP
55struct nf_dccp_net {
56 struct nf_proto_net pn;
57 int dccp_loose;
58 unsigned int dccp_timeout[CT_DCCP_MAX + 1];
59};
60#endif
61
Gao feng524a53e2012-05-28 21:04:10 +000062struct nf_ip_net {
Gao feng15f585b2012-05-28 21:04:11 +000063 struct nf_generic_net generic;
Gao fengd2ba1fde2012-05-28 21:04:12 +000064 struct nf_tcp_net tcp;
Gao feng0ce490a2012-05-28 21:04:13 +000065 struct nf_udp_net udp;
Gao feng4b626b92012-05-28 21:04:14 +000066 struct nf_icmp_net icmp;
Gao feng7080ba02012-05-28 21:04:15 +000067 struct nf_icmp_net icmpv6;
Davide Carattic51d3902016-11-15 15:08:25 +010068#ifdef CONFIG_NF_CT_PROTO_DCCP
69 struct nf_dccp_net dccp;
70#endif
Gao feng524a53e2012-05-28 21:04:10 +000071};
72
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010073struct ct_pcpu {
74 spinlock_t lock;
75 struct hlist_nulls_head unconfirmed;
76 struct hlist_nulls_head dying;
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010077};
78
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +020079struct netns_ct {
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020080 atomic_t count;
Alexey Dobriyan9b03f382008-10-08 11:35:03 +020081 unsigned int expect_count;
Florian Westphal95005072014-06-10 23:12:56 +020082#ifdef CONFIG_NF_CONNTRACK_EVENTS
83 struct delayed_work ecache_dwork;
84 bool ecache_dwork_pending;
85#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +010086#ifdef CONFIG_SYSCTL
87 struct ctl_table_header *sysctl_header;
88 struct ctl_table_header *acct_sysctl_header;
89 struct ctl_table_header *tstamp_sysctl_header;
90 struct ctl_table_header *event_sysctl_header;
91 struct ctl_table_header *helper_sysctl_header;
92#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +010093 unsigned int sysctl_log_invalid; /* Log invalid packets */
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +010094 int sysctl_events;
95 int sysctl_acct;
96 int sysctl_auto_assign_helper;
97 bool auto_assign_helper_warned;
98 int sysctl_tstamp;
99 int sysctl_checksum;
100
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +0100101 struct ct_pcpu __percpu *pcpu_lists;
Tejun Heo7d720c32010-02-16 15:20:26 +0000102 struct ip_conntrack_stat __percpu *stat;
Pablo Neira Ayuso70e99422011-11-22 00:16:51 +0100103 struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb;
104 struct nf_exp_event_notifier __rcu *nf_expect_event_cb;
Gao feng524a53e2012-05-28 21:04:10 +0000105 struct nf_ip_net nf_ct_proto;
Florian Westphalc539f012013-01-11 06:30:44 +0000106#if defined(CONFIG_NF_CONNTRACK_LABELS)
107 unsigned int labels_used;
Florian Westphalc539f012013-01-11 06:30:44 +0000108#endif
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +0200109};
110#endif