xref: /openbmc/pldm/requester/README.md (revision 5492207a)
1## Overview
2
3PLDM requester infrastructure enables the requester code in PLDM daemon to
4meet the requirements of PLDM requesters. It provides the following features:
5
6- Register a PLDM request and the response handler to be invoked on receiving
7  the response.
8- The handling of the request and response is asynchronous. This means the PLDM
9  daemon is not blocked till the response is received for a request.
10- Multiple outstanding requests are supported.
11- Request retries based on the time-out waiting for a response.
12- Instance ID expiration and marking the instance ID free after expiration.
13
14Future enhancements:
15
16- A mechanism to queue multiple outstanding requests to the same responder.
17- Handle ERROR_NOT_READY completion code and retry the PLDM request after 250ms
18  interval.
19
20The requester code needs to use the `registerRequest` API to register the PLDM
21request. The destination endpoint ID, instance ID, PLDM type, PLDM command code,
22PLDM request message (PLDM header and payload) and response function handler are
23passed as parameters to the registerRequest API.
24
25```
26    int registerRequest(mctp_eid_t eid, uint8_t instanceId, uint8_t type,
27                        uint8_t command, pldm::Request&& requestMsg,
28                        ResponseHandler&& responseHandler)
29```
30
31The signature of the response function handler:
32```
33void handler(mctp_eid_t eid, const pldm_msg* response, size_t respMsgLen)
34```
35
36- If the response is received before instance ID expiration:
37  - If the response matches with an outstanding request then the response
38    handler is invoked.
39  - If the response does not match with the PLDM instance ID, PLDM type and PLDM
40    command code of an outstanding request, then no action is taken on the
41    response.
42- Once the instance ID is expired, then the response handler is invoked with
43  empty response, so that further action can be taken.
44