net: dsa: add support for BRIDGE_MROUTER attribute
This patch adds support for enabling or disabling the flooding of unknown multicast traffic on the CPU ports, depending on the value of the switchdev SWITCHDEV_ATTR_ID_BRIDGE_MROUTER attribute. The current behavior is kept unchanged but a user can now prevent the CPU conduit to be flooded with a lot of unregistered traffic that the network stack needs to filter in software with e.g.: echo 0 > /sys/class/net/br0/multicast_router Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fbc697796e
commit
08cc83cc7f
@ -150,6 +150,8 @@ int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
|
||||
struct switchdev_trans *trans);
|
||||
int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
|
||||
struct switchdev_trans *trans);
|
||||
int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
|
||||
struct switchdev_trans *trans);
|
||||
int dsa_port_vlan_add(struct dsa_port *dp,
|
||||
const struct switchdev_obj_port_vlan *vlan,
|
||||
struct switchdev_trans *trans);
|
||||
|
@ -261,6 +261,18 @@ int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
|
||||
return err;
|
||||
}
|
||||
|
||||
int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
|
||||
struct switchdev_trans *trans)
|
||||
{
|
||||
struct dsa_switch *ds = dp->ds;
|
||||
int port = dp->index;
|
||||
|
||||
if (switchdev_trans_ph_prepare(trans))
|
||||
return ds->ops->port_egress_floods ? 0 : -EOPNOTSUPP;
|
||||
|
||||
return ds->ops->port_egress_floods(ds, port, true, mrouter);
|
||||
}
|
||||
|
||||
int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
|
||||
u16 vid)
|
||||
{
|
||||
|
@ -301,6 +301,9 @@ static int dsa_slave_port_attr_set(struct net_device *dev,
|
||||
case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
|
||||
ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, trans);
|
||||
break;
|
||||
case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
|
||||
ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter, trans);
|
||||
break;
|
||||
default:
|
||||
ret = -EOPNOTSUPP;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user