common/utils: use decoder in findStateSensorPDR

Refactor findStateSensorPDR to decode the fixed fields with
decode_pldm_platform_state_sensor_pdr() and walk the composite states
with foreach_pldm_platform_state_sensor_pdr_possible_states(), replacing
the packed struct overlay and its manual offset math. Both are bounds
checked against the record length.

Tested: Build an image for the vr-nvl-obmc machine with the following
patches cherry-picked:
```
1. Kernel
   https://lore.kernel.org/all/20260702165524.2168091-1-jackyhuang@nvidia.com/
2. u-boot
   https://lore.kernel.org/openbmc/20260629105202.1417679-1-jackyhuang@nvidia.com/
3. meta-nvidia
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/90959
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/92346
4. platform-init
   https://gerrit.openbmc.org/c/openbmc/platform-init/+/92189
   https://gerrit.openbmc.org/c/openbmc/platform-init/+/92190
   https://gerrit.openbmc.org/c/openbmc/platform-init/+/92191
   https://gerrit.openbmc.org/c/openbmc/platform-init/+/92192
5. mctp-over-usb-config
   https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/80452
   https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/86236
   https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/86791
6. libpldm
   https://gerrit.openbmc.org/c/openbmc/libpldm/+/90952
   https://gerrit.openbmc.org/c/openbmc/libpldm/+/91583
```

Built pldmd at this change and at master for vr-nvl-obmc, with a PDR
JSON adding one composite state sensor (sets 100 and 200). The D-Bus
wrapper returns the identical record from both builds for either set ID,
and raises ResourceNotFound for an absent one:

```
  busctl call xyz.openbmc_project.PLDM /xyz/openbmc_project/pldm \
      xyz.openbmc_project.PLDM.PDR FindStateSensorPDR yqq 0 33 100
  aay 1 31 3 0 0 0 1 4 0 0 21 0 1 0 1 0 33 0 1 0 1 0 0 0 \
      2 100 0 1 6 200 0 1 6
```

Change-Id: Iaefe3ca4fe9a095ac988388b9b6479dc52580591
Signed-off-by: JY Voon <jvoon@nvidia.com>
2 files changed
tree: 16af59b2a1cf77dd43f8c59bbd5c3c54bb8edc31
  1. common/
  2. configurations/
  3. docs/
  4. fw-update/
  5. host-bmc/
  6. libpldmresponder/
  7. oem/
  8. platform-mc/
  9. pldmd/
  10. pldmtool/
  11. requester/
  12. softoff/
  13. subprojects/
  14. test/
  15. tools/
  16. utilities/
  17. .clang-format
  18. .clang-tidy
  19. .eslintignore
  20. .gitignore
  21. .linter-ignore
  22. LICENSE
  23. meson.build
  24. meson.options
  25. OWNERS
  26. README.md
README.md

PLDM - Platform Level Data Model

License

Overview

PLDM (Platform Level Data Model) is a key component of the OpenBMC project, providing a standardized data model and message formats for various platform management functionalities. It defines a method to manage, monitor, and control the firmware and hardware of a system.

The OpenBMC PLDM project aims to implement the specifications defined by the Distributed Management Task Force (DMTF), allowing for interoperable management interfaces across different hardware and firmware components.

Features

  • Standardized Messaging: Adheres to the DMTF's PLDM specifications, enabling consistent and interoperable communication between different components.
  • Modularity: Supports multiple PLDM types, including base, FRU,Firmware update, Platform Monitoring and Control, and BIOS Control and Configuration.
  • Extensibility: Easily extendable to support new PLDM types and custom OEM commands.
  • Integration: Seamlessly integrates with other OpenBMC components for comprehensive system management.

Getting Started

Prerequisites

To build and run PLDM, you need the following dependencies:

  • Meson
  • Ninja

Alternatively, source an OpenBMC ARM/x86 SDK.

Building

To build the PLDM project, follow these steps:

meson setup build && meson compile -C build

To run unit tests

The simplest way of running the tests is as described by the meson man page:

meson test -C build

Alternatively, tests can be run in the OpenBMC CI docker container using these steps.

To enable pldm verbosity

pldm daemon accepts a command line argument --verbose or --v or -v to enable the daemon to run in verbose mode. It can be done via adding this option to the environment file that pldm service consumes.

echo 'PLDMD_ARGS="--verbose"' > /etc/default/pldmd
systemctl restart pldmd

To disable pldm verbosity

rm /etc/default/pldmd
systemctl restart pldmd

Documentation

For complete documentation on the functionality and usage of this repository, please refer to the docs folder.