xref: /openbmc/bmcweb/features/redfish/lib/redfish_util.hpp (revision f23b729676559f539790580930b1ff3b0c05805b)
1c5d03ff4SJennifer Lee /*
2c5d03ff4SJennifer Lee // Copyright (c) 2019 Intel Corporation
3c5d03ff4SJennifer Lee //
4c5d03ff4SJennifer Lee // Licensed under the Apache License, Version 2.0 (the "License");
5c5d03ff4SJennifer Lee // you may not use this file except in compliance with the License.
6c5d03ff4SJennifer Lee // You may obtain a copy of the License at
7c5d03ff4SJennifer Lee //
8c5d03ff4SJennifer Lee //      http://www.apache.org/licenses/LICENSE-2.0
9c5d03ff4SJennifer Lee //
10c5d03ff4SJennifer Lee // Unless required by applicable law or agreed to in writing, software
11c5d03ff4SJennifer Lee // distributed under the License is distributed on an "AS IS" BASIS,
12c5d03ff4SJennifer Lee // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c5d03ff4SJennifer Lee // See the License for the specific language governing permissions and
14c5d03ff4SJennifer Lee // limitations under the License.
15c5d03ff4SJennifer Lee */
16c5d03ff4SJennifer Lee #ifndef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
17c5d03ff4SJennifer Lee #pragma once
18c5d03ff4SJennifer Lee 
19c5d03ff4SJennifer Lee #include <node.hpp>
20c5d03ff4SJennifer Lee 
21c5d03ff4SJennifer Lee namespace redfish
22c5d03ff4SJennifer Lee {
23c5d03ff4SJennifer Lee 
24c5d03ff4SJennifer Lee template <typename CallbackFunc>
25c5d03ff4SJennifer Lee void getMainChassisId(std::shared_ptr<AsyncResp> asyncResp,
26c5d03ff4SJennifer Lee                       CallbackFunc&& callback)
27c5d03ff4SJennifer Lee {
28c5d03ff4SJennifer Lee     // Find managed chassis
29c5d03ff4SJennifer Lee     crow::connections::systemBus->async_method_call(
30c5d03ff4SJennifer Lee         [callback,
31c5d03ff4SJennifer Lee          asyncResp](const boost::system::error_code ec,
32c5d03ff4SJennifer Lee                     const crow::openbmc_mapper::GetSubTreeType& subtree) {
33c5d03ff4SJennifer Lee             if (ec)
34c5d03ff4SJennifer Lee             {
35c5d03ff4SJennifer Lee                 BMCWEB_LOG_ERROR << ec;
36c5d03ff4SJennifer Lee                 return;
37c5d03ff4SJennifer Lee             }
38c5d03ff4SJennifer Lee             if (subtree.size() == 0)
39c5d03ff4SJennifer Lee             {
40c5d03ff4SJennifer Lee                 BMCWEB_LOG_DEBUG << "Can't find chassis!";
41c5d03ff4SJennifer Lee                 return;
42c5d03ff4SJennifer Lee             }
43c5d03ff4SJennifer Lee 
44*f23b7296SEd Tanous             std::size_t idPos = subtree[0].first.rfind('/');
45c5d03ff4SJennifer Lee             if (idPos == std::string::npos ||
46c5d03ff4SJennifer Lee                 (idPos + 1) >= subtree[0].first.size())
47c5d03ff4SJennifer Lee             {
48c5d03ff4SJennifer Lee                 messages::internalError(asyncResp->res);
49c5d03ff4SJennifer Lee                 BMCWEB_LOG_DEBUG << "Can't parse chassis ID!";
50c5d03ff4SJennifer Lee                 return;
51c5d03ff4SJennifer Lee             }
52c5d03ff4SJennifer Lee             std::string chassisId = subtree[0].first.substr(idPos + 1);
53c5d03ff4SJennifer Lee             BMCWEB_LOG_DEBUG << "chassisId = " << chassisId;
54c5d03ff4SJennifer Lee             callback(chassisId, asyncResp);
55c5d03ff4SJennifer Lee         },
56c5d03ff4SJennifer Lee         "xyz.openbmc_project.ObjectMapper",
57c5d03ff4SJennifer Lee         "/xyz/openbmc_project/object_mapper",
58c5d03ff4SJennifer Lee         "xyz.openbmc_project.ObjectMapper", "GetSubTree",
59c5d03ff4SJennifer Lee         "/xyz/openbmc_project/inventory", 0,
60f857e9aeSAppaRao Puli         std::array<const char*, 2>{
61f857e9aeSAppaRao Puli             "xyz.openbmc_project.Inventory.Item.Board",
62c5d03ff4SJennifer Lee             "xyz.openbmc_project.Inventory.Item.Chassis"});
63c5d03ff4SJennifer Lee }
64c5d03ff4SJennifer Lee } // namespace redfish
65c5d03ff4SJennifer Lee #endif
66