blob: 219b9d2445c9af6687edf762da655a9e9173f8e9 [file] [log] [blame]
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -07001/* This is a module which is used to mark packets for tracing.
2 */
3#include <linux/module.h>
4#include <linux/skbuff.h>
5
6#include <linux/netfilter/x_tables.h>
7
8MODULE_LICENSE("GPL");
9MODULE_ALIAS("ipt_TRACE");
10MODULE_ALIAS("ip6t_TRACE");
11
12static unsigned int
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080013trace_tg(struct sk_buff *skb, const struct net_device *in,
14 const struct net_device *out, unsigned int hooknum,
15 const struct xt_target *target, const void *targinfo)
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070016{
Herbert Xu3db05fe2007-10-15 00:53:15 -070017 skb->nf_trace = 1;
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070018 return XT_CONTINUE;
19}
20
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080021static struct xt_target trace_tg_reg[] __read_mostly = {
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070022 {
23 .name = "TRACE",
24 .family = AF_INET,
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080025 .target = trace_tg,
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070026 .table = "raw",
27 .me = THIS_MODULE,
28 },
29 {
30 .name = "TRACE",
31 .family = AF_INET6,
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080032 .target = trace_tg,
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070033 .table = "raw",
34 .me = THIS_MODULE,
35 },
36};
37
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080038static int __init trace_tg_init(void)
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070039{
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080040 return xt_register_targets(trace_tg_reg, ARRAY_SIZE(trace_tg_reg));
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070041}
42
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080043static void __exit trace_tg_exit(void)
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070044{
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080045 xt_unregister_targets(trace_tg_reg, ARRAY_SIZE(trace_tg_reg));
Jozsef Kadlecsikba9dda32007-07-07 22:21:23 -070046}
47
Jan Engelhardtd3c5ee62007-12-04 23:24:03 -080048module_init(trace_tg_init);
49module_exit(trace_tg_exit);