#include "op_dump_util.hpp" #include "dump_utils.hpp" #include "xyz/openbmc_project/Common/error.hpp" #include "xyz/openbmc_project/Dump/Create/error.hpp" #include #include #include #include #include namespace openpower { namespace dump { namespace util { bool isOPDumpsEnabled(sdbusplus::bus_t& bus) { // Set isEnabled as true by default. In a field deployment, the system dump // feature is usually enabled to facilitate effective debugging in the event // of a failure. If due to some error, the settings service couldn't provide // the actual value, the system assumes that the dump is enabled. // This approach aligns with the principle of collecting as much data as // possible for debugging in case of a system failure. auto isEnabled = true; constexpr auto enable = "xyz.openbmc_project.Object.Enable"; constexpr auto policy = "/xyz/openbmc_project/dump/system_dump_policy"; constexpr auto property = "org.freedesktop.DBus.Properties"; try { auto service = phosphor::dump::getService(bus, policy, enable); auto method = bus.new_method_call(service.c_str(), policy, property, "Get"); method.append(enable, "Enabled"); auto reply = bus.call(method); std::variant v; reply.read(v); isEnabled = std::get(v); } catch (const sdbusplus::exception::SdBusError& e) { lg2::error("Error: {ERROR} in getting dump policy, default is enabled", "ERROR", e); } return isEnabled; } BIOSAttrValueType readBIOSAttribute(const std::string& attrName, sdbusplus::bus_t& bus) { std::tuple attrVal; auto method = bus.new_method_call( "xyz.openbmc_project.BIOSConfigManager", "/xyz/openbmc_project/bios_config/manager", "xyz.openbmc_project.BIOSConfig.Manager", "GetAttribute"); method.append(attrName); try { auto result = bus.call(method); result.read(std::get<0>(attrVal), std::get<1>(attrVal), std::get<2>(attrVal)); } catch (const sdbusplus::exception::SdBusError& e) { lg2::error("Failed to read BIOS Attribute: {ATTRIBUTE_NAME}", "ATTRIBUTE_NAME", attrName); throw; } return std::get<1>(attrVal); } bool isSystemDumpInProgress(sdbusplus::bus_t& bus) { try { auto dumpInProgress = std::get( readBIOSAttribute("pvm_sys_dump_active", bus)); if (dumpInProgress == "Enabled") { lg2::info("A system dump is already in progress"); return true; } } catch (const std::bad_variant_access& ex) { lg2::error("Failed to read pvm_sys_dump_active property value due " "to bad variant access error:{ERROR}", "ERROR", ex); return false; } catch (const std::exception& ex) { lg2::error("Failed to read pvm_sys_dump_active error:{ERROR}", "ERROR", ex); return false; } lg2::info("Another system dump is not in progress"); return false; } } // namespace util } // namespace dump } // namespace openpower