OpenPOWER: Add support for OpenPOWER dump policy

This commit introduces support for the system dump policy,
wherein 'system dump' refers to all OpenPOWER dumps.
This term encompasses all dumps from host subsystems on
OpenPOWER systems, which are collectively referred to
as system dumps. The currently supported policy is
'dump enable'. A dump will be created only if this
policy is enabled. If the policy is not enabled,
a 'dump disabled' error message will be returned.

In scenarios where the settings service is unavailable,
the system will default to considering the dump as 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/meson.build b/dump-extensions/openpower-dumps/meson.build
index abb9904..f4ef0cd 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..e8b2497
--- /dev/null
+++ b/dump-extensions/openpower-dumps/op_dump_util.cpp
@@ -0,0 +1,57 @@
+#include "op_dump_util.hpp"
+
+#include "xyz/openbmc_project/Common/error.hpp"
+#include "xyz/openbmc_project/Dump/Create/error.hpp"
+
+#include <unistd.h>
+
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/elog.hpp>
+#include <phosphor-logging/lg2.hpp>
+
+#include <filesystem>
+
+namespace openpower
+{
+namespace dump
+{
+namespace util
+{
+
+bool isOPDumpsEnabled(sdbusplus::bus::bus& 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<bool> v;
+        reply.read(v);
+        isEnabled = std::get<bool>(v);
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        lg2::error("Error: {ERROR} in getting dump policy, default is enabled",
+                   "ERROR", e);
+    }
+    return isEnabled;
+}
+
+} // 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..80c84a3
--- /dev/null
+++ b/dump-extensions/openpower-dumps/op_dump_util.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "dump_utils.hpp"
+
+namespace openpower
+{
+namespace dump
+{
+namespace util
+{
+
+/** @brief Check whether OpenPOWER dumps are enabled
+ *
+ * param[in] bus - D-Bus handle
+ *
+ * If the settings service is not running then considering as
+ * the dumps are enabled.
+ * @return true - if dumps are enabled, false - if dumps are not enabled
+ */
+bool isOPDumpsEnabled(sdbusplus::bus::bus& bus);
+
+} // namespace util
+} // namespace dump
+} // namespace openpower