aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrung Tran <trung.tran@ettus.com>2018-08-24 11:57:20 -0700
committerBrent Stapleton <bstapleton@g.hmc.edu>2018-09-13 14:47:54 -0700
commitb357278c1ba0c85a22dcf95f298fc567f8001ba3 (patch)
tree70fe28eaa92519f11dcd4101396b6a221bdd03bb
parent36218e220e88728379d6b25465f4ebd62dc75a6e (diff)
downloaduhd-b357278c1ba0c85a22dcf95f298fc567f8001ba3.tar.gz
uhd-b357278c1ba0c85a22dcf95f298fc567f8001ba3.tar.bz2
uhd-b357278c1ba0c85a22dcf95f298fc567f8001ba3.zip
mpm: add link_speed xport_info
-rw-r--r--mpm/python/usrp_mpm/sys_utils/net.py21
-rw-r--r--mpm/python/usrp_mpm/xports/xportmgr_udp.py1
2 files changed, 22 insertions, 0 deletions
diff --git a/mpm/python/usrp_mpm/sys_utils/net.py b/mpm/python/usrp_mpm/sys_utils/net.py
index 95dc14ed8..e28c8bda1 100644
--- a/mpm/python/usrp_mpm/sys_utils/net.py
+++ b/mpm/python/usrp_mpm/sys_utils/net.py
@@ -8,6 +8,7 @@ Network utilities for MPM
"""
import itertools
import socket
+import pyudev
from six import iteritems
from pyroute2 import IPRoute, IPDB
from usrp_mpm.mpmlog import get_logger
@@ -54,6 +55,7 @@ def get_iface_info(ifname):
raise LookupError("No interfaces known with name `{}'!"
.format(ifname))
link_info = ipr.get_links(links)[0]
+ link_speed = get_link_speed(ifname)
except IndexError:
raise LookupError("Could not get links for interface `{}'"
.format(ifname))
@@ -63,8 +65,27 @@ def get_iface_info(ifname):
'mac_addr': mac_addr,
'ip_addr': ip_addrs[0] if ip_addrs else '',
'ip_addrs': ip_addrs,
+ 'link_speed': link_speed
}
+
+def get_link_speed(ifname):
+ """
+ Given an interface name (e.g 'eth0'), return link speed
+ of that interface as unsigned interger.
+ If interface is not found, IndexError will be thrown.
+ The speed is Megabits/sec
+ (from kernel at https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net)
+ """
+ net_sysfs = [device for device in pyudev.Context().list_devices(subsystem='net')
+ if device.sys_name == ifname][0]
+
+ speed = net_sysfs.attributes.asint('speed')
+ # TODO: 1Gige driver returns a bad value (less than 1000). Remove the conditional once the
+ # driver is fixed
+ return speed if speed >= 10000 else 1000
+
+
def ip_addr_to_iface(ip_addr, iface_list):
"""
Return an Ethernet interface (e.g. 'eth1') given an IP address.
diff --git a/mpm/python/usrp_mpm/xports/xportmgr_udp.py b/mpm/python/usrp_mpm/xports/xportmgr_udp.py
index 6e355115e..40ba22414 100644
--- a/mpm/python/usrp_mpm/xports/xportmgr_udp.py
+++ b/mpm/python/usrp_mpm/xports/xportmgr_udp.py
@@ -255,6 +255,7 @@ class XportMgrUDP(object):
'send_sid': str(fixup_sid(sid, iface_name)),
'allocation': str(allocation_getter(iface_name)),
'xport_type': xport_type,
+ 'link_speed': str(iface_info['link_speed'])
}
for iface_name, iface_info in iteritems(self._chdr_ifaces)
]