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>
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.
To build and run PLDM, you need the following dependencies:
MesonNinjaAlternatively, source an OpenBMC ARM/x86 SDK.
To build the PLDM project, follow these steps:
meson setup build && meson compile -C build
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.
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
rm /etc/default/pldmd systemctl restart pldmd
For complete documentation on the functionality and usage of this repository, please refer to the docs folder.