pldmtool: Exit non-zero on request failures exec()'s three failure paths (instance ID allocation, createRequestMsg(), pldmSendRecv()) now report failure through the CLI framework's exit-code mechanism instead of an uncaught exception or a plain return. Motivation: pldmtool surfaces the instance ID allocation failure as an exception rather than silently discarding it. Nothing above exec() catches that exception, so a real, expected failure (instance IDs running out under normal contention, not misuse) crashes the whole process instead of exiting cleanly. The other two paths avoid that crash, but log an error and still return successfully as far as the caller can tell, so a script checking the exit status cannot distinguish a failed request from a successful one. Tested: Forced each of the three failure paths above on Yosemite4. Instance ID pool forced empty, before: ``` $ pldmtool base GetTID -m 30 <3> Instance ID allocation failed for EID 30: Failed to allocate instance ID for EID 30: No free instance ids terminate called after throwing an instance of 'pldm::InstanceIdError' what(): Failed to allocate instance ID for EID 30: No free instance ids Aborted (core dumped) $ echo $? 134 ``` after: ``` $ pldmtool base GetTID -m 30 <3> Instance ID allocation failed for EID 30: Failed to allocate instance ID for EID 30: No free instance ids $ echo $? 1 ``` createRequestMsg() forced to return an encode-validation error, before: ``` $ pldmtool base GetTID -m 30 Failed to encode request message for base:GetTID rc = 2 $ echo $? 0 ``` after: ``` $ pldmtool base GetTID -m 30 Failed to encode request message for base:GetTID rc = 2 $ echo $? 1 ``` pldmSendRecv() forced to return a transport send error, before: ``` $ pldmtool base GetTID -m 30 pldmSendRecv: Failed to receive RC = -7 $ echo $? 0 ``` after: ``` $ pldmtool base GetTID -m 30 pldmSendRecv: Failed to receive RC = -7 $ echo $? 1 ``` Change-Id: Ifbc0235b431e50df104322d3d5d156df383a8aa2 Signed-off-by: Eric Yang <eric.yang.wiwynn@gmail.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.