diff options
author | Alex Williams <alex.williams@ni.com> | 2019-08-09 11:18:35 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 11:49:38 -0800 |
commit | 01284980b1d7227f1c11496d2be939bb4b23adb1 (patch) | |
tree | 3bf21c2ece1296640a8854ea229960e5c937ebdd /host/lib/transport | |
parent | af5b2b5e778ead57b0fe9e72561227f1ebbbfc42 (diff) | |
download | uhd-01284980b1d7227f1c11496d2be939bb4b23adb1.tar.gz uhd-01284980b1d7227f1c11496d2be939bb4b23adb1.tar.bz2 uhd-01284980b1d7227f1c11496d2be939bb4b23adb1.zip |
transport: Add modeling of physical adapters
Now link instances must have the ability to report the corresponding
physical adapter that is used for the local side of the link. This
information can be used to help identify when multiple links share
the same adapter.
Diffstat (limited to 'host/lib/transport')
-rw-r--r-- | host/lib/transport/CMakeLists.txt | 1 | ||||
-rw-r--r-- | host/lib/transport/adapter.cpp | 24 | ||||
-rw-r--r-- | host/lib/transport/udp_boost_asio_link.cpp | 13 |
3 files changed, 33 insertions, 5 deletions
diff --git a/host/lib/transport/CMakeLists.txt b/host/lib/transport/CMakeLists.txt index 003beeee4..dd83164bf 100644 --- a/host/lib/transport/CMakeLists.txt +++ b/host/lib/transport/CMakeLists.txt @@ -124,6 +124,7 @@ LIBUHD_APPEND_SOURCES( ${CMAKE_CURRENT_SOURCE_DIR}/muxed_zero_copy_if.cpp ${CMAKE_CURRENT_SOURCE_DIR}/zero_copy_flow_ctrl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/inline_io_service.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/adapter.cpp ) if(ENABLE_X300) diff --git a/host/lib/transport/adapter.cpp b/host/lib/transport/adapter.cpp new file mode 100644 index 000000000..247b33868 --- /dev/null +++ b/host/lib/transport/adapter.cpp @@ -0,0 +1,24 @@ +// +// Copyright 2019 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#include <uhd/exception.hpp> +#include <uhdlib/transport/adapter.hpp> + +using namespace uhd::transport; + +adapter_id_t adapter_ctx::register_adapter(adapter_info& info) +{ + std::lock_guard<std::mutex> lock(_mutex); + auto key = info.to_string(); + if (_id_map.count(key) > 0) { + return _id_map.at(key); + } else { + adapter_id_t id = _id_map.size() + 1; + _id_map.emplace(std::make_pair(key, id)); + return id; + } +} + diff --git a/host/lib/transport/udp_boost_asio_link.cpp b/host/lib/transport/udp_boost_asio_link.cpp index 95d68ba91..2d4a4f640 100644 --- a/host/lib/transport/udp_boost_asio_link.cpp +++ b/host/lib/transport/udp_boost_asio_link.cpp @@ -5,6 +5,7 @@ // #include <uhd/utils/log.hpp> +#include <uhdlib/transport/adapter.hpp> #include <uhdlib/transport/udp_boost_asio_link.hpp> #include <boost/format.hpp> @@ -39,10 +40,13 @@ udp_boost_asio_link::udp_boost_asio_link( _socket = open_udp_socket(addr, port, _io_service); _sock_fd = _socket->native_handle(); - UHD_LOGGER_TRACE("UDP") - << boost::format("Created UDP link to %s:%s") % addr % port; + auto info = udp_boost_asio_adapter_info(*_socket); + auto& ctx = adapter_ctx::get(); + _adapter_id = ctx.register_adapter(info); + + UHD_LOGGER_TRACE("UDP") << boost::format("Created UDP link to %s:%s") % addr % port; UHD_LOGGER_TRACE("UDP") << boost::format("Local UDP socket endpoint: %s:%s") - % get_local_addr() % get_local_port(); + % get_local_addr() % get_local_port(); } uint16_t udp_boost_asio_link::get_local_port() const @@ -91,8 +95,7 @@ udp_boost_asio_link::sptr udp_boost_asio_link::make(const std::string& addr, } #endif - udp_boost_asio_link::sptr link( - new udp_boost_asio_link(addr, port, params)); + udp_boost_asio_link::sptr link(new udp_boost_asio_link(addr, port, params)); // call the helper to resize send and recv buffers |