aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_sysfs_br.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2012-04-12 22:37:42 -0400
committerDavid S. Miller <davem@davemloft.net>2012-04-15 12:51:35 -0400
commitc5c23260594c5701af66ef754916775ba6a46bbc (patch)
tree2e0f5ce991fd3d3ad77e61745c84a4ca32b8601d /net/bridge/br_sysfs_br.c
parentc83b8fab06fc8c80d6440649f117bb7541df5fd0 (diff)
bridge: Add multicast_querier toggle and disable queries by default
Sending general queries was implemented as an optimisation to speed up convergence on start-up. In order to prevent interference with multicast routers a zero source address has to be used. Unfortunately these packets appear to cause some multicast-aware switches to misbehave, e.g., by disrupting multicast packets to us. Since the multicast snooping feature still functions without sending our own queries, this patch will change the default to not send queries. For those that need queries in order to speed up convergence on start-up, a toggle is provided to restore the previous behaviour. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_sysfs_br.c')
-rw-r--r--net/bridge/br_sysfs_br.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index 766fd7fb0295..c5c059333eab 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -379,6 +379,23 @@ static ssize_t store_multicast_snooping(struct device *d,
379static DEVICE_ATTR(multicast_snooping, S_IRUGO | S_IWUSR, 379static DEVICE_ATTR(multicast_snooping, S_IRUGO | S_IWUSR,
380 show_multicast_snooping, store_multicast_snooping); 380 show_multicast_snooping, store_multicast_snooping);
381 381
382static ssize_t show_multicast_querier(struct device *d,
383 struct device_attribute *attr,
384 char *buf)
385{
386 struct net_bridge *br = to_bridge(d);
387 return sprintf(buf, "%d\n", br->multicast_querier);
388}
389
390static ssize_t store_multicast_querier(struct device *d,
391 struct device_attribute *attr,
392 const char *buf, size_t len)
393{
394 return store_bridge_parm(d, buf, len, br_multicast_set_querier);
395}
396static DEVICE_ATTR(multicast_querier, S_IRUGO | S_IWUSR,
397 show_multicast_querier, store_multicast_querier);
398
382static ssize_t show_hash_elasticity(struct device *d, 399static ssize_t show_hash_elasticity(struct device *d,
383 struct device_attribute *attr, char *buf) 400 struct device_attribute *attr, char *buf)
384{ 401{
@@ -702,6 +719,7 @@ static struct attribute *bridge_attrs[] = {
702#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 719#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
703 &dev_attr_multicast_router.attr, 720 &dev_attr_multicast_router.attr,
704 &dev_attr_multicast_snooping.attr, 721 &dev_attr_multicast_snooping.attr,
722 &dev_attr_multicast_querier.attr,
705 &dev_attr_hash_elasticity.attr, 723 &dev_attr_hash_elasticity.attr,
706 &dev_attr_hash_max.attr, 724 &dev_attr_hash_max.attr,
707 &dev_attr_multicast_last_member_count.attr, 725 &dev_attr_multicast_last_member_count.attr,