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

Commit 90e0f0c1 authored by Nogah Frankel's avatar Nogah Frankel Committed by David S. Miller
Browse files

mlxsw: spectrum: Update mc_disabled flag by switchdev attr



Add a function to update mc_disabled from switchdev attr
SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED

Signed-off-by: default avatarNogah Frankel <nogahf@mellanox.com>
Signed-off-by: default avatarYotam Gigi <yotamg@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e5d9432
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -274,6 +274,30 @@ static int mlxsw_sp_port_flood_table_set(struct mlxsw_sp_port *mlxsw_sp_port,
	return err;
}

static int mlxsw_sp_port_mc_disabled_set(struct mlxsw_sp_port *mlxsw_sp_port,
					 struct switchdev_trans *trans,
					 bool mc_disabled)
{
	int set;
	int err = 0;

	if (switchdev_trans_ph_prepare(trans))
		return 0;

	if (mlxsw_sp_port->mc_router != mlxsw_sp_port->mc_flood) {
		set = mc_disabled ?
			mlxsw_sp_port->mc_flood : mlxsw_sp_port->mc_router;
		err = mlxsw_sp_port_flood_table_set(mlxsw_sp_port,
						    MLXSW_SP_FLOOD_TABLE_MC,
						    set);
	}

	if (!err)
		mlxsw_sp_port->mc_disabled = mc_disabled;

	return err;
}

int mlxsw_sp_vport_flood_set(struct mlxsw_sp_port *mlxsw_sp_vport, u16 fid,
			     bool set)
{
@@ -461,6 +485,10 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev,
		err = mlxsw_sp_port_attr_mc_router_set(mlxsw_sp_port, trans,
						       attr->u.mrouter);
		break;
	case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
		err = mlxsw_sp_port_mc_disabled_set(mlxsw_sp_port, trans,
						    attr->u.mc_disabled);
		break;
	default:
		err = -EOPNOTSUPP;
		break;