return err;
 }
 
-static int mlxsw_sp_adj_discard_write(struct mlxsw_sp *mlxsw_sp)
-{
-       enum mlxsw_reg_ratr_trap_action trap_action;
-       char ratr_pl[MLXSW_REG_RATR_LEN];
-       int err;
-
-       if (mlxsw_sp->router->adj_discard_index_valid)
-               return 0;
-
-       err = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
-                                 &mlxsw_sp->router->adj_discard_index);
-       if (err)
-               return err;
-
-       trap_action = MLXSW_REG_RATR_TRAP_ACTION_TRAP;
-       mlxsw_reg_ratr_pack(ratr_pl, MLXSW_REG_RATR_OP_WRITE_WRITE_ENTRY, true,
-                           MLXSW_REG_RATR_TYPE_ETHERNET,
-                           mlxsw_sp->router->adj_discard_index,
-                           mlxsw_sp->router->lb_rif_index);
-       mlxsw_reg_ratr_trap_action_set(ratr_pl, trap_action);
-       mlxsw_reg_ratr_trap_id_set(ratr_pl, MLXSW_TRAP_ID_RTR_EGRESS0);
-       err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ratr), ratr_pl);
-       if (err)
-               goto err_ratr_write;
-
-       mlxsw_sp->router->adj_discard_index_valid = true;
-
-       return 0;
-
-err_ratr_write:
-       mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
-                          mlxsw_sp->router->adj_discard_index);
-       return err;
-}
-
 static int mlxsw_sp_fib_entry_op_remote(struct mlxsw_sp *mlxsw_sp,
                                        struct mlxsw_sp_fib_entry_op_ctx *op_ctx,
                                        struct mlxsw_sp_fib_entry *fib_entry,
        u16 trap_id = 0;
        u32 adjacency_index = 0;
        u16 ecmp_size = 0;
-       int err;
 
        /* In case the nexthop group adjacency index is valid, use it
         * with provided ECMP size. Otherwise, setup trap and pass
                adjacency_index = nhgi->adj_index;
                ecmp_size = nhgi->ecmp_size;
        } else if (!nhgi->adj_index_valid && nhgi->count && nhgi->nh_rif) {
-               err = mlxsw_sp_adj_discard_write(mlxsw_sp);
-               if (err)
-                       return err;
                trap_action = MLXSW_REG_RALUE_TRAP_ACTION_NOP;
-               adjacency_index = mlxsw_sp->router->adj_discard_index;
+               adjacency_index = mlxsw_sp->router->adj_trap_index;
                ecmp_size = 1;
        } else {
                trap_action = MLXSW_REG_RALUE_TRAP_ACTION_TRAP;
                        continue;
                mlxsw_sp_vr_fib_flush(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6);
        }
-
-       /* After flushing all the routes, it is not possible anyone is still
-        * using the adjacency index that is discarding packets, so free it in
-        * case it was allocated.
-        */
-       if (!mlxsw_sp->router->adj_discard_index_valid)
-               return;
-       mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 1,
-                          mlxsw_sp->router->adj_discard_index);
-       mlxsw_sp->router->adj_discard_index_valid = false;
 }
 
 struct mlxsw_sp_fib6_event {