1 #include "resource_dump_entry.hpp" 2 3 #include "dump_utils.hpp" 4 #include "host_transport_exts.hpp" 5 #include "op_dump_consts.hpp" 6 7 #include <fmt/core.h> 8 9 #include <phosphor-logging/elog-errors.hpp> 10 #include <xyz/openbmc_project/Common/error.hpp> 11 12 namespace openpower 13 { 14 namespace dump 15 { 16 namespace resource 17 { 18 // TODO #ibm-openbmc/issues/2859 19 // Revisit host transport impelementation 20 // This value is used to identify the dump in the transport layer to host, 21 constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 9; 22 using namespace phosphor::logging; 23 24 void Entry::initiateOffload(std::string uri) 25 { 26 using NotAllowed = 27 sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed; 28 using Reason = xyz::openbmc_project::Common::NotAllowed::REASON; 29 log<level::INFO>( 30 fmt::format( 31 "Resource dump offload request id({}) uri({}) source dumpid({})", 32 id, uri, sourceDumpId()) 33 .c_str()); 34 35 if (!phosphor::dump::isHostRunning()) 36 { 37 elog<NotAllowed>( 38 Reason("This dump can be offloaded only when the host is up")); 39 return; 40 } 41 phosphor::dump::Entry::initiateOffload(uri); 42 phosphor::dump::host::requestOffload(sourceDumpId()); 43 } 44 45 void Entry::delete_() 46 { 47 auto srcDumpID = sourceDumpId(); 48 auto dumpId = id; 49 50 if ((!offloadUri().empty()) && (phosphor::dump::isHostRunning())) 51 { 52 log<level::ERR>( 53 fmt::format("Dump offload is in progress, cannot delete " 54 "dump, id({}) srcdumpid({})", 55 dumpId, srcDumpID) 56 .c_str()); 57 elog<sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed>( 58 xyz::openbmc_project::Common::NotAllowed::REASON( 59 "Dump offload is in progress")); 60 } 61 62 log<level::INFO>(fmt::format("Resource dump delete id({}) srcdumpid({})", 63 dumpId, srcDumpID) 64 .c_str()); 65 // Remove Dump entry D-bus object 66 phosphor::dump::Entry::delete_(); 67 68 // Remove resource dump when host is up by using source dump id 69 // which is present in resource dump entry dbus object as a property. 70 if ((phosphor::dump::isHostRunning()) && (srcDumpID != INVALID_SOURCE_ID)) 71 { 72 phosphor::dump::host::requestDelete(srcDumpID, 73 TRANSPORT_DUMP_TYPE_IDENTIFIER); 74 } 75 } 76 } // namespace resource 77 } // namespace dump 78 } // namespace openpower 79