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
144b560b447df83368df44bd3712c0c39b1d79ba04Jan Engelhardttrace_tg(struct sk_buff *skb, const struct xt_action_param *par)
15ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
163db05fea51cdb162cfa8f69e9cfb9e228919d2a9Herbert Xu	skb->nf_trace = 1;
17ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik	return XT_CONTINUE;
18ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
19ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
2055b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardtstatic struct xt_target trace_tg_reg __read_mostly = {
2155b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.name       = "TRACE",
2255b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.revision   = 0,
2355b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.family     = NFPROTO_UNSPEC,
2455b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.table      = "raw",
2555b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.target     = trace_tg,
2655b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	.me         = THIS_MODULE,
27ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik};
28ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
29d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic int __init trace_tg_init(void)
30ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
3155b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	return xt_register_target(&trace_tg_reg);
32ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
33ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
34d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic void __exit trace_tg_exit(void)
35ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik{
3655b69e91040c685a064198bd76e59885b7ad26c6Jan Engelhardt	xt_unregister_target(&trace_tg_reg);
37ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik}
38ba9dda3ab5a865542e69dfe01edb2436857c9420Jozsef Kadlecsik
39d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_init(trace_tg_init);
40d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_exit(trace_tg_exit);
41