description: >
    Implement to provide features needed to build a PLDM Request message. This
    API would be used by PLDM requester apps on the BMC.

    Any OpenBMC implementation must provide exactly one implementation of
    xyz.openbmc_project.PLDM.Requester on /xyz/openbmc_project/pldm.

    PLDM stands for Platform Level Data Model. More information about PLDM (and
    MCTP) can be found at https://www.dmtf.org/standards/pmci.

methods:
    - name: GetInstanceId
      description: >
          Obtain a new PLDM instance id, for the input MCTP EID, to be used in a
          PLDM request message. Instance ids help distinguish PLDM response
          messages when a PLDM requester sends out multiple request messages,
          without waiting for a response message. Refer the PLDM specification
          DSP0240 version 1.0.0. Also refer
          https://github.com/openbmc/docs/blob/master/designs/pldm-stack.md#Requester.

          The instance id starts at 0 and can go upto 31 (5 bits), for each MCTP
          EID that a PLDM requester is communicating with. An implementation of
          this API should track instance ids in terms of whether they're in use
          (request message with that instance id has been sent out, and the
          corresponding response message hasn't been received yet) or not, and
          grant unused ids via this method. An implementation may also
          optionally implement the instance id expiry, as per the spec DSP0240
          v1.0.0. The spec recommends implementing the same.

          If there's a call to this method when all 32 ids have already been
          granted to the input eid, then the
          xyz.openbmc_project.Common.Error.TooManyResources exception will be
          thrown. The recommendation for the caller upon receiving this
          exception is to retry calling this method, at least once, after a
          time period equal to the maximum instance id expiration interval,
          which is 6 seconds as per DSP0240 v1.0.0. If the exception persists
          post this interval, the way of handling the same (further retries,
          report an error, etc) is left to the user.
      parameters:
        - name: eid
          type: byte
          description: >
            The MCTP endpoint, specified by 'eid' (endpoint id), for which the
            new PLDM instance id needs to be generated.
      returns:
        - name: instanceid
          type: byte
          description: >
            PLDM instance id.
      errors:
        - xyz.openbmc_project.Common.Error.TooManyResources
