#include "config.h" #include "utils.hpp" #include #include #include #include #include #include #include #include #include #include #include PHOSPHOR_LOG2_USING; using namespace phosphor::logging; using namespace sdbusplus::xyz::openbmc_project::Common::Error; using ChassisState = sdbusplus::client::xyz::openbmc_project::state::Chassis<>; int main(int argc, char** argv) { size_t chassisId = 0; const auto* objPath = ChassisState::namespace_path::value; auto chassisBusName = ChassisState::interface + std::to_string(chassisId); int arg; int optIndex = 0; static struct option longOpts[] = { {"chassis", required_argument, nullptr, 'c'}, {nullptr, 0, nullptr, 0}}; while ((arg = getopt_long(argc, argv, "c:", longOpts, &optIndex)) != -1) { switch (arg) { case 'c': chassisId = std::stoul(optarg); break; default: break; } } auto chassisName = std::string(ChassisState::namespace_path::chassis) + std::to_string(chassisId); std::string chassisPath = sdbusplus::message::object_path(objPath) / chassisName; auto bus = sdbusplus::bus::new_default(); // If the chassis power status is not good, log an error and exit with // a non-zero rc so the system does not power on auto currentPowerStatus = phosphor::state::manager::utils::getProperty( bus, chassisPath, ChassisState::interface, "CurrentPowerStatus"); if (currentPowerStatus != "xyz.openbmc_project.State.Chassis.PowerStatus.Good") { error("Chassis power status is not good: {CURRENT_PWR_STATUS}", "CURRENT_PWR_STATUS", currentPowerStatus); // Generate log telling user why system is not powering on const std::string errorMsg = "xyz.openbmc_project.State.ChassisPowerBad"; phosphor::state::manager::utils::createError( bus, errorMsg, sdbusplus::server::xyz::openbmc_project::logging::Entry::Level:: Critical); return -1; } // all good info("Chassis power status good, start power on"); return 0; }