From: Erwan Velu on
Hi folks,

I've been facing a very noisy network where hundreds broadcast packets
were generated every second.
When this traffic can't be controlled at the source, there is a side
effect on some systems.
I was having some idle systems that will never be targeted by this
broadcast traffic that got loaded just by receiving that "flood".
I mean by loaded that this light hardware was generating 300
context/switches per second.

I was looking for many options to avoid this traffic to disturb this
hosts and I discovered that the e100 driver was featuring a
"broadcast_disabled" configure option.
I realize that this option is not controllable, so I wrote this simple
patch that expose this option as a module option.
This allow me to tell this hosts not to listen anymore this traffic.

The result is clearly good as my systems are now running at 21
context/switches while being idle.
Hope this patch isn't too bad and could help others that faces the same problem.

Patch can be downloaded here :
http://konilope.linuxeries.org/e100_broadcast_disabled.patch

Even if gmail is eating the inlined, patch, at least that make it
easier to read it for humans.
If the patch is acked, the downloaded one will be more clean ;)

This patch was generated on top of the latest 2.6 torvald's git.
Cheers,
Erwan

Signed-off-by: Erwan Velu <erwanaliasr1(a)gmail.com>

diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index b997e57..2ba582f 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -194,12 +194,15 @@ MODULE_FIRMWARE(FIRMWARE_D102E);
static int debug = 3;
static int eeprom_bad_csum_allow = 0;
static int use_io = 0;
+static int broadcast_disabled = 0;
module_param(debug, int, 0);
module_param(eeprom_bad_csum_allow, int, 0);
module_param(use_io, int, 0);
+module_param(broadcast_disabled, int, 0);
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad eeprom checksums");
MODULE_PARM_DESC(use_io, "Force use of i/o access mode");
+MODULE_PARM_DESC(broadcast_disabled, "Filter broadcast packets
(0=disabled (default), 1=enabled)");
#define DPRINTK(nlevel, klevel, fmt, args...) \
(void)((NETIF_MSG_##nlevel & nic->msg_enable) && \
printk(KERN_##klevel PFX "%s: %s: " fmt, nic->netdev->name, \
@@ -1131,6 +1134,8 @@ static void e100_configure(struct nic *nic,
struct cb *cb, struct sk_buff *skb)
config->promiscuous_mode = 0x1; /* 1=on, 0=off */
}

+ config->broadcast_disabled = broadcast_disabled; /* Broadcast filtering */
+
if (nic->flags & multicast_all)
config->multicast_all = 0x1; /* 1=accept, 0=no */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/