]>
Commit | Line | Data |
---|---|---|
09c434b8 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
ba9dda3a JK |
2 | /* This is a module which is used to mark packets for tracing. |
3 | */ | |
4 | #include <linux/module.h> | |
5 | #include <linux/skbuff.h> | |
6 | ||
7 | #include <linux/netfilter/x_tables.h> | |
36f959c4 | 8 | #include <net/netfilter/nf_log.h> |
ba9dda3a | 9 | |
2ae15b64 | 10 | MODULE_DESCRIPTION("Xtables: packet flow tracing"); |
ba9dda3a JK |
11 | MODULE_LICENSE("GPL"); |
12 | MODULE_ALIAS("ipt_TRACE"); | |
13 | MODULE_ALIAS("ip6t_TRACE"); | |
14 | ||
36f959c4 LZ |
15 | static int trace_tg_check(const struct xt_tgchk_param *par) |
16 | { | |
17 | return nf_logger_find_get(par->family, NF_LOG_TYPE_LOG); | |
18 | } | |
19 | ||
20 | static void trace_tg_destroy(const struct xt_tgdtor_param *par) | |
21 | { | |
22 | nf_logger_put(par->family, NF_LOG_TYPE_LOG); | |
23 | } | |
24 | ||
ba9dda3a | 25 | static unsigned int |
4b560b44 | 26 | trace_tg(struct sk_buff *skb, const struct xt_action_param *par) |
ba9dda3a | 27 | { |
3db05fea | 28 | skb->nf_trace = 1; |
ba9dda3a JK |
29 | return XT_CONTINUE; |
30 | } | |
31 | ||
55b69e91 | 32 | static struct xt_target trace_tg_reg __read_mostly = { |
36f959c4 LZ |
33 | .name = "TRACE", |
34 | .revision = 0, | |
35 | .family = NFPROTO_UNSPEC, | |
36 | .table = "raw", | |
37 | .target = trace_tg, | |
38 | .checkentry = trace_tg_check, | |
39 | .destroy = trace_tg_destroy, | |
40 | .me = THIS_MODULE, | |
ba9dda3a JK |
41 | }; |
42 | ||
d3c5ee6d | 43 | static int __init trace_tg_init(void) |
ba9dda3a | 44 | { |
55b69e91 | 45 | return xt_register_target(&trace_tg_reg); |
ba9dda3a JK |
46 | } |
47 | ||
d3c5ee6d | 48 | static void __exit trace_tg_exit(void) |
ba9dda3a | 49 | { |
55b69e91 | 50 | xt_unregister_target(&trace_tg_reg); |
ba9dda3a JK |
51 | } |
52 | ||
d3c5ee6d JE |
53 | module_init(trace_tg_init); |
54 | module_exit(trace_tg_exit); |