Reorganize the setEventReceiver code
This commit is to re-organise the code to make the
setEventReceiver optional when GetTID gets called.
Currently, it is being called on every GetTID command.
This is and OEM behaviour, which was implemented at -
https://gerrit.openbmc.org/c/openbmc/pldm/+/41779/36
Also, setEventReceiver is a command defined in the platform
Spec, so rightfully placing it under the platform handler.
Signed-off-by: Sagar Srinivas <sagar.srinivas@ibm.com>
Change-Id: Ib60e9d46a8eaf4806c5ec2e9575f4e219bc80eab
diff --git a/libpldmresponder/base.cpp b/libpldmresponder/base.cpp
index e1d86ec..076d894 100644
--- a/libpldmresponder/base.cpp
+++ b/libpldmresponder/base.cpp
@@ -174,65 +174,11 @@
return response;
}
-void Handler::processSetEventReceiver(
- sdeventplus::source::EventBase& /*source */)
+void Handler::_processSetEventReceiver(sdeventplus::source::EventBase&
+ /*source */)
{
survEvent.reset();
- std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
- PLDM_SET_EVENT_RECEIVER_REQ_BYTES);
- auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
- auto instanceId = instanceIdDb.next(eid);
- uint8_t eventMessageGlobalEnable =
- PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
- uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
- uint8_t eventReceiverAddressInfo = pldm::responder::pdr::BmcMctpEid;
- uint16_t heartbeatTimer = HEARTBEAT_TIMEOUT;
-
- auto rc = encode_set_event_receiver_req(
- instanceId, eventMessageGlobalEnable, transportProtocolType,
- eventReceiverAddressInfo, heartbeatTimer, request);
- if (rc != PLDM_SUCCESS)
- {
- instanceIdDb.free(eid, instanceId);
- error("Failed to encode_set_event_receiver_req, rc = {RC}", "RC",
- lg2::hex, rc);
- return;
- }
-
- auto processSetEventReceiverResponse =
- [](mctp_eid_t /*eid*/, const pldm_msg* response, size_t respMsgLen) {
- if (response == nullptr || !respMsgLen)
- {
- error("Failed to receive response for setEventReceiver command");
- return;
- }
-
- uint8_t completionCode{};
- auto rc = decode_set_event_receiver_resp(response, respMsgLen,
- &completionCode);
- if (rc || completionCode)
- {
- error(
- "Failed to decode setEventReceiver command response, rc = {RC}, cc = {CC}",
- "RC", rc, "CC", (unsigned)completionCode);
- pldm::utils::reportError(
- "xyz.openbmc_project.bmc.pldm.InternalFailure");
- }
- };
- rc = handler->registerRequest(
- eid, instanceId, PLDM_PLATFORM, PLDM_SET_EVENT_RECEIVER,
- std::move(requestMsg), std::move(processSetEventReceiverResponse));
-
- if (rc != PLDM_SUCCESS)
- {
- error("Failed to send the setEventReceiver request");
- }
-
- if (oemPlatformHandler)
- {
- oemPlatformHandler->countSetEventReceiver();
- oemPlatformHandler->checkAndDisableWatchDog();
- }
+ oemPlatformHandler->processSetEventReceiver();
}
Response Handler::getTID(const pldm_msg* request, size_t /*payloadLength*/)
@@ -246,8 +192,11 @@
return ccOnlyResponse(request, rc);
}
- survEvent = std::make_unique<sdeventplus::source::Defer>(
- event, std::bind_front(&Handler::processSetEventReceiver, this));
+ if (oemPlatformHandler)
+ {
+ survEvent = std::make_unique<sdeventplus::source::Defer>(
+ event, std::bind_front(&Handler::_processSetEventReceiver, this));
+ }
return response;
}
diff --git a/libpldmresponder/base.hpp b/libpldmresponder/base.hpp
index 544e913..7ccac27 100644
--- a/libpldmresponder/base.hpp
+++ b/libpldmresponder/base.hpp
@@ -1,8 +1,6 @@
#pragma once
#include "libpldmresponder/platform.hpp"
-#include "pldmd/handler.hpp"
-#include "requester/handler.hpp"
#include <libpldm/base.h>
#include <stdint.h>
@@ -22,13 +20,10 @@
class Handler : public CmdHandler
{
public:
- Handler(uint8_t eid, pldm::InstanceIdDb& instanceIdDb,
- sdeventplus::Event& event,
- pldm::responder::oem_platform::Handler* oemPlatformHandler,
- pldm::requester::Handler<pldm::requester::Request>* handler) :
- eid(eid),
- instanceIdDb(instanceIdDb), event(event),
- oemPlatformHandler(oemPlatformHandler), handler(handler)
+ Handler(sdeventplus::Event& event,
+ pldm::responder::oem_platform::Handler* oemPlatformHandler) :
+ event(event),
+ oemPlatformHandler(oemPlatformHandler)
{
handlers.emplace(
PLDM_GET_PLDM_TYPES,
@@ -82,7 +77,7 @@
*
* @param[in] source - sdeventplus event source
*/
- void processSetEventReceiver(sdeventplus::source::EventBase& source);
+ void _processSetEventReceiver(sdeventplus::source::EventBase& source);
/** @brief Handler for getTID
*
@@ -93,12 +88,6 @@
Response getTID(const pldm_msg* request, size_t payloadLength);
private:
- /** @brief MCTP EID of host firmware */
- uint8_t eid;
-
- /** @brief An instance ID database for allocating instance IDs. */
- InstanceIdDb& instanceIdDb;
-
/** @brief reference of main event loop of pldmd, primarily used to schedule
* work
*/
@@ -107,9 +96,6 @@
/** @brief OEM platform handler */
pldm::responder::oem_platform::Handler* oemPlatformHandler;
- /** @brief PLDM request handler */
- pldm::requester::Handler<pldm::requester::Request>* handler;
-
/** @brief sdeventplus event source */
std::unique_ptr<sdeventplus::source::Defer> survEvent;
};
diff --git a/libpldmresponder/oem_handler.hpp b/libpldmresponder/oem_handler.hpp
index c21cf09..8bdb6fc 100644
--- a/libpldmresponder/oem_handler.hpp
+++ b/libpldmresponder/oem_handler.hpp
@@ -107,6 +107,9 @@
*/
virtual bool checkRecordHandleInRange(const uint32_t& record_handle) = 0;
+ /** @brief Interface to the process setEventReceiver*/
+ virtual void processSetEventReceiver() = 0;
+
virtual ~Handler() = default;
protected:
diff --git a/libpldmresponder/platform.cpp b/libpldmresponder/platform.cpp
index 67264c8..57315a4 100644
--- a/libpldmresponder/platform.cpp
+++ b/libpldmresponder/platform.cpp
@@ -11,6 +11,9 @@
#include "platform_numeric_effecter.hpp"
#include "platform_state_effecter.hpp"
#include "platform_state_sensor.hpp"
+#include "pldmd/dbus_impl_requester.hpp"
+#include "pldmd/handler.hpp"
+#include "requester/handler.hpp"
#include <libpldm/entity.h>
#include <libpldm/state_set.h>
@@ -930,6 +933,65 @@
return false;
}
+void Handler::setEventReceiver()
+{
+ std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
+ PLDM_SET_EVENT_RECEIVER_REQ_BYTES);
+ auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+ auto instanceId = instanceIdDb->next(eid);
+ uint8_t eventMessageGlobalEnable =
+ PLDM_EVENT_MESSAGE_GLOBAL_ENABLE_ASYNC_KEEP_ALIVE;
+ uint8_t transportProtocolType = PLDM_TRANSPORT_PROTOCOL_TYPE_MCTP;
+ uint8_t eventReceiverAddressInfo = pldm::responder::pdr::BmcMctpEid;
+ uint16_t heartbeatTimer = HEARTBEAT_TIMEOUT;
+
+ auto rc = encode_set_event_receiver_req(
+ instanceId, eventMessageGlobalEnable, transportProtocolType,
+ eventReceiverAddressInfo, heartbeatTimer, request);
+ if (rc != PLDM_SUCCESS)
+ {
+ instanceIdDb->free(eid, instanceId);
+ error("Failed to encode_set_event_receiver_req, rc = {RC}", "RC",
+ lg2::hex, rc);
+ return;
+ }
+
+ auto processSetEventReceiverResponse =
+ [](mctp_eid_t /*eid*/, const pldm_msg* response, size_t respMsgLen) {
+ if (response == nullptr || !respMsgLen)
+ {
+ error("Failed to receive response for setEventReceiver command");
+ return;
+ }
+
+ uint8_t completionCode{};
+ auto rc = decode_set_event_receiver_resp(response, respMsgLen,
+ &completionCode);
+ if (rc || completionCode)
+ {
+ error(
+ "Failed to decode setEventReceiver command response, rc = {RC}, cc = {CC}",
+ "RC", rc, "CC", (unsigned)completionCode);
+ pldm::utils::reportError(
+ "xyz.openbmc_project.bmc.pldm.InternalFailure");
+ }
+ };
+ rc = handler->registerRequest(
+ eid, instanceId, PLDM_PLATFORM, PLDM_SET_EVENT_RECEIVER,
+ std::move(requestMsg), std::move(processSetEventReceiverResponse));
+
+ if (rc != PLDM_SUCCESS)
+ {
+ error("Failed to send the setEventReceiver request");
+ }
+
+ if (oemPlatformHandler)
+ {
+ oemPlatformHandler->countSetEventReceiver();
+ oemPlatformHandler->checkAndDisableWatchDog();
+ }
+}
+
} // namespace platform
} // namespace responder
} // namespace pldm
diff --git a/libpldmresponder/platform.hpp b/libpldmresponder/platform.hpp
index eb01e5f..a5dcc44 100644
--- a/libpldmresponder/platform.hpp
+++ b/libpldmresponder/platform.hpp
@@ -48,19 +48,22 @@
class Handler : public CmdHandler
{
public:
- Handler(const pldm::utils::DBusHandler* dBusIntf,
- const std::string& pdrJsonsDir, pldm_pdr* repo,
- HostPDRHandler* hostPDRHandler,
+ Handler(const pldm::utils::DBusHandler* dBusIntf, uint8_t eid,
+ pldm::InstanceIdDb* instanceIdDb, const std::string& pdrJsonsDir,
+ pldm_pdr* repo, HostPDRHandler* hostPDRHandler,
pldm::state_sensor::DbusToPLDMEvent* dbusToPLDMEventHandler,
fru::Handler* fruHandler,
pldm::responder::oem_platform::Handler* oemPlatformHandler,
+ pldm::requester::Handler<pldm::requester::Request>* handler,
sdeventplus::Event& event, bool buildPDRLazily = false,
const std::optional<EventMap>& addOnHandlersMap = std::nullopt) :
- pdrRepo(repo),
+ eid(eid),
+ instanceIdDb(instanceIdDb), pdrRepo(repo),
hostPDRHandler(hostPDRHandler),
dbusToPLDMEventHandler(dbusToPLDMEventHandler), fruHandler(fruHandler),
dBusIntf(dBusIntf), oemPlatformHandler(oemPlatformHandler),
- event(event), pdrJsonsDir(pdrJsonsDir), pdrCreated(false)
+ handler(handler), event(event), pdrJsonsDir(pdrJsonsDir),
+ pdrCreated(false)
{
if (!buildPDRLazily)
{
@@ -464,7 +467,12 @@
*/
void _processPostGetPDRActions(sdeventplus::source::EventBase& source);
+ /** @brief Method for setEventreceiver */
+ void setEventReceiver();
+
private:
+ uint8_t eid;
+ InstanceIdDb* instanceIdDb;
pdr_utils::Repo pdrRepo;
uint16_t nextEffecterId{};
uint16_t nextSensorId{};
@@ -475,6 +483,7 @@
fru::Handler* fruHandler;
const pldm::utils::DBusHandler* dBusIntf;
pldm::responder::oem_platform::Handler* oemPlatformHandler;
+ pldm::requester::Handler<pldm::requester::Request>* handler;
sdeventplus::Event& event;
std::string pdrJsonsDir;
bool pdrCreated;
diff --git a/libpldmresponder/test/libpldmresponder_base_test.cpp b/libpldmresponder/test/libpldmresponder_base_test.cpp
index f056ec8..b1ca89d 100644
--- a/libpldmresponder/test/libpldmresponder_base_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_base_test.cpp
@@ -17,12 +17,8 @@
class TestBaseCommands : public testing::Test
{
protected:
- TestBaseCommands() :
- instanceIdDb(), event(sdeventplus::Event::get_default())
- {}
+ TestBaseCommands() : event(sdeventplus::Event::get_default()) {}
- uint8_t mctpEid = 0;
- TestInstanceIdDb instanceIdDb;
sdeventplus::Event event;
};
@@ -32,7 +28,7 @@
auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
// payload length will be 0 in this case
size_t requestPayloadLength = 0;
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getPLDMTypes(request, requestPayloadLength);
// Need to support OEM type.
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -49,7 +45,7 @@
requestPayload{};
auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
uint8_t* payload_ptr = responsePtr->payload;
@@ -66,7 +62,7 @@
request->payload[0] = 0xFF;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
uint8_t* payload_ptr = responsePtr->payload;
@@ -91,7 +87,7 @@
ASSERT_EQ(0, rc);
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getPLDMVersion(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -122,7 +118,7 @@
ASSERT_EQ(0, rc);
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getPLDMVersion(request, requestPayloadLength - 1);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -147,7 +143,7 @@
auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
size_t requestPayloadLength = 0;
- base::Handler handler(mctpEid, instanceIdDb, event, nullptr, nullptr);
+ base::Handler handler(event, nullptr);
auto response = handler.getTID(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
diff --git a/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp b/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
index 0c2b02a..6ef74b7 100644
--- a/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
@@ -30,8 +30,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -130,8 +131,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_NUMERIC_EFFECTER_PDR);
@@ -177,8 +179,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -199,8 +202,9 @@
auto inPDRRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
uint16_t entityType = 33;
uint16_t entityInstance = 0;
uint16_t containerId = 0;
diff --git a/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp b/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp
index a600c71..ae1ed3a 100644
--- a/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp
@@ -34,8 +34,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_sensor/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
@@ -85,8 +86,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_sensor/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
diff --git a/libpldmresponder/test/libpldmresponder_platform_test.cpp b/libpldmresponder/test/libpldmresponder_platform_test.cpp
index 2d52987..1bc92d5 100644
--- a/libpldmresponder/test/libpldmresponder_platform_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_platform_test.cpp
@@ -42,8 +42,9 @@
auto pdrRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", pdrRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -80,8 +81,9 @@
auto pdrRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", pdrRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -112,8 +114,9 @@
auto pdrRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", pdrRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -142,8 +145,9 @@
auto pdrRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", pdrRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -174,8 +178,9 @@
auto pdrRepo = pldm_pdr_init();
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", pdrRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -234,8 +239,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -281,8 +287,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -327,8 +334,9 @@
auto numericEffecterPdrRepo = pldm_pdr_init();
Repo numericEffecterPDRs(numericEffecterPdrRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -370,8 +378,9 @@
auto numericEffecterPdrRepo = pldm_pdr_init();
Repo numericEffecterPDRs(numericEffecterPdrRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -406,8 +415,9 @@
auto numericEffecterPdrRepo = pldm_pdr_init();
Repo numericEffecterPDRs(numericEffecterPdrRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -482,8 +492,9 @@
auto numericEffecterPdrRepo = pldm_pdr_init();
Repo numericEffecterPDRs(numericEffecterPdrRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_effecter/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -661,8 +672,8 @@
Repo outRepo(outPDRRepo);
MockdBusHandler mockedUtils;
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "", inPDRRepo, nullptr, nullptr, nullptr,
- nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "", inPDRRepo, nullptr, nullptr,
+ nullptr, nullptr, nullptr, event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_TERMINUS_LOCATOR_PDR);
@@ -706,8 +717,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_sensor/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
pdr_utils::PdrEntry e;
@@ -753,8 +765,9 @@
auto outPDRRepo = pldm_pdr_init();
Repo outRepo(outPDRRepo);
auto event = sdeventplus::Event::get_default();
- Handler handler(&mockedUtils, "./pdr_jsons/state_sensor/good", inPDRRepo,
- nullptr, nullptr, nullptr, nullptr, event);
+ Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
+ inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
pdr_utils::PdrEntry e;
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index 98903a4..d75f092 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -612,6 +612,11 @@
record_handle <= HOST_PDR_END_RANGE;
}
+void Handler::processSetEventReceiver()
+{
+ this->setEventReceiver();
+}
+
} // namespace oem_ibm_platform
} // namespace responder
} // namespace pldm
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
index 03369a4..7cf4cf0 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
@@ -203,6 +203,17 @@
*/
bool checkRecordHandleInRange(const uint32_t& record_handle);
+ /** *brief Method to call the setEventReceiver command*/
+ void processSetEventReceiver();
+
+ /** @brief Method to call the setEventReceiver through the platform
+ * handler
+ */
+ virtual void setEventReceiver()
+ {
+ platformHandler->setEventReceiver();
+ }
+
~Handler() = default;
pldm::responder::CodeUpdate* codeUpdate; //!< pointer to CodeUpdate object
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp
index c1ba345..fa68f17 100644
--- a/pldmd/pldmd.cpp
+++ b/pldmd/pldmd.cpp
@@ -269,9 +269,9 @@
// handled. To enable building FRU table, the FRU handler is passed to the
// Platform handler.
auto platformHandler = std::make_unique<platform::Handler>(
- &dbusHandler, PDR_JSONS_DIR, pdrRepo.get(), hostPDRHandler.get(),
- dbusToPLDMEventHandler.get(), fruHandler.get(),
- oemPlatformHandler.get(), event, true);
+ &dbusHandler, hostEID, &instanceIdDb, PDR_JSONS_DIR, pdrRepo.get(),
+ hostPDRHandler.get(), dbusToPLDMEventHandler.get(), fruHandler.get(),
+ oemPlatformHandler.get(), &reqHandler, event, true);
#ifdef OEM_IBM
pldm::responder::oem_ibm_platform::Handler* oemIbmPlatformHandler =
dynamic_cast<pldm::responder::oem_ibm_platform::Handler*>(
@@ -281,10 +281,8 @@
invoker.registerHandler(PLDM_BIOS, std::move(biosHandler));
invoker.registerHandler(PLDM_PLATFORM, std::move(platformHandler));
- invoker.registerHandler(
- PLDM_BASE,
- std::make_unique<base::Handler>(hostEID, instanceIdDb, event,
- oemPlatformHandler.get(), &reqHandler));
+ invoker.registerHandler(PLDM_BASE, std::make_unique<base::Handler>(
+ event, oemPlatformHandler.get()));
invoker.registerHandler(PLDM_FRU, std::move(fruHandler));
dbus_api::Pdr dbusImplPdr(bus, "/xyz/openbmc_project/pldm", pdrRepo.get());
sdbusplus::xyz::openbmc_project::PLDM::server::Event dbusImplEvent(