requester: support multi-host MCTP devices hot plug

Currently, pldmd listens for new MCTP endpoint exposed by mctpd, but
they only shows their EID, Network Id, and SupportedMessageTypes, which
cannot fulfill some requirements, e.g., get the device's name or check
the host slot number which contains the MCTP endpoint in multi-host
system.

In openbmc, the additional information are exposed by Entity Manager,
so that we add ConfigurationDiscoveryHandler, search for Entity
Manager's configuration when a new MCTP endpoint has been register by
mctpd.

Objects who want to obtain the configuration can include the
ConfigurationDiscoveryHandler as their attribute, get the configuration
when needed.

TESTED:
A series of unit test case to simulate the response of dbus call,
confirm that the configurations are successfully stored.

Change-Id: I59b8bf434576cbdea651848a8da11e5b870e2dfa
Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Signed-off-by: MandyMCHung <mandy.hung.wiwynn@gmail.com>
Signed-off-by: LioraGuo-wiwynn <liora.guo.wiwynn@gmail.com>
Signed-off-by: Unive Tien <unive.tien.wiwynn@gmail.com>
diff --git a/common/test/mocked_utils.hpp b/common/test/mocked_utils.hpp
index 8e887a5..4d5de74 100644
--- a/common/test/mocked_utils.hpp
+++ b/common/test/mocked_utils.hpp
@@ -72,4 +72,8 @@
     MOCK_METHOD(pldm::utils::GetSubTreePathsResponse, getSubTreePaths,
                 (const std::string&, int, const std::vector<std::string>&),
                 (const override));
+
+    MOCK_METHOD(pldm::utils::PropertyMap, getAll,
+                (const std::string&, const std::string&, const std::string&),
+                (const override));
 };
diff --git a/common/types.hpp b/common/types.hpp
index 42d626b..301d08b 100644
--- a/common/types.hpp
+++ b/common/types.hpp
@@ -68,9 +68,9 @@
 using Interfaces = std::vector<std::string>;
 using Property = std::string;
 using PropertyType = std::string;
-using Value =
-    std::variant<bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t,
-                 uint64_t, double, std::string, std::vector<uint8_t>>;
+using Value = std::variant<bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t,
+                           int64_t, uint64_t, double, std::string,
+                           std::vector<uint8_t>, std::vector<uint64_t>>;
 
 using PropertyMap = std::map<Property, Value>;
 using InterfaceMap = std::map<Interface, PropertyMap>;
diff --git a/common/utils.cpp b/common/utils.cpp
index a5792f5..9e621f1 100644
--- a/common/utils.cpp
+++ b/common/utils.cpp
@@ -427,6 +427,23 @@
     return bus.call(method, dbusTimeout).unpack<PropertyMap>();
 }
 
+PropertyMap DBusHandler::getAll(const std::string& service,
+                                const std::string& objPath,
+                                const std::string& dbusInterface) const
+{
+    auto& bus = DBusHandler::getBus();
+    auto method =
+        bus.new_method_call(service.c_str(), objPath.c_str(),
+                            "org.freedesktop.DBus.Properties", "GetAll");
+    method.append(dbusInterface);
+
+    auto response = bus.call(method);
+    PropertyMap result{};
+    response.read(result);
+
+    return result;
+}
+
 PropertyValue jsonEntryToDbusVal(std::string_view type,
                                  const nlohmann::json& value)
 {
diff --git a/common/utils.hpp b/common/utils.hpp
index bfae329..1b029cb 100644
--- a/common/utils.hpp
+++ b/common/utils.hpp
@@ -174,7 +174,7 @@
 using PropertyValue =
     std::variant<bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t,
                  uint64_t, double, std::string, std::vector<uint8_t>,
-                 std::vector<std::string>>;
+                 std::vector<uint64_t>, std::vector<std::string>>;
 using DbusProp = std::string;
 using DbusChangedProps = std::map<DbusProp, PropertyValue>;
 using DBusInterfaceAdded = std::vector<
@@ -232,6 +232,10 @@
     virtual PropertyMap
         getDbusPropertiesVariant(const char* serviceName, const char* objPath,
                                  const char* dbusInterface) const = 0;
+
+    virtual PropertyMap getAll(const std::string& service,
+                               const std::string& objPath,
+                               const std::string& dbusInterface) const = 0;
 };
 
 /**
@@ -338,6 +342,9 @@
         getDbusPropertiesVariant(const char* serviceName, const char* objPath,
                                  const char* dbusInterface) const override;
 
+    PropertyMap getAll(const std::string& service, const std::string& objPath,
+                       const std::string& dbusInterface) const override;
+
     /** @brief The template function to get property from the requested dbus
      *         path
      *