diff options
author | Mauro <you@example.com> | 2021-06-30 07:57:22 +0000 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2021-07-06 16:16:04 +0000 |
commit | 08233d44a6cfde878d7e10bca38ae935ed1c8fd5 (patch) | |
tree | 7ecc534d55bdc7e8dd15ecab084720910bcdf4d9 /libtransport/src/io_modules | |
parent | 147ba39bed26887f5eba84757e2463ab8e370a9a (diff) |
[HICN-713] Transport Library Major Refactoring 2
Co-authored-by: Luca Muscariello <muscariello@ieee.org>
Co-authored-by: Michele Papalini <micpapal@cisco.com>
Co-authored-by: Olivier Roques <oroques+fdio@cisco.com>
Co-authored-by: Giulio Grassi <gigrassi@cisco.com>
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Change-Id: I5b2c667bad66feb45abdb5effe22ed0f6c85d1c2
Diffstat (limited to 'libtransport/src/io_modules')
23 files changed, 112 insertions, 162 deletions
diff --git a/libtransport/src/io_modules/CMakeLists.txt b/libtransport/src/io_modules/CMakeLists.txt index cf466721f..29aec236a 100644 --- a/libtransport/src/io_modules/CMakeLists.txt +++ b/libtransport/src/io_modules/CMakeLists.txt @@ -11,10 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - -if (${CMAKE_SYSTEM_NAME} MATCHES "^(iOS|Android|Windows)$") - +if (${CMAKE_SYSTEM_NAME} MATCHES Android) list(APPEND SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/udp/hicn_forwarder_module.cc ${CMAKE_CURRENT_SOURCE_DIR}/udp/udp_socket_connector.cc @@ -27,7 +24,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "^(iOS|Android|Windows)$") set(SOURCE_FILES ${SOURCE_FILES} PARENT_SCOPE) set(HEADER_FILES ${HEADER_FILES} PARENT_SCOPE) -else () +else() add_subdirectory(udp) add_subdirectory(loopback) add_subdirectory(forwarder) diff --git a/libtransport/src/io_modules/forwarder/CMakeLists.txt b/libtransport/src/io_modules/forwarder/CMakeLists.txt index 92662bc4c..a1d0c5db5 100644 --- a/libtransport/src/io_modules/forwarder/CMakeLists.txt +++ b/libtransport/src/io_modules/forwarder/CMakeLists.txt @@ -11,9 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - - list(APPEND MODULE_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/connector.h ${CMAKE_CURRENT_SOURCE_DIR}/endpoint.h @@ -37,7 +34,7 @@ build_module(forwarder_module SHARED SOURCES ${MODULE_SOURCE_FILES} DEPENDS ${DEPENDENCIES} - COMPONENT lib${LIBTRANSPORT} + COMPONENT ${LIBTRANSPORT_COMPONENT}-io-modules INCLUDE_DIRS ${LIBTRANSPORT_INCLUDE_DIRS} ${LIBTRANSPORT_INTERNAL_INCLUDE_DIRS} DEFINITIONS ${COMPILER_DEFINITIONS} COMPILE_OPTIONS ${COMPILE_FLAGS} diff --git a/libtransport/src/io_modules/forwarder/forwarder.cc b/libtransport/src/io_modules/forwarder/forwarder.cc index 7e89e2f9f..0546cb8b3 100644 --- a/libtransport/src/io_modules/forwarder/forwarder.cc +++ b/libtransport/src/io_modules/forwarder/forwarder.cc @@ -15,6 +15,7 @@ #include <core/global_configuration.h> #include <core/local_connector.h> +#include <glog/logging.h> #include <io_modules/forwarder/forwarder.h> #include <io_modules/forwarder/global_id_counter.h> #include <io_modules/forwarder/udp_tunnel.h> @@ -127,7 +128,7 @@ void Forwarder::onPacketFromListener(Connector *connector, std::bind(&Forwarder::onPacketReceived, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - TRANSPORT_LOGD("Packet received from listener."); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "Packet received from listener."; { utils::SpinLock::Acquire locked(connector_lock_); @@ -157,10 +158,8 @@ void Forwarder::onPacketReceived(Connector *connector, if ((is_producer && is_interest) || (!is_producer && !is_interest)) { c.second->send(*packet); } else { - TRANSPORT_LOGD( - "Error sending packet to local connector. is_interest = %d - " - "is_producer = %d", - (int)is_interest, (int)is_producer); + LOG(ERROR) << "Error sending packet to local connector. is_interest = " + << is_interest << " - is_producer = " << is_producer; } } @@ -178,9 +177,9 @@ void Forwarder::send(Packet &packet) { auto remote_endpoint = remote_connectors_.begin()->second->getRemoteEndpoint(); - TRANSPORT_LOGD("Sending packet to: %s:%u", - remote_endpoint.getAddress().to_string().c_str(), - remote_endpoint.getPort()); + DLOG_IF(INFO, VLOG_IS_ON(3)) + << "Sending packet to: " << remote_endpoint.getAddress() << ":" + << remote_endpoint.getPort(); remote_connectors_.begin()->second->send(packet); } @@ -199,7 +198,7 @@ void Forwarder::parseForwarderConfiguration( // Get number of threads int n_threads = 1; forwarder_config.lookupValue("n_threads", n_threads); - TRANSPORT_LOGD("Forwarder threads from config file: %u", n_threads); + VLOG(1) << "Forwarder threads from config file: " << n_threads; config_.setThreadNumber(n_threads); } @@ -219,8 +218,8 @@ void Forwarder::parseForwarderConfiguration( listener.lookupValue("local_port", port); list.port = (uint16_t)(port); - TRANSPORT_LOGD("Adding listener %s, (%s:%u)", list.name.c_str(), - list.address.c_str(), list.port); + VLOG(1) << "Adding listener " << list.name << ", ( " << list.address + << ":" << list.port << ")"; config_.addListener(std::move(list)); } } @@ -262,9 +261,9 @@ void Forwarder::parseForwarderConfiguration( conn.remote_port = (uint16_t)(port); - TRANSPORT_LOGD("Adding connector %s, (%s:%u %s:%u)", conn.name.c_str(), - conn.local_address.c_str(), conn.local_port, - conn.remote_address.c_str(), conn.remote_port); + VLOG(1) << "Adding connector " << conn.name << ", (" << conn.local_address + << ":" << conn.local_port << " " << conn.remote_address << ":" + << conn.remote_port << ")"; config_.addConnector(std::move(conn)); } } @@ -285,8 +284,8 @@ void Forwarder::parseForwarderConfiguration( route.lookupValue("connector", r.connector); r.weight = (uint16_t)(weight); - TRANSPORT_LOGD("Adding route %s %s (%s %u)", r.name.c_str(), - r.prefix.c_str(), r.connector.c_str(), r.weight); + VLOG(1) << "Adding route " << r.name << " " << r.prefix << " (" + << r.connector << " " << r.weight << ")"; config_.addRoute(std::move(r)); } } diff --git a/libtransport/src/io_modules/forwarder/forwarder_module.cc b/libtransport/src/io_modules/forwarder/forwarder_module.cc index 356b42d3b..4f95b9ca0 100644 --- a/libtransport/src/io_modules/forwarder/forwarder_module.cc +++ b/libtransport/src/io_modules/forwarder/forwarder_module.cc @@ -13,8 +13,8 @@ * limitations under the License. */ +#include <glog/logging.h> #include <hicn/transport/errors/not_implemented_exception.h> -#include <hicn/transport/utils/log.h> #include <io_modules/forwarder/forwarder_module.h> namespace transport { @@ -36,8 +36,8 @@ bool ForwarderModule::isConnected() { return true; } void ForwarderModule::send(Packet &packet) { IoModule::send(packet); forwarder_.send(packet); - // TRANSPORT_LOGD("ForwarderModule: sending from %u to %d", local_id_, - // 1 - local_id_); + DLOG_IF(INFO, VLOG_IS_ON(3)) + << "Sending from " << connector_id_ << " to " << 1 - connector_id_; // local_faces_.at(1 - local_id_).onPacket(packet); } diff --git a/libtransport/src/io_modules/forwarder/global_id_counter.h b/libtransport/src/io_modules/forwarder/global_id_counter.h index fe8d76730..0a67b76d5 100644 --- a/libtransport/src/io_modules/forwarder/global_id_counter.h +++ b/libtransport/src/io_modules/forwarder/global_id_counter.h @@ -15,6 +15,8 @@ #pragma once +#include <hicn/transport/utils/singleton.h> + #include <atomic> #include <mutex> @@ -23,32 +25,15 @@ namespace transport { namespace core { template <typename T = uint64_t> -class GlobalCounter { +class GlobalCounter : public utils::Singleton<GlobalCounter<T>> { public: - static GlobalCounter& getInstance() { - std::lock_guard<std::mutex> lock(global_mutex_); - - if (!instance_) { - instance_.reset(new GlobalCounter()); - } - - return *instance_; - } - + friend class utils::Singleton<GlobalCounter>; T getNext() { return counter_++; } private: GlobalCounter() : counter_(0) {} - static std::unique_ptr<GlobalCounter<T>> instance_; - static std::mutex global_mutex_; std::atomic<T> counter_; }; -template <typename T> -std::unique_ptr<GlobalCounter<T>> GlobalCounter<T>::instance_ = nullptr; - -template <typename T> -std::mutex GlobalCounter<T>::global_mutex_; - } // namespace core } // namespace transport
\ No newline at end of file diff --git a/libtransport/src/io_modules/forwarder/udp_tunnel.cc b/libtransport/src/io_modules/forwarder/udp_tunnel.cc index dc725fc4e..bf6a69b92 100644 --- a/libtransport/src/io_modules/forwarder/udp_tunnel.cc +++ b/libtransport/src/io_modules/forwarder/udp_tunnel.cc @@ -2,6 +2,7 @@ * Copyright (c) 2017-2019 Cisco and/or its affiliates. */ +#include <glog/logging.h> #include <hicn/transport/utils/branch_prediction.h> #include <io_modules/forwarder/errors.h> #include <io_modules/forwarder/udp_tunnel.h> @@ -62,7 +63,7 @@ void UdpTunnelConnector::send(Packet &packet) { void UdpTunnelConnector::send(const uint8_t *packet, std::size_t len) {} void UdpTunnelConnector::close() { - TRANSPORT_LOGD("UDPTunnelConnector::close"); + DLOG_IF(INFO, VLOG_IS_ON(2)) << "UDPTunnelConnector::close"; state_ = State::CLOSED; bool is_socket_owned = socket_.use_count() == 1; if (is_socket_owned) { @@ -150,8 +151,8 @@ void UdpTunnelConnector::writeHandler(std::error_code ec) { output_buffer_.pop_front(); } } else if (retval != EWOULDBLOCK && retval != EAGAIN) { - TRANSPORT_LOGE("Error sending messages! %s %d\n", strerror(errno), - retval); + LOG(ERROR) << "Error sending messages! " << strerror(errno) + << " << retval"; return; } } @@ -164,9 +165,8 @@ void UdpTunnelConnector::writeHandler(std::error_code ec) { } void UdpTunnelConnector::readHandler(std::error_code ec) { - TRANSPORT_LOGD("UdpTunnelConnector receive packet"); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "UdpTunnelConnector receive packet"; - // TRANSPORT_LOGD("UdpTunnelConnector received packet length=%lu", length); if (TRANSPORT_EXPECT_TRUE(!ec)) { if (TRANSPORT_EXPECT_TRUE(state_ == State::CONNECTED)) { if (current_position_ == 0) { @@ -182,8 +182,8 @@ void UdpTunnelConnector::readHandler(std::error_code ec) { int res = recvmmsg(socket_->native_handle(), rx_msgs_ + current_position_, max_burst - current_position_, MSG_DONTWAIT, nullptr); if (res < 0) { - TRANSPORT_LOGE("Error receiving messages! %s %d\n", strerror(errno), - res); + LOG(ERROR) << "Error receiving messages! " << strerror(errno) << " " + << res; return; } @@ -200,19 +200,20 @@ void UdpTunnelConnector::readHandler(std::error_code ec) { doRecvPacket(); } else { - TRANSPORT_LOGE( - "Error in UDP: Receiving packets from a not connected socket."); + LOG(ERROR) + << "Error in UDP: Receiving packets from a not connected socket."; } } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { - TRANSPORT_LOGE("The connection has been closed by the application."); + LOG(ERROR) << "The connection has been closed by the application."; return; } else { if (TRANSPORT_EXPECT_TRUE(state_ == State::CONNECTED)) { // receive_callback_(this, *read_msg_, ec); - TRANSPORT_LOGE("Error in UDP connector: %d %s", ec.value(), - ec.message().c_str()); + LOG(ERROR) << "Error in UDP connector: " << ec.value() << " " + << ec.message(); } else { - TRANSPORT_LOGE("Error while not connector"); + LOG(ERROR) << "Error in connector while not connected. " << ec.value() + << " " << ec.message(); } } } @@ -226,16 +227,17 @@ void UdpTunnelConnector::doRecvPacket() { #else socket_->async_wait(asio::ip::tcp::socket::wait_read, #endif - std::bind(&UdpTunnelConnector::readHandler, this, - std::placeholders::_1)); + std::bind(&UdpTunnelConnector::readHandler, this, + std::placeholders::_1)); } #else - TRANSPORT_LOGD("UdpTunnelConnector receive packet"); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "UdpTunnelConnector receive packet"; read_msg_ = getRawBuffer(); socket_->async_receive_from( asio::buffer(read_msg_.first, read_msg_.second), remote_endpoint_recv_, [this](std::error_code ec, std::size_t length) { - TRANSPORT_LOGD("UdpTunnelConnector received packet length=%lu", length); + DLOG_IF(INFO, VLOG_IS_ON(3)) + << "UdpTunnelConnector received packet length=" << length; if (TRANSPORT_EXPECT_TRUE(!ec)) { if (TRANSPORT_EXPECT_TRUE(state_ == State::CONNECTED)) { auto packet = getPacketFromBuffer(read_msg_.first, length); @@ -244,19 +246,19 @@ void UdpTunnelConnector::doRecvPacket() { make_error_code(forwarder_error::success)); doRecvPacket(); } else { - TRANSPORT_LOGE( - "Error in UDP: Receiving packets from a not connected socket."); + LOG(ERROR) << "Error in UDP: Receiving packets from a not " + "connected socket."; } } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { - TRANSPORT_LOGE("The connection has been closed by the application."); + LOG(ERROR) << "The connection has been closed by the application."; return; } else { if (TRANSPORT_EXPECT_TRUE(state_ == State::CONNECTED)) { - TRANSPORT_LOGE("Error in UDP connector: %d %s", ec.value(), - ec.message().c_str()); + LOG(ERROR) << "Error in UDP connector: " << ec.value() + << ec.message(); } else { - TRANSPORT_LOGE("Error while not connector"); + LOG(ERROR) << "Error while not connected"; } } }); @@ -276,7 +278,7 @@ void UdpTunnelConnector::doConnect() { doSendPacket(); } } else { - TRANSPORT_LOGE("[Hproxy] - UDP Connection failed!!!"); + LOG(ERROR) << "UDP Connection failed!!!"; timer_.expires_from_now(std::chrono::milliseconds(500)); timer_.async_wait(std::bind(&UdpTunnelConnector::doConnect, this)); } diff --git a/libtransport/src/io_modules/forwarder/udp_tunnel.h b/libtransport/src/io_modules/forwarder/udp_tunnel.h index df472af91..4f044f93f 100644 --- a/libtransport/src/io_modules/forwarder/udp_tunnel.h +++ b/libtransport/src/io_modules/forwarder/udp_tunnel.h @@ -4,12 +4,11 @@ #pragma once +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/connector.h> #include <hicn/transport/portability/platform.h> #include <io_modules/forwarder/errors.h> -#include <asio.hpp> -#include <asio/steady_timer.hpp> #include <iostream> #include <memory> diff --git a/libtransport/src/io_modules/forwarder/udp_tunnel_listener.cc b/libtransport/src/io_modules/forwarder/udp_tunnel_listener.cc index 12246c3cf..d047cc568 100644 --- a/libtransport/src/io_modules/forwarder/udp_tunnel_listener.cc +++ b/libtransport/src/io_modules/forwarder/udp_tunnel_listener.cc @@ -2,8 +2,8 @@ * Copyright (c) 2017-2019 Cisco and/or its affiliates. */ +#include <glog/logging.h> #include <hicn/transport/utils/hash.h> -#include <hicn/transport/utils/log.h> #include <io_modules/forwarder/udp_tunnel.h> #include <io_modules/forwarder/udp_tunnel_listener.h> @@ -36,9 +36,8 @@ void UdpTunnelListener::close() { #ifdef LINUX void UdpTunnelListener::readHandler(std::error_code ec) { - TRANSPORT_LOGD("UdpTunnelConnector receive packet"); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "UdpTunnelConnector receive packet"; - // TRANSPORT_LOGD("UdpTunnelConnector received packet length=%lu", length); if (TRANSPORT_EXPECT_TRUE(!ec)) { if (current_position_ == 0) { for (int i = 0; i < Connector::max_burst; i++) { @@ -56,7 +55,8 @@ void UdpTunnelListener::readHandler(std::error_code ec) { Connector::max_burst - current_position_, MSG_DONTWAIT, nullptr); if (res < 0) { - TRANSPORT_LOGE("Error in recvmmsg."); + LOG(ERROR) << "Error in recvmmsg."; + return; } for (int i = 0; i < res; i++) { @@ -119,10 +119,10 @@ void UdpTunnelListener::readHandler(std::error_code ec) { doRecvPacket(); } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { - TRANSPORT_LOGE("The connection has been closed by the application."); + LOG(ERROR) << "The connection has been closed by the application."; return; } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); } } #endif @@ -165,10 +165,10 @@ void UdpTunnelListener::doRecvPacket() { doRecvPacket(); } else if (ec.value() == static_cast<int>(std::errc::operation_canceled)) { - TRANSPORT_LOGE("The connection has been closed by the application."); + LOG(ERROR) << "The connection has been closed by the application."; return; } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); } }); #endif diff --git a/libtransport/src/io_modules/forwarder/udp_tunnel_listener.h b/libtransport/src/io_modules/forwarder/udp_tunnel_listener.h index 0ee40a400..5d197dcb0 100644 --- a/libtransport/src/io_modules/forwarder/udp_tunnel_listener.h +++ b/libtransport/src/io_modules/forwarder/udp_tunnel_listener.h @@ -4,11 +4,10 @@ #pragma once +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/connector.h> #include <hicn/transport/portability/platform.h> -#include <asio.hpp> -#include <asio/steady_timer.hpp> #include <unordered_map> namespace std { diff --git a/libtransport/src/io_modules/loopback/CMakeLists.txt b/libtransport/src/io_modules/loopback/CMakeLists.txt index ac6dc8068..b5ae0b7f7 100644 --- a/libtransport/src/io_modules/loopback/CMakeLists.txt +++ b/libtransport/src/io_modules/loopback/CMakeLists.txt @@ -11,9 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - - list(APPEND MODULE_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/loopback_module.h ) @@ -26,9 +23,8 @@ build_module(loopback_module SHARED SOURCES ${MODULE_SOURCE_FILES} DEPENDS ${DEPENDENCIES} - COMPONENT lib${LIBTRANSPORT} + COMPONENT ${LIBTRANSPORT_COMPONENT} INCLUDE_DIRS ${LIBTRANSPORT_INCLUDE_DIRS} ${LIBTRANSPORT_INTERNAL_INCLUDE_DIRS} - # LIBRARY_ROOT_DIR "vpp_plugins" DEFINITIONS ${COMPILER_DEFINITIONS} COMPILE_OPTIONS ${COMPILE_FLAGS} ) diff --git a/libtransport/src/io_modules/loopback/local_face.cc b/libtransport/src/io_modules/loopback/local_face.cc index a59dab235..b73444330 100644 --- a/libtransport/src/io_modules/loopback/local_face.cc +++ b/libtransport/src/io_modules/loopback/local_face.cc @@ -13,13 +13,12 @@ * limitations under the License. */ +#include <glog/logging.h> +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/content_object.h> #include <hicn/transport/core/interest.h> -#include <hicn/transport/utils/log.h> #include <io_modules/loopback/local_face.h> -#include <asio/io_service.hpp> - namespace transport { namespace core { @@ -56,7 +55,7 @@ Face &Face::operator=(Face &&other) { } void Face::onPacket(const Packet &packet) { - TRANSPORT_LOGD("Sending content to local socket."); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "Sending content to local socket."; if (Packet::isInterest(packet.data())) { rescheduleOnIoService<Interest>(packet); diff --git a/libtransport/src/io_modules/loopback/local_face.h b/libtransport/src/io_modules/loopback/local_face.h index 1cbcc2c72..1f4101447 100644 --- a/libtransport/src/io_modules/loopback/local_face.h +++ b/libtransport/src/io_modules/loopback/local_face.h @@ -15,12 +15,11 @@ #pragma once +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/connector.h> #include <hicn/transport/core/global_object_pool.h> #include <hicn/transport/utils/move_wrapper.h> -#include <asio/io_service.hpp> - namespace transport { namespace core { diff --git a/libtransport/src/io_modules/loopback/loopback_module.cc b/libtransport/src/io_modules/loopback/loopback_module.cc index 0bdbf8c8e..f7dd5e7b0 100644 --- a/libtransport/src/io_modules/loopback/loopback_module.cc +++ b/libtransport/src/io_modules/loopback/loopback_module.cc @@ -13,8 +13,8 @@ * limitations under the License. */ +#include <glog/logging.h> #include <hicn/transport/errors/not_implemented_exception.h> -#include <hicn/transport/utils/log.h> #include <io_modules/loopback/loopback_module.h> namespace transport { @@ -35,8 +35,8 @@ bool LoopbackModule::isConnected() { return true; } void LoopbackModule::send(Packet &packet) { IoModule::send(packet); - TRANSPORT_LOGD("LoopbackModule: sending from %u to %d", local_id_, - 1 - local_id_); + DLOG_IF(INFO, VLOG_IS_ON(3)) << "LoopbackModule: sending from " << local_id_ + << " to " << 1 - local_id_; local_faces_.at(1 - local_id_)->send(packet); } 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 <hicn/transport/config.h> -#include <hicn/transport/utils/log.h> #include <io_modules/memif/hicn_vapi.h> #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 <glog/logging.h> #include <hicn/transport/errors/not_implemented_exception.h> #include <io_modules/memif/memif_connector.h> #include <sys/epoll.h> @@ -66,6 +67,7 @@ MemifConnector::MemifConnector(PacketReceivedCallback &&receive_callback, disconnect_timer_( std::make_unique<utils::FdDeadlineTimer>(event_reactor_)), io_service_(io_service), + work_(asio::make_work_guard(io_service_)), memif_connection_(std::make_unique<memif_connection_t>()), 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<asio::io_service::work>(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 <hicn/transport/portability/portability.h> #include <hicn/transport/utils/ring_buffer.h> //#include <hicn/transport/core/hicn_vapi.h> +#include <hicn/transport/core/asio_wrapper.h> #include <utils/epoll_event_reactor.h> #include <utils/fd_deadline_timer.h> -#include <asio.hpp> #include <deque> #include <mutex> #include <thread> @@ -108,7 +108,7 @@ class MemifConnector : public Connector { std::unique_ptr<utils::FdDeadlineTimer> send_timer_; std::unique_ptr<utils::FdDeadlineTimer> disconnect_timer_; asio::io_service &io_service_; - std::unique_ptr<asio::io_service::work> work_; + asio::executor_work_guard<asio::io_context::executor_type> work_; std::unique_ptr<memif_connection_t> 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 <glog/logging.h> #include <hicn/transport/config.h> #include <hicn/transport/errors/not_implemented_exception.h> #include <io_modules/memif/hicn_vapi.h> @@ -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_; } } diff --git a/libtransport/src/io_modules/raw_socket/raw_socket_connector.cc b/libtransport/src/io_modules/raw_socket/raw_socket_connector.cc index 0bfcc2a58..62efdc3a5 100644 --- a/libtransport/src/io_modules/raw_socket/raw_socket_connector.cc +++ b/libtransport/src/io_modules/raw_socket/raw_socket_connector.cc @@ -15,7 +15,6 @@ #include <core/raw_socket_connector.h> #include <hicn/transport/utils/conversions.h> -#include <hicn/transport/utils/log.h> #include <net/if.h> #include <netdb.h> #include <stdio.h> @@ -165,7 +164,7 @@ void RawSocketConnector::doSendPacket() { doSendPacket(); } } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); } }); } @@ -185,7 +184,7 @@ void RawSocketConnector::doRecvPacket() { receive_callback_(std::move(read_msg_)); } } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); } doRecvPacket(); }); diff --git a/libtransport/src/io_modules/raw_socket/raw_socket_connector.h b/libtransport/src/io_modules/raw_socket/raw_socket_connector.h index aba4b1105..06892b3d8 100644 --- a/libtransport/src/io_modules/raw_socket/raw_socket_connector.h +++ b/libtransport/src/io_modules/raw_socket/raw_socket_connector.h @@ -17,13 +17,12 @@ #include <core/connector.h> #include <hicn/transport/config.h> +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/name.h> #include <linux/if_packet.h> #include <net/ethernet.h> #include <sys/socket.h> -#include <asio.hpp> -#include <asio/steady_timer.hpp> #include <deque> namespace transport { diff --git a/libtransport/src/io_modules/udp/CMakeLists.txt b/libtransport/src/io_modules/udp/CMakeLists.txt index 93518d0a2..b9c19d063 100644 --- a/libtransport/src/io_modules/udp/CMakeLists.txt +++ b/libtransport/src/io_modules/udp/CMakeLists.txt @@ -11,9 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - - list(APPEND MODULE_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/hicn_forwarder_module.h ${CMAKE_CURRENT_SOURCE_DIR}/udp_socket_connector.h @@ -24,23 +21,12 @@ list(APPEND MODULE_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/udp_socket_connector.cc ) -# add_executable(hicnlight_module MACOSX_BUNDLE ${MODULE_SOURCE_FILES}) -# target_include_directories(hicnlight_module PRIVATE ${LIBTRANSPORT_INCLUDE_DIRS} ${LIBTRANSPORT_INTERNAL_INCLUDE_DIRS}) -# set_target_properties(hicnlight_module PROPERTIES -# BUNDLE True -# MACOSX_BUNDLE_GUI_IDENTIFIER my.domain.style.identifier.hicnlight_module -# MACOSX_BUNDLE_BUNDLE_NAME hicnlight_module -# MACOSX_BUNDLE_BUNDLE_VERSION "0.1" -# MACOSX_BUNDLE_SHORT_VERSION_STRING "0.1" -# # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/customtemplate.plist.in -# ) build_module(hicnlight_module - SHARED - SOURCES ${MODULE_SOURCE_FILES} - DEPENDS ${DEPENDENCIES} - COMPONENT lib${LIBTRANSPORT} - INCLUDE_DIRS ${LIBTRANSPORT_INCLUDE_DIRS} ${LIBTRANSPORT_INTERNAL_INCLUDE_DIRS} - # LIBRARY_ROOT_DIR "vpp_plugins" - DEFINITIONS ${COMPILER_DEFINITIONS} - COMPILE_OPTIONS ${COMPILE_FLAGS} + SHARED + SOURCES ${MODULE_SOURCE_FILES} + DEPENDS ${DEPENDENCIES} + COMPONENT ${LIBTRANSPORT_COMPONENT} + INCLUDE_DIRS ${LIBTRANSPORT_INCLUDE_DIRS} ${LIBTRANSPORT_INTERNAL_INCLUDE_DIRS} + DEFINITIONS ${COMPILER_DEFINITIONS} + COMPILE_OPTIONS ${COMPILE_FLAGS} ) diff --git a/libtransport/src/io_modules/udp/udp_socket_connector.cc b/libtransport/src/io_modules/udp/udp_socket_connector.cc index 456886a54..1412d8c07 100644 --- a/libtransport/src/io_modules/udp/udp_socket_connector.cc +++ b/libtransport/src/io_modules/udp/udp_socket_connector.cc @@ -17,8 +17,8 @@ #include <hicn/transport/portability/win_portability.h> #endif +#include <glog/logging.h> #include <hicn/transport/errors/errors.h> -#include <hicn/transport/utils/log.h> #include <hicn/transport/utils/object_pool.h> #include <io_modules/udp/udp_socket_connector.h> @@ -117,7 +117,7 @@ void UdpSocketConnector::doWrite() { // The connection has been closed by the application. return; } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); tryReconnect(); } }); @@ -137,7 +137,7 @@ void UdpSocketConnector::doRead() { // The connection has been closed by the application. return; } else { - TRANSPORT_LOGE("%d %s", ec.value(), ec.message().c_str()); + LOG(ERROR) << ec.value() << " " << ec.message(); tryReconnect(); } }); @@ -145,7 +145,7 @@ void UdpSocketConnector::doRead() { void UdpSocketConnector::tryReconnect() { if (state_ == Connector::State::CONNECTED) { - TRANSPORT_LOGE("Connection lost. Trying to reconnect...\n"); + LOG(ERROR) << "Connection lost. Trying to reconnect..."; state_ = Connector::State::CONNECTING; is_reconnection_ = true; io_service_.post([this]() { @@ -201,7 +201,7 @@ void UdpSocketConnector::handleDeadline(const std::error_code &ec) { if (!ec) { io_service_.post([this]() { socket_.close(); - TRANSPORT_LOGE("Error connecting. Is the forwarder running?\n"); + LOG(ERROR) << "Error connecting. Is the forwarder running?"; }); } } diff --git a/libtransport/src/io_modules/udp/udp_socket_connector.h b/libtransport/src/io_modules/udp/udp_socket_connector.h index 8ab08e17a..c483e14aa 100644 --- a/libtransport/src/io_modules/udp/udp_socket_connector.h +++ b/libtransport/src/io_modules/udp/udp_socket_connector.h @@ -16,6 +16,7 @@ #pragma once #include <hicn/transport/config.h> +#include <hicn/transport/core/asio_wrapper.h> #include <hicn/transport/core/connector.h> #include <hicn/transport/core/content_object.h> #include <hicn/transport/core/global_object_pool.h> @@ -24,8 +25,6 @@ #include <hicn/transport/core/packet.h> #include <hicn/transport/utils/branch_prediction.h> -#include <asio.hpp> -#include <asio/steady_timer.hpp> #include <deque> namespace transport { |