mlxsw: spectrum_router: Flood unregistered multicast packets to router
Up until now we only flooded broadcast packets to the router when an L3 interface was configured on top of a bridge. However, IPv6 Neighbour Discovery packets are trapped to the CPU inside the router and these can be sent with a multicast address. Flood unregistered multicast packets to the router port, so that relevant packets could be trapped there. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8d54814e52
commit
0d284818af
|
@ -3558,6 +3558,11 @@ static int mlxsw_sp_rif_vlan_configure(struct mlxsw_sp_rif *rif)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), true);
|
||||
if (err)
|
||||
goto err_fid_mc_flood_set;
|
||||
|
||||
err = mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_BC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), true);
|
||||
if (err)
|
||||
|
@ -3566,6 +3571,9 @@ static int mlxsw_sp_rif_vlan_configure(struct mlxsw_sp_rif *rif)
|
|||
return 0;
|
||||
|
||||
err_fid_bc_flood_set:
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
err_fid_mc_flood_set:
|
||||
mlxsw_sp_rif_vlan_fid_op(rif, MLXSW_REG_RITR_VLAN_IF, vid, false);
|
||||
return err;
|
||||
}
|
||||
|
@ -3577,6 +3585,8 @@ static void mlxsw_sp_rif_vlan_deconfigure(struct mlxsw_sp_rif *rif)
|
|||
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_BC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
mlxsw_sp_rif_vlan_fid_op(rif, MLXSW_REG_RITR_VLAN_IF, vid, false);
|
||||
}
|
||||
|
||||
|
@ -3607,6 +3617,11 @@ static int mlxsw_sp_rif_fid_configure(struct mlxsw_sp_rif *rif)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), true);
|
||||
if (err)
|
||||
goto err_fid_mc_flood_set;
|
||||
|
||||
err = mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_BC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), true);
|
||||
if (err)
|
||||
|
@ -3615,6 +3630,9 @@ static int mlxsw_sp_rif_fid_configure(struct mlxsw_sp_rif *rif)
|
|||
return 0;
|
||||
|
||||
err_fid_bc_flood_set:
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
err_fid_mc_flood_set:
|
||||
mlxsw_sp_rif_vlan_fid_op(rif, MLXSW_REG_RITR_FID_IF, fid_index, false);
|
||||
return err;
|
||||
}
|
||||
|
@ -3626,6 +3644,8 @@ static void mlxsw_sp_rif_fid_deconfigure(struct mlxsw_sp_rif *rif)
|
|||
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_BC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
mlxsw_sp_fid_flood_set(rif->fid, MLXSW_SP_FLOOD_TYPE_MC,
|
||||
mlxsw_sp_router_port(mlxsw_sp), false);
|
||||
mlxsw_sp_rif_vlan_fid_op(rif, MLXSW_REG_RITR_FID_IF, fid_index, false);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue