From: Ido Schimmel <ido...@nvidia.com>

Nexthops that need to be programmed with a trap action might not have a
valid router interface (RIF) associated with them. Therefore, use the
loopback RIF created during initialization to program them to the
device.

Signed-off-by: Ido Schimmel <ido...@nvidia.com>
Reviewed-by: Petr Machata <pe...@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 3ad1e1bd2197..d09a76866a5f 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -3411,10 +3411,13 @@ static int __mlxsw_sp_nexthop_update(struct mlxsw_sp 
*mlxsw_sp, u32 adj_index,
 {
        struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry;
        char ratr_pl[MLXSW_REG_RATR_LEN];
+       u16 rif_index;
 
+       rif_index = nh->rif ? nh->rif->rif_index :
+                             mlxsw_sp->router->lb_rif_index;
        mlxsw_reg_ratr_pack(ratr_pl, MLXSW_REG_RATR_OP_WRITE_WRITE_ENTRY,
                            true, MLXSW_REG_RATR_TYPE_ETHERNET,
-                           adj_index, nh->rif->rif_index);
+                           adj_index, rif_index);
        if (nh->action == MLXSW_SP_NEXTHOP_ACTION_DISCARD)
                mlxsw_reg_ratr_trap_action_set(ratr_pl,
                                               
MLXSW_REG_RATR_TRAP_ACTION_DISCARD_ERRORS);
-- 
2.29.2

Reply via email to