1ac19bd68SDeepak Kodihalli #include "dbus_to_host_effecters.hpp"
2ac19bd68SDeepak Kodihalli
3c453e164SGeorge Liu #include <libpldm/pdr.h>
4c453e164SGeorge Liu #include <libpldm/platform.h>
5ac19bd68SDeepak Kodihalli
649cfb138SRiya Dixit #include <phosphor-logging/lg2.hpp>
7ac19bd68SDeepak Kodihalli #include <xyz/openbmc_project/Common/error.hpp>
87b4d59aaSPavithra Barithaya #include <xyz/openbmc_project/State/Boot/Progress/client.hpp>
9ac19bd68SDeepak Kodihalli #include <xyz/openbmc_project/State/OperatingSystem/Status/server.hpp>
10ac19bd68SDeepak Kodihalli
11ac19bd68SDeepak Kodihalli #include <fstream>
12ac19bd68SDeepak Kodihalli
1349cfb138SRiya Dixit PHOSPHOR_LOG2_USING;
1449cfb138SRiya Dixit
155079ac4aSBrad Bishop using namespace pldm::utils;
165079ac4aSBrad Bishop
17ac19bd68SDeepak Kodihalli namespace pldm
18ac19bd68SDeepak Kodihalli {
19ac19bd68SDeepak Kodihalli namespace host_effecters
20ac19bd68SDeepak Kodihalli {
21ac19bd68SDeepak Kodihalli using InternalFailure =
22ac19bd68SDeepak Kodihalli sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
23ac19bd68SDeepak Kodihalli
24ac19bd68SDeepak Kodihalli constexpr auto hostEffecterJson = "dbus_to_host_effecter.json";
25ac19bd68SDeepak Kodihalli
populatePropVals(const Json & dBusValues,std::vector<PropertyValue> & propertyValues,const std::string & propertyType)26ac19bd68SDeepak Kodihalli void HostEffecterParser::populatePropVals(
27ac19bd68SDeepak Kodihalli const Json& dBusValues, std::vector<PropertyValue>& propertyValues,
28ac19bd68SDeepak Kodihalli const std::string& propertyType)
29ac19bd68SDeepak Kodihalli
30ac19bd68SDeepak Kodihalli {
31ac19bd68SDeepak Kodihalli for (const auto& elem : dBusValues)
32ac19bd68SDeepak Kodihalli {
33ac19bd68SDeepak Kodihalli auto value = jsonEntryToDbusVal(propertyType, elem);
34ac19bd68SDeepak Kodihalli propertyValues.emplace_back(value);
35ac19bd68SDeepak Kodihalli }
36ac19bd68SDeepak Kodihalli }
37ac19bd68SDeepak Kodihalli
parseEffecterJson(const std::string & jsonPath)38ac19bd68SDeepak Kodihalli void HostEffecterParser::parseEffecterJson(const std::string& jsonPath)
39ac19bd68SDeepak Kodihalli {
40ac19bd68SDeepak Kodihalli fs::path jsonDir(jsonPath);
41ac19bd68SDeepak Kodihalli if (!fs::exists(jsonDir) || fs::is_empty(jsonDir))
42ac19bd68SDeepak Kodihalli {
43*d6e10adaSRiya Dixit error("Effecter json file for remote terminus '{PATH}' does not exist.",
44*d6e10adaSRiya Dixit "PATH", jsonPath);
45ac19bd68SDeepak Kodihalli return;
46ac19bd68SDeepak Kodihalli }
47ac19bd68SDeepak Kodihalli
48ac19bd68SDeepak Kodihalli fs::path jsonFilePath = jsonDir / hostEffecterJson;
49ac19bd68SDeepak Kodihalli if (!fs::exists(jsonFilePath))
50ac19bd68SDeepak Kodihalli {
51*d6e10adaSRiya Dixit error("Json at path '{PATH}' does not exist.", "PATH", jsonFilePath);
52ac19bd68SDeepak Kodihalli throw InternalFailure();
53ac19bd68SDeepak Kodihalli }
54ac19bd68SDeepak Kodihalli
55ac19bd68SDeepak Kodihalli std::ifstream jsonFile(jsonFilePath);
56ac19bd68SDeepak Kodihalli auto data = Json::parse(jsonFile, nullptr, false);
57ac19bd68SDeepak Kodihalli if (data.is_discarded())
58ac19bd68SDeepak Kodihalli {
59*d6e10adaSRiya Dixit error("Failed to parse json file {PATH}", "PATH", jsonFilePath);
60ac19bd68SDeepak Kodihalli throw InternalFailure();
61ac19bd68SDeepak Kodihalli }
62ac19bd68SDeepak Kodihalli const Json empty{};
63ac19bd68SDeepak Kodihalli const std::vector<Json> emptyList{};
64ac19bd68SDeepak Kodihalli
65ac19bd68SDeepak Kodihalli auto entries = data.value("entries", emptyList);
66ac19bd68SDeepak Kodihalli for (const auto& entry : entries)
67ac19bd68SDeepak Kodihalli {
68ac19bd68SDeepak Kodihalli EffecterInfo effecterInfo;
69ac19bd68SDeepak Kodihalli effecterInfo.mctpEid = entry.value("mctp_eid", 0xFF);
70ac19bd68SDeepak Kodihalli auto jsonEffecterInfo = entry.value("effecter_info", empty);
716da4f91bSPatrick Williams auto effecterId = jsonEffecterInfo.value("effecterID",
726da4f91bSPatrick Williams PLDM_INVALID_EFFECTER_ID);
73ac19bd68SDeepak Kodihalli effecterInfo.containerId = jsonEffecterInfo.value("containerID", 0);
74ac19bd68SDeepak Kodihalli effecterInfo.entityType = jsonEffecterInfo.value("entityType", 0);
756da4f91bSPatrick Williams effecterInfo.entityInstance = jsonEffecterInfo.value("entityInstance",
766da4f91bSPatrick Williams 0);
77ac19bd68SDeepak Kodihalli effecterInfo.compEffecterCnt =
78ac19bd68SDeepak Kodihalli jsonEffecterInfo.value("compositeEffecterCount", 0);
79ac19bd68SDeepak Kodihalli auto effecters = entry.value("effecters", emptyList);
80ac19bd68SDeepak Kodihalli for (const auto& effecter : effecters)
81ac19bd68SDeepak Kodihalli {
82ac19bd68SDeepak Kodihalli DBusEffecterMapping dbusInfo{};
83ac19bd68SDeepak Kodihalli auto jsonDbusInfo = effecter.value("dbus_info", empty);
84ac19bd68SDeepak Kodihalli dbusInfo.dbusMap.objectPath = jsonDbusInfo.value("object_path", "");
85ac19bd68SDeepak Kodihalli dbusInfo.dbusMap.interface = jsonDbusInfo.value("interface", "");
866da4f91bSPatrick Williams dbusInfo.dbusMap.propertyName = jsonDbusInfo.value("property_name",
876da4f91bSPatrick Williams "");
886da4f91bSPatrick Williams dbusInfo.dbusMap.propertyType = jsonDbusInfo.value("property_type",
896da4f91bSPatrick Williams "");
90ac19bd68SDeepak Kodihalli Json propertyValues = jsonDbusInfo["property_values"];
91ac19bd68SDeepak Kodihalli
92ac19bd68SDeepak Kodihalli populatePropVals(propertyValues, dbusInfo.propertyValues,
93ac19bd68SDeepak Kodihalli dbusInfo.dbusMap.propertyType);
94ac19bd68SDeepak Kodihalli
95ac19bd68SDeepak Kodihalli const std::vector<uint8_t> emptyStates{};
96ac19bd68SDeepak Kodihalli auto state = effecter.value("state", empty);
97ac19bd68SDeepak Kodihalli dbusInfo.state.stateSetId = state.value("id", 0);
98ac19bd68SDeepak Kodihalli auto states = state.value("state_values", emptyStates);
99ac19bd68SDeepak Kodihalli if (dbusInfo.propertyValues.size() != states.size())
100ac19bd68SDeepak Kodihalli {
10149cfb138SRiya Dixit error(
102*d6e10adaSRiya Dixit "Number of states do not match with number of D-Bus property values in the json. Object path at '{PATH}' and property '{PROPERTY}' will not be monitored",
103*d6e10adaSRiya Dixit "PATH", dbusInfo.dbusMap.objectPath, "PROPERTY",
104*d6e10adaSRiya Dixit dbusInfo.dbusMap.propertyName);
105ac19bd68SDeepak Kodihalli continue;
106ac19bd68SDeepak Kodihalli }
107ac19bd68SDeepak Kodihalli for (const auto& s : states)
108ac19bd68SDeepak Kodihalli {
109ac19bd68SDeepak Kodihalli dbusInfo.state.states.emplace_back(s);
110ac19bd68SDeepak Kodihalli }
111ac19bd68SDeepak Kodihalli
112ac19bd68SDeepak Kodihalli auto effecterInfoIndex = hostEffecterInfo.size();
113ac19bd68SDeepak Kodihalli auto dbusInfoIndex = effecterInfo.dbusInfo.size();
114ac19bd68SDeepak Kodihalli createHostEffecterMatch(
115ac19bd68SDeepak Kodihalli dbusInfo.dbusMap.objectPath, dbusInfo.dbusMap.interface,
116ac19bd68SDeepak Kodihalli effecterInfoIndex, dbusInfoIndex, effecterId);
117ac19bd68SDeepak Kodihalli effecterInfo.dbusInfo.emplace_back(std::move(dbusInfo));
118ac19bd68SDeepak Kodihalli }
119ac19bd68SDeepak Kodihalli hostEffecterInfo.emplace_back(std::move(effecterInfo));
120ac19bd68SDeepak Kodihalli }
121ac19bd68SDeepak Kodihalli }
122ac19bd68SDeepak Kodihalli
processHostEffecterChangeNotification(const DbusChgHostEffecterProps & chProperties,size_t effecterInfoIndex,size_t dbusInfoIndex,uint16_t effecterId)123ac19bd68SDeepak Kodihalli void HostEffecterParser::processHostEffecterChangeNotification(
124ac19bd68SDeepak Kodihalli const DbusChgHostEffecterProps& chProperties, size_t effecterInfoIndex,
125ac19bd68SDeepak Kodihalli size_t dbusInfoIndex, uint16_t effecterId)
126ac19bd68SDeepak Kodihalli {
1277b4d59aaSPavithra Barithaya using BootProgress =
1287b4d59aaSPavithra Barithaya sdbusplus::client::xyz::openbmc_project::state::boot::Progress<>;
1297b4d59aaSPavithra Barithaya
130ac19bd68SDeepak Kodihalli const auto& propertyName = hostEffecterInfo[effecterInfoIndex]
131ac19bd68SDeepak Kodihalli .dbusInfo[dbusInfoIndex]
132ac19bd68SDeepak Kodihalli .dbusMap.propertyName;
133ac19bd68SDeepak Kodihalli
134ac19bd68SDeepak Kodihalli const auto& it = chProperties.find(propertyName);
135ac19bd68SDeepak Kodihalli
136ac19bd68SDeepak Kodihalli if (it == chProperties.end())
137ac19bd68SDeepak Kodihalli {
138ac19bd68SDeepak Kodihalli return;
139ac19bd68SDeepak Kodihalli }
140ac19bd68SDeepak Kodihalli
141ac19bd68SDeepak Kodihalli if (effecterId == PLDM_INVALID_EFFECTER_ID)
142ac19bd68SDeepak Kodihalli {
143a4a96162SSampa Misra constexpr auto localOrRemote = false;
144ac19bd68SDeepak Kodihalli effecterId = findStateEffecterId(
145ac19bd68SDeepak Kodihalli pdrRepo, hostEffecterInfo[effecterInfoIndex].entityType,
146ac19bd68SDeepak Kodihalli hostEffecterInfo[effecterInfoIndex].entityInstance,
147ac19bd68SDeepak Kodihalli hostEffecterInfo[effecterInfoIndex].containerId,
148ac19bd68SDeepak Kodihalli hostEffecterInfo[effecterInfoIndex]
149ac19bd68SDeepak Kodihalli .dbusInfo[dbusInfoIndex]
150a4a96162SSampa Misra .state.stateSetId,
151a4a96162SSampa Misra localOrRemote);
152ac19bd68SDeepak Kodihalli if (effecterId == PLDM_INVALID_EFFECTER_ID)
153ac19bd68SDeepak Kodihalli {
154*d6e10adaSRiya Dixit error(
155*d6e10adaSRiya Dixit "Effecter ID '{EFFECTERID}' of entity type '{TYPE}', entityInstance '{INSTANCE}' and containerID '{CONTAINER_ID}' not found in pdr repo",
156*d6e10adaSRiya Dixit "EFFECTERID", effecterId, "TYPE",
157*d6e10adaSRiya Dixit hostEffecterInfo[effecterInfoIndex].entityType, "INSTANCE",
158*d6e10adaSRiya Dixit hostEffecterInfo[effecterInfoIndex].entityInstance,
159*d6e10adaSRiya Dixit "CONTAINER_ID",
160*d6e10adaSRiya Dixit hostEffecterInfo[effecterInfoIndex].containerId);
161ac19bd68SDeepak Kodihalli return;
162ac19bd68SDeepak Kodihalli }
163ac19bd68SDeepak Kodihalli }
164ac19bd68SDeepak Kodihalli constexpr auto hostStatePath = "/xyz/openbmc_project/state/host0";
165ac19bd68SDeepak Kodihalli
166ac19bd68SDeepak Kodihalli try
167ac19bd68SDeepak Kodihalli {
168ac19bd68SDeepak Kodihalli auto propVal = dbusHandler->getDbusPropertyVariant(
1697b4d59aaSPavithra Barithaya hostStatePath, "BootProgress", BootProgress::interface);
170e4e2e824SPatrick Williams
171e4e2e824SPatrick Williams using Stages = BootProgress::ProgressStages;
172e4e2e824SPatrick Williams auto currHostState = sdbusplus::message::convert_from_string<Stages>(
173e4e2e824SPatrick Williams std::get<std::string>(propVal))
174e4e2e824SPatrick Williams .value();
175e4e2e824SPatrick Williams
176e4e2e824SPatrick Williams if (currHostState != Stages::SystemInitComplete &&
177e4e2e824SPatrick Williams currHostState != Stages::OSRunning &&
178e4e2e824SPatrick Williams currHostState != Stages::SystemSetup)
179ac19bd68SDeepak Kodihalli {
180*d6e10adaSRiya Dixit info(
181*d6e10adaSRiya Dixit "Remote terminus is not up/active, current remote terminus state is: '{CURRENT_HOST_STATE}'",
182*d6e10adaSRiya Dixit "CURRENT_HOST_STATE", currHostState);
183ac19bd68SDeepak Kodihalli return;
184ac19bd68SDeepak Kodihalli }
185ac19bd68SDeepak Kodihalli }
18684b790cbSPatrick Williams catch (const sdbusplus::exception_t& e)
187ac19bd68SDeepak Kodihalli {
18849cfb138SRiya Dixit error(
189*d6e10adaSRiya Dixit "Error in getting current remote terminus state. Will still continue to set the remote terminus effecter, error - {ERROR}",
190*d6e10adaSRiya Dixit "ERROR", e);
191ac19bd68SDeepak Kodihalli }
192ac19bd68SDeepak Kodihalli uint8_t newState{};
193ac19bd68SDeepak Kodihalli try
194ac19bd68SDeepak Kodihalli {
1956da4f91bSPatrick Williams newState = findNewStateValue(effecterInfoIndex, dbusInfoIndex,
1966da4f91bSPatrick Williams it->second);
197ac19bd68SDeepak Kodihalli }
198ac19bd68SDeepak Kodihalli catch (const std::out_of_range& e)
199ac19bd68SDeepak Kodihalli {
200*d6e10adaSRiya Dixit error("Failed to find new state '{NEW_STATE}' in json, error - {ERROR}",
201*d6e10adaSRiya Dixit "ERROR", e, "NEW_STATE", newState);
202ac19bd68SDeepak Kodihalli return;
203ac19bd68SDeepak Kodihalli }
204ac19bd68SDeepak Kodihalli
205ac19bd68SDeepak Kodihalli std::vector<set_effecter_state_field> stateField;
206ac19bd68SDeepak Kodihalli for (uint8_t i = 0; i < hostEffecterInfo[effecterInfoIndex].compEffecterCnt;
207ac19bd68SDeepak Kodihalli i++)
208ac19bd68SDeepak Kodihalli {
209ac19bd68SDeepak Kodihalli if (i == dbusInfoIndex)
210ac19bd68SDeepak Kodihalli {
211ac19bd68SDeepak Kodihalli stateField.push_back({PLDM_REQUEST_SET, newState});
212ac19bd68SDeepak Kodihalli }
213ac19bd68SDeepak Kodihalli else
214ac19bd68SDeepak Kodihalli {
215ac19bd68SDeepak Kodihalli stateField.push_back({PLDM_NO_CHANGE, 0});
216ac19bd68SDeepak Kodihalli }
217ac19bd68SDeepak Kodihalli }
218ac19bd68SDeepak Kodihalli int rc{};
219ac19bd68SDeepak Kodihalli try
220ac19bd68SDeepak Kodihalli {
221ac19bd68SDeepak Kodihalli rc = setHostStateEffecter(effecterInfoIndex, stateField, effecterId);
222ac19bd68SDeepak Kodihalli }
223ac19bd68SDeepak Kodihalli catch (const std::runtime_error& e)
224ac19bd68SDeepak Kodihalli {
225*d6e10adaSRiya Dixit error(
226*d6e10adaSRiya Dixit "Failed to set remote terminus state effecter for effecter ID '{EFFECTERID}', error - {ERROR}",
227*d6e10adaSRiya Dixit "ERROR", e, "EFFECTERID", effecterId);
228ac19bd68SDeepak Kodihalli return;
229ac19bd68SDeepak Kodihalli }
230ac19bd68SDeepak Kodihalli if (rc != PLDM_SUCCESS)
231ac19bd68SDeepak Kodihalli {
232*d6e10adaSRiya Dixit error(
233*d6e10adaSRiya Dixit "Failed to set the remote terminus state effecter for effecter ID '{EFFECTERID}', response code '{RC}'",
234*d6e10adaSRiya Dixit "EFFECTERID", effecterId, "RC", rc);
235ac19bd68SDeepak Kodihalli }
236ac19bd68SDeepak Kodihalli }
237ac19bd68SDeepak Kodihalli
238ac19bd68SDeepak Kodihalli uint8_t
findNewStateValue(size_t effecterInfoIndex,size_t dbusInfoIndex,const PropertyValue & propertyValue)239ac19bd68SDeepak Kodihalli HostEffecterParser::findNewStateValue(size_t effecterInfoIndex,
240ac19bd68SDeepak Kodihalli size_t dbusInfoIndex,
241ac19bd68SDeepak Kodihalli const PropertyValue& propertyValue)
242ac19bd68SDeepak Kodihalli {
243ac19bd68SDeepak Kodihalli const auto& propValues = hostEffecterInfo[effecterInfoIndex]
244ac19bd68SDeepak Kodihalli .dbusInfo[dbusInfoIndex]
245ac19bd68SDeepak Kodihalli .propertyValues;
246ac19bd68SDeepak Kodihalli auto it = std::find(propValues.begin(), propValues.end(), propertyValue);
247ac19bd68SDeepak Kodihalli uint8_t newState{};
248ac19bd68SDeepak Kodihalli if (it != propValues.end())
249ac19bd68SDeepak Kodihalli {
250ac19bd68SDeepak Kodihalli auto index = std::distance(propValues.begin(), it);
251ac19bd68SDeepak Kodihalli newState = hostEffecterInfo[effecterInfoIndex]
252ac19bd68SDeepak Kodihalli .dbusInfo[dbusInfoIndex]
253ac19bd68SDeepak Kodihalli .state.states[index];
254ac19bd68SDeepak Kodihalli }
255ac19bd68SDeepak Kodihalli else
256ac19bd68SDeepak Kodihalli {
257ac19bd68SDeepak Kodihalli throw std::out_of_range("new state not found in json");
258ac19bd68SDeepak Kodihalli }
259ac19bd68SDeepak Kodihalli return newState;
260ac19bd68SDeepak Kodihalli }
261ac19bd68SDeepak Kodihalli
setHostStateEffecter(size_t effecterInfoIndex,std::vector<set_effecter_state_field> & stateField,uint16_t effecterId)262ac19bd68SDeepak Kodihalli int HostEffecterParser::setHostStateEffecter(
263ac19bd68SDeepak Kodihalli size_t effecterInfoIndex, std::vector<set_effecter_state_field>& stateField,
264ac19bd68SDeepak Kodihalli uint16_t effecterId)
265ac19bd68SDeepak Kodihalli {
266ac19bd68SDeepak Kodihalli uint8_t& mctpEid = hostEffecterInfo[effecterInfoIndex].mctpEid;
267ac19bd68SDeepak Kodihalli uint8_t& compEffCnt = hostEffecterInfo[effecterInfoIndex].compEffecterCnt;
268a330b2f0SAndrew Jeffery auto instanceId = instanceIdDb->next(mctpEid);
269ac19bd68SDeepak Kodihalli
270ac19bd68SDeepak Kodihalli std::vector<uint8_t> requestMsg(
271ac19bd68SDeepak Kodihalli sizeof(pldm_msg_hdr) + sizeof(effecterId) + sizeof(compEffCnt) +
272ac19bd68SDeepak Kodihalli sizeof(set_effecter_state_field) * compEffCnt,
273ac19bd68SDeepak Kodihalli 0);
274ac19bd68SDeepak Kodihalli auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
275ac19bd68SDeepak Kodihalli auto rc = encode_set_state_effecter_states_req(
276ac19bd68SDeepak Kodihalli instanceId, effecterId, compEffCnt, stateField.data(), request);
277ac19bd68SDeepak Kodihalli
278ac19bd68SDeepak Kodihalli if (rc != PLDM_SUCCESS)
279ac19bd68SDeepak Kodihalli {
280*d6e10adaSRiya Dixit error(
281*d6e10adaSRiya Dixit "Failed to encode set state effecter states message for effecter ID '{EFFECTERID}' and instanceID '{INSTANCE}' with response code '{RC}'",
282*d6e10adaSRiya Dixit "EFFECTERID", effecterId, "INSTANCE", instanceId, "RC", lg2::hex,
28349cfb138SRiya Dixit rc);
284a330b2f0SAndrew Jeffery instanceIdDb->free(mctpEid, instanceId);
285ac19bd68SDeepak Kodihalli return rc;
286ac19bd68SDeepak Kodihalli }
287ac19bd68SDeepak Kodihalli
2886da4f91bSPatrick Williams auto setStateEffecterStatesRespHandler =
2896da4f91bSPatrick Williams [](mctp_eid_t /*eid*/, const pldm_msg* response, size_t respMsgLen) {
290c0c79481SSampa Misra if (response == nullptr || !respMsgLen)
291ac19bd68SDeepak Kodihalli {
29249cfb138SRiya Dixit error(
293*d6e10adaSRiya Dixit "Failed to receive response for setting state effecter states.");
294c0c79481SSampa Misra return;
295ac19bd68SDeepak Kodihalli }
296ac19bd68SDeepak Kodihalli uint8_t completionCode{};
29749cfb138SRiya Dixit auto rc = decode_set_state_effecter_states_resp(response, respMsgLen,
29849cfb138SRiya Dixit &completionCode);
299c0c79481SSampa Misra if (rc)
300ac19bd68SDeepak Kodihalli {
301*d6e10adaSRiya Dixit error(
302*d6e10adaSRiya Dixit "Failed to decode response of set state effecter states, response code '{RC}'",
30349cfb138SRiya Dixit "RC", rc);
304c0c79481SSampa Misra pldm::utils::reportError(
30592fb0b55SManojkiran Eda "xyz.openbmc_project.bmc.pldm.SetHostEffecterFailed");
306ac19bd68SDeepak Kodihalli }
307c0c79481SSampa Misra if (completionCode)
308ac19bd68SDeepak Kodihalli {
309*d6e10adaSRiya Dixit error(
310*d6e10adaSRiya Dixit "Failed to set a remote terminus effecter, completion code '{CC}'",
311*d6e10adaSRiya Dixit "CC", completionCode);
312ac19bd68SDeepak Kodihalli pldm::utils::reportError(
31392fb0b55SManojkiran Eda "xyz.openbmc_project.bmc.pldm.SetHostEffecterFailed");
314c0c79481SSampa Misra }
315c0c79481SSampa Misra };
316c0c79481SSampa Misra
317c0c79481SSampa Misra rc = handler->registerRequest(
318c0c79481SSampa Misra mctpEid, instanceId, PLDM_PLATFORM, PLDM_SET_STATE_EFFECTER_STATES,
319c0c79481SSampa Misra std::move(requestMsg), std::move(setStateEffecterStatesRespHandler));
320c0c79481SSampa Misra if (rc)
321c0c79481SSampa Misra {
322*d6e10adaSRiya Dixit error(
323*d6e10adaSRiya Dixit "Failed to send request to set an effecter on remote terminus for effecter ID '{EFFECTERID}', response code '{RC}'",
324*d6e10adaSRiya Dixit "EFFECTERID", effecterId, "RC", rc);
325ac19bd68SDeepak Kodihalli }
326ac19bd68SDeepak Kodihalli return rc;
327ac19bd68SDeepak Kodihalli }
328ac19bd68SDeepak Kodihalli
createHostEffecterMatch(const std::string & objectPath,const std::string & interface,size_t effecterInfoIndex,size_t dbusInfoIndex,uint16_t effecterId)329ac19bd68SDeepak Kodihalli void HostEffecterParser::createHostEffecterMatch(const std::string& objectPath,
330ac19bd68SDeepak Kodihalli const std::string& interface,
331ac19bd68SDeepak Kodihalli size_t effecterInfoIndex,
332ac19bd68SDeepak Kodihalli size_t dbusInfoIndex,
333ac19bd68SDeepak Kodihalli uint16_t effecterId)
334ac19bd68SDeepak Kodihalli {
335ac19bd68SDeepak Kodihalli using namespace sdbusplus::bus::match::rules;
33684b790cbSPatrick Williams effecterInfoMatch.emplace_back(std::make_unique<sdbusplus::bus::match_t>(
337ac19bd68SDeepak Kodihalli pldm::utils::DBusHandler::getBus(),
338ac19bd68SDeepak Kodihalli propertiesChanged(objectPath, interface),
339ac19bd68SDeepak Kodihalli [this, effecterInfoIndex, dbusInfoIndex,
34084b790cbSPatrick Williams effecterId](sdbusplus::message_t& msg) {
341ac19bd68SDeepak Kodihalli DbusChgHostEffecterProps props;
342ac19bd68SDeepak Kodihalli std::string iface;
343ac19bd68SDeepak Kodihalli msg.read(iface, props);
34484b790cbSPatrick Williams processHostEffecterChangeNotification(props, effecterInfoIndex,
34584b790cbSPatrick Williams dbusInfoIndex, effecterId);
346ac19bd68SDeepak Kodihalli }));
347ac19bd68SDeepak Kodihalli }
348ac19bd68SDeepak Kodihalli
349ac19bd68SDeepak Kodihalli } // namespace host_effecters
350ac19bd68SDeepak Kodihalli } // namespace pldm
351