net: mscc: ocelot: transmit the VLAN filtering restrictions via extack
We need to transmit more restrictions in future patches, convert this one to netlink extack. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
01af940e9b
commit
3b95d1b293
@ -770,7 +770,7 @@ static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
|
|||||||
{
|
{
|
||||||
struct ocelot *ocelot = ds->priv;
|
struct ocelot *ocelot = ds->priv;
|
||||||
|
|
||||||
return ocelot_port_vlan_filtering(ocelot, port, enabled);
|
return ocelot_port_vlan_filtering(ocelot, port, enabled, extack);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int felix_vlan_add(struct dsa_switch *ds, int port,
|
static int felix_vlan_add(struct dsa_switch *ds, int port,
|
||||||
|
@ -223,7 +223,7 @@ static void ocelot_port_set_pvid(struct ocelot *ocelot, int port,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
|
int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
|
||||||
bool vlan_aware)
|
bool vlan_aware, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
|
struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
|
||||||
struct ocelot_port *ocelot_port = ocelot->ports[port];
|
struct ocelot_port *ocelot_port = ocelot->ports[port];
|
||||||
@ -233,8 +233,8 @@ int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
|
|||||||
list_for_each_entry(filter, &block->rules, list) {
|
list_for_each_entry(filter, &block->rules, list) {
|
||||||
if (filter->ingress_port_mask & BIT(port) &&
|
if (filter->ingress_port_mask & BIT(port) &&
|
||||||
filter->action.vid_replace_ena) {
|
filter->action.vid_replace_ena) {
|
||||||
dev_err(ocelot->dev,
|
NL_SET_ERR_MSG_MOD(extack,
|
||||||
"Cannot change VLAN state with vlan modify rules active\n");
|
"Cannot change VLAN state with vlan modify rules active");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -913,7 +913,8 @@ static int ocelot_port_attr_set(struct net_device *dev, const void *ctx,
|
|||||||
ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
|
ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
|
||||||
break;
|
break;
|
||||||
case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
|
case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
|
||||||
ocelot_port_vlan_filtering(ocelot, port, attr->u.vlan_filtering);
|
ocelot_port_vlan_filtering(ocelot, port, attr->u.vlan_filtering,
|
||||||
|
extack);
|
||||||
break;
|
break;
|
||||||
case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
|
case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
|
||||||
ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
|
ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
|
||||||
@ -1133,14 +1134,15 @@ static int ocelot_switchdev_sync(struct ocelot *ocelot, int port,
|
|||||||
ocelot_port_attr_ageing_set(ocelot, port, ageing_time);
|
ocelot_port_attr_ageing_set(ocelot, port, ageing_time);
|
||||||
|
|
||||||
return ocelot_port_vlan_filtering(ocelot, port,
|
return ocelot_port_vlan_filtering(ocelot, port,
|
||||||
br_vlan_enabled(bridge_dev));
|
br_vlan_enabled(bridge_dev),
|
||||||
|
extack);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ocelot_switchdev_unsync(struct ocelot *ocelot, int port)
|
static int ocelot_switchdev_unsync(struct ocelot *ocelot, int port)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = ocelot_port_vlan_filtering(ocelot, port, false);
|
err = ocelot_port_vlan_filtering(ocelot, port, false, NULL);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -807,7 +807,8 @@ int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset);
|
|||||||
int ocelot_get_ts_info(struct ocelot *ocelot, int port,
|
int ocelot_get_ts_info(struct ocelot *ocelot, int port,
|
||||||
struct ethtool_ts_info *info);
|
struct ethtool_ts_info *info);
|
||||||
void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
|
void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
|
||||||
int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled);
|
int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled,
|
||||||
|
struct netlink_ext_ack *extack);
|
||||||
void ocelot_bridge_stp_state_set(struct ocelot *ocelot, int port, u8 state);
|
void ocelot_bridge_stp_state_set(struct ocelot *ocelot, int port, u8 state);
|
||||||
void ocelot_apply_bridge_fwd_mask(struct ocelot *ocelot);
|
void ocelot_apply_bridge_fwd_mask(struct ocelot *ocelot);
|
||||||
int ocelot_port_pre_bridge_flags(struct ocelot *ocelot, int port,
|
int ocelot_port_pre_bridge_flags(struct ocelot *ocelot, int port,
|
||||||
|
Loading…
Reference in New Issue
Block a user