PELs: Use pldm_msg_hdr_correlate_response()

This call to ensure the PLDM response matches the PLDM request for the
'New PEL Available' command was previously missing (since it didn't
exist at the time this code was written), causing the code to think it
got the correct response when really it was someone else's.

It would then move on to the next PEL before it actually heard back
about the current one, causing issues on the host side.

Change-Id: I471d7727a2b8c77a0ffc85c15cef7531898d22d7
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/extensions/openpower-pels/pldm_interface.cpp b/extensions/openpower-pels/pldm_interface.cpp
index c8f59e2..2c11468 100644
--- a/extensions/openpower-pels/pldm_interface.cpp
+++ b/extensions/openpower-pels/pldm_interface.cpp
@@ -257,6 +257,8 @@
                    "RC", rc, "ERRNO", e);
         throw std::runtime_error{"pldm_transport_send_msg failed"};
     }
+
+    memcpy(&_requestHeader, request, sizeof(pldm_msg_hdr));
 }
 
 void PLDMInterface::receive(IO& /*io*/, int /*fd*/, uint32_t revents,
@@ -276,7 +278,8 @@
     auto rc = pldm_transport_recv_msg(transport, &pldmTID, &responseMsg,
                                       &responseSize);
     struct pldm_msg_hdr* hdr = (struct pldm_msg_hdr*)responseMsg;
-    if (pldmTID != _eid)
+    if ((pldmTID != _eid) ||
+        !pldm_msg_hdr_correlate_response(&_requestHeader, hdr))
     {
         // We got a response to someone else's message. Ignore it.
         return;
diff --git a/extensions/openpower-pels/pldm_interface.hpp b/extensions/openpower-pels/pldm_interface.hpp
index 6b33af0..5d090db 100644
--- a/extensions/openpower-pels/pldm_interface.hpp
+++ b/extensions/openpower-pels/pldm_interface.hpp
@@ -215,6 +215,11 @@
     pldm_transport* pldmTransport = nullptr;
 
     pldm_transport_mctp_demux* mctpDemux = nullptr;
+
+    /**
+     * @brief The header for the most recent request.
+     */
+    pldm_msg_hdr _requestHeader{};
 };
 
 } // namespace openpower::pels