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