From 1ce50eb41a8176d0cea628a8e280b856c5d8ab79 Mon Sep 17 00:00:00 2001 From: Tom Marshall Date: Mon, 3 Nov 2003 19:30:09 -0800 Subject: [PATCH] [EBTABLES]: Fix ebt_limit for HZ=1000 --- net/bridge/netfilter/ebt_limit.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/net/bridge/netfilter/ebt_limit.c b/net/bridge/netfilter/ebt_limit.c index f816ec41746d7..20c57d58d5bfa 100644 --- a/net/bridge/netfilter/ebt_limit.c +++ b/net/bridge/netfilter/ebt_limit.c @@ -20,7 +20,16 @@ static spinlock_t limit_lock = SPIN_LOCK_UNLOCKED; -#define CREDITS_PER_JIFFY 128 +#define MAX_CPJ (0xFFFFFFFF / (HZ*60*60*24)) + +#define _POW2_BELOW2(x) ((x)|((x)>>1)) +#define _POW2_BELOW4(x) (_POW2_BELOW2(x)|_POW2_BELOW2((x)>>2)) +#define _POW2_BELOW8(x) (_POW2_BELOW4(x)|_POW2_BELOW4((x)>>4)) +#define _POW2_BELOW16(x) (_POW2_BELOW8(x)|_POW2_BELOW8((x)>>8)) +#define _POW2_BELOW32(x) (_POW2_BELOW16(x)|_POW2_BELOW16((x)>>16)) +#define POW2_BELOW32(x) ((_POW2_BELOW32(x)>>1) + 1) + +#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, @@ -68,7 +77,7 @@ static int ebt_limit_check(const char *tablename, unsigned int hookmask, /* Check for overflow. */ if (info->burst == 0 || user2credits(info->avg * info->burst) < user2credits(info->avg)) { - printk("Overflow in ebt_limit: %u/%u\n", + printk("Overflow in ebt_limit, try lower: %u/%u\n", info->avg, info->burst); return -EINVAL; } -- 2.53.0