/*
 * Implements a dummy match to allow attaching comments to rules
 *
 * 2003-05-13 Brad Fisher (brad@info-link.net)
 */

#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_comment.h>

MODULE_AUTHOR("Brad Fisher <brad@info-link.net>");
MODULE_DESCRIPTION("Xtables: No-op match which can be tagged with a comment");
MODULE_LICENSE("GPL");
MODULE_ALIAS("ipt_comment");
MODULE_ALIAS("ip6t_comment");

static bool
comment_mt(const struct sk_buff *skb, const struct net_device *in,
           const struct net_device *out, const struct xt_match *match,
           const void *matchinfo, int offset, unsigned int protooff,
           bool *hotdrop)
{
	/* We always match */
	return true;
}

static struct xt_match comment_mt_reg[] __read_mostly = {
	{
		.name		= "comment",
		.family		= AF_INET,
		.match		= comment_mt,
		.matchsize	= sizeof(struct xt_comment_info),
		.me		= THIS_MODULE
	},
	{
		.name		= "comment",
		.family		= AF_INET6,
		.match		= comment_mt,
		.matchsize	= sizeof(struct xt_comment_info),
		.me		= THIS_MODULE
	},
};

static int __init comment_mt_init(void)
{
	return xt_register_matches(comment_mt_reg, ARRAY_SIZE(comment_mt_reg));
}

static void __exit comment_mt_exit(void)
{
	xt_unregister_matches(comment_mt_reg, ARRAY_SIZE(comment_mt_reg));
}

module_init(comment_mt_init);
module_exit(comment_mt_exit);
