mlxsw: spectrum_router: Extract a helper for RIF migration
authorPetr Machata <petrm@nvidia.com>
Mon, 12 Jun 2023 15:31:08 +0000 (17:31 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Wed, 14 Jun 2023 11:12:20 +0000 (13:12 +0200)
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>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 25dbdda..fdb8121 100644 (file)
@@ -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;
 }