Skip to content

Commit b6cb5ac

Browse files
Nikolay Aleksandrovdavem330
authored andcommitted
net: bridge: add per-port multicast flood flag
Add a per-port flag to control the unknown multicast flood, similar to the unknown unicast flood flag and break a few long lines in the netlink flag exports. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 8addd5e commit b6cb5ac

File tree

6 files changed

+16
-4
lines changed

6 files changed

+16
-4
lines changed

include/linux/if_bridge.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ struct br_ip_list {
4545
#define BR_PROXYARP BIT(8)
4646
#define BR_LEARNING_SYNC BIT(9)
4747
#define BR_PROXYARP_WIFI BIT(10)
48+
#define BR_MCAST_FLOOD BIT(11)
4849

4950
#define BR_DEFAULT_AGEING_TIME (300 * HZ)
5051

include/uapi/linux/if_link.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ enum {
318318
IFLA_BRPORT_FLUSH,
319319
IFLA_BRPORT_MULTICAST_ROUTER,
320320
IFLA_BRPORT_PAD,
321+
IFLA_BRPORT_MCAST_FLOOD,
321322
__IFLA_BRPORT_MAX
322323
};
323324
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)

net/bridge/br_forward.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ void br_flood(struct net_bridge *br, struct sk_buff *skb,
186186
/* Do not flood unicast traffic to ports that turn it off */
187187
if (pkt_type == BR_PKT_UNICAST && !(p->flags & BR_FLOOD))
188188
continue;
189+
if (pkt_type == BR_PKT_MULTICAST &&
190+
!(p->flags & BR_MCAST_FLOOD))
191+
continue;
189192

190193
/* Do not flood to ports that enable proxy ARP */
191194
if (p->flags & BR_PROXYARP)

net/bridge/br_if.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
362362
p->path_cost = port_cost(dev);
363363
p->priority = 0x8000 >> BR_PORT_BITS;
364364
p->port_no = index;
365-
p->flags = BR_LEARNING | BR_FLOOD;
365+
p->flags = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD;
366366
br_init_port(p);
367367
br_set_state(p, BR_STATE_DISABLED);
368368
br_stp_port_timer_init(p);

net/bridge/br_netlink.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,15 @@ static int br_port_fill_attrs(struct sk_buff *skb,
169169
nla_put_u32(skb, IFLA_BRPORT_COST, p->path_cost) ||
170170
nla_put_u8(skb, IFLA_BRPORT_MODE, mode) ||
171171
nla_put_u8(skb, IFLA_BRPORT_GUARD, !!(p->flags & BR_BPDU_GUARD)) ||
172-
nla_put_u8(skb, IFLA_BRPORT_PROTECT, !!(p->flags & BR_ROOT_BLOCK)) ||
173-
nla_put_u8(skb, IFLA_BRPORT_FAST_LEAVE, !!(p->flags & BR_MULTICAST_FAST_LEAVE)) ||
172+
nla_put_u8(skb, IFLA_BRPORT_PROTECT,
173+
!!(p->flags & BR_ROOT_BLOCK)) ||
174+
nla_put_u8(skb, IFLA_BRPORT_FAST_LEAVE,
175+
!!(p->flags & BR_MULTICAST_FAST_LEAVE)) ||
174176
nla_put_u8(skb, IFLA_BRPORT_LEARNING, !!(p->flags & BR_LEARNING)) ||
175-
nla_put_u8(skb, IFLA_BRPORT_UNICAST_FLOOD, !!(p->flags & BR_FLOOD)) ||
177+
nla_put_u8(skb, IFLA_BRPORT_UNICAST_FLOOD,
178+
!!(p->flags & BR_FLOOD)) ||
179+
nla_put_u8(skb, IFLA_BRPORT_MCAST_FLOOD,
180+
!!(p->flags & BR_MCAST_FLOOD)) ||
176181
nla_put_u8(skb, IFLA_BRPORT_PROXYARP, !!(p->flags & BR_PROXYARP)) ||
177182
nla_put_u8(skb, IFLA_BRPORT_PROXYARP_WIFI,
178183
!!(p->flags & BR_PROXYARP_WIFI)) ||
@@ -630,6 +635,7 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
630635
br_set_port_flag(p, tb, IFLA_BRPORT_PROTECT, BR_ROOT_BLOCK);
631636
br_set_port_flag(p, tb, IFLA_BRPORT_LEARNING, BR_LEARNING);
632637
br_set_port_flag(p, tb, IFLA_BRPORT_UNICAST_FLOOD, BR_FLOOD);
638+
br_set_port_flag(p, tb, IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD);
633639
br_set_port_flag(p, tb, IFLA_BRPORT_PROXYARP, BR_PROXYARP);
634640
br_set_port_flag(p, tb, IFLA_BRPORT_PROXYARP_WIFI, BR_PROXYARP_WIFI);
635641

net/bridge/br_sysfs_if.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ BRPORT_ATTR_FLAG(learning, BR_LEARNING);
171171
BRPORT_ATTR_FLAG(unicast_flood, BR_FLOOD);
172172
BRPORT_ATTR_FLAG(proxyarp, BR_PROXYARP);
173173
BRPORT_ATTR_FLAG(proxyarp_wifi, BR_PROXYARP_WIFI);
174+
BRPORT_ATTR_FLAG(multicast_flood, BR_MCAST_FLOOD);
174175

175176
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
176177
static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf)

0 commit comments

Comments
 (0)