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