Merge tag 's390-5.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[linux-2.6-microblaze.git] / include / net / netns / conntrack.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __NETNS_CONNTRACK_H
3 #define __NETNS_CONNTRACK_H
4
5 #include <linux/list.h>
6 #include <linux/list_nulls.h>
7 #include <linux/atomic.h>
8 #include <linux/workqueue.h>
9 #include <linux/netfilter/nf_conntrack_tcp.h>
10 #ifdef CONFIG_NF_CT_PROTO_DCCP
11 #include <linux/netfilter/nf_conntrack_dccp.h>
12 #endif
13 #ifdef CONFIG_NF_CT_PROTO_SCTP
14 #include <linux/netfilter/nf_conntrack_sctp.h>
15 #endif
16 #include <linux/seqlock.h>
17
18 struct ctl_table_header;
19 struct nf_conntrack_ecache;
20
21 struct nf_generic_net {
22         unsigned int timeout;
23 };
24
25 struct nf_tcp_net {
26         unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
27         u8 tcp_loose;
28         u8 tcp_be_liberal;
29         u8 tcp_max_retrans;
30         u8 tcp_ignore_invalid_rst;
31 #if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
32         unsigned int offload_timeout;
33 #endif
34 };
35
36 enum udp_conntrack {
37         UDP_CT_UNREPLIED,
38         UDP_CT_REPLIED,
39         UDP_CT_MAX
40 };
41
42 struct nf_udp_net {
43         unsigned int timeouts[UDP_CT_MAX];
44 #if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
45         unsigned int offload_timeout;
46 #endif
47 };
48
49 struct nf_icmp_net {
50         unsigned int timeout;
51 };
52
53 #ifdef CONFIG_NF_CT_PROTO_DCCP
54 struct nf_dccp_net {
55         u8 dccp_loose;
56         unsigned int dccp_timeout[CT_DCCP_MAX + 1];
57 };
58 #endif
59
60 #ifdef CONFIG_NF_CT_PROTO_SCTP
61 struct nf_sctp_net {
62         unsigned int timeouts[SCTP_CONNTRACK_MAX];
63 };
64 #endif
65
66 #ifdef CONFIG_NF_CT_PROTO_GRE
67 enum gre_conntrack {
68         GRE_CT_UNREPLIED,
69         GRE_CT_REPLIED,
70         GRE_CT_MAX
71 };
72
73 struct nf_gre_net {
74         struct list_head        keymap_list;
75         unsigned int            timeouts[GRE_CT_MAX];
76 };
77 #endif
78
79 struct nf_ip_net {
80         struct nf_generic_net   generic;
81         struct nf_tcp_net       tcp;
82         struct nf_udp_net       udp;
83         struct nf_icmp_net      icmp;
84         struct nf_icmp_net      icmpv6;
85 #ifdef CONFIG_NF_CT_PROTO_DCCP
86         struct nf_dccp_net      dccp;
87 #endif
88 #ifdef CONFIG_NF_CT_PROTO_SCTP
89         struct nf_sctp_net      sctp;
90 #endif
91 #ifdef CONFIG_NF_CT_PROTO_GRE
92         struct nf_gre_net       gre;
93 #endif
94 };
95
96 struct ct_pcpu {
97         spinlock_t              lock;
98         struct hlist_nulls_head unconfirmed;
99         struct hlist_nulls_head dying;
100 };
101
102 struct netns_ct {
103 #ifdef CONFIG_NF_CONNTRACK_EVENTS
104         bool ecache_dwork_pending;
105 #endif
106         u8                      sysctl_log_invalid; /* Log invalid packets */
107         u8                      sysctl_events;
108         u8                      sysctl_acct;
109         u8                      sysctl_auto_assign_helper;
110         u8                      sysctl_tstamp;
111         u8                      sysctl_checksum;
112
113         struct ct_pcpu __percpu *pcpu_lists;
114         struct ip_conntrack_stat __percpu *stat;
115         struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb;
116         struct nf_exp_event_notifier __rcu *nf_expect_event_cb;
117         struct nf_ip_net        nf_ct_proto;
118 #if defined(CONFIG_NF_CONNTRACK_LABELS)
119         unsigned int            labels_used;
120 #endif
121 };
122 #endif