Commit | Line | Data |
---|---|---|
e97150df | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
a992ca2a PNA |
2 | /* |
3 | * (C) 2010 Pablo Neira Ayuso <pablo@netfilter.org> | |
a992ca2a PNA |
4 | */ |
5 | ||
5191d70f AS |
6 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
7 | ||
a992ca2a PNA |
8 | #include <linux/netfilter.h> |
9 | #include <linux/slab.h> | |
10 | #include <linux/kernel.h> | |
11 | #include <linux/moduleparam.h> | |
12 | ||
13 | #include <net/netfilter/nf_conntrack.h> | |
14 | #include <net/netfilter/nf_conntrack_extend.h> | |
15 | #include <net/netfilter/nf_conntrack_timestamp.h> | |
16 | ||
eb939922 | 17 | static bool nf_ct_tstamp __read_mostly; |
a992ca2a PNA |
18 | |
19 | module_param_named(tstamp, nf_ct_tstamp, bool, 0644); | |
20 | MODULE_PARM_DESC(tstamp, "Enable connection tracking flow timestamping."); | |
21 | ||
23f671a1 | 22 | static const struct nf_ct_ext_type tstamp_extend = { |
a992ca2a PNA |
23 | .len = sizeof(struct nf_conn_tstamp), |
24 | .align = __alignof__(struct nf_conn_tstamp), | |
25 | .id = NF_CT_EXT_TSTAMP, | |
26 | }; | |
27 | ||
fc3893fd | 28 | void nf_conntrack_tstamp_pernet_init(struct net *net) |
a992ca2a | 29 | { |
a992ca2a | 30 | net->ct.sysctl_tstamp = nf_ct_tstamp; |
73f4001a | 31 | } |
a992ca2a | 32 | |
73f4001a G |
33 | int nf_conntrack_tstamp_init(void) |
34 | { | |
35 | int ret; | |
36 | ret = nf_ct_extend_register(&tstamp_extend); | |
a992ca2a | 37 | if (ret < 0) |
5191d70f | 38 | pr_err("Unable to register extension\n"); |
a992ca2a PNA |
39 | return ret; |
40 | } | |
41 | ||
73f4001a | 42 | void nf_conntrack_tstamp_fini(void) |
a992ca2a | 43 | { |
73f4001a | 44 | nf_ct_extend_unregister(&tstamp_extend); |
a992ca2a | 45 | } |