Infrastructure to support single FAB feature

This commit implements infrastructure to support single FAB feature.

Single FAB feature updates the IM value of the system planar or creates
PEL based on the IM value read from the planar and cache, considering
the system mode and type.

Change-Id: I77fe927de9e37e0ba70e0f4d661a25c586911433
Signed-off-by: Rekha Aparna <vrekhaaparna@ibm.com>
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index 030f54e..be62094 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -9,6 +9,7 @@
 #include "parser.hpp"
 #include "parser_factory.hpp"
 #include "parser_interface.hpp"
+#include "single_fab.hpp"
 #include "types.hpp"
 #include "utility/dbus_utility.hpp"
 #include "utility/json_utility.hpp"
@@ -26,6 +27,21 @@
     const std::shared_ptr<sdbusplus::asio::connection>& asioConnection) :
     m_ioContext(ioCon), m_interface(iFace), m_asioConnection(asioConnection)
 {
+#ifdef IBM_SYSTEM
+    if (!dbusUtility::isChassisPowerOn())
+    {
+        SingleFab l_singleFab;
+        const int& l_rc = l_singleFab.singleFabImOverride();
+
+        if (l_rc == constants::FAILURE)
+        {
+            throw std::runtime_error(
+                std::string(__FUNCTION__) +
+                " : Found an invalid system configuration. Needs manual intervention. BMC is being quiesced.");
+        }
+    }
+#endif
+
     try
     {
 #ifdef IBM_SYSTEM