Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b72a770 authored by Elad Raz's avatar Elad Raz Committed by David S. Miller
Browse files

bridge: add vlan filtering change notification



Notifying hardware about bridge vlan-aware changes.

Signed-off-by: default avatarElad Raz <eladr@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 81435c33
Loading
Loading
Loading
Loading
+16 −2
Original line number Original line Diff line number Diff line
@@ -626,9 +626,21 @@ void br_recalculate_fwd_mask(struct net_bridge *br)


int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
{
{
	struct switchdev_attr attr = {
		.orig_dev = br->dev,
		.id = SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING,
		.flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
		.u.vlan_filtering = val,
	};
	int err;

	if (br->vlan_enabled == val)
	if (br->vlan_enabled == val)
		return 0;
		return 0;


	err = switchdev_port_attr_set(br->dev, &attr);
	if (err && err != -EOPNOTSUPP)
		return err;

	br->vlan_enabled = val;
	br->vlan_enabled = val;
	br_manage_promisc(br);
	br_manage_promisc(br);
	recalculate_group_addr(br);
	recalculate_group_addr(br);
@@ -639,13 +651,15 @@ int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)


int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
{
{
	int err;

	if (!rtnl_trylock())
	if (!rtnl_trylock())
		return restart_syscall();
		return restart_syscall();


	__br_vlan_filter_toggle(br, val);
	err = __br_vlan_filter_toggle(br, val);
	rtnl_unlock();
	rtnl_unlock();


	return 0;
	return err;
}
}


int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)