1baf7b1e11282127e068d149825cccec002091d61Patrick McHardy/* 2baf7b1e11282127e068d149825cccec002091d61Patrick McHardy * Copyright (c) 2006 Patrick McHardy <kaber@trash.net> 3baf7b1e11282127e068d149825cccec002091d61Patrick McHardy * 4baf7b1e11282127e068d149825cccec002091d61Patrick McHardy * This program is free software; you can redistribute it and/or modify 5baf7b1e11282127e068d149825cccec002091d61Patrick McHardy * it under the terms of the GNU General Public License version 2 as 6baf7b1e11282127e068d149825cccec002091d61Patrick McHardy * published by the Free Software Foundation. 7baf7b1e11282127e068d149825cccec002091d61Patrick McHardy */ 8baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 9baf7b1e11282127e068d149825cccec002091d61Patrick McHardy#include <linux/module.h> 10baf7b1e11282127e068d149825cccec002091d61Patrick McHardy#include <linux/init.h> 11baf7b1e11282127e068d149825cccec002091d61Patrick McHardy#include <linux/skbuff.h> 12baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 13baf7b1e11282127e068d149825cccec002091d61Patrick McHardy#include <linux/netfilter/x_tables.h> 14baf7b1e11282127e068d149825cccec002091d61Patrick McHardy#include <linux/netfilter/xt_NFLOG.h> 15f01ffbd6e7d001ccf9168b33507958a51ce0ffcfPatrick McHardy#include <net/netfilter/nf_log.h> 165f7340eff8f68f41b7e5c7ad47ec4cd1ea1afb40Eric Leblond#include <net/netfilter/nfnetlink_log.h> 17baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 18baf7b1e11282127e068d149825cccec002091d61Patrick McHardyMODULE_AUTHOR("Patrick McHardy <kaber@trash.net>"); 192ae15b64e6a1608c840c60df38e8e5eef7b2b8c3Jan EngelhardtMODULE_DESCRIPTION("Xtables: packet logging to netlink using NFLOG"); 20baf7b1e11282127e068d149825cccec002091d61Patrick McHardyMODULE_LICENSE("GPL"); 21baf7b1e11282127e068d149825cccec002091d61Patrick McHardyMODULE_ALIAS("ipt_NFLOG"); 22baf7b1e11282127e068d149825cccec002091d61Patrick McHardyMODULE_ALIAS("ip6t_NFLOG"); 23baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 24baf7b1e11282127e068d149825cccec002091d61Patrick McHardystatic unsigned int 254b560b447df83368df44bd3712c0c39b1d79ba04Jan Engelhardtnflog_tg(struct sk_buff *skb, const struct xt_action_param *par) 26baf7b1e11282127e068d149825cccec002091d61Patrick McHardy{ 277eb3558655aaa87a3e71a0c065dfaddda521fa6dJan Engelhardt const struct xt_nflog_info *info = par->targinfo; 28baf7b1e11282127e068d149825cccec002091d61Patrick McHardy struct nf_loginfo li; 298cdb46da06ea94543a3b2e53e3e92736421d1093Hans Schillstrom struct net *net = dev_net(par->in ? par->in : par->out); 30baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 31baf7b1e11282127e068d149825cccec002091d61Patrick McHardy li.type = NF_LOG_TYPE_ULOG; 32baf7b1e11282127e068d149825cccec002091d61Patrick McHardy li.u.ulog.copy_len = info->len; 33baf7b1e11282127e068d149825cccec002091d61Patrick McHardy li.u.ulog.group = info->group; 34baf7b1e11282127e068d149825cccec002091d61Patrick McHardy li.u.ulog.qthreshold = info->threshold; 35baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 368cdb46da06ea94543a3b2e53e3e92736421d1093Hans Schillstrom nfulnl_log_packet(net, par->family, par->hooknum, skb, par->in, 375f7340eff8f68f41b7e5c7ad47ec4cd1ea1afb40Eric Leblond par->out, &li, info->prefix); 38baf7b1e11282127e068d149825cccec002091d61Patrick McHardy return XT_CONTINUE; 39baf7b1e11282127e068d149825cccec002091d61Patrick McHardy} 40baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 41135367b8f6a18507af6b9a6910a14b5699415309Jan Engelhardtstatic int nflog_tg_check(const struct xt_tgchk_param *par) 42baf7b1e11282127e068d149825cccec002091d61Patrick McHardy{ 43af5d6dc200eb0fcc6fbd3df1ab4d8969004cb37fJan Engelhardt const struct xt_nflog_info *info = par->targinfo; 44baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 45baf7b1e11282127e068d149825cccec002091d61Patrick McHardy if (info->flags & ~XT_NFLOG_MASK) 46d6b00a5345ce4e86e8b00a88bb84a2c0c1f69ddcJan Engelhardt return -EINVAL; 47baf7b1e11282127e068d149825cccec002091d61Patrick McHardy if (info->prefix[sizeof(info->prefix) - 1] != '\0') 48d6b00a5345ce4e86e8b00a88bb84a2c0c1f69ddcJan Engelhardt return -EINVAL; 49d6b00a5345ce4e86e8b00a88bb84a2c0c1f69ddcJan Engelhardt return 0; 50baf7b1e11282127e068d149825cccec002091d61Patrick McHardy} 51baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 5292f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardtstatic struct xt_target nflog_tg_reg __read_mostly = { 5392f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .name = "NFLOG", 5492f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .revision = 0, 5592f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .family = NFPROTO_UNSPEC, 5692f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .checkentry = nflog_tg_check, 5792f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .target = nflog_tg, 5892f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .targetsize = sizeof(struct xt_nflog_info), 5992f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt .me = THIS_MODULE, 60baf7b1e11282127e068d149825cccec002091d61Patrick McHardy}; 61baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 62d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic int __init nflog_tg_init(void) 63baf7b1e11282127e068d149825cccec002091d61Patrick McHardy{ 6492f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt return xt_register_target(&nflog_tg_reg); 65baf7b1e11282127e068d149825cccec002091d61Patrick McHardy} 66baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 67d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtstatic void __exit nflog_tg_exit(void) 68baf7b1e11282127e068d149825cccec002091d61Patrick McHardy{ 6992f3b2b1bc968caaabee8cd78bee75ab7c4af74eJan Engelhardt xt_unregister_target(&nflog_tg_reg); 70baf7b1e11282127e068d149825cccec002091d61Patrick McHardy} 71baf7b1e11282127e068d149825cccec002091d61Patrick McHardy 72d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_init(nflog_tg_init); 73d3c5ee6d545b5372fd525ebe16988a5b6efeceb0Jan Engelhardtmodule_exit(nflog_tg_exit); 74