mirror of
https://github.com/torvalds/linux.git
synced 2024-12-03 09:31:26 +00:00
mlxsw: spectrum_router: Generalize mlxsw_sp_netdevice_router_port_event()
Prepare mlxsw_sp_netdevice_router_port_event() for handling of NETDEV_PRE_CHANGEADDR. Split out the part that deals with the actual changes and call it for the two events currently handled. Signed-off-by: Petr Machata <petrm@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1caf40dec1
commit
9735f2d2fe
@ -5326,7 +5326,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *nb,
|
||||
err = mlxsw_sp_netdevice_ipip_ul_event(mlxsw_sp, dev,
|
||||
event, ptr);
|
||||
else if (event == NETDEV_CHANGEADDR || event == NETDEV_CHANGEMTU)
|
||||
err = mlxsw_sp_netdevice_router_port_event(dev);
|
||||
err = mlxsw_sp_netdevice_router_port_event(dev, event, ptr);
|
||||
else if (mlxsw_sp_is_vrf_event(event, ptr))
|
||||
err = mlxsw_sp_netdevice_vrf_event(dev, event, ptr);
|
||||
else if (mlxsw_sp_port_dev_check(dev))
|
||||
|
@ -454,7 +454,8 @@ union mlxsw_sp_l3addr {
|
||||
|
||||
int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp);
|
||||
void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp);
|
||||
int mlxsw_sp_netdevice_router_port_event(struct net_device *dev);
|
||||
int mlxsw_sp_netdevice_router_port_event(struct net_device *dev,
|
||||
unsigned long event, void *ptr);
|
||||
void mlxsw_sp_rif_macvlan_del(struct mlxsw_sp *mlxsw_sp,
|
||||
const struct net_device *macvlan_dev);
|
||||
int mlxsw_sp_inetaddr_event(struct notifier_block *unused,
|
||||
|
@ -6863,20 +6863,14 @@ static int mlxsw_sp_rif_edit(struct mlxsw_sp *mlxsw_sp, u16 rif_index,
|
||||
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ritr), ritr_pl);
|
||||
}
|
||||
|
||||
int mlxsw_sp_netdevice_router_port_event(struct net_device *dev)
|
||||
static int
|
||||
mlxsw_sp_router_port_change_event(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_rif *rif)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp;
|
||||
struct mlxsw_sp_rif *rif;
|
||||
struct net_device *dev = rif->dev;
|
||||
u16 fid_index;
|
||||
int err;
|
||||
|
||||
mlxsw_sp = mlxsw_sp_lower_get(dev);
|
||||
if (!mlxsw_sp)
|
||||
return 0;
|
||||
|
||||
rif = mlxsw_sp_rif_find_by_dev(mlxsw_sp, dev);
|
||||
if (!rif)
|
||||
return 0;
|
||||
fid_index = mlxsw_sp_fid_index(rif->fid);
|
||||
|
||||
err = mlxsw_sp_rif_fdb_op(mlxsw_sp, rif->addr, fid_index, false);
|
||||
@ -6920,6 +6914,29 @@ err_rif_edit:
|
||||
return err;
|
||||
}
|
||||
|
||||
int mlxsw_sp_netdevice_router_port_event(struct net_device *dev,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp;
|
||||
struct mlxsw_sp_rif *rif;
|
||||
|
||||
mlxsw_sp = mlxsw_sp_lower_get(dev);
|
||||
if (!mlxsw_sp)
|
||||
return 0;
|
||||
|
||||
rif = mlxsw_sp_rif_find_by_dev(mlxsw_sp, dev);
|
||||
if (!rif)
|
||||
return 0;
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_CHANGEMTU: /* fall through */
|
||||
case NETDEV_CHANGEADDR:
|
||||
return mlxsw_sp_router_port_change_event(mlxsw_sp, rif);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_vrf_join(struct mlxsw_sp *mlxsw_sp,
|
||||
struct net_device *l3_dev,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
Loading…
Reference in New Issue
Block a user