requester: associate Entity Manager configs with MCTP endpoints

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 which
board it belongs to.

In openbmc, the additional information are exposed by Entity
Manager[1][2], so add this ability to `MctpDiscovery, it queries the
association between MCTP endpoints and Entity Manager configurations
from MCTP Reactor, when a new MCTP endpoint has been register by mctpd.

Added unit test for this commit to validate the association does work,
passed.

[1]: https://github.com/openbmc/entity-manager/blob/master/schemas/mctp.json
[2]: https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/69111

Change-Id: Ibf1717f1840e527f21bd8397e747ae121e2dcd25
Signed-off-by: Unive Tien <unive.tien.wiwynn@gmail.com>
diff --git a/platform-mc/test/event_manager_test.cpp b/platform-mc/test/event_manager_test.cpp
index bb4706f..79aa0f4 100644
--- a/platform-mc/test/event_manager_test.cpp
+++ b/platform-mc/test/event_manager_test.cpp
@@ -171,7 +171,8 @@
 TEST_F(EventManagerTest, SetEventReceiverTest)
 {
     // Add terminus
-    auto mappedTid = terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
@@ -363,7 +364,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     terminusManager.updateMctpEndpointAvailability(
-        pldm::MctpInfo(10, "", "", 1), true);
+        pldm::MctpInfo(10, "", "", 1, std::nullopt), true);
 
     // queue SetEventReceiver response
     const size_t SetEventReceiverLen = 1;
@@ -401,7 +402,8 @@
 TEST_F(EventManagerTest, pollForPlatformEventTaskMultipartTransferTest)
 {
     // Add terminus
-    auto mappedTid = terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        terminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
@@ -493,7 +495,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     terminusManager.updateMctpEndpointAvailability(
-        pldm::MctpInfo(10, "", "", 1), true);
+        pldm::MctpInfo(10, "", "", 1, std::nullopt), true);
 
     EXPECT_CALL(eventManager, processCperEvent(_, _, _, _))
         .Times(1)
diff --git a/platform-mc/test/platform_manager_test.cpp b/platform-mc/test/platform_manager_test.cpp
index 5f0fe35..b1353e7 100644
--- a/platform-mc/test/platform_manager_test.cpp
+++ b/platform-mc/test/platform_manager_test.cpp
@@ -35,7 +35,8 @@
 TEST_F(PlatformManagerTest, initTerminusTest)
 {
     // Add terminus
-    auto mappedTid = mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
@@ -184,7 +185,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     mockTerminusManager.updateMctpEndpointAvailability(
-        pldm::MctpInfo(10, "", "", 1), true);
+        pldm::MctpInfo(10, "", "", 1, std::nullopt), true);
 
     stdexec::sync_wait(platformManager.initTerminus());
     EXPECT_EQ(true, terminus->initialized);
@@ -200,7 +201,8 @@
 TEST_F(PlatformManagerTest, parseTerminusNameTest)
 {
     // Add terminus
-    auto mappedTid = mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
@@ -349,7 +351,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     mockTerminusManager.updateMctpEndpointAvailability(
-        pldm::MctpInfo(10, "", "", 1), true);
+        pldm::MctpInfo(10, "", "", 1, std::nullopt), true);
 
     stdexec::sync_wait(platformManager.initTerminus());
     EXPECT_EQ(true, terminus->initialized);
@@ -360,7 +362,8 @@
 TEST_F(PlatformManagerTest, initTerminusDontSupportGetPDRTest)
 {
     // Add terminus
-    auto mappedTid = mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
@@ -478,7 +481,8 @@
 TEST_F(PlatformManagerTest, negativeInitTerminusTest1)
 {
     // terminus doesn't Type2 support
-    auto mappedTid = mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE, event);
@@ -496,7 +500,8 @@
 TEST_F(PlatformManagerTest, negativeInitTerminusTest2)
 {
     // terminus responses error
-    auto mappedTid = mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1));
+    auto mappedTid =
+        mockTerminusManager.mapTid(pldm::MctpInfo(10, "", "", 1, std::nullopt));
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(
         tid, 1 << PLDM_BASE | 1 << PLDM_PLATFORM, event);
diff --git a/platform-mc/test/terminus_manager_test.cpp b/platform-mc/test/terminus_manager_test.cpp
index 52abfc8..85ecb57 100644
--- a/platform-mc/test/terminus_manager_test.cpp
+++ b/platform-mc/test/terminus_manager_test.cpp
@@ -52,7 +52,7 @@
 
 TEST_F(TerminusManagerTest, mapTidTest)
 {
-    pldm::MctpInfo mctpInfo1(8, "", "", 0);
+    pldm::MctpInfo mctpInfo1(8, "", "", 0, std::nullopt);
 
     auto mappedTid1 = terminusManager.mapTid(mctpInfo1);
     EXPECT_NE(mappedTid1, std::nullopt);
@@ -73,38 +73,38 @@
 TEST_F(TerminusManagerTest, negativeMapTidTest)
 {
     // map null EID(0) to TID
-    pldm::MctpInfo m0(0, "", "", 0);
+    pldm::MctpInfo m0(0, "", "", 0, std::nullopt);
     auto mappedTid = terminusManager.mapTid(m0);
     EXPECT_EQ(mappedTid, std::nullopt);
 
     // map broadcast EID(0xff) to TID
-    pldm::MctpInfo m1(0xff, "", "", 0);
+    pldm::MctpInfo m1(0xff, "", "", 0, std::nullopt);
     mappedTid = terminusManager.mapTid(m1);
     EXPECT_EQ(mappedTid, std::nullopt);
 
     // map EID to tid which has been assigned
-    pldm::MctpInfo m2(9, "", "", 1);
-    pldm::MctpInfo m3(10, "", "", 1);
+    pldm::MctpInfo m2(9, "", "", 1, std::nullopt);
+    pldm::MctpInfo m3(10, "", "", 1, std::nullopt);
     auto mappedTid2 = terminusManager.mapTid(m2);
     auto mappedTid3 = terminusManager.storeTerminusInfo(m3, mappedTid2.value());
     EXPECT_NE(mappedTid2, std::nullopt);
     EXPECT_EQ(mappedTid3, std::nullopt);
 
     // map two mctpInfo with same EID but different network Id
-    pldm::MctpInfo m4(12, "", "", 1);
-    pldm::MctpInfo m5(12, "", "", 2);
+    pldm::MctpInfo m4(12, "", "", 1, std::nullopt);
+    pldm::MctpInfo m5(12, "", "", 2, std::nullopt);
     auto mappedTid4 = terminusManager.mapTid(m4);
     auto mappedTid5 = terminusManager.mapTid(m5);
     EXPECT_NE(mappedTid4.value(), mappedTid5.value());
 
     // map same mctpInfo twice
-    pldm::MctpInfo m6(12, "", "", 3);
+    pldm::MctpInfo m6(12, "", "", 3, std::nullopt);
     auto mappedTid6 = terminusManager.mapTid(m6);
     auto mappedTid6_1 = terminusManager.mapTid(m6);
     EXPECT_EQ(mappedTid6.value(), mappedTid6_1.value());
 
     // look up an unmapped MctpInfo to TID
-    pldm::MctpInfo m7(1, "", "", 0);
+    pldm::MctpInfo m7(1, "", "", 0, std::nullopt);
     auto mappedTid7 = terminusManager.toTid(m7);
     EXPECT_EQ(mappedTid7, std::nullopt);
 
@@ -158,7 +158,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     pldm::MctpInfos mctpInfos{};
-    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1));
+    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1, std::nullopt));
     mockTerminusManager.discoverMctpTerminus(mctpInfos);
     EXPECT_EQ(1, termini.size());
 
@@ -203,7 +203,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     pldm::MctpInfos mctpInfos{};
-    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1));
+    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1, std::nullopt));
     mockTerminusManager.discoverMctpTerminus(mctpInfos);
     EXPECT_EQ(0, termini.size());
 
@@ -279,7 +279,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     pldm::MctpInfos mctpInfos{};
-    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1));
+    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1, std::nullopt));
     mockTerminusManager.discoverMctpTerminus(mctpInfos);
     EXPECT_EQ(1, termini.size());
 
@@ -465,7 +465,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     pldm::MctpInfos mctpInfos{};
-    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1));
+    mctpInfos.emplace_back(pldm::MctpInfo(12, "", "", 1, std::nullopt));
     mockTerminusManager.discoverMctpTerminus(mctpInfos);
     EXPECT_EQ(1, termini.size());
     EXPECT_EQ(true, termini.contains(1));
@@ -544,7 +544,7 @@
 TEST_F(TerminusManagerTest, getActiveEidByNameTest)
 {
     // Add terminus
-    pldm::MctpInfo mctpInfo(10, "", "", 1);
+    pldm::MctpInfo mctpInfo(10, "", "", 1, std::nullopt);
     auto mappedTid = mockTerminusManager.mapTid(mctpInfo);
     auto tid = mappedTid.value();
     termini[tid] = std::make_shared<pldm::platform_mc::Terminus>(