From 2bb2365be3dff92423f148b806646dfd8d532995 Mon Sep 17 00:00:00 2001 From: Kamalkumar Patel Date: Tue, 3 Oct 2023 13:28:13 -0500 Subject: [PATCH] Adding response mechanism to remote terminus - this changes are in suppoort of aynchronous file io operation between pldm and remote terminus. - previously pldm send response to remote terminus when it's complete the operation and that duration pldm is blocked but new response mechanism will be introduced in case of event loop, pldm can take time to process request and meanwhile it can receive another request. Change-Id: I9537d5525e6af76b7867608a2e4f3492b2a631d2 Signed-off-by: Kamalkumar Patel --- common/utils.hpp | 7 +- oem/ibm/libpldmresponder/file_io.hpp | 19 ++- oem/ibm/libpldmresponder/file_io_by_type.hpp | 18 ++- .../libpldmresponder/file_io_type_cert.hpp | 2 +- .../libpldmresponder/file_io_type_dump.hpp | 2 +- oem/ibm/libpldmresponder/file_io_type_lic.hpp | 2 +- oem/ibm/libpldmresponder/file_io_type_lid.hpp | 3 +- .../libpldmresponder/file_io_type_pcie.hpp | 2 +- oem/ibm/libpldmresponder/file_io_type_pel.hpp | 2 +- .../file_io_type_progress_src.hpp | 2 +- oem/ibm/libpldmresponder/file_io_type_vpd.hpp | 2 +- oem/ibm/libpldmresponder/oem_ibm_handler.cpp | 1 - oem/ibm/test/libpldmresponder_fileio_test.cpp | 36 ++--- pldmd/pldm_resp_interface.hpp | 136 ++++++++++++++++++ pldmd/pldmd.cpp | 15 +- 15 files changed, 213 insertions(+), 36 deletions(-) create mode 100644 pldmd/pldm_resp_interface.hpp diff --git a/common/utils.hpp b/common/utils.hpp index 431a61a0d..0a6f59c9c 100644 --- a/common/utils.hpp +++ b/common/utils.hpp @@ -61,11 +61,13 @@ struct CustomFD CustomFD(CustomFD&&) = delete; CustomFD& operator=(CustomFD&&) = delete; - CustomFD(int fd) : fd(fd) {} + CustomFD(int fd, bool closeOnOutScope = true) : + fd(fd), closeOnOutScope(closeOnOutScope) + {} ~CustomFD() { - if (fd >= 0) + if (fd >= 0 && closeOnOutScope) { close(fd); } @@ -78,6 +80,7 @@ struct CustomFD private: int fd = -1; + bool closeOnOutScope; }; /** @brief Calculate the pad for PLDM data diff --git a/oem/ibm/libpldmresponder/file_io.hpp b/oem/ibm/libpldmresponder/file_io.hpp index 4cba06641..3862422ec 100644 --- a/oem/ibm/libpldmresponder/file_io.hpp +++ b/oem/ibm/libpldmresponder/file_io.hpp @@ -1,9 +1,11 @@ #pragma once #include "common/utils.hpp" +#include "file_io_by_type.hpp" #include "oem/ibm/requester/dbus_to_file_handler.hpp" #include "oem_ibm_handler.hpp" #include "pldmd/handler.hpp" +#include "pldmd/pldm_resp_interface.hpp" #include "requester/handler.hpp" #include @@ -11,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -18,6 +21,7 @@ #include #include +#include #include #include @@ -29,6 +33,14 @@ namespace responder { namespace dma { + +struct IOPart +{ + uint32_t length; + uint32_t offset; + uint64_t address; +}; + // The minimum data size of dma transfer in bytes constexpr uint32_t minSize = 16; @@ -172,10 +184,12 @@ class Handler : public CmdHandler public: Handler(oem_platform::Handler* oemPlatformHandler, int hostSockFd, uint8_t hostEid, dbus_api::Requester* dbusImplReqester, - pldm::requester::Handler* handler) : + pldm::requester::Handler* handler, + pldm::response_api::Transport* respInterface) : oemPlatformHandler(oemPlatformHandler), hostSockFd(hostSockFd), hostEid(hostEid), - dbusImplReqester(dbusImplReqester), handler(handler) + dbusImplReqester(dbusImplReqester), handler(handler), + responseHdr({0, 0, respInterface, 0, -1}) { handlers.emplace(PLDM_READ_FILE_INTO_MEMORY, [this](const pldm_msg* request, size_t payloadLength) { @@ -490,6 +504,7 @@ class Handler : public CmdHandler pldm::requester::Handler* handler; std::vector> dbusToFileHandlers; + ResponseHdr responseHdr; }; } // namespace oem_ibm diff --git a/oem/ibm/libpldmresponder/file_io_by_type.hpp b/oem/ibm/libpldmresponder/file_io_by_type.hpp index e4416a2c6..4b7e913c1 100644 --- a/oem/ibm/libpldmresponder/file_io_by_type.hpp +++ b/oem/ibm/libpldmresponder/file_io_by_type.hpp @@ -1,6 +1,7 @@ #pragma once -#include "file_io.hpp" +#include "oem_ibm_handler.hpp" +#include "pldmd/pldm_resp_interface.hpp" namespace pldm { @@ -8,6 +9,21 @@ namespace pldm namespace responder { +class FileHandler; +namespace dma +{ +class DMA; +} // namespace dma + +struct ResponseHdr +{ + uint8_t instance_id; + uint8_t command; + pldm::response_api::Transport* respInterface; + std::shared_ptr functionPtr = nullptr; + int key; +}; + namespace fs = std::filesystem; /** diff --git a/oem/ibm/libpldmresponder/file_io_type_cert.hpp b/oem/ibm/libpldmresponder/file_io_type_cert.hpp index cfc09985c..fad308a63 100644 --- a/oem/ibm/libpldmresponder/file_io_type_cert.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_cert.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" #include diff --git a/oem/ibm/libpldmresponder/file_io_type_dump.hpp b/oem/ibm/libpldmresponder/file_io_type_dump.hpp index d1e62b406..c02b11dc4 100644 --- a/oem/ibm/libpldmresponder/file_io_type_dump.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_dump.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" namespace pldm { diff --git a/oem/ibm/libpldmresponder/file_io_type_lic.hpp b/oem/ibm/libpldmresponder/file_io_type_lic.hpp index fcb901ca1..707d2bef6 100644 --- a/oem/ibm/libpldmresponder/file_io_type_lic.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_lic.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" namespace pldm { diff --git a/oem/ibm/libpldmresponder/file_io_type_lid.hpp b/oem/ibm/libpldmresponder/file_io_type_lid.hpp index 8b10907fa..57f44c19a 100644 --- a/oem/ibm/libpldmresponder/file_io_type_lid.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_lid.hpp @@ -1,7 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" -#include "xyz/openbmc_project/Common/error.hpp" +#include "file_io.hpp" #include #include diff --git a/oem/ibm/libpldmresponder/file_io_type_pcie.hpp b/oem/ibm/libpldmresponder/file_io_type_pcie.hpp index 031314b5e..6c8c1962c 100644 --- a/oem/ibm/libpldmresponder/file_io_type_pcie.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_pcie.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" #include #include diff --git a/oem/ibm/libpldmresponder/file_io_type_pel.hpp b/oem/ibm/libpldmresponder/file_io_type_pel.hpp index 7cf19e29f..11519acb6 100644 --- a/oem/ibm/libpldmresponder/file_io_type_pel.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_pel.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" namespace pldm { diff --git a/oem/ibm/libpldmresponder/file_io_type_progress_src.hpp b/oem/ibm/libpldmresponder/file_io_type_progress_src.hpp index 85276b5b5..fd17dadb5 100644 --- a/oem/ibm/libpldmresponder/file_io_type_progress_src.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_progress_src.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" namespace pldm { diff --git a/oem/ibm/libpldmresponder/file_io_type_vpd.hpp b/oem/ibm/libpldmresponder/file_io_type_vpd.hpp index d5cf41211..11db24306 100644 --- a/oem/ibm/libpldmresponder/file_io_type_vpd.hpp +++ b/oem/ibm/libpldmresponder/file_io_type_vpd.hpp @@ -1,6 +1,6 @@ #pragma once -#include "file_io_by_type.hpp" +#include "file_io.hpp" namespace pldm { diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp index af76a6daf..37d8eeaf9 100644 --- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp +++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp @@ -5,7 +5,6 @@ #include "collect_slot_vpd.hpp" #include "file_io_type_lid.hpp" -#include "libpldmresponder/file_io.hpp" #include "libpldmresponder/pdr_utils.hpp" #include diff --git a/oem/ibm/test/libpldmresponder_fileio_test.cpp b/oem/ibm/test/libpldmresponder_fileio_test.cpp index 1d83ee0e6..bfb4cdb7c 100644 --- a/oem/ibm/test/libpldmresponder_fileio_test.cpp +++ b/oem/ibm/test/libpldmresponder_fileio_test.cpp @@ -225,7 +225,7 @@ TEST(ReadFileIntoMemory, BadPath) // Pass invalid payload length std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileIntoMemory(request, 0); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -259,7 +259,7 @@ TEST_F(TestFileTable, ReadFileInvalidFileHandle) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileIntoMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_HANDLE); @@ -294,7 +294,7 @@ TEST_F(TestFileTable, ReadFileInvalidOffset) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileIntoMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_DATA_OUT_OF_RANGE); @@ -329,7 +329,7 @@ TEST_F(TestFileTable, ReadFileInvalidLength) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileIntoMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -367,7 +367,7 @@ TEST_F(TestFileTable, ReadFileInvalidEffectiveLength) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileIntoMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -399,7 +399,7 @@ TEST(WriteFileFromMemory, BadPath) // Pass invalid payload length std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.writeFileFromMemory(request, 0); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -438,7 +438,7 @@ TEST_F(TestFileTable, WriteFileInvalidFileHandle) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.writeFileFromMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_HANDLE); @@ -474,7 +474,7 @@ TEST_F(TestFileTable, WriteFileInvalidOffset) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.writeFileFromMemory(request, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_DATA_OUT_OF_RANGE); @@ -547,7 +547,7 @@ TEST_F(TestFileTable, GetFileTableCommand) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.getFileTable(requestMsgPtr, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_SUCCESS); @@ -574,7 +574,7 @@ TEST_F(TestFileTable, GetFileTableCommandReqLengthMismatch) // Pass invalid command payload length std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.getFileTable(request, 0); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -600,7 +600,7 @@ TEST_F(TestFileTable, GetFileTableCommandOEMAttrTable) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.getFileTable(requestMsgPtr, requestPayloadLength); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_TABLE_TYPE); @@ -632,7 +632,7 @@ TEST_F(TestFileTable, ReadFileBadPath) // Invalid payload length std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFile(requestMsgPtr, 0); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -686,7 +686,7 @@ TEST_F(TestFileTable, ReadFileGoodPath) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto responseMsg = handler.readFile(requestMsgPtr, payload_length); auto response = reinterpret_cast( responseMsg.data() + sizeof(pldm_msg_hdr)); @@ -740,7 +740,7 @@ TEST_F(TestFileTable, WriteFileBadPath) // Invalid payload length std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.writeFile(requestMsgPtr, 0); auto responsePtr = reinterpret_cast(response.data()); ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH); @@ -791,7 +791,7 @@ TEST_F(TestFileTable, WriteFileGoodPath) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto responseMsg = handler.writeFile(requestMsgPtr, payload_length); auto response = reinterpret_cast( responseMsg.data() + sizeof(pldm_msg_hdr)); @@ -829,7 +829,7 @@ TEST(writeFileByTypeFromMemory, testBadPath) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.writeFileByTypeFromMemory(req, 0); auto responsePtr = reinterpret_cast(response.data()); @@ -909,7 +909,7 @@ TEST(readFileByTypeIntoMemory, testBadPath) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileByTypeIntoMemory(req, 0); auto responsePtr = reinterpret_cast(response.data()); struct pldm_read_write_file_by_type_memory_resp* resp = @@ -951,7 +951,7 @@ TEST(readFileByType, testBadPath) std::unique_ptr oemPlatformHandler{}; oem_ibm::Handler handler(oemPlatformHandler.get(), hostSocketFd, host_eid, - nullptr, nullptr); + nullptr, nullptr, nullptr); auto response = handler.readFileByType(req, 0); auto responsePtr = reinterpret_cast(response.data()); struct pldm_read_write_file_by_type_resp* resp = diff --git a/pldmd/pldm_resp_interface.hpp b/pldmd/pldm_resp_interface.hpp new file mode 100644 index 000000000..e261da723 --- /dev/null +++ b/pldmd/pldm_resp_interface.hpp @@ -0,0 +1,136 @@ +#pragma once + +#include "common/flight_recorder.hpp" +#include "common/utils.hpp" + +#include + +#include + +#include +#include +#include +#include +using namespace pldm; +using namespace pldm::utils; +using namespace pldm::flightrecorder; + +PHOSPHOR_LOG2_USING; + +namespace pldm +{ +namespace response_api +{ + +/** @class Transport + * + * @brief This class performs the necessary operation in pldm for + * responding remote pldm. This class is mostly designed in special case + * when pldm need to send reply to host after FILE IO operation + * completed. + */ +class Transport +{ + public: + /** @brief Transport constructor + */ + Transport() = delete; + Transport(const Transport&) = delete; + Transport(int socketFd, bool verbose = false) : + sockFd(socketFd), verbose(verbose) + {} + + /** @brief method to send response to remote pldm using transport interface + * @param response - response of each request + * @param index - index to delete header from maintained map + * @returns returns 0 if success else -1 + */ + int sendPLDMRespMsg(Response& response, int index) + { + struct iovec iov[2]{}; + struct msghdr msg + {}; + + FlightRecorder::GetInstance().saveRecord(response, true); + if (verbose) + { + printBuffer(Tx, response); + } + + iov[0].iov_base = &requestMap[index][0]; + iov[0].iov_len = sizeof(requestMap[index][0]) + + sizeof(requestMap[index][1]); + iov[1].iov_base = response.data(); + iov[1].iov_len = response.size(); + msg.msg_iov = iov; + msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]); + + int rc = sendmsg(sockFd, &msg, 0); + removeHeader(index); + if (rc < 0) + { + rc = errno; + error("sendto system call failed, errno= {ERRNO}", "ERRNO", rc); + } + return rc; + } + + /** @brief method to acquire one copy of request header into request map. + * @param reqMsg - overwrite each request header into existing mRequestMsg + * variable + */ + void setRequestMsgRef(std::vector& reqMsg) + { + mRequestMsg = reqMsg; + } + + /** @brief method to store request header into map when DMA data transfer + * request received. + */ + int getRequestHeaderIndex() + { + int index = getUniqueKey(); + requestMap[index] = mRequestMsg; + return index; + } + + private: + /** @brief method to remove request header after sending response to host + */ + void removeHeader(int index) + { + requestMap.erase(index); + } + + /** @brief method to generate unique key to store request header into map + * @returns available nearest key value as integer + */ + int getUniqueKey() + { + int key = 0; + for (size_t index = 0; index <= requestMap.size(); index++) + { + if (requestMap.find(index) == requestMap.end()) + { + key = index; + break; + } + } + return key; + } + + private: + std::vector mRequestMsg; + std::map> requestMap; + int sockFd; + bool verbose; +}; + +struct Interfaces +{ + std::unique_ptr transport = nullptr; +}; + +} // namespace response_api + +} // namespace pldm diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp index 6fb6e8579..b79c86c09 100644 --- a/pldmd/pldmd.cpp +++ b/pldmd/pldmd.cpp @@ -9,6 +9,7 @@ #include "fw-update/manager.hpp" #include "host-bmc/dbus/deserialize.hpp" #include "invoker.hpp" +#include "pldm_resp_interface.hpp" #include "requester/handler.hpp" #include "requester/mctp_endpoint_discovery.hpp" #include "requester/request.hpp" @@ -214,7 +215,7 @@ int main(int argc, char** argv) Invoker invoker{}; requester::Handler reqHandler( sockfd, event, dbusImplReq, currentSendbuffSize, verbose); - + pldm::response_api::Interfaces respInterface; #ifdef LIBPLDMRESPONDER using namespace pldm::state_sensor; dbus_api::Host dbusImplHost(bus, "/xyz/openbmc_project/pldm"); @@ -265,6 +266,8 @@ int main(int argc, char** argv) } #ifdef OEM_IBM + respInterface.transport = + std::make_unique(sockfd, verbose); std::unique_ptr codeUpdate = std::make_unique(&dbusHandler); std::unique_ptr slotHandler = @@ -280,7 +283,8 @@ int main(int argc, char** argv) slotHandler->setOemPlatformHandler(oemPlatformHandler.get()); invoker.registerHandler(PLDM_OEM, std::make_unique( oemPlatformHandler.get(), sockfd, - hostEID, &dbusImplReq, &reqHandler)); + hostEID, &dbusImplReq, &reqHandler, + respInterface.transport.get())); // host lamp test std::unique_ptr hostLampTest = @@ -374,7 +378,8 @@ int main(int argc, char** argv) std::make_unique(bus, fwManager.get()); auto callback = [verbose, &invoker, &reqHandler, currentSendbuffSize, - &fwManager](IO& io, int fd, uint32_t revents) mutable { + &fwManager, + &respInterface](IO& io, int fd, uint32_t revents) mutable { if (!(revents & EPOLLIN)) { return; @@ -424,6 +429,10 @@ int main(int argc, char** argv) } else { + if (respInterface.transport) + { + respInterface.transport->setRequestMsgRef(requestMsg); + } // process message and send response auto response = processRxMsg(requestMsg, invoker, reqHandler, fwManager.get());