xref: /openbmc/pldm/pldmtool/README.md (revision 74f27c73)
1## Overview of pldmtool
2
3pldmtool is a client tool that acts as a PLDM requester which runs on the BMC.
4pldmtool sends the request message and displays the response message also
5provides flexibility to parse the response message and display it in readable
6format.
7
8pldmtool supports the subcommands for PLDM types such as base, platform, bios,
9fru, and oem-ibm.
10
11- Source files are implemented in C++.
12- Consumes pldm/libpldm encode and decode functions.
13- Communicates with pldmd daemon running on BMC.
14- Enables writing functional test cases for PLDM stack.
15
16please refer the DMTF PLDM specifications with respect to the pldm types.
17https://www.dmtf.org/
18
19
20## Code organization
21
22Source files in pldmtool repository are named with respect to the PLDM type.
23
24Example:
25```
26pldm_base_cmd.[hpp/cpp], pldm_fru_cmd.[hpp/cpp]
27```
28
29pldmtool commands for corresponding PLDM type is constructed with the help of
30encode request and decode response APIs which are implemented in pldm/libpldm.
31
32Example:
33
34Given a PLDM command "foo" of PLDM type "base" the pldmtool should consume
35following API from the libpldm.
36
37```
38- encode_foo_req()  - Send the required input parameters in the request message.
39- decode_foo_resp() - Decode the response message.
40```
41
42If PLDM commands are not yet supported in the pldmtool repository user can
43directly send the request message with the help of **pldmtool raw -d <data>** option.
44
45
46## Usage
47
48User can see the pldmtool supported PLDM types in the usage output available
49with the **-h** help option as shown below:
50
51```
52pldmtool -h
53PLDM requester tool for OpenBMC
54Usage: pldmtool [OPTIONS] SUBCOMMAND
55
56Options:
57  -h,--help                   Print this help message and exit
58
59Subcommands:
60  raw                         send a raw request and print response
61  base                        base type command
62  bios                        bios type command
63  platform                    platform type command
64  fru                         FRU type command
65  oem-ibm                     oem type command
66
67```
68pldmtool command prompt expects a PLDM type to display the list of supported
69commands that are already implemented for that particular PLDM type.
70
71```
72Command format: pldmtool <pldmType> -h
73```
74Example:
75
76```
77$ pldmtool base -h
78
79base type command
80Usage: pldmtool base [OPTIONS] SUBCOMMAND
81
82Options:
83  -h,--help                   Print this help message and exit
84
85Subcommands:
86  GetPLDMTypes                get pldm supported types
87  GetPLDMVersion              get version of a certain type
88  GetTID                      get Terminus ID (TID)
89  GetPLDMCommands             get supported commands of pldm type
90
91```
92More help on the command usage can be found by specifying the PLDM type and the
93command name with **-h** argument as shown below.
94
95```
96Command format: pldmtool <pldmType> <commandName> -h
97```
98
99Example:
100```
101$ pldmtool base GetPLDMTypes -h
102
103get pldm supported types
104Usage: pldmtool base GetPLDMTypes [OPTIONS]
105
106Options:
107  -h,--help                   Print this help message and exit
108  -m,--mctp_eid UINT          MCTP endpoint ID
109  -v,--verbose
110```
111
112
113## pldmtool raw command usage
114
115pldmtool raw command option accepts request message in the hexadecimal
116bytes and send the response message in hexadecimal bytes.
117
118```
119$ pldmtool raw -h
120send a raw request and print response
121Usage: pldmtool raw [OPTIONS]
122
123Options:
124  -h,--help                   Print this help message and exit
125  -m,--mctp_eid UINT          MCTP endpoint ID
126  -v,--verbose
127  -d,--data UINT              REQUIRED raw data
128```
129
130**pldmtool request message format:**
131
132```
133pldmtool raw --data 0x80 <pldmType> <cmdType> <payloadReq>
134
135payloadReq - stream of bytes constructed based on the request message format
136             defined for the command type as per the spec.
137```
138
139**pldmtool response message format:**
140
141```
142<instanceId> <hdrVersion> <pldmType> <cmdType> <completionCode> <payloadResp>
143
144payloadResp - stream of bytes displayed based on the response message format
145              defined for the command type as per the spec.
146```
147Example:
148
149```
150$ pldmtool raw -d 0x80 0x00 0x04 0x00 0x00
151
152Request Message:
15308 01 80 00 04 00 00
154Response Message:
15508 01 00 00 04 00 1d 00 00 00 00 00 00 80
156
157```
158## pldmtool output format
159
160In the current pldmtool implementation response message from pldmtool is parsed
161and displayed in the JSON format.
162
163Example:
164```
165$ pldmtool base GetPLDMTypes
166[
167    {
168        "PLDM Type": "base",
169        "PLDM Type Code": 0
170    },
171    {
172        "PLDM Type": "platform",
173        "PLDM Type Code": 2
174    },
175    {
176        "PLDM Type": "bios",
177        "PLDM Type Code": 3
178    },
179    {
180        "PLDM Type": "fru",
181        "PLDM Type Code": 4
182    },
183    {
184        "PLDM Type": "oem-ibm",
185        "PLDM Type Code": 63
186    }
187]
188```
189## pldmtool with mctp_eid option
190
191Use **-m** or **--mctp_eid** option to send pldm request message to remote mctp
192end point and by default pldmtool consider mctp_eid value as **'08'**.
193
194```
195Command format:
196
197pldmtool <pldmType> <cmdType> -m <mctpId>
198pldmtool raw -d 0x80 <pldmType> <cmdType> <payloadReq> -m <mctpId>
199```
200
201Example:
202```
203$ pldmtool base GetPLDMTypes -m 8
204
205$ pldmtool raw -d 0x80 0x00 0x04 0x00 0x00 -m 0x08
206
207```
208
209## pldmtool verbosity
210
211By default verbose flag is disabled on the pldmtool.
212
213Enable verbosity with **-v** flag as shown below.
214
215Example:
216
217```
218pldmtool base GetPLDMTypes -v
219```
220