[PATCH] ebt_limit fix for HZ=1000
Bart De Schuymer <[email protected]>
| Newsgroups | gmane.linux.network.bridge.ebtables.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Dave,
This patch does the same fix to ebt_limit as Rusty's fix does for ipt_limit.
Thanks to Tom Marshall <tommy_at_home.tig-grr.com> for the patch.
cheers,
Bart
--- linux-2.6.0-test9/net/bridge/netfilter/ebt_limit.c.old 2003-11-04 20:03:09.000000000 +0100
+++ linux-2.6.0-test9/net/bridge/netfilter/ebt_limit.c 2003-11-04 20:03:23.000000000 +0100
@@ -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 *t
/* 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;
}
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/