dsp: base: Let some encode APIs accept pointer to payload_length
In order to achieve [1], this commit updates some encoding APIs to
accept the length of the message as an in/out parameter (pointer to
size_t). The APIs are then updated to return the encoded payload length
through this parameter.
The unit tests for these APIs are updated accordingly. The change list
includes:
- encode_pldm_base_multipart_receive_req()
- encode_pldm_base_negotiate_transfer_params_req()
[1]: https://github.com/openbmc/libpldm/blob/main/CONTRIBUTING.md?plain=1#L270-L272
Change-Id: I17cb3641b2c4a7a30fe757a3275b1713499484cc
Signed-off-by: Chau Ly <chaul@amperecomputing.com>
diff --git a/tests/dsp/base.cpp b/tests/dsp/base.cpp
index fbecd60..723810e 100644
--- a/tests/dsp/base.cpp
+++ b/tests/dsp/base.cpp
@@ -756,7 +756,10 @@
const struct pldm_base_multipart_receive_req req_data = {
PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
- std::array<uint8_t, PLDM_MULTIPART_RECEIVE_REQ_BYTES> requestMsg = {
+ static constexpr const size_t requestMsgLength =
+ PLDM_MULTIPART_RECEIVE_REQ_BYTES;
+
+ std::array<uint8_t, requestMsgLength> requestMsg = {
PLDM_BASE, PLDM_XFER_FIRST_PART,
0x01, 0x00,
0x00, 0x00,
@@ -767,13 +770,15 @@
0x10, 0x00,
0x00, 0x00};
- PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+ PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+ size_t payload_length = requestMsgLength;
auto rc = encode_pldm_base_multipart_receive_req(
- instance_id, &req_data, requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+ instance_id, &req_data, requestPtr, &payload_length);
ASSERT_EQ(rc, 0);
EXPECT_EQ(
0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
+ EXPECT_EQ(payload_length, requestMsgLength);
}
#endif
@@ -786,13 +791,17 @@
const struct pldm_base_multipart_receive_req req_data = {
PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
- PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
- rc = encode_pldm_base_multipart_receive_req(
- instance_id, nullptr, requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+ static constexpr const size_t requestMsgLength =
+ PLDM_MULTIPART_RECEIVE_REQ_BYTES;
+
+ PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+ size_t payload_length = requestMsgLength;
+ rc = encode_pldm_base_multipart_receive_req(instance_id, nullptr,
+ requestPtr, &payload_length);
EXPECT_EQ(rc, -EINVAL);
- rc = encode_pldm_base_multipart_receive_req(
- instance_id, &req_data, nullptr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+ rc = encode_pldm_base_multipart_receive_req(instance_id, &req_data, nullptr,
+ &payload_length);
EXPECT_EQ(rc, -EINVAL);
}
#endif
@@ -806,10 +815,13 @@
const struct pldm_base_multipart_receive_req req_data = {
PLDM_BASE, PLDM_XFER_FIRST_PART, 0x01, 0x10, 0x00, 0x10};
- PLDM_MSG_DEFINE_P(requestPtr, PLDM_MULTIPART_RECEIVE_REQ_BYTES);
+ static constexpr const size_t requestMsgLength =
+ PLDM_MULTIPART_RECEIVE_REQ_BYTES;
+ PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+ size_t payload_length = 1;
rc = encode_pldm_base_multipart_receive_req(instance_id, &req_data,
- requestPtr, 1);
+ requestPtr, &payload_length);
EXPECT_EQ(rc, -EOVERFLOW);
}
#endif
@@ -1443,21 +1455,24 @@
0x0001, // BE 256
{{0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x81}}};
- std::array<uint8_t, PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES>
- requestMsg = {0x01, 0x00, // requester_part_size = 256
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x81}; // requester_protocol_support =
- // PLDM_BASE & PLDM_FILE
+ static constexpr const size_t requestMsgLength =
+ PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES;
- PLDM_MSG_DEFINE_P(requestPtr,
- PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+ std::array<uint8_t, requestMsgLength> requestMsg = {
+ 0x01, 0x00, // requester_part_size = 256
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x81}; // requester_protocol_support =
+ // PLDM_BASE & PLDM_FILE
+
+ PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+ size_t payload_length = requestMsgLength;
auto rc = encode_pldm_base_negotiate_transfer_params_req(
- instance_id, &req_data, requestPtr,
- PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+ instance_id, &req_data, requestPtr, &payload_length);
ASSERT_EQ(rc, 0);
EXPECT_EQ(
0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
+ EXPECT_EQ(payload_length, requestMsgLength);
}
#endif
@@ -1470,16 +1485,17 @@
0x0001, // BE 256
{{0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x81}}};
- PLDM_MSG_DEFINE_P(requestPtr,
- PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+ static constexpr const size_t requestMsgLength =
+ PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES;
+
+ PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
+ size_t payload_length = requestMsgLength;
rc = encode_pldm_base_negotiate_transfer_params_req(
- instance_id, nullptr, requestPtr,
- PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+ instance_id, nullptr, requestPtr, &payload_length);
EXPECT_EQ(rc, -EINVAL);
rc = encode_pldm_base_negotiate_transfer_params_req(
- instance_id, &req_data, nullptr,
- PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
+ instance_id, &req_data, nullptr, &payload_length);
EXPECT_EQ(rc, -EINVAL);
}
#endif
@@ -1497,8 +1513,9 @@
PLDM_MSG_DEFINE_P(requestPtr,
PLDM_BASE_NEGOTIATE_TRANSFER_PARAMETERS_REQ_BYTES);
- rc = encode_pldm_base_negotiate_transfer_params_req(instance_id, &req_data,
- requestPtr, 1);
+ size_t payload_length = 1;
+ rc = encode_pldm_base_negotiate_transfer_params_req(
+ instance_id, &req_data, requestPtr, &payload_length);
EXPECT_EQ(rc, -EOVERFLOW);
}
#endif