From 08233d44a6cfde878d7e10bca38ae935ed1c8fd5 Mon Sep 17 00:00:00 2001 From: Mauro Date: Wed, 30 Jun 2021 07:57:22 +0000 Subject: [HICN-713] Transport Library Major Refactoring 2 Co-authored-by: Luca Muscariello Co-authored-by: Michele Papalini Co-authored-by: Olivier Roques Co-authored-by: Giulio Grassi Signed-off-by: Mauro Sardara Change-Id: I5b2c667bad66feb45abdb5effe22ed0f6c85d1c2 --- libtransport/src/io_modules/memif/CMakeLists.txt | 4 +-- libtransport/src/io_modules/memif/hicn_vapi.c | 1 - .../src/io_modules/memif/memif_connector.cc | 35 +++++++++++----------- .../src/io_modules/memif/memif_connector.h | 4 +-- .../src/io_modules/memif/vpp_forwarder_module.cc | 15 +++++----- 5 files changed, 27 insertions(+), 32 deletions(-) (limited to 'libtransport/src/io_modules/memif') diff --git a/libtransport/src/io_modules/memif/CMakeLists.txt b/libtransport/src/io_modules/memif/CMakeLists.txt index c8a930e7b..fc1c1f135 100644 --- a/libtransport/src/io_modules/memif/CMakeLists.txt +++ b/libtransport/src/io_modules/memif/CMakeLists.txt @@ -11,8 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - find_package(Vpp REQUIRED) find_package(Libmemif REQUIRED) @@ -43,7 +41,7 @@ build_module(memif_module SHARED SOURCES ${MODULE_SOURCE_FILES} DEPENDS ${DEPENDENCIES} - COMPONENT lib${LIBTRANSPORT} + COMPONENT ${LIBTRANSPORT_COMPONENT}-io-modules LINK_LIBRARIES ${LIBMEMIF_LIBRARIES} ${SAFE_VAPI_LIBRARIES} INCLUDE_DIRS ${LIBTRANSPORT_INCLUDE_DIRS} diff --git a/libtransport/src/io_modules/memif/hicn_vapi.c b/libtransport/src/io_modules/memif/hicn_vapi.c index b83a36b47..6d78026ab 100644 --- a/libtransport/src/io_modules/memif/hicn_vapi.c +++ b/libtransport/src/io_modules/memif/hicn_vapi.c @@ -14,7 +14,6 @@ */ #include -#include #include #define HICN_VPP_PLUGIN diff --git a/libtransport/src/io_modules/memif/memif_connector.cc b/libtransport/src/io_modules/memif/memif_connector.cc index 4a688d68f..68ad52b63 100644 --- a/libtransport/src/io_modules/memif/memif_connector.cc +++ b/libtransport/src/io_modules/memif/memif_connector.cc @@ -13,6 +13,7 @@ * limitations under the License. */ +#include #include #include #include @@ -66,6 +67,7 @@ MemifConnector::MemifConnector(PacketReceivedCallback &&receive_callback, disconnect_timer_( std::make_unique(event_reactor_)), io_service_(io_service), + work_(asio::make_work_guard(io_service_)), memif_connection_(std::make_unique()), tx_buf_counter_(0), is_reconnection_(false), @@ -83,7 +85,7 @@ void MemifConnector::init() { nullptr, nullptr, nullptr); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_init: %s", memif_strerror(err)); + LOG(ERROR) << "memif_init: " << memif_strerror(err); } } @@ -95,8 +97,6 @@ void MemifConnector::connect(uint32_t memif_id, long memif_mode) { createMemif(memif_id, memif_mode, nullptr); - work_ = std::make_unique(io_service_); - while (state_ != State::CONNECTED) { MemifConnector::main_event_reactor_.runOneEvent(); } @@ -107,7 +107,7 @@ void MemifConnector::connect(uint32_t memif_id, long memif_mode) { int fd = -1; err = memif_get_queue_efd(memif_connection_->conn, 0, &fd); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_get_queue_efd: %s", memif_strerror(err)); + LOG(ERROR) << "memif_get_queue_efd: " << memif_strerror(err); return; } @@ -198,11 +198,11 @@ int MemifConnector::deleteMemif() { err = memif_delete(&c->conn); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_delete: %s", memif_strerror(err)); + LOG(ERROR) << "memif_delete: " << memif_strerror(err); } if (TRANSPORT_EXPECT_FALSE(c->conn != nullptr)) { - TRANSPORT_LOGE("memif delete fail"); + LOG(ERROR) << "memif delete fail"; } return 0; @@ -248,8 +248,8 @@ int MemifConnector::controlFdUpdate(int fd, uint8_t events, void *private_ctx) { memif_err = memif_control_fd_handler(evt.data.fd, event); if (TRANSPORT_EXPECT_FALSE(memif_err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_control_fd_handler: %s", - memif_strerror(memif_err)); + LOG(ERROR) << "memif_control_fd_handler: " + << memif_strerror(memif_err); } return 0; @@ -265,7 +265,7 @@ int MemifConnector::bufferAlloc(long n, uint16_t qid) { err = memif_buffer_alloc(c->conn, qid, c->tx_bufs, n, &r, 2000); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_buffer_alloc: %s", memif_strerror(err)); + LOG(ERROR) << "memif_buffer_alloc: " << memif_strerror(err); return -1; } @@ -282,13 +282,13 @@ int MemifConnector::txBurst(uint16_t qid) { err = memif_tx_burst(c->conn, qid, c->tx_bufs, c->tx_buf_num, &r); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_tx_burst: %s", memif_strerror(err)); + LOG(ERROR) << "memif_tx_burst: " << memif_strerror(err); } // err = memif_refill_queue(c->conn, qid, r, 0); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_tx_burst: %s", memif_strerror(err)); + LOG(ERROR) << "memif_tx_burst: " << memif_strerror(err); c->tx_buf_num -= r; return -1; } @@ -350,14 +350,14 @@ int MemifConnector::onInterrupt(memif_conn_handle_t conn, void *private_ctx, if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS && err != MEMIF_ERR_NOBUF)) { - TRANSPORT_LOGE("memif_rx_burst: %s", memif_strerror(err)); + LOG(ERROR) << "memif_rx_burst: " << memif_strerror(err); goto error; } c->rx_buf_num += rx; if (TRANSPORT_EXPECT_FALSE(connector->io_service_.stopped())) { - TRANSPORT_LOGE("socket stopped: ignoring %u packets", rx); + LOG(ERROR) << "socket stopped: ignoring " << rx << " packets"; goto error; } @@ -369,7 +369,7 @@ int MemifConnector::onInterrupt(memif_conn_handle_t conn, void *private_ctx, auto packet = connector->getPacketFromBuffer(buffer.first, packet_length); if (!connector->input_buffer_.push(std::move(packet))) { - TRANSPORT_LOGE("Error pushing packet. Ring buffer full."); + LOG(ERROR) << "Error pushing packet. Ring buffer full."; // TODO Here we should consider the possibility to signal the congestion // to the application, that would react properly (e.g. slow down @@ -383,7 +383,7 @@ int MemifConnector::onInterrupt(memif_conn_handle_t conn, void *private_ctx, err = memif_refill_queue(conn, qid, rx, 0); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_buffer_free: %s", memif_strerror(err)); + LOG(ERROR) << "memif_buffer_free: " << memif_strerror(err); } c->rx_buf_num -= rx; @@ -400,7 +400,7 @@ error: err = memif_refill_queue(c->conn, qid, rx, 0); if (TRANSPORT_EXPECT_FALSE(err != MEMIF_ERR_SUCCESS)) { - TRANSPORT_LOGE("memif_buffer_free: %s", memif_strerror(err)); + LOG(ERROR) << "memif_buffer_free: " << memif_strerror(err); } c->rx_buf_num -= rx; @@ -413,7 +413,6 @@ void MemifConnector::close() { disconnect_timer_->asyncWait([this](const std::error_code &ec) { deleteMemif(); event_reactor_.stop(); - work_.reset(); }); if (memif_worker_ && memif_worker_->joinable()) { @@ -452,7 +451,7 @@ int MemifConnector::doSend() { n = bufferAlloc(max, memif_connection_->tx_qid); if (TRANSPORT_EXPECT_FALSE(n < 0)) { - TRANSPORT_LOGE("Error allocating buffers."); + LOG(ERROR) << "Error allocating buffers."; return -1; } diff --git a/libtransport/src/io_modules/memif/memif_connector.h b/libtransport/src/io_modules/memif/memif_connector.h index bed3516dc..0a189f893 100644 --- a/libtransport/src/io_modules/memif/memif_connector.h +++ b/libtransport/src/io_modules/memif/memif_connector.h @@ -20,10 +20,10 @@ #include #include //#include +#include #include #include -#include #include #include #include @@ -108,7 +108,7 @@ class MemifConnector : public Connector { std::unique_ptr send_timer_; std::unique_ptr disconnect_timer_; asio::io_service &io_service_; - std::unique_ptr work_; + asio::executor_work_guard work_; std::unique_ptr memif_connection_; uint16_t tx_buf_counter_; diff --git a/libtransport/src/io_modules/memif/vpp_forwarder_module.cc b/libtransport/src/io_modules/memif/vpp_forwarder_module.cc index dcbcd7ed0..44c8376df 100644 --- a/libtransport/src/io_modules/memif/vpp_forwarder_module.cc +++ b/libtransport/src/io_modules/memif/vpp_forwarder_module.cc @@ -13,6 +13,7 @@ * limitations under the License. */ +#include #include #include #include @@ -148,21 +149,19 @@ void VPPForwarderModule::producerConnection() { void VPPForwarderModule::connect(bool is_consumer) { int retry = 20; - TRANSPORT_LOGI("Connecting to VPP through vapi."); + LOG(INFO) << "Connecting to VPP through vapi."; vapi_error_e ret = vapi_connect_safe(&sock_, 0); while (ret != VAPI_OK && retry > 0) { - TRANSPORT_LOGE("Error connecting to VPP through vapi. Retrying.."); + LOG(ERROR) << "Error connecting to VPP through vapi. Retrying.."; --retry; ret = vapi_connect_safe(&sock_, 0); } - if (ret != VAPI_OK) { - throw std::runtime_error( - "Impossible to connect to forwarder. Is VPP running?"); - } + CHECK_EQ(ret, VAPI_OK) + << "Impossible to connect to forwarder. Is VPP running?"; - TRANSPORT_LOGI("Connected to VPP through vapi."); + LOG(INFO) << "Connected to VPP through vapi."; sw_if_index_ = getMemifConfiguration(); @@ -247,7 +246,7 @@ void VPPForwarderModule::closeConnection() { int ret = memif_vapi_delete_memif(VPPForwarderModule::sock_, sw_if_index_); if (ret < 0) { - TRANSPORT_LOGE("Error deleting memif with sw idx %u.", sw_if_index_); + LOG(ERROR) << "Error deleting memif with sw idx " << sw_if_index_; } } -- cgit 1.2.3-korg