Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[firefly-linux-kernel-4.4.55.git] / net / bridge / netfilter / ebt_limit.c
index 3d71f3510ffae605a18608827cb91cd3c77dd848..f7bd9192ff0c8698a1e4b9681e413c16d2d5e9cb 100644 (file)
@@ -30,11 +30,10 @@ static DEFINE_SPINLOCK(limit_lock);
 
 #define CREDITS_PER_JIFFY POW2_BELOW32(MAX_CPJ)
 
-static int ebt_limit_match(const struct sk_buff *skb,
-   const struct net_device *in, const struct net_device *out,
-   const void *data, unsigned int datalen)
+static bool
+ebt_limit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 {
-       struct ebt_limit_info *info = (struct ebt_limit_info *)data;
+       struct ebt_limit_info *info = (void *)par->matchinfo;
        unsigned long now = jiffies;
 
        spin_lock_bh(&limit_lock);
@@ -46,11 +45,11 @@ static int ebt_limit_match(const struct sk_buff *skb,
                /* We're not limited. */
                info->credit -= info->cost;
                spin_unlock_bh(&limit_lock);
-               return EBT_MATCH;
+               return true;
        }
 
        spin_unlock_bh(&limit_lock);
-       return EBT_NOMATCH;
+       return false;
 }
 
 /* Precision saver. */
@@ -65,17 +64,16 @@ user2credits(u_int32_t user)
        return (user * HZ * CREDITS_PER_JIFFY) / EBT_LIMIT_SCALE;
 }
 
-static int ebt_limit_check(const char *tablename, unsigned int hookmask,
-   const struct ebt_entry *e, void *data, unsigned int datalen)
+static bool ebt_limit_mt_check(const struct xt_mtchk_param *par)
 {
-       struct ebt_limit_info *info = data;
+       struct ebt_limit_info *info = par->matchinfo;
 
        /* Check for overflow. */
        if (info->burst == 0 ||
            user2credits(info->avg * info->burst) < user2credits(info->avg)) {
                printk("Overflow in ebt_limit, try lower: %u/%u\n",
                        info->avg, info->burst);
-               return -EINVAL;
+               return false;
        }
 
        /* User avg in seconds * EBT_LIMIT_SCALE: convert to jiffies * 128. */
@@ -83,25 +81,27 @@ static int ebt_limit_check(const char *tablename, unsigned int hookmask,
        info->credit = user2credits(info->avg * info->burst);
        info->credit_cap = user2credits(info->avg * info->burst);
        info->cost = user2credits(info->avg);
-       return 0;
+       return true;
 }
 
-static struct ebt_match ebt_limit_reg __read_mostly = {
-       .name           = EBT_LIMIT_MATCH,
-       .match          = ebt_limit_match,
-       .check          = ebt_limit_check,
+static struct xt_match ebt_limit_mt_reg __read_mostly = {
+       .name           = "limit",
+       .revision       = 0,
+       .family         = NFPROTO_BRIDGE,
+       .match          = ebt_limit_mt,
+       .checkentry     = ebt_limit_mt_check,
        .matchsize      = XT_ALIGN(sizeof(struct ebt_limit_info)),
        .me             = THIS_MODULE,
 };
 
 static int __init ebt_limit_init(void)
 {
-       return ebt_register_match(&ebt_limit_reg);
+       return xt_register_match(&ebt_limit_mt_reg);
 }
 
 static void __exit ebt_limit_fini(void)
 {
-       ebt_unregister_match(&ebt_limit_reg);
+       xt_unregister_match(&ebt_limit_mt_reg);
 }
 
 module_init(ebt_limit_init);