mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-17 23:39:05 -05:00
mlxsw: spectrum_router: Extract a helper for RIF migration
RIF configuration contains a number of parameters that cannot be changed after the RIF is created. For the IPIP loopbacks, this is currently worked around by creating a new RIF with the desired configuration changes applied, and updating next hops to the new RIF, and then destroying the old RIF. This operation will be useful as a reusable atom, so extract a helper to that effect. Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Amit Cohen <amcohen@nvidia.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
33d11c4e5c
commit
440273e763
@@ -1651,6 +1651,17 @@ static void mlxsw_sp_netdevice_ipip_ol_down_event(struct mlxsw_sp *mlxsw_sp,
|
||||
static void mlxsw_sp_nexthop_rif_migrate(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_rif *old_rif,
|
||||
struct mlxsw_sp_rif *new_rif);
|
||||
static void mlxsw_sp_rif_migrate_destroy(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_rif *old_rif,
|
||||
struct mlxsw_sp_rif *new_rif,
|
||||
bool migrate_nhs)
|
||||
{
|
||||
if (migrate_nhs)
|
||||
mlxsw_sp_nexthop_rif_migrate(mlxsw_sp, old_rif, new_rif);
|
||||
|
||||
mlxsw_sp_rif_destroy(old_rif);
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp_ipip_entry_ol_lb_update(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_ipip_entry *ipip_entry,
|
||||
@@ -1668,12 +1679,8 @@ mlxsw_sp_ipip_entry_ol_lb_update(struct mlxsw_sp *mlxsw_sp,
|
||||
return PTR_ERR(new_lb_rif);
|
||||
ipip_entry->ol_lb = new_lb_rif;
|
||||
|
||||
if (keep_encap)
|
||||
mlxsw_sp_nexthop_rif_migrate(mlxsw_sp, &old_lb_rif->common,
|
||||
&new_lb_rif->common);
|
||||
|
||||
mlxsw_sp_rif_destroy(&old_lb_rif->common);
|
||||
|
||||
mlxsw_sp_rif_migrate_destroy(mlxsw_sp, &old_lb_rif->common,
|
||||
&new_lb_rif->common, keep_encap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user