diff options
-rw-r--r-- | host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.cpp | 15 | ||||
-rw-r--r-- | host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.hpp | 2 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/sys_utils/net.py | 1 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/xports/xportmgr_udp.py | 4 |
4 files changed, 19 insertions, 3 deletions
diff --git a/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.cpp b/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.cpp index bdf088025..7b41ac631 100644 --- a/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.cpp +++ b/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.cpp @@ -68,8 +68,11 @@ mpmd_link_if_ctrl_udp::udp_link_info_map get_udp_info_from_xport_info( const size_t link_rate = link_info.count("link_rate") ? std::stoul(link_info.at("link_rate")) : MAX_RATE_1GIGE; + const std::string link_type = link_info.at("type"); + const size_t if_mtu = std::stoul(link_info.at("mtu")); result.emplace(link_info.at("ipv4"), - mpmd_link_if_ctrl_udp::udp_link_info_t{udp_port, link_rate}); + mpmd_link_if_ctrl_udp::udp_link_info_t{ + udp_port, link_rate, link_type, if_mtu}); } return result; @@ -238,7 +241,15 @@ mpmd_link_if_ctrl_udp::mpmd_link_if_ctrl_udp(const uhd::device_addr_t& mb_args, try { // If MTU discovery fails, we gracefully recover, but declare that // link invalid. - _mtu = std::min(_mtu, discover_mtu_for_ip(ip_addr)); + auto& info = _udp_info.at(ip_addr); + if (info.link_type == "internal") { + UHD_LOG_TRACE("MPMD::XPORT::UDP", + "MTU for internal interface " << ip_addr << " is " + << std::to_string(info.if_mtu)); + _mtu = std::min(_mtu, info.if_mtu); + } else { + _mtu = std::min(_mtu, discover_mtu_for_ip(ip_addr)); + } _available_addrs.push_back(ip_addr); } catch (const uhd::exception& ex) { UHD_LOG_WARNING("MPMD::XPORT::UDP", diff --git a/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.hpp b/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.hpp index ebe4f5db2..e4a0d7811 100644 --- a/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.hpp +++ b/host/lib/usrp/mpmd/mpmd_link_if_ctrl_udp.hpp @@ -26,6 +26,8 @@ public: { std::string udp_port; size_t link_rate; + std::string link_type; + size_t if_mtu; }; using udp_link_info_map = std::unordered_map<std::string, udp_link_info_t>; diff --git a/mpm/python/usrp_mpm/sys_utils/net.py b/mpm/python/usrp_mpm/sys_utils/net.py index 56448c6c4..42eb9de62 100644 --- a/mpm/python/usrp_mpm/sys_utils/net.py +++ b/mpm/python/usrp_mpm/sys_utils/net.py @@ -71,6 +71,7 @@ def get_iface_info(ifname): 'ip_addrs': ip_addrs, 'link_speed': link_speed, 'bridge': is_bridge(link_info.get_attr('IFLA_LINKINFO')), + 'mtu': link_info.get_attr('IFLA_MTU'), } diff --git a/mpm/python/usrp_mpm/xports/xportmgr_udp.py b/mpm/python/usrp_mpm/xports/xportmgr_udp.py index 365e73e5d..e9168e898 100644 --- a/mpm/python/usrp_mpm/xports/xportmgr_udp.py +++ b/mpm/python/usrp_mpm/xports/xportmgr_udp.py @@ -186,7 +186,9 @@ class XportMgrUDP: { 'ipv4': str(iface_info['ip_addr']), 'port': str(self.chdr_port), - 'link_rate': str(int(iface_info['link_speed'] * 1e6 / 8)) + 'link_rate': str(int(iface_info['link_speed'] * 1e6 / 8)), + 'type': str(self.iface_config[iface_name]['type']), + 'mtu': str(iface_info['mtu']) } for iface_name, iface_info in iteritems(self._chdr_ifaces) ] |