/*
 *  ebt_pkttype
 *
 *	Authors:
 *	Bart De Schuymer <bdschuym@pandora.be>
 *
 *  April, 2003
 *
 */
#include <linux/module.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_pkttype.h>

static bool
ebt_pkttype_mt(const struct sk_buff *skb, const struct net_device *in,
	       const struct net_device *out, const struct xt_match *match,
	       const void *data, int offset, unsigned int protoff,
	       bool *hotdrop)
{
	const struct ebt_pkttype_info *info = data;

	return (skb->pkt_type == info->pkt_type) ^ info->invert;
}

static bool
ebt_pkttype_mt_check(const char *table, const void *e,
		     const struct xt_match *match, void *data,
		     unsigned int hook_mask)
{
	const struct ebt_pkttype_info *info = data;

	if (info->invert != 0 && info->invert != 1)
		return false;
	/* Allow any pkt_type value */
	return true;
}

static struct ebt_match filter_pkttype __read_mostly = {
	.name		= EBT_PKTTYPE_MATCH,
	.revision	= 0,
	.family		= NFPROTO_BRIDGE,
	.match		= ebt_pkttype_mt,
	.checkentry	= ebt_pkttype_mt_check,
	.matchsize	= XT_ALIGN(sizeof(struct ebt_pkttype_info)),
	.me		= THIS_MODULE,
};

static int __init ebt_pkttype_init(void)
{
	return ebt_register_match(&filter_pkttype);
}

static void __exit ebt_pkttype_fini(void)
{
	ebt_unregister_match(&filter_pkttype);
}

module_init(ebt_pkttype_init);
module_exit(ebt_pkttype_fini);
MODULE_DESCRIPTION("Ebtables: Link layer packet type match");
MODULE_LICENSE("GPL");
