linux/net/bridge/netfilter/ebt_pkttype.c
<<
>>
Prefs
   1/*
   2 *  ebt_pkttype
   3 *
   4 *      Authors:
   5 *      Bart De Schuymer <bdschuym@pandora.be>
   6 *
   7 *  April, 2003
   8 *
   9 */
  10#include <linux/module.h>
  11#include <linux/netfilter/x_tables.h>
  12#include <linux/netfilter_bridge/ebtables.h>
  13#include <linux/netfilter_bridge/ebt_pkttype.h>
  14
  15static bool
  16ebt_pkttype_mt(const struct sk_buff *skb, const struct xt_match_param *par)
  17{
  18        const struct ebt_pkttype_info *info = par->matchinfo;
  19
  20        return (skb->pkt_type == info->pkt_type) ^ info->invert;
  21}
  22
  23static bool ebt_pkttype_mt_check(const struct xt_mtchk_param *par)
  24{
  25        const struct ebt_pkttype_info *info = par->matchinfo;
  26
  27        if (info->invert != 0 && info->invert != 1)
  28                return false;
  29        /* Allow any pkt_type value */
  30        return true;
  31}
  32
  33static struct xt_match ebt_pkttype_mt_reg __read_mostly = {
  34        .name           = "pkttype",
  35        .revision       = 0,
  36        .family         = NFPROTO_BRIDGE,
  37        .match          = ebt_pkttype_mt,
  38        .checkentry     = ebt_pkttype_mt_check,
  39        .matchsize      = XT_ALIGN(sizeof(struct ebt_pkttype_info)),
  40        .me             = THIS_MODULE,
  41};
  42
  43static int __init ebt_pkttype_init(void)
  44{
  45        return xt_register_match(&ebt_pkttype_mt_reg);
  46}
  47
  48static void __exit ebt_pkttype_fini(void)
  49{
  50        xt_unregister_match(&ebt_pkttype_mt_reg);
  51}
  52
  53module_init(ebt_pkttype_init);
  54module_exit(ebt_pkttype_fini);
  55MODULE_DESCRIPTION("Ebtables: Link layer packet type match");
  56MODULE_LICENSE("GPL");
  57