net: bridge: add vlan mcast snooping knob
Add a global knob that controls if vlan multicast snooping is enabled. The proper contexts (vlan or bridge-wide) will be chosen based on the knob when processing packets and changing bridge device state. Note that vlans have their individual mcast snooping enabled by default, but this knob is needed to turn on bridge vlan snooping. It is disabled by default. To enable the knob vlan filtering must also be enabled, it doesn't make sense to have vlan mcast snooping without vlan filtering since that would lead to inconsistencies. Disabling vlan filtering will also automatically disable vlan mcast snooping. Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
7b54aaaf53
commit
f4b7002a70
@@ -73,6 +73,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
||||
struct net_bridge_mdb_entry *mdst;
|
||||
bool local_rcv, mcast_hit = false;
|
||||
struct net_bridge_mcast *brmctx;
|
||||
struct net_bridge_vlan *vlan;
|
||||
struct net_bridge *br;
|
||||
u16 vid = 0;
|
||||
u8 state;
|
||||
@@ -84,7 +85,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
||||
pmctx = &p->multicast_ctx;
|
||||
state = p->state;
|
||||
if (!br_allowed_ingress(p->br, nbp_vlan_group_rcu(p), skb, &vid,
|
||||
&state))
|
||||
&state, &vlan))
|
||||
goto out;
|
||||
|
||||
nbp_switchdev_frame_mark(p, skb);
|
||||
@@ -102,7 +103,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
||||
local_rcv = true;
|
||||
} else {
|
||||
pkt_type = BR_PKT_MULTICAST;
|
||||
if (br_multicast_rcv(brmctx, pmctx, skb, vid))
|
||||
if (br_multicast_rcv(&brmctx, &pmctx, vlan, skb, vid))
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user