Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 300760
b: refs/heads/master
c: c5c2326
h: refs/heads/master
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Apr 15, 2012
1 parent f025491 commit edfef4a
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c83b8fab06fc8c80d6440649f117bb7541df5fd0
refs/heads/master: c5c23260594c5701af66ef754916775ba6a46bbc
20 changes: 20 additions & 0 deletions trunk/net/bridge/br_multicast.c
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,7 @@ static void br_multicast_send_query(struct net_bridge *br,
struct br_ip br_group;

if (!netif_running(br->dev) || br->multicast_disabled ||
!br->multicast_querier ||
timer_pending(&br->multicast_querier_timer))
return;

Expand Down Expand Up @@ -1565,6 +1566,7 @@ void br_multicast_init(struct net_bridge *br)
br->hash_max = 512;

br->multicast_router = 1;
br->multicast_querier = 0;
br->multicast_last_member_count = 2;
br->multicast_startup_query_count = 2;

Expand Down Expand Up @@ -1760,6 +1762,24 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val)
return err;
}

int br_multicast_set_querier(struct net_bridge *br, unsigned long val)
{
val = !!val;

spin_lock_bh(&br->multicast_lock);
if (br->multicast_querier == val)
goto unlock;

br->multicast_querier = val;
if (val)
br_multicast_start_querier(br);

unlock:
spin_unlock_bh(&br->multicast_lock);

return 0;
}

int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val)
{
int err = -ENOENT;
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/bridge/br_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ struct net_bridge
unsigned char multicast_router;

u8 multicast_disabled:1;
u8 multicast_querier:1;

u32 hash_elasticity;
u32 hash_max;
Expand Down Expand Up @@ -417,6 +418,7 @@ extern int br_multicast_set_router(struct net_bridge *br, unsigned long val);
extern int br_multicast_set_port_router(struct net_bridge_port *p,
unsigned long val);
extern int br_multicast_toggle(struct net_bridge *br, unsigned long val);
extern int br_multicast_set_querier(struct net_bridge *br, unsigned long val);
extern int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val);

static inline bool br_multicast_is_router(struct net_bridge *br)
Expand Down
18 changes: 18 additions & 0 deletions trunk/net/bridge/br_sysfs_br.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,23 @@ static ssize_t store_multicast_snooping(struct device *d,
static DEVICE_ATTR(multicast_snooping, S_IRUGO | S_IWUSR,
show_multicast_snooping, store_multicast_snooping);

static ssize_t show_multicast_querier(struct device *d,
struct device_attribute *attr,
char *buf)
{
struct net_bridge *br = to_bridge(d);
return sprintf(buf, "%d\n", br->multicast_querier);
}

static ssize_t store_multicast_querier(struct device *d,
struct device_attribute *attr,
const char *buf, size_t len)
{
return store_bridge_parm(d, buf, len, br_multicast_set_querier);
}
static DEVICE_ATTR(multicast_querier, S_IRUGO | S_IWUSR,
show_multicast_querier, store_multicast_querier);

static ssize_t show_hash_elasticity(struct device *d,
struct device_attribute *attr, char *buf)
{
Expand Down Expand Up @@ -702,6 +719,7 @@ static struct attribute *bridge_attrs[] = {
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
&dev_attr_multicast_router.attr,
&dev_attr_multicast_snooping.attr,
&dev_attr_multicast_querier.attr,
&dev_attr_hash_elasticity.attr,
&dev_attr_hash_max.attr,
&dev_attr_multicast_last_member_count.attr,
Expand Down

0 comments on commit edfef4a

Please sign in to comment.