]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - net/bridge/netfilter/ebt_among.c
bridge: use rx_handler_data pointer to store net_bridge_port pointer
[linux-2.6.git] / net / bridge / netfilter / ebt_among.c
index 84a306f085b5f4e9e96ed7a41e104a69fe713687..8b84c581be3082ea4c8a6a21a362a3077ab17751 100644 (file)
@@ -7,12 +7,13 @@
  *  August, 2003
  *
  */
-
-#include <linux/netfilter_bridge/ebtables.h>
-#include <linux/netfilter_bridge/ebt_among.h>
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 #include <linux/ip.h>
 #include <linux/if_arp.h>
 #include <linux/module.h>
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter_bridge/ebtables.h>
+#include <linux/netfilter_bridge/ebt_among.h>
 
 static bool ebt_mac_wormhash_contains(const struct ebt_mac_wormhash *wh,
                                      const char *mac, __be32 ip)
@@ -128,11 +129,9 @@ static int get_ip_src(const struct sk_buff *skb, __be32 *addr)
 }
 
 static bool
-ebt_among_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)
+ebt_among_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
-       const struct ebt_among_info *info = data;
+       const struct ebt_among_info *info = par->matchinfo;
        const char *dmac, *smac;
        const struct ebt_mac_wormhash *wh_dst, *wh_src;
        __be32 dip = 0, sip = 0;
@@ -173,14 +172,11 @@ ebt_among_mt(const struct sk_buff *skb, const struct net_device *in,
        return true;
 }
 
-static bool
-ebt_among_mt_check(const char *table, const void *entry,
-                  const struct xt_match *match, void *data,
-                  unsigned int hook_mask)
+static int ebt_among_mt_check(const struct xt_mtchk_param *par)
 {
+       const struct ebt_among_info *info = par->matchinfo;
        const struct ebt_entry_match *em =
-               container_of(data, const struct ebt_entry_match, data);
-       const struct ebt_among_info *info = data;
+               container_of(par->matchinfo, const struct ebt_entry_match, data);
        int expected_length = sizeof(struct ebt_among_info);
        const struct ebt_mac_wormhash *wh_dst, *wh_src;
        int err;
@@ -191,28 +187,24 @@ ebt_among_mt_check(const char *table, const void *entry,
        expected_length += ebt_mac_wormhash_size(wh_src);
 
        if (em->match_size != EBT_ALIGN(expected_length)) {
-               printk(KERN_WARNING
-                      "ebtables: among: wrong size: %d "
-                      "against expected %d, rounded to %Zd\n",
-                      em->match_size, expected_length,
-                      EBT_ALIGN(expected_length));
-               return false;
+               pr_info("wrong size: %d against expected %d, rounded to %Zd\n",
+                       em->match_size, expected_length,
+                       EBT_ALIGN(expected_length));
+               return -EINVAL;
        }
        if (wh_dst && (err = ebt_mac_wormhash_check_integrity(wh_dst))) {
-               printk(KERN_WARNING
-                      "ebtables: among: dst integrity fail: %x\n", -err);
-               return false;
+               pr_info("dst integrity fail: %x\n", -err);
+               return -EINVAL;
        }
        if (wh_src && (err = ebt_mac_wormhash_check_integrity(wh_src))) {
-               printk(KERN_WARNING
-                      "ebtables: among: src integrity fail: %x\n", -err);
-               return false;
+               pr_info("src integrity fail: %x\n", -err);
+               return -EINVAL;
        }
-       return true;
+       return 0;
 }
 
-static struct ebt_match filter_among __read_mostly = {
-       .name           = EBT_AMONG_MATCH,
+static struct xt_match ebt_among_mt_reg __read_mostly = {
+       .name           = "among",
        .revision       = 0,
        .family         = NFPROTO_BRIDGE,
        .match          = ebt_among_mt,
@@ -223,12 +215,12 @@ static struct ebt_match filter_among __read_mostly = {
 
 static int __init ebt_among_init(void)
 {
-       return ebt_register_match(&filter_among);
+       return xt_register_match(&ebt_among_mt_reg);
 }
 
 static void __exit ebt_among_fini(void)
 {
-       ebt_unregister_match(&filter_among);
+       xt_unregister_match(&ebt_among_mt_reg);
 }
 
 module_init(ebt_among_init);