xt_TRACE.c revision 2ae15b64e6a1608c840c60df38e8e5eef7b2b8c3
1ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik/* This is a module which is used to mark packets for tracing.
2ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik */
3ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik#include <linux/module.h>
4ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik#include <linux/skbuff.h>
5ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
6ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik#include <linux/netfilter/x_tables.h>
7ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
82ae15b64e6a1608c840c60df38e8e5eef7b2b8c3Jan EngelhardtMODULE_DESCRIPTION("Xtables: packet flow tracing");
9ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef KadlecsikMODULE_LICENSE("GPL");
10ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef KadlecsikMODULE_ALIAS("ipt_TRACE");
11ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef KadlecsikMODULE_ALIAS("ip6t_TRACE");
12ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
13ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsikstatic unsigned int
14d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardttrace_tg(struct sk_buff *skb, const struct net_device *in,
15d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt         const struct net_device *out, unsigned int hooknum,
16d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt         const struct xt_target *target, const void *targinfo)
17ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
183db05fea51cdb162cfa8f69e9cfb9e228919d2a9Herbert Xu	skb->nf_trace = 1;
19ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	return XT_CONTINUE;
20ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
21ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
22d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic struct xt_target trace_tg_reg[] __read_mostly = {
23ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	{
24ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.name		= "TRACE",
25ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.family		= AF_INET,
26d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt		.target		= trace_tg,
27ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.table		= "raw",
28ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.me		= THIS_MODULE,
29ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	},
30ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	{
31ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.name		= "TRACE",
32ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.family		= AF_INET6,
33d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt		.target		= trace_tg,
34ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.table		= "raw",
35ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik		.me		= THIS_MODULE,
36ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	},
37ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik};
38ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
39d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic int __init trace_tg_init(void)
40ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
41d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt	return xt_register_targets(trace_tg_reg, ARRAY_SIZE(trace_tg_reg));
42ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
43ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
44d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic void __exit trace_tg_exit(void)
45ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
46d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardt	xt_unregister_targets(trace_tg_reg, ARRAY_SIZE(trace_tg_reg));
47ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
48ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
49d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_init(trace_tg_init);
50d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_exit(trace_tg_exit);
51