summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIdo Schimmel <idosch@nvidia.com>2021-03-22 17:58:50 +0200
committerDavid S. Miller <davem@davemloft.net>2021-03-22 13:45:46 -0700
commit29017c643476daf57495c2ccd1a5fdc8dc5186ea (patch)
tree99fb07b84a7284e207db54542c73a10f515b68dc
parent424603ccdd5eb00725f9080d7e8c018039816d17 (diff)
mlxsw: spectrum_router: Encapsulate nexthop update in a function
Encapsulate this functionality in a separate function, so that it could be invoked by follow-up patches, when replacing a nexthop bucket that is part of a resilient nexthop group. Signed-off-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 1f1f8af63ef7..6be225ec1997 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -3491,6 +3491,20 @@ static int mlxsw_sp_nexthop_ipip_update(struct mlxsw_sp *mlxsw_sp,
return 0;
}
+static int mlxsw_sp_nexthop_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
+ struct mlxsw_sp_nexthop *nh)
+{
+ /* When action is discard or trap, the nexthop must be
+ * programmed as an Ethernet nexthop.
+ */
+ if (nh->type == MLXSW_SP_NEXTHOP_TYPE_ETH ||
+ nh->action == MLXSW_SP_NEXTHOP_ACTION_DISCARD ||
+ nh->action == MLXSW_SP_NEXTHOP_ACTION_TRAP)
+ return mlxsw_sp_nexthop_eth_update(mlxsw_sp, adj_index, nh);
+ else
+ return mlxsw_sp_nexthop_ipip_update(mlxsw_sp, adj_index, nh);
+}
+
static int
mlxsw_sp_nexthop_group_update(struct mlxsw_sp *mlxsw_sp,
struct mlxsw_sp_nexthop_group_info *nhgi,
@@ -3511,19 +3525,7 @@ mlxsw_sp_nexthop_group_update(struct mlxsw_sp *mlxsw_sp,
if (nh->update || reallocate) {
int err = 0;
- /* When action is discard or trap, the nexthop must be
- * programmed as an Ethernet nexthop.
- */
- if (nh->type == MLXSW_SP_NEXTHOP_TYPE_ETH ||
- nh->action == MLXSW_SP_NEXTHOP_ACTION_DISCARD ||
- nh->action == MLXSW_SP_NEXTHOP_ACTION_TRAP)
- err = mlxsw_sp_nexthop_eth_update(mlxsw_sp,
- adj_index,
- nh);
- else
- err = mlxsw_sp_nexthop_ipip_update(mlxsw_sp,
- adj_index,
- nh);
+ err = mlxsw_sp_nexthop_update(mlxsw_sp, adj_index, nh);
if (err)
return err;
nh->update = 0;