blob: 9795d628a127b4bca4af5f454f834429169d9a19 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +02002#ifndef __NETNS_CONNTRACK_H
3#define __NETNS_CONNTRACK_H
4
Alexey Dobriyan63c9a262008-10-08 11:35:04 +02005#include <linux/list.h>
Eric Dumazetea781f12009-03-25 21:05:46 +01006#include <linux/list_nulls.h>
Arun Sharma600634972011-07-26 16:09:06 -07007#include <linux/atomic.h>
Florian Westphal95005072014-06-10 23:12:56 +02008#include <linux/workqueue.h>
Gao fengd2ba1fde2012-05-28 21:04:12 +00009#include <linux/netfilter/nf_conntrack_tcp.h>
Davide Carattic51d3902016-11-15 15:08:25 +010010#ifdef CONFIG_NF_CT_PROTO_DCCP
11#include <linux/netfilter/nf_conntrack_dccp.h>
12#endif
Davide Carattia85406a2016-11-15 15:08:26 +010013#ifdef CONFIG_NF_CT_PROTO_SCTP
14#include <linux/netfilter/nf_conntrack_sctp.h>
15#endif
Jesper Dangaard Brouer93bb0ce2014-03-03 14:46:13 +010016#include <linux/seqlock.h>
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020017
Alexey Dobriyan80250702008-10-08 11:35:08 +020018struct ctl_table_header;
Alexey Dobriyan6058fa62008-10-08 11:35:07 +020019struct nf_conntrack_ecache;
20
Gao feng2c352f42012-05-28 21:04:09 +000021struct nf_proto_net {
22#ifdef CONFIG_SYSCTL
23 struct ctl_table_header *ctl_table_header;
24 struct ctl_table *ctl_table;
Gao feng2c352f42012-05-28 21:04:09 +000025#endif
26 unsigned int users;
27};
28
Gao feng15f585b2012-05-28 21:04:11 +000029struct nf_generic_net {
30 struct nf_proto_net pn;
31 unsigned int timeout;
32};
33
Gao fengd2ba1fde2012-05-28 21:04:12 +000034struct nf_tcp_net {
35 struct nf_proto_net pn;
36 unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
37 unsigned int tcp_loose;
38 unsigned int tcp_be_liberal;
39 unsigned int tcp_max_retrans;
40};
41
Gao feng0ce490a2012-05-28 21:04:13 +000042enum udp_conntrack {
43 UDP_CT_UNREPLIED,
44 UDP_CT_REPLIED,
45 UDP_CT_MAX
46};
47
48struct nf_udp_net {
49 struct nf_proto_net pn;
50 unsigned int timeouts[UDP_CT_MAX];
51};
52
Gao feng4b626b92012-05-28 21:04:14 +000053struct nf_icmp_net {
54 struct nf_proto_net pn;
55 unsigned int timeout;
56};
57
Davide Carattic51d3902016-11-15 15:08:25 +010058#ifdef CONFIG_NF_CT_PROTO_DCCP
59struct nf_dccp_net {
60 struct nf_proto_net pn;
61 int dccp_loose;
62 unsigned int dccp_timeout[CT_DCCP_MAX + 1];
63};
64#endif
65
Davide Carattia85406a2016-11-15 15:08:26 +010066#ifdef CONFIG_NF_CT_PROTO_SCTP
67struct nf_sctp_net {
68 struct nf_proto_net pn;
69 unsigned int timeouts[SCTP_CONNTRACK_MAX];
70};
71#endif
72
Gao feng524a53e2012-05-28 21:04:10 +000073struct nf_ip_net {
Gao feng15f585b2012-05-28 21:04:11 +000074 struct nf_generic_net generic;
Gao fengd2ba1fde2012-05-28 21:04:12 +000075 struct nf_tcp_net tcp;
Gao feng0ce490a2012-05-28 21:04:13 +000076 struct nf_udp_net udp;
Gao feng4b626b92012-05-28 21:04:14 +000077 struct nf_icmp_net icmp;
Gao feng7080ba02012-05-28 21:04:15 +000078 struct nf_icmp_net icmpv6;
Davide Carattic51d3902016-11-15 15:08:25 +010079#ifdef CONFIG_NF_CT_PROTO_DCCP
80 struct nf_dccp_net dccp;
81#endif
Davide Carattia85406a2016-11-15 15:08:26 +010082#ifdef CONFIG_NF_CT_PROTO_SCTP
83 struct nf_sctp_net sctp;
84#endif
Gao feng524a53e2012-05-28 21:04:10 +000085};
86
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010087struct ct_pcpu {
88 spinlock_t lock;
89 struct hlist_nulls_head unconfirmed;
90 struct hlist_nulls_head dying;
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +010091};
92
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +020093struct netns_ct {
Alexey Dobriyan49ac8712008-10-08 11:35:03 +020094 atomic_t count;
Alexey Dobriyan9b03f382008-10-08 11:35:03 +020095 unsigned int expect_count;
Florian Westphal95005072014-06-10 23:12:56 +020096#ifdef CONFIG_NF_CONNTRACK_EVENTS
97 struct delayed_work ecache_dwork;
98 bool ecache_dwork_pending;
99#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +0100100#ifdef CONFIG_SYSCTL
101 struct ctl_table_header *sysctl_header;
102 struct ctl_table_header *acct_sysctl_header;
103 struct ctl_table_header *tstamp_sysctl_header;
104 struct ctl_table_header *event_sysctl_header;
105 struct ctl_table_header *helper_sysctl_header;
106#endif
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +0100107 unsigned int sysctl_log_invalid; /* Log invalid packets */
Jesper Dangaard Brouer8cf4d6a2013-11-15 15:57:53 +0100108 int sysctl_events;
109 int sysctl_acct;
110 int sysctl_auto_assign_helper;
111 bool auto_assign_helper_warned;
112 int sysctl_tstamp;
113 int sysctl_checksum;
114
Jesper Dangaard Brouerb7779d02014-03-03 14:45:20 +0100115 struct ct_pcpu __percpu *pcpu_lists;
Tejun Heo7d720c32010-02-16 15:20:26 +0000116 struct ip_conntrack_stat __percpu *stat;
Pablo Neira Ayuso70e99422011-11-22 00:16:51 +0100117 struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb;
118 struct nf_exp_event_notifier __rcu *nf_expect_event_cb;
Gao feng524a53e2012-05-28 21:04:10 +0000119 struct nf_ip_net nf_ct_proto;
Florian Westphalc539f012013-01-11 06:30:44 +0000120#if defined(CONFIG_NF_CONNTRACK_LABELS)
121 unsigned int labels_used;
Florian Westphalc539f012013-01-11 06:30:44 +0000122#endif
Alexey Dobriyandfdb8d72008-10-08 11:35:02 +0200123};
124#endif