1*57d41fedSJanet Adkins // SPDX-License-Identifier: Apache-2.0 2*57d41fedSJanet Adkins // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3*57d41fedSJanet Adkins #pragma once 4*57d41fedSJanet Adkins 5*57d41fedSJanet Adkins #include "async_resp.hpp" 6*57d41fedSJanet Adkins #include "dbus_utility.hpp" 7*57d41fedSJanet Adkins #include "error_messages.hpp" 8*57d41fedSJanet Adkins #include "logging.hpp" 9*57d41fedSJanet Adkins 10*57d41fedSJanet Adkins #include <asm-generic/errno.h> 11*57d41fedSJanet Adkins 12*57d41fedSJanet Adkins #include <boost/system/error_code.hpp> 13*57d41fedSJanet Adkins #include <sdbusplus/message/native_types.hpp> 14*57d41fedSJanet Adkins 15*57d41fedSJanet Adkins #include <array> 16*57d41fedSJanet Adkins #include <functional> 17*57d41fedSJanet Adkins #include <memory> 18*57d41fedSJanet Adkins #include <string> 19*57d41fedSJanet Adkins #include <string_view> 20*57d41fedSJanet Adkins 21*57d41fedSJanet Adkins namespace redfish 22*57d41fedSJanet Adkins { 23*57d41fedSJanet Adkins constexpr std::array<std::string_view, 1> fanInterface = { 24*57d41fedSJanet Adkins "xyz.openbmc_project.Inventory.Item.Fan"}; 25*57d41fedSJanet Adkins 26*57d41fedSJanet Adkins namespace fan_utils 27*57d41fedSJanet Adkins { 28*57d41fedSJanet Adkins inline void getFanPaths( 29*57d41fedSJanet Adkins const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 30*57d41fedSJanet Adkins const std::string& validChassisPath, 31*57d41fedSJanet Adkins const std::function<void(const dbus::utility::MapperGetSubTreePathsResponse& 32*57d41fedSJanet Adkins fanPaths)>& callback) 33*57d41fedSJanet Adkins { 34*57d41fedSJanet Adkins sdbusplus::message::object_path endpointPath{validChassisPath}; 35*57d41fedSJanet Adkins endpointPath /= "cooled_by"; 36*57d41fedSJanet Adkins 37*57d41fedSJanet Adkins dbus::utility::getAssociatedSubTreePaths( 38*57d41fedSJanet Adkins endpointPath, 39*57d41fedSJanet Adkins sdbusplus::message::object_path("/xyz/openbmc_project/inventory"), 0, 40*57d41fedSJanet Adkins fanInterface, 41*57d41fedSJanet Adkins [asyncResp, callback]( 42*57d41fedSJanet Adkins const boost::system::error_code& ec, 43*57d41fedSJanet Adkins const dbus::utility::MapperGetSubTreePathsResponse& subtreePaths) { 44*57d41fedSJanet Adkins if (ec) 45*57d41fedSJanet Adkins { 46*57d41fedSJanet Adkins if (ec.value() != EBADR) 47*57d41fedSJanet Adkins { 48*57d41fedSJanet Adkins BMCWEB_LOG_ERROR( 49*57d41fedSJanet Adkins "DBUS response error for getAssociatedSubTreePaths {}", 50*57d41fedSJanet Adkins ec.value()); 51*57d41fedSJanet Adkins messages::internalError(asyncResp->res); 52*57d41fedSJanet Adkins } 53*57d41fedSJanet Adkins return; 54*57d41fedSJanet Adkins } 55*57d41fedSJanet Adkins callback(subtreePaths); 56*57d41fedSJanet Adkins }); 57*57d41fedSJanet Adkins } 58*57d41fedSJanet Adkins 59*57d41fedSJanet Adkins } // namespace fan_utils 60*57d41fedSJanet Adkins } // namespace redfish 61