Reduce multiple oem_ibm entry points in pldmd
Abstract the custom method of `OEM-IBM` into the oem-ibm.hpp file
to prevent the continuous increase of custom code and reduce multiple
`OEM-IBM` entry points in pldmd.
Tested: enabled oem-ibm and built pldm successfully.
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: Ieddb8d12281553e70bdb1c333bd29425c9d14fb0
diff --git a/libpldmresponder/base.hpp b/libpldmresponder/base.hpp
index 7ccac27..ad41299 100644
--- a/libpldmresponder/base.hpp
+++ b/libpldmresponder/base.hpp
@@ -20,10 +20,7 @@
class Handler : public CmdHandler
{
public:
- Handler(sdeventplus::Event& event,
- pldm::responder::oem_platform::Handler* oemPlatformHandler) :
- event(event),
- oemPlatformHandler(oemPlatformHandler)
+ Handler(sdeventplus::Event& event) : event(event)
{
handlers.emplace(
PLDM_GET_PLDM_TYPES,
@@ -87,6 +84,16 @@
*/
Response getTID(const pldm_msg* request, size_t payloadLength);
+ /* @brief Method to set the oem platform handler in base handler class
+ *
+ * @param[in] handler - oem platform handler
+ */
+ inline void
+ setOemPlatformHandler(pldm::responder::oem_platform::Handler* handler)
+ {
+ oemPlatformHandler = handler;
+ }
+
private:
/** @brief reference of main event loop of pldmd, primarily used to schedule
* work
@@ -94,7 +101,7 @@
sdeventplus::Event& event;
/** @brief OEM platform handler */
- pldm::responder::oem_platform::Handler* oemPlatformHandler;
+ pldm::responder::oem_platform::Handler* oemPlatformHandler = nullptr;
/** @brief sdeventplus event source */
std::unique_ptr<sdeventplus::source::Defer> survEvent;
diff --git a/libpldmresponder/fru.hpp b/libpldmresponder/fru.hpp
index 40a1517..a0757e6 100644
--- a/libpldmresponder/fru.hpp
+++ b/libpldmresponder/fru.hpp
@@ -66,11 +66,9 @@
FruImpl(const std::string& configPath,
const std::filesystem::path& fruMasterJsonPath, pldm_pdr* pdrRepo,
pldm_entity_association_tree* entityTree,
- pldm_entity_association_tree* bmcEntityTree,
- pldm::responder::oem_fru::Handler* oemFruHandler) :
+ pldm_entity_association_tree* bmcEntityTree) :
parser(configPath, fruMasterJsonPath),
- pdrRepo(pdrRepo), entityTree(entityTree), bmcEntityTree(bmcEntityTree),
- oemFruHandler(oemFruHandler)
+ pdrRepo(pdrRepo), entityTree(entityTree), bmcEntityTree(bmcEntityTree)
{}
/** @brief Total length of the FRU table in bytes, this includes the pad
@@ -201,6 +199,15 @@
*/
int setFRUTable(const std::vector<uint8_t>& fruData);
+ /* @brief Method to set the oem platform handler in fru handler class
+ *
+ * @param[in] handler - oem fru handler
+ */
+ inline void setOemFruHandler(pldm::responder::oem_fru::Handler* handler)
+ {
+ oemFruHandler = handler;
+ }
+
private:
uint16_t nextRSI()
{
@@ -224,7 +231,7 @@
pldm_pdr* pdrRepo;
pldm_entity_association_tree* entityTree;
pldm_entity_association_tree* bmcEntityTree;
- pldm::responder::oem_fru::Handler* oemFruHandler;
+ pldm::responder::oem_fru::Handler* oemFruHandler = nullptr;
dbus::ObjectValueTree objects;
std::map<dbus::ObjectPath, pldm_entity_node*> objToEntityNode{};
@@ -255,10 +262,8 @@
Handler(const std::string& configPath,
const std::filesystem::path& fruMasterJsonPath, pldm_pdr* pdrRepo,
pldm_entity_association_tree* entityTree,
- pldm_entity_association_tree* bmcEntityTree,
- pldm::responder::oem_fru::Handler* oemFruHandler) :
- impl(configPath, fruMasterJsonPath, pdrRepo, entityTree, bmcEntityTree,
- oemFruHandler)
+ pldm_entity_association_tree* bmcEntityTree) :
+ impl(configPath, fruMasterJsonPath, pdrRepo, entityTree, bmcEntityTree)
{
handlers.emplace(
PLDM_GET_FRU_RECORD_TABLE_METADATA,
@@ -340,6 +345,15 @@
*/
Response setFRURecordTable(const pldm_msg* request, size_t payloadLength);
+ /* @brief Method to set the oem platform handler in fru handler class
+ *
+ * @param[in] handler - oem fru handler
+ */
+ void setOemFruHandler(pldm::responder::oem_fru::Handler* handler)
+ {
+ impl.setOemFruHandler(handler);
+ }
+
using Table = std::vector<uint8_t>;
private:
diff --git a/libpldmresponder/platform.hpp b/libpldmresponder/platform.hpp
index 89eca61..b045d84 100644
--- a/libpldmresponder/platform.hpp
+++ b/libpldmresponder/platform.hpp
@@ -54,7 +54,6 @@
pldm_pdr* repo, HostPDRHandler* hostPDRHandler,
pldm::state_sensor::DbusToPLDMEvent* dbusToPLDMEventHandler,
fru::Handler* fruHandler,
- pldm::responder::oem_platform::Handler* oemPlatformHandler,
pldm::responder::platform_config::Handler* platformConfigHandler,
pldm::requester::Handler<pldm::requester::Request>* handler,
sdeventplus::Event& event, bool buildPDRLazily = false,
@@ -63,10 +62,9 @@
instanceIdDb(instanceIdDb), pdrRepo(repo),
hostPDRHandler(hostPDRHandler),
dbusToPLDMEventHandler(dbusToPLDMEventHandler), fruHandler(fruHandler),
- dBusIntf(dBusIntf), oemPlatformHandler(oemPlatformHandler),
- platformConfigHandler(platformConfigHandler), handler(handler),
- event(event), pdrJsonDir(pdrJsonDir), pdrCreated(false),
- pdrJsonsDir({pdrJsonDir})
+ dBusIntf(dBusIntf), platformConfigHandler(platformConfigHandler),
+ handler(handler), event(event), pdrJsonDir(pdrJsonDir),
+ pdrCreated(false), pdrJsonsDir({pdrJsonDir})
{
if (!buildPDRLazily)
{
@@ -211,6 +209,16 @@
*/
EventMap eventHandlers;
+ /* @brief Method to set the oem platform handler in platform handler class
+ *
+ * @param[in] handler - oem platform handler
+ */
+ inline void
+ setOemPlatformHandler(pldm::responder::oem_platform::Handler* handler)
+ {
+ oemPlatformHandler = handler;
+ }
+
/** @brief Handler for GetPDR
*
* @param[in] request - Request message payload
@@ -500,7 +508,7 @@
pldm::state_sensor::DbusToPLDMEvent* dbusToPLDMEventHandler;
fru::Handler* fruHandler;
const pldm::utils::DBusHandler* dBusIntf;
- pldm::responder::oem_platform::Handler* oemPlatformHandler;
+ pldm::responder::oem_platform::Handler* oemPlatformHandler = nullptr;
pldm::responder::platform_config::Handler* platformConfigHandler;
pldm::requester::Handler<pldm::requester::Request>* handler;
sdeventplus::Event& event;
diff --git a/libpldmresponder/test/libpldmresponder_base_test.cpp b/libpldmresponder/test/libpldmresponder_base_test.cpp
index b1ca89d..0387209 100644
--- a/libpldmresponder/test/libpldmresponder_base_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_base_test.cpp
@@ -28,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(event, nullptr);
+ base::Handler handler(event);
auto response = handler.getPLDMTypes(request, requestPayloadLength);
// Need to support OEM type.
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -45,7 +45,7 @@
requestPayload{};
auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
- base::Handler handler(event, nullptr);
+ base::Handler handler(event);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
uint8_t* payload_ptr = responsePtr->payload;
@@ -62,7 +62,7 @@
request->payload[0] = 0xFF;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
- base::Handler handler(event, nullptr);
+ base::Handler handler(event);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
uint8_t* payload_ptr = responsePtr->payload;
@@ -87,7 +87,7 @@
ASSERT_EQ(0, rc);
- base::Handler handler(event, nullptr);
+ base::Handler handler(event);
auto response = handler.getPLDMVersion(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -118,7 +118,7 @@
ASSERT_EQ(0, rc);
- base::Handler handler(event, nullptr);
+ base::Handler handler(event);
auto response = handler.getPLDMVersion(request, requestPayloadLength - 1);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -143,7 +143,8 @@
auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
size_t requestPayloadLength = 0;
- base::Handler handler(event, nullptr);
+ base::Handler handler(event);
+ handler.setOemPlatformHandler(nullptr);
auto response = handler.getTID(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
diff --git a/libpldmresponder/test/libpldmresponder_fru_test.cpp b/libpldmresponder/test/libpldmresponder_fru_test.cpp
index 2d7b7ec..d654fca 100644
--- a/libpldmresponder/test/libpldmresponder_fru_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_fru_test.cpp
@@ -117,7 +117,7 @@
pldm::responder::FruImpl mockedFruHandler(
FRU_JSONS_DIR, "./fru_jsons/fru_master/fru_master.json", pdrRepo.get(),
- entityTree.get(), bmcEntityTree.get(), nullptr);
+ entityTree.get(), bmcEntityTree.get());
pldm_entity systemEntity{0x2d01, 1, 0};
pldm_entity chassisEntity{0x2d, 1, 1};
@@ -170,7 +170,7 @@
InterfaceMap iface = {{"xyz.openbmc_project.Inventory.Item.Chassis", {}}};
pldm::responder::FruImpl mockedFruHandler(
FRU_JSONS_DIR, "./fru_jsons/fru_master/fru_master.json", pdrRepo.get(),
- entityTree.get(), bmcEntityTree.get(), nullptr);
+ entityTree.get(), bmcEntityTree.get());
// Good path
auto entityPtr = mockedFruHandler.getEntityByObjectPath(iface);
diff --git a/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp b/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
index ce34434..6ef74b7 100644
--- a/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_pdr_effecter_test.cpp
@@ -32,7 +32,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -133,7 +133,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_NUMERIC_EFFECTER_PDR);
@@ -181,7 +181,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -204,7 +204,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ 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 92da066..ae1ed3a 100644
--- a/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp
@@ -36,7 +36,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
@@ -88,7 +88,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ 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 35da05a..63e26e2 100644
--- a/libpldmresponder/test/libpldmresponder_platform_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_platform_test.cpp
@@ -43,7 +43,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -82,7 +82,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -115,7 +115,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -146,7 +146,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -179,7 +179,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
pdrRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo repo(pdrRepo);
ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
@@ -240,7 +240,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -288,7 +288,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
handler.getPDR(req, requestPayloadLength);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
@@ -335,7 +335,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -379,7 +379,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -416,7 +416,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -493,7 +493,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_effecter/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
@@ -750,7 +750,7 @@
MockdBusHandler mockedUtils;
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "", inPDRRepo, nullptr, nullptr,
- nullptr, nullptr, nullptr, nullptr, event);
+ nullptr, nullptr, nullptr, event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_TERMINUS_LOCATOR_PDR);
@@ -796,7 +796,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
pdr_utils::PdrEntry e;
@@ -846,7 +846,7 @@
auto event = sdeventplus::Event::get_default();
Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
- nullptr, event);
+ event);
Repo inRepo(inPDRRepo);
getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
pdr_utils::PdrEntry e;