net: bridge: propagate extack through switchdev_port_attr_set
The benefit is the ability to propagate errors from switchdev drivers for the SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING and SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL attributes. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
9e781401cb
commit
dcbdf1350e
@@ -820,7 +820,7 @@ int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val,
|
||||
if (br_opt_get(br, BROPT_VLAN_ENABLED) == !!val)
|
||||
return 0;
|
||||
|
||||
err = switchdev_port_attr_set(br->dev, &attr);
|
||||
err = switchdev_port_attr_set(br->dev, &attr, extack);
|
||||
if (err && err != -EOPNOTSUPP)
|
||||
return err;
|
||||
|
||||
@@ -850,7 +850,8 @@ int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(br_vlan_get_proto);
|
||||
|
||||
int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
|
||||
int __br_vlan_set_proto(struct net_bridge *br, __be16 proto,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct switchdev_attr attr = {
|
||||
.orig_dev = br->dev,
|
||||
@@ -867,7 +868,7 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
|
||||
if (br->vlan_proto == proto)
|
||||
return 0;
|
||||
|
||||
err = switchdev_port_attr_set(br->dev, &attr);
|
||||
err = switchdev_port_attr_set(br->dev, &attr, extack);
|
||||
if (err && err != -EOPNOTSUPP)
|
||||
return err;
|
||||
|
||||
@@ -897,7 +898,7 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
|
||||
|
||||
err_filt:
|
||||
attr.u.vlan_protocol = ntohs(oldproto);
|
||||
switchdev_port_attr_set(br->dev, &attr);
|
||||
switchdev_port_attr_set(br->dev, &attr, NULL);
|
||||
|
||||
list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist)
|
||||
vlan_vid_del(p->dev, proto, vlan->vid);
|
||||
@@ -917,7 +918,7 @@ int br_vlan_set_proto(struct net_bridge *br, unsigned long val,
|
||||
if (!eth_type_vlan(htons(val)))
|
||||
return -EPROTONOSUPPORT;
|
||||
|
||||
return __br_vlan_set_proto(br, htons(val));
|
||||
return __br_vlan_set_proto(br, htons(val), extack);
|
||||
}
|
||||
|
||||
int br_vlan_set_stats(struct net_bridge *br, unsigned long val)
|
||||
@@ -1165,7 +1166,7 @@ int nbp_vlan_init(struct net_bridge_port *p, struct netlink_ext_ack *extack)
|
||||
if (!vg)
|
||||
goto out;
|
||||
|
||||
ret = switchdev_port_attr_set(p->dev, &attr);
|
||||
ret = switchdev_port_attr_set(p->dev, &attr, extack);
|
||||
if (ret && ret != -EOPNOTSUPP)
|
||||
goto err_vlan_enabled;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user