OpenPOWER: Add support for OpenPOWER dump policy

Add support for system dump policy, here system dump
referes to all OpenPOWER dumps, since all dumps from
host subsystems on OpenPOWER systems are known as system dumps.
Currently supported policy is dump enable. The dump will be
created only if the policy is enabled, if the dump is not
enabled, a dump disabled error will be returned.

If the settings service is not available, considering as
dump is enabled.

Tests:
- Create a dump with policy enabled
busctl --verbose call xyz.openbmc_project.Settings /xyz/openbmc_project/dump/system_dump_policy org.freedesktop.DBus.Properties Get ss "xyz.openbmc_project.Object.Enable" "Enabled"
MESSAGE "v" {
        VARIANT "b" {
                BOOLEAN true;
        };
};

busctl --verbose call xyz.openbmc_project.Dump.Manager /xyz/openbmc_project/dump/resource  xyz.openbmc_project.Dump.Create CreateDump a{sv} 2 "com.ibm.Dump.Create.CreateParameters.VSPString" s "vsp" "com.ibm.Dump.Create.CreateParameters.Password" s "password"
MESSAGE "o" {
        OBJECT_PATH "/xyz/openbmc_project/dump/resource/entry/1";
};

Result: Dump created

- Create a dump with policy disabled
busctl --verbose call xyz.openbmc_project.Settings /xyz/openbmc_project/dump/system_dump_policy org.freedesktop.DBus.Properties Get ss "xyz.openbmc_project.Object.Enable" "Enabled"
MESSAGE "v" {
        VARIANT "b" {
                BOOLEAN false;
        };
};

busctl --verbose call xyz.openbmc_project.Dump.Manager /xyz/openbmc_project/dump/resource  xyz.openbmc_project.Dump.Create CreateDump a{sv} 2 "com.ibm.Dump.Create.CreateParameters.VSPString" s "vsp" "com.ibm.Dump.Create.CreateParameters.Password" s "password"
Call failed: Dump is disabled on this system.

Result: Dump is not allowed

Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: I5dc609b1f4fd0f36df8520f8a75c18a4cd3d7c4c
diff --git a/dump-extensions/openpower-dumps/dump_manager_resource.cpp b/dump-extensions/openpower-dumps/dump_manager_resource.cpp
index 604e796..93ce98c 100644
--- a/dump-extensions/openpower-dumps/dump_manager_resource.cpp
+++ b/dump-extensions/openpower-dumps/dump_manager_resource.cpp
@@ -113,7 +113,6 @@
 sdbusplus::message::object_path
     Manager::createDump(phosphor::dump::DumpCreateParams params)
 {
-
     using NotAllowed =
         sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
     using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
diff --git a/dump-extensions/openpower-dumps/meson.build b/dump-extensions/openpower-dumps/meson.build
index abb9904..c367421 100644
--- a/dump-extensions/openpower-dumps/meson.build
+++ b/dump-extensions/openpower-dumps/meson.build
@@ -28,5 +28,6 @@
         'dump-extensions/openpower-dumps/dump_manager_system.cpp',
         'dump-extensions/openpower-dumps/system_dump_entry.cpp',
         'dump-extensions/openpower-dumps/dump_manager_resource.cpp',
-        'dump-extensions/openpower-dumps/resource_dump_entry.cpp'
+        'dump-extensions/openpower-dumps/resource_dump_entry.cpp',
+	'dump-extensions/openpower-dumps/op_dump_util.cpp'
     ]
diff --git a/dump-extensions/openpower-dumps/op_dump_util.cpp b/dump-extensions/openpower-dumps/op_dump_util.cpp
new file mode 100644
index 0000000..14377a6
--- /dev/null
+++ b/dump-extensions/openpower-dumps/op_dump_util.cpp
@@ -0,0 +1,67 @@
+#include "op_dump_util.hpp"
+
+#include "xyz/openbmc_project/Common/error.hpp"
+#include "xyz/openbmc_project/Dump/Create/error.hpp"
+
+#include <fmt/core.h>
+#include <unistd.h>
+
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/elog.hpp>
+
+#include <filesystem>
+
+namespace openpower
+{
+namespace dump
+{
+namespace util
+{
+using namespace phosphor::logging;
+using InternalFailure =
+    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+
+void isOPDumpsEnabled()
+{
+    auto enabled = 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";
+
+    using disabled =
+        sdbusplus::xyz::openbmc_project::Dump::Create::Error::Disabled;
+
+    try
+    {
+        auto bus = sdbusplus::bus::new_default();
+
+        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<bool> v;
+        reply.read(v);
+        enabled = std::get<bool>(v);
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        log<level::ERR>(
+            fmt::format("Error({}) in getting dump policy, default is enabled",
+                        e.what())
+                .c_str());
+        report<InternalFailure>();
+    }
+
+    if (!enabled)
+    {
+        log<level::ERR>("OpePOWER dumps are disabled, skipping");
+        elog<disabled>();
+    }
+    log<level::INFO>("OpenPOWER dumps are enabled");
+}
+
+} // namespace util
+} // namespace dump
+} // namespace openpower
diff --git a/dump-extensions/openpower-dumps/op_dump_util.hpp b/dump-extensions/openpower-dumps/op_dump_util.hpp
new file mode 100644
index 0000000..7a9f66a
--- /dev/null
+++ b/dump-extensions/openpower-dumps/op_dump_util.hpp
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "dump_utils.hpp"
+
+namespace openpower
+{
+namespace dump
+{
+namespace util
+{
+
+/** @brief Check whether OpenPOWER dumps are enabled
+ *
+ * A xyz.openbmc_project.Dump.Create.Error.Disabled will be thrown
+ * if the dumps are disabled.
+ * If the settings service is not running then considering as
+ * the dumps are enabled.
+ */
+void isOPDumpsEnabled();
+
+} // namespace util
+} // namespace dump
+} // namespace openpower