Commit f284424d authored by Petr Machata's avatar Petr Machata Committed by Jakub Kicinski
Browse files

net: bridge: Extract a helper to handle bridge_binding toggles



Currently, the BROPT_VLAN_BRIDGE_BINDING bridge option is only toggled when
VLAN devices are added on top of a bridge or removed from it. Extract the
toggling of the option to a function so that it could be invoked by a
subsequent patch when the state of an upper VLAN device changes.

Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/a7455f6fe1dfa7b13126ed8a7fb33d3b611eecb8.1734540770.git.petrm@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 05dd04b2
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -1664,6 +1664,18 @@ static void br_vlan_set_all_vlan_dev_state(struct net_bridge_port *p)
	}
}

static void br_vlan_toggle_bridge_binding(struct net_device *br_dev,
					  bool enable)
{
	struct net_bridge *br = netdev_priv(br_dev);

	if (enable)
		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true);
	else
		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING,
			      br_vlan_has_upper_bind_vlan_dev(br_dev));
}

static void br_vlan_upper_change(struct net_device *dev,
				 struct net_device *upper_dev,
				 bool linking)
@@ -1673,13 +1685,9 @@ static void br_vlan_upper_change(struct net_device *dev,
	if (!br_vlan_is_bind_vlan_dev(upper_dev))
		return;

	if (linking) {
	br_vlan_toggle_bridge_binding(dev, linking);
	if (linking)
		br_vlan_set_vlan_dev_state(br, upper_dev);
		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING, true);
	} else {
		br_opt_toggle(br, BROPT_VLAN_BRIDGE_BINDING,
			      br_vlan_has_upper_bind_vlan_dev(dev));
	}
}

struct br_vlan_link_state_walk_data {