Refactor the verbose tracing in PLDM
1. Add verbose tracing in requester code
2. Change the prefix of verbose tracing to "Tx: " and "Rx: "
3. Remove explicit verbose tracing flag in libpldmresponder
4. Change the prefix of pldmtool verbose tracing to "pldmtool: Tx: "
and "pldmtool: Rx: "
Signed-off-by: Tom Joseph <rushtotom@gmail.com>
Change-Id: Ie2c6b323e32e0828ed5ecaeb3e61943a98a2f089
diff --git a/requester/handler.hpp b/requester/handler.hpp
index 2af4ade..6290526 100644
--- a/requester/handler.hpp
+++ b/requester/handler.hpp
@@ -91,19 +91,21 @@
* @param[in] fd - fd of MCTP communications socket
* @param[in] event - reference to PLDM daemon's main event loop
* @param[in] requester - reference to Requester object
+ * @param[in] verbose - verbose tracing flag
* @param[in] instanceIdExpiryInterval - instance ID expiration interval
* @param[in] numRetries - number of request retries
* @param[in] responseTimeOut - time to wait between each retry
*/
explicit Handler(
int fd, sdeventplus::Event& event, pldm::dbus_api::Requester& requester,
+ bool verbose,
std::chrono::seconds instanceIdExpiryInterval =
std::chrono::seconds(INSTANCE_ID_EXPIRATION_INTERVAL),
uint8_t numRetries = static_cast<uint8_t>(NUMBER_OF_REQUEST_RETRIES),
std::chrono::milliseconds responseTimeOut =
std::chrono::milliseconds(RESPONSE_TIME_OUT)) :
fd(fd),
- event(event), requester(requester),
+ event(event), requester(requester), verbose(verbose),
instanceIdExpiryInterval(instanceIdExpiryInterval),
numRetries(numRetries), responseTimeOut(responseTimeOut)
{}
@@ -162,7 +164,8 @@
};
auto request = std::make_unique<RequestInterface>(
- fd, eid, event, std::move(requestMsg), numRetries, responseTimeOut);
+ fd, eid, event, std::move(requestMsg), numRetries, responseTimeOut,
+ verbose);
auto timer = std::make_unique<phosphor::Timer>(
event.get(), instanceIdExpiryCallBack);
@@ -237,15 +240,16 @@
int fd; //!< file descriptor of MCTP communications socket
sdeventplus::Event& event; //!< reference to PLDM daemon's main event loop
pldm::dbus_api::Requester& requester; //!< reference to Requester object
+ bool verbose; //!< verbose tracing flag
std::chrono::seconds
instanceIdExpiryInterval; //!< Instance ID expiration interval
uint8_t numRetries; //!< number of request retries
std::chrono::milliseconds
responseTimeOut; //!< time to wait between each retry
- /** @brief Container for storing the details of the PLDM request message,
- * handler for the corresponding PLDM response and the timer object
- * for the Instance ID expiration
+ /** @brief Container for storing the details of the PLDM request
+ * message, handler for the corresponding PLDM response and the
+ * timer object for the Instance ID expiration
*/
using RequestValue =
std::tuple<std::unique_ptr<RequestInterface>, ResponseHandler,
diff --git a/requester/request.hpp b/requester/request.hpp
index f1a91d7..24e6942 100644
--- a/requester/request.hpp
+++ b/requester/request.hpp
@@ -4,6 +4,7 @@
#include "libpldm/requester/pldm.h"
#include "common/types.hpp"
+#include "common/utils.hpp"
#include <sdbusplus/timer.hpp>
#include <sdeventplus/event.hpp>
@@ -144,18 +145,20 @@
* @param[in] requestMsg - PLDM request message
* @param[in] numRetries - number of request retries
* @param[in] timeout - time to wait between each retry in milliseconds
+ * @param[in] verbose - verbose tracing flag
*/
explicit Request(int fd, mctp_eid_t eid, sdeventplus::Event& event,
pldm::Request&& requestMsg, uint8_t numRetries,
- std::chrono::milliseconds timeout) :
+ std::chrono::milliseconds timeout, bool verbose) :
RequestRetryTimer(event, numRetries, timeout),
- fd(fd), eid(eid), requestMsg(std::move(requestMsg))
+ fd(fd), eid(eid), requestMsg(std::move(requestMsg)), verbose(verbose)
{}
private:
int fd; //!< file descriptor of MCTP communications socket
mctp_eid_t eid; //!< endpoint ID of the remote MCTP endpoint
pldm::Request requestMsg; //!< PLDM request message
+ bool verbose; //!< verbose tracing flag
/** @brief Sends the PLDM request message on the socket
*
@@ -163,6 +166,10 @@
*/
int send() const
{
+ if (verbose)
+ {
+ pldm::utils::printBuffer(pldm::utils::Tx, requestMsg);
+ }
auto rc = pldm_send(eid, fd, requestMsg.data(), requestMsg.size());
if (rc < 0)
{
diff --git a/requester/test/handler_test.cpp b/requester/test/handler_test.cpp
index aa0655f..144e5f5 100644
--- a/requester/test/handler_test.cpp
+++ b/requester/test/handler_test.cpp
@@ -74,7 +74,7 @@
TEST_F(HandlerTest, singleRequestResponseScenario)
{
- Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq,
+ Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq, false,
seconds(1), 2, milliseconds(100));
pldm::Request request{};
auto instanceId = dbusImplReq.getInstanceId(eid);
@@ -96,7 +96,7 @@
TEST_F(HandlerTest, singleRequestInstanceIdTimerExpired)
{
- Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq,
+ Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq, false,
seconds(1), 2, milliseconds(100));
pldm::Request request{};
auto instanceId = dbusImplReq.getInstanceId(eid);
@@ -116,7 +116,7 @@
TEST_F(HandlerTest, multipleRequestResponseScenario)
{
- Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq,
+ Handler<NiceMock<MockRequest>> reqHandler(fd, event, dbusImplReq, false,
seconds(2), 2, milliseconds(100));
pldm::Request request{};
auto instanceId = dbusImplReq.getInstanceId(eid);
diff --git a/requester/test/mock_request.hpp b/requester/test/mock_request.hpp
index 8b51a03..355609d 100644
--- a/requester/test/mock_request.hpp
+++ b/requester/test/mock_request.hpp
@@ -16,7 +16,7 @@
public:
MockRequest(int /*fd*/, mctp_eid_t /*eid*/, sdeventplus::Event& event,
pldm::Request&& /*requestMsg*/, uint8_t numRetries,
- std::chrono::milliseconds responseTimeOut) :
+ std::chrono::milliseconds responseTimeOut, bool /*verbose*/) :
RequestRetryTimer(event, numRetries, responseTimeOut)
{}
diff --git a/requester/test/request_test.cpp b/requester/test/request_test.cpp
index 1b41ff6..5239c12 100644
--- a/requester/test/request_test.cpp
+++ b/requester/test/request_test.cpp
@@ -49,7 +49,7 @@
TEST_F(RequestIntfTest, 0Retries100msTimeout)
{
MockRequest request(fd, eid, event, std::move(requestMsg), 0,
- milliseconds(100));
+ milliseconds(100), false);
EXPECT_CALL(request, send())
.Times(Exactly(1))
.WillOnce(Return(PLDM_SUCCESS));
@@ -60,7 +60,7 @@
TEST_F(RequestIntfTest, 2Retries100msTimeout)
{
MockRequest request(fd, eid, event, std::move(requestMsg), 2,
- milliseconds(100));
+ milliseconds(100), false);
// send() is called a total of 3 times, the original plus two retries
EXPECT_CALL(request, send()).Times(3).WillRepeatedly(Return(PLDM_SUCCESS));
auto rc = request.start();
@@ -71,7 +71,7 @@
TEST_F(RequestIntfTest, 9Retries100msTimeoutRequestStoppedAfter1sec)
{
MockRequest request(fd, eid, event, std::move(requestMsg), 9,
- milliseconds(100));
+ milliseconds(100), false);
// send() will be called a total of 10 times, the original plus 9 retries.
// In a ideal scenario send() would have been called 10 times in 1 sec (when
// the timer is stopped) with a timeout of 100ms. Because there are delays
@@ -94,7 +94,7 @@
TEST_F(RequestIntfTest, 2Retries100msTimeoutsendReturnsError)
{
MockRequest request(fd, eid, event, std::move(requestMsg), 2,
- milliseconds(100));
+ milliseconds(100), false);
EXPECT_CALL(request, send()).Times(Exactly(1)).WillOnce(Return(PLDM_ERROR));
auto rc = request.start();
EXPECT_EQ(rc, PLDM_ERROR);