blob: d18223a6c58dfc73da90267e0d56fc0c97d2e0cf [file] [log] [blame]
Matt Spinlerc8705e22019-09-11 12:36:07 -05001#pragma once
2
Matt Spinler2a28c932020-02-03 14:23:40 -06003#include "dbus_types.hpp"
4#include "dbus_watcher.hpp"
5
Matt Spinler4dcd3f42020-01-22 14:55:07 -06006#include <filesystem>
Matt Spinlera7d9d962019-11-06 15:01:25 -06007#include <phosphor-logging/log.hpp>
Matt Spinlerc8705e22019-09-11 12:36:07 -05008#include <sdbusplus/bus.hpp>
9#include <sdbusplus/bus/match.hpp>
10
11namespace openpower
12{
13namespace pels
14{
15
Matt Spinlerc8705e22019-09-11 12:36:07 -050016/**
17 * @class DataInterface
18 *
Matt Spinler19e89ce2019-11-06 13:02:23 -060019 * A base class for gathering data about the system for use
20 * in PELs. Implemented this way to facilitate mocking.
Matt Spinlerc8705e22019-09-11 12:36:07 -050021 */
22class DataInterfaceBase
23{
24 public:
25 DataInterfaceBase() = default;
26 virtual ~DataInterfaceBase() = default;
27 DataInterfaceBase(const DataInterfaceBase&) = default;
28 DataInterfaceBase& operator=(const DataInterfaceBase&) = default;
29 DataInterfaceBase(DataInterfaceBase&&) = default;
30 DataInterfaceBase& operator=(DataInterfaceBase&&) = default;
31
32 /**
Matt Spinler19e89ce2019-11-06 13:02:23 -060033 * @brief Returns the machine Type/Model
Matt Spinlerc8705e22019-09-11 12:36:07 -050034 *
35 * @return string - The machine Type/Model string
36 */
Vijay Lobo81b4dca2021-04-29 00:04:00 -050037 virtual std::string getMachineTypeModel() const = 0;
Matt Spinlerc8705e22019-09-11 12:36:07 -050038
39 /**
Matt Spinler19e89ce2019-11-06 13:02:23 -060040 * @brief Returns the machine serial number
Matt Spinlerc8705e22019-09-11 12:36:07 -050041 *
42 * @return string - The machine serial number
43 */
Vijay Lobo81b4dca2021-04-29 00:04:00 -050044 virtual std::string getMachineSerialNumber() const = 0;
Matt Spinler19e89ce2019-11-06 13:02:23 -060045
Matt Spinlera7d9d962019-11-06 15:01:25 -060046 /**
Matt Spinlercce14112019-12-11 14:20:36 -060047 * @brief Says if the system is managed by a hardware
48 * management console.
49 * @return bool - If the system is HMC managed
50 */
51 virtual bool isHMCManaged() const
52 {
53 return _hmcManaged;
54 }
55
56 /**
Matt Spinlera7d9d962019-11-06 15:01:25 -060057 * @brief Says if the host is up and running
58 *
59 * @return bool - If the host is running
60 */
61 virtual bool isHostUp() const
62 {
63 return _hostUp;
64 }
65
66 using HostStateChangeFunc = std::function<void(bool)>;
67
68 /**
69 * @brief Register a callback function that will get
70 * called on all host on/off transitions.
71 *
72 * The void(bool) function will get passed the new
73 * value of the host state.
74 *
75 * @param[in] name - The subscription name
76 * @param[in] func - The function to run
77 */
78 void subscribeToHostStateChange(const std::string& name,
79 HostStateChangeFunc func)
80 {
81 _hostChangeCallbacks[name] = func;
82 }
83
84 /**
85 * @brief Unsubscribe from host state changes.
86 *
87 * @param[in] name - The subscription name
88 */
89 void unsubscribeFromHostStateChange(const std::string& name)
90 {
91 _hostChangeCallbacks.erase(name);
92 }
93
Matt Spinlercad9c2b2019-12-02 15:42:01 -060094 /**
95 * @brief Returns the BMC firmware version
96 *
97 * @return std::string - The BMC version
98 */
99 virtual std::string getBMCFWVersion() const
100 {
101 return _bmcFWVersion;
102 }
103
104 /**
105 * @brief Returns the server firmware version
106 *
107 * @return std::string - The server firmware version
108 */
109 virtual std::string getServerFWVersion() const
110 {
111 return _serverFWVersion;
112 }
113
Matt Spinler4dcd3f42020-01-22 14:55:07 -0600114 /**
Matt Spinler677381b2020-01-23 10:04:29 -0600115 * @brief Returns the BMC FW version ID
116 *
117 * @return std::string - The BMC FW version ID
118 */
119 virtual std::string getBMCFWVersionID() const
120 {
121 return _bmcFWVersionID;
122 }
123
124 /**
Matt Spinler4dcd3f42020-01-22 14:55:07 -0600125 * @brief Returns the process name given its PID.
126 *
127 * @param[in] pid - The PID value as a string
128 *
129 * @return std::optional<std::string> - The name, or std::nullopt
130 */
131 std::optional<std::string> getProcessName(const std::string& pid) const
132 {
133 namespace fs = std::filesystem;
134
135 fs::path path{"/proc"};
136 path /= fs::path{pid} / "exe";
137
138 if (fs::exists(path))
139 {
140 return fs::read_symlink(path);
141 }
142
143 return std::nullopt;
144 }
145
Matt Spinler9cf3cfd2020-02-03 14:41:55 -0600146 /**
147 * @brief Returns the 'send event logs to host' setting.
148 *
149 * @return bool - If sending PELs to the host is enabled.
150 */
151 virtual bool getHostPELEnablement() const
152 {
153 return _sendPELsToHost;
154 }
155
Matt Spinler4aa23a12020-02-03 15:05:09 -0600156 /**
157 * @brief Returns the BMC state
158 *
159 * @return std::string - The BMC state property value
160 */
161 virtual std::string getBMCState() const
162 {
163 return _bmcState;
164 }
165
166 /**
167 * @brief Returns the Chassis state
168 *
169 * @return std::string - The chassis state property value
170 */
171 virtual std::string getChassisState() const
172 {
173 return _chassisState;
174 }
175
176 /**
177 * @brief Returns the chassis requested power
178 * transition value.
179 *
180 * @return std::string - The chassis transition property
181 */
182 virtual std::string getChassisTransition() const
183 {
184 return _chassisTransition;
185 }
186
187 /**
188 * @brief Returns the Host state
189 *
190 * @return std::string - The Host state property value
191 */
192 virtual std::string getHostState() const
193 {
194 return _hostState;
195 }
196
Matt Spinlerb3d488f2020-02-21 15:30:46 -0600197 /**
198 * @brief Returns the motherboard CCIN
199 *
200 * @return std::string The motherboard CCIN
201 */
Vijay Lobo81b4dca2021-04-29 00:04:00 -0500202 virtual std::string getMotherboardCCIN() const = 0;
Matt Spinlerb3d488f2020-02-21 15:30:46 -0600203
Matt Spinler60c4e792020-03-13 13:45:36 -0500204 /**
Ben Tynere32b7e72021-05-18 12:38:40 -0500205 * @brief Returns the system IM
206 *
207 * @return std::string The system IM
208 */
209 virtual std::vector<uint8_t> getSystemIMKeyword() const = 0;
210
211 /**
Matt Spinler60c4e792020-03-13 13:45:36 -0500212 * @brief Get the fields from the inventory necessary for doing
213 * a callout on an inventory path.
214 *
215 * @param[in] inventoryPath - The item to get the data for
Matt Spinler60c4e792020-03-13 13:45:36 -0500216 * @param[out] fruPartNumber - Filled in with the VINI/FN keyword
217 * @param[out] ccin - Filled in with the VINI/CC keyword
218 * @param[out] serialNumber - Filled in with the VINI/SN keyword
219 */
220 virtual void getHWCalloutFields(const std::string& inventoryPath,
Matt Spinler60c4e792020-03-13 13:45:36 -0500221 std::string& fruPartNumber,
222 std::string& ccin,
223 std::string& serialNumber) const = 0;
224
Matt Spinler03984582020-04-09 13:17:58 -0500225 /**
Matt Spinler9b90e2a2020-04-14 10:59:04 -0500226 * @brief Get the location code for an inventory item.
227 *
228 * @param[in] inventoryPath - The item to get the data for
229 *
230 * @return std::string - The location code
231 */
232 virtual std::string
233 getLocationCode(const std::string& inventoryPath) const = 0;
234
235 /**
Matt Spinler6ea4d5f2020-05-20 13:31:07 -0500236 * @brief Get the list of system type names the system is called.
Matt Spinler03984582020-04-09 13:17:58 -0500237 *
Matt Spinler6ea4d5f2020-05-20 13:31:07 -0500238 * @return std::vector<std::string> - The list of names
Matt Spinler03984582020-04-09 13:17:58 -0500239 */
Matt Spinler1ab66962020-10-29 13:21:44 -0500240 virtual std::vector<std::string> getSystemNames() const = 0;
Matt Spinler03984582020-04-09 13:17:58 -0500241
Matt Spinler5fb24c12020-06-04 11:21:33 -0500242 /**
243 * @brief Fills in the placeholder 'Ufcs' in the passed in location
244 * code with the machine feature code and serial number, which
245 * is needed to create a valid location code.
246 *
247 * @param[in] locationCode - Location code value starting with Ufcs-, and
248 * if that isn't present it will be added first.
249 *
250 * @param[in] node - The node number the location is on.
251 *
252 * @return std::string - The expanded location code
253 */
254 virtual std::string expandLocationCode(const std::string& locationCode,
255 uint16_t node) const = 0;
256
257 /**
258 * @brief Returns the inventory path for the FRU that the location
259 * code represents.
260 *
Matt Spinler2f9225a2020-08-05 12:58:49 -0500261 * @param[in] locationCode - If an expanded location code, then the
262 * full location code.
263 * If not expanded, a location code value
264 * starting with Ufcs-, and if that isn't
265 * present it will be added first.
Matt Spinler5fb24c12020-06-04 11:21:33 -0500266 *
Matt Spinler2f9225a2020-08-05 12:58:49 -0500267 * @param[in] node - The node number the location is on. Ignored if the
268 * expanded location code is passed in.
269 *
270 * @param[in] expanded - If the location code already has the relevent
271 * VPD fields embedded in it.
Matt Spinler5fb24c12020-06-04 11:21:33 -0500272 *
273 * @return std::string - The inventory D-Bus object
274 */
Matt Spinler2f9225a2020-08-05 12:58:49 -0500275 virtual std::string getInventoryFromLocCode(const std::string& LocationCode,
276 uint16_t node,
277 bool expanded) const = 0;
Matt Spinler5fb24c12020-06-04 11:21:33 -0500278
Matt Spinler34a904c2020-08-05 14:53:28 -0500279 /**
Matt Spinler34a904c2020-08-05 14:53:28 -0500280 * @brief Sets the Asserted property on the LED group passed in.
281 *
282 * @param[in] ledGroup - The LED group D-Bus path
283 * @param[in] value - The value to set it to
284 */
285 virtual void assertLEDGroup(const std::string& ledGroup,
286 bool value) const = 0;
287
Matt Spinler993168d2021-04-07 16:05:03 -0500288 /**
289 * @brief Sets the Functional property on the OperationalStatus
290 * interface on a D-Bus object.
291 *
292 * @param[in] objectPath - The D-Bus object path
293 * @param[in] functional - The value
294 */
295 virtual void setFunctional(const std::string& objectPath,
296 bool functional) const = 0;
297
Sumit Kumar3b8ed7f2021-05-18 12:38:35 -0500298 /**
299 * @brief Returns the manufacturing QuiesceOnError property
300 *
301 * @return bool - Manufacturing QuiesceOnError property
302 */
303 virtual bool getQuiesceOnError() const = 0;
304
Matt Spinler19e89ce2019-11-06 13:02:23 -0600305 protected:
306 /**
Matt Spinlera7d9d962019-11-06 15:01:25 -0600307 * @brief Sets the host on/off state and runs any
308 * callback functions (if there was a change).
309 */
Matt Spinler4aa23a12020-02-03 15:05:09 -0600310 void setHostUp(bool hostUp)
Matt Spinlera7d9d962019-11-06 15:01:25 -0600311 {
Matt Spinler4aa23a12020-02-03 15:05:09 -0600312 if (_hostUp != hostUp)
Matt Spinlera7d9d962019-11-06 15:01:25 -0600313 {
Matt Spinler4aa23a12020-02-03 15:05:09 -0600314 _hostUp = hostUp;
Matt Spinlera7d9d962019-11-06 15:01:25 -0600315
316 for (auto& [name, func] : _hostChangeCallbacks)
317 {
318 try
319 {
320 func(_hostUp);
321 }
322 catch (std::exception& e)
323 {
324 using namespace phosphor::logging;
325 log<level::ERR>("A host state change callback threw "
326 "an exception");
327 }
328 }
329 }
330 }
331
332 /**
Matt Spinlercce14112019-12-11 14:20:36 -0600333 * @brief The hardware management console status. Always kept
334 * up to date.
335 */
336 bool _hmcManaged = false;
337
338 /**
Matt Spinlera7d9d962019-11-06 15:01:25 -0600339 * @brief The host up status. Always kept up to date.
340 */
341 bool _hostUp = false;
342
343 /**
344 * @brief The map of host state change subscriber
345 * names to callback functions.
346 */
347 std::map<std::string, HostStateChangeFunc> _hostChangeCallbacks;
Matt Spinlercad9c2b2019-12-02 15:42:01 -0600348
349 /**
350 * @brief The BMC firmware version string
351 */
352 std::string _bmcFWVersion;
353
354 /**
355 * @brief The server firmware version string
356 */
357 std::string _serverFWVersion;
Matt Spinler677381b2020-01-23 10:04:29 -0600358
359 /**
360 * @brief The BMC firmware version ID string
361 */
362 std::string _bmcFWVersionID;
Matt Spinler9cf3cfd2020-02-03 14:41:55 -0600363
364 /**
365 * @brief If sending PELs is enabled.
366 *
367 * This is usually set to false in manufacturing test.
368 */
369 bool _sendPELsToHost = true;
Matt Spinler4aa23a12020-02-03 15:05:09 -0600370
371 /**
372 * @brief The BMC state property
373 */
374 std::string _bmcState;
375
376 /**
377 * @brief The Chassis current power state property
378 */
379 std::string _chassisState;
380
381 /**
382 * @brief The Chassis requested power transition property
383 */
384 std::string _chassisTransition;
385
386 /**
387 * @brief The host state property
388 */
389 std::string _hostState;
Matt Spinlerc8705e22019-09-11 12:36:07 -0500390};
391
392/**
393 * @class DataInterface
394 *
395 * Concrete implementation of DataInterfaceBase.
396 */
397class DataInterface : public DataInterfaceBase
398{
399 public:
400 DataInterface() = delete;
401 ~DataInterface() = default;
402 DataInterface(const DataInterface&) = default;
403 DataInterface& operator=(const DataInterface&) = default;
404 DataInterface(DataInterface&&) = default;
405 DataInterface& operator=(DataInterface&&) = default;
406
407 /**
408 * @brief Constructor
409 *
410 * @param[in] bus - The sdbusplus bus object
411 */
412 explicit DataInterface(sdbusplus::bus::bus& bus);
413
Matt Spinlerb3f51862019-12-09 13:55:10 -0600414 /**
Matt Spinlerc8705e22019-09-11 12:36:07 -0500415 * @brief Finds the D-Bus service name that hosts the
416 * passed in path and interface.
417 *
418 * @param[in] objectPath - The D-Bus object path
419 * @param[in] interface - The D-Bus interface
420 */
421 DBusService getService(const std::string& objectPath,
Matt Spinlerb3f51862019-12-09 13:55:10 -0600422 const std::string& interface) const;
Matt Spinler9cf3cfd2020-02-03 14:41:55 -0600423
Matt Spinlerc8705e22019-09-11 12:36:07 -0500424 /**
425 * @brief Wrapper for the 'GetAll' properties method call
426 *
427 * @param[in] service - The D-Bus service to call it on
428 * @param[in] objectPath - The D-Bus object path
429 * @param[in] interface - The interface to get the props on
430 *
431 * @return DBusPropertyMap - The property results
432 */
433 DBusPropertyMap getAllProperties(const std::string& service,
434 const std::string& objectPath,
Matt Spinler2a28c932020-02-03 14:23:40 -0600435 const std::string& interface) const;
Matt Spinlerc8705e22019-09-11 12:36:07 -0500436 /**
Matt Spinlera7d9d962019-11-06 15:01:25 -0600437 * @brief Wrapper for the 'Get' properties method call
438 *
439 * @param[in] service - The D-Bus service to call it on
440 * @param[in] objectPath - The D-Bus object path
441 * @param[in] interface - The interface to get the property on
442 * @param[in] property - The property name
443 * @param[out] value - Filled in with the property value.
444 */
445 void getProperty(const std::string& service, const std::string& objectPath,
446 const std::string& interface, const std::string& property,
Matt Spinler2a28c932020-02-03 14:23:40 -0600447 DBusValue& value) const;
Vijay Lobo81b4dca2021-04-29 00:04:00 -0500448 /**
449 * @brief Returns the machine Type/Model
450 *
451 * @return string - The machine Type/Model string
452 */
453 std::string getMachineTypeModel() const override;
454
455 /**
456 * @brief Returns the machine serial number
457 *
458 * @return string - The machine serial number
459 */
460 std::string getMachineSerialNumber() const override;
461
462 /**
463 * @brief Returns the motherboard CCIN
464 *
465 * @return std::string The motherboard CCIN
466 */
467 std::string getMotherboardCCIN() const override;
Matt Spinler2a28c932020-02-03 14:23:40 -0600468
Matt Spinler60c4e792020-03-13 13:45:36 -0500469 /**
Ben Tynere32b7e72021-05-18 12:38:40 -0500470 * @brief Returns the system IM
471 *
472 * @return std::vector The system IM keyword in 4 byte vector
473 */
474 std::vector<uint8_t> getSystemIMKeyword() const override;
475
476 /**
Matt Spinler60c4e792020-03-13 13:45:36 -0500477 * @brief Get the fields from the inventory necessary for doing
478 * a callout on an inventory path.
479 *
480 * @param[in] inventoryPath - The item to get the data for
Matt Spinler60c4e792020-03-13 13:45:36 -0500481 * @param[out] fruPartNumber - Filled in with the VINI/FN keyword
482 * @param[out] ccin - Filled in with the VINI/CC keyword
483 * @param[out] serialNumber - Filled in with the VINI/SN keyword
484 */
485 void getHWCalloutFields(const std::string& inventoryPath,
Matt Spinler60c4e792020-03-13 13:45:36 -0500486 std::string& fruPartNumber, std::string& ccin,
487 std::string& serialNumber) const override;
488
Matt Spinler9b90e2a2020-04-14 10:59:04 -0500489 /**
490 * @brief Get the location code for an inventory item.
491 *
492 * Throws an exception if the inventory item doesn't have the
493 * location code interface.
494 *
495 * @param[in] inventoryPath - The item to get the data for
496 *
497 * @return std::string - The location code
498 */
499 std::string
500 getLocationCode(const std::string& inventoryPath) const override;
501
Matt Spinler5fb24c12020-06-04 11:21:33 -0500502 /**
Matt Spinler1ab66962020-10-29 13:21:44 -0500503 * @brief Get the list of system type names the system is called.
504 *
505 * @return std::vector<std::string> - The list of names
506 */
507 std::vector<std::string> getSystemNames() const override;
508
509 /**
Matt Spinler5fb24c12020-06-04 11:21:33 -0500510 * @brief Fills in the placeholder 'Ufcs' in the passed in location
511 * code with the machine feature code and serial number, which
512 * is needed to create a valid location code.
513 *
514 * @param[in] locationCode - Location code value starting with Ufcs-, and
515 * if that isn't present it will be added first.
516 *
517 * @param[in] node - The node number the location is one.
518 *
519 * @return std::string - The expanded location code
520 */
521 std::string expandLocationCode(const std::string& locationCode,
522 uint16_t node) const override;
523
524 /**
525 * @brief Returns the inventory path for the FRU that the location
526 * code represents.
527 *
Matt Spinler2f9225a2020-08-05 12:58:49 -0500528 * @param[in] locationCode - If an expanded location code, then the
529 * full location code.
530 * If not expanded, a location code value
531 * starting with Ufcs-, and if that isn't
532 * present it will be added first.
Matt Spinler5fb24c12020-06-04 11:21:33 -0500533 *
Matt Spinler2f9225a2020-08-05 12:58:49 -0500534 * @param[in] node - The node number the location is on. Ignored if the
535 * expanded location code is passed in.
536 *
537 * @param[in] expanded - If the location code already has the relevent
538 * VPD fields embedded in it.
Matt Spinler5fb24c12020-06-04 11:21:33 -0500539 *
540 * @return std::string - The inventory D-Bus object
541 */
Matt Spinler2f9225a2020-08-05 12:58:49 -0500542 std::string getInventoryFromLocCode(const std::string& locationCode,
543 uint16_t node,
544 bool expanded) const override;
Matt Spinler5fb24c12020-06-04 11:21:33 -0500545
Matt Spinler34a904c2020-08-05 14:53:28 -0500546 /**
Matt Spinler34a904c2020-08-05 14:53:28 -0500547 * @brief Sets the Asserted property on the LED group passed in.
548 *
549 * @param[in] ledGroup - The LED group D-Bus path
550 * @param[in] value - The value to set it to
551 */
552 void assertLEDGroup(const std::string& ledGroup, bool value) const override;
553
Matt Spinler993168d2021-04-07 16:05:03 -0500554 /**
555 * @brief Sets the Functional property on the OperationalStatus
556 * interface on a D-Bus object.
557 *
558 * @param[in] objectPath - The D-Bus object path
559 * @param[in] functional - The value
560 */
561 void setFunctional(const std::string& objectPath,
562 bool functional) const override;
563
Sumit Kumar3b8ed7f2021-05-18 12:38:35 -0500564 /**
565 * @brief Returns the manufacturing QuiesceOnError property
566 *
567 * @return bool - Manufacturing QuiesceOnError property
568 */
569 bool getQuiesceOnError() const override;
570
Matt Spinler2a28c932020-02-03 14:23:40 -0600571 private:
572 /**
573 * @brief Reads the BMC firmware version string and puts it into
574 * _bmcFWVersion.
575 */
576 void readBMCFWVersion();
Matt Spinlera7d9d962019-11-06 15:01:25 -0600577
578 /**
Matt Spinler2a28c932020-02-03 14:23:40 -0600579 * @brief Reads the server firmware version string and puts it into
580 * _serverFWVersion.
Matt Spinlerc8705e22019-09-11 12:36:07 -0500581 */
Matt Spinler2a28c932020-02-03 14:23:40 -0600582 void readServerFWVersion();
Matt Spinlerc8705e22019-09-11 12:36:07 -0500583
584 /**
Matt Spinler2a28c932020-02-03 14:23:40 -0600585 * @brief Reads the BMC firmware version ID and puts it into
586 * _bmcFWVersionID.
Matt Spinlera7d9d962019-11-06 15:01:25 -0600587 */
Matt Spinler2a28c932020-02-03 14:23:40 -0600588 void readBMCFWVersionID();
Matt Spinlera7d9d962019-11-06 15:01:25 -0600589
590 /**
Matt Spinlerb3d488f2020-02-21 15:30:46 -0600591 * @brief Finds all D-Bus paths that contain any of the interfaces
592 * passed in, by using GetSubTreePaths.
593 *
594 * @param[in] interfaces - The desired interfaces
595 *
596 * @return The D-Bus paths.
597 */
598 DBusPathList getPaths(const DBusInterfaceList& interfaces) const;
599
600 /**
601 * @brief The interfacesAdded callback used on the inventory to
602 * find the D-Bus object that has the motherboard interface.
603 * When the motherboard is found, it then adds a PropertyWatcher
604 * for the motherboard CCIN.
605 */
606 void motherboardIfaceAdded(sdbusplus::message::message& msg);
607
608 /**
Matt Spinler0e4d72e2020-08-05 12:36:53 -0500609 * @brief Adds the Ufcs- prefix to the location code passed in
610 * if necessary.
Matt Spinler5fb24c12020-06-04 11:21:33 -0500611 *
Matt Spinler0e4d72e2020-08-05 12:36:53 -0500612 * Needed because the location codes that come back from the
Matt Spinler5fb24c12020-06-04 11:21:33 -0500613 * message registry and device callout JSON don't have it.
614 *
615 * @param[in] - The location code without a prefix, like P1-C1
616 *
617 * @return std::string - The location code with the prefix
618 */
619 static std::string addLocationCodePrefix(const std::string& locationCode);
620
621 /**
Matt Spinler2a28c932020-02-03 14:23:40 -0600622 * @brief The D-Bus property or interface watchers that have callbacks
623 * registered that will set members in this class when
624 * they change.
Matt Spinlerc8705e22019-09-11 12:36:07 -0500625 */
Matt Spinler2a28c932020-02-03 14:23:40 -0600626 std::vector<std::unique_ptr<DBusWatcher>> _properties;
Matt Spinlera7d9d962019-11-06 15:01:25 -0600627
628 /**
Matt Spinlerc8705e22019-09-11 12:36:07 -0500629 * @brief The sdbusplus bus object for making D-Bus calls.
630 */
631 sdbusplus::bus::bus& _bus;
Matt Spinlerb3d488f2020-02-21 15:30:46 -0600632
633 /**
634 * @brief The interfacesAdded match object used to wait for inventory
635 * interfaces to show up, so that the object with the motherboard
636 * interface can be found. After it is found, this object is
637 * deleted.
638 */
639 std::unique_ptr<sdbusplus::bus::match_t> _inventoryIfacesAddedMatch;
Matt Spinlerc8705e22019-09-11 12:36:07 -0500640};
641
642} // namespace pels
643} // namespace openpower