diff options
author | Ubuntu <ubuntu@cert-jenkins-slave-1-201406-15260.maas> | 2022-03-17 21:05:37 +0000 |
---|---|---|
committer | Ubuntu <ubuntu@cert-jenkins-slave-1-201406-15260.maas> | 2022-03-17 21:05:37 +0000 |
commit | cf25dde52d0c948f6e90f4c216167f42986d6234 (patch) | |
tree | 03926c26fe101f534660bb7944c6a7146e562c20 | |
parent | 302e608fa6f3fb6fe1b996eb172368dc03e9fcac (diff) | |
parent | 1f2ca84adc7d6b814188abc7d78cc068b18657b9 (diff) |
Merge #416983 from ~rodsmith/plainbox-provider-checkbox:expand-network-device-info
Add: Supported, advertised, and partner link modes to network_device_info.py script
-rwxr-xr-x | bin/network_device_info.py | 41 | ||||
-rw-r--r-- | units/ethernet/packaging.pxu | 5 |
2 files changed, 46 insertions, 0 deletions
diff --git a/bin/network_device_info.py b/bin/network_device_info.py index bf9362c..10865b9 100755 --- a/bin/network_device_info.py +++ b/bin/network_device_info.py @@ -21,6 +21,7 @@ import argparse import fcntl +from natsort import natsorted import os import socket import struct @@ -37,6 +38,37 @@ class Utils(): sys_path = '/sys/class/net' + @staticmethod + def get_ethtool_info(interface, key): + """Return ethtool information identified by key""" + cmd = ['/sbin/ethtool', interface] + try: + output = check_output(cmd, stderr=STDOUT, universal_newlines=True) + except CalledProcessError: + return "ethtool returned error" + except FileNotFoundError: + return "ethtool not installed" + if not output: + return "ethtool returned no output" + data = [] + output_line = False + for line in iter(output.splitlines()): + if key in line: + label_start = line.find(key) + data_start = label_start + len(key) + output_line = True + if (output_line is True and line[label_start] != ' ' and + key not in line): + output_line = False + if output_line: + data.append(line[data_start:].strip()) + if len(data) == 0: + data.append("Not reported") + result = ("\n" + "".join(["\t" + item + "\n" + for item in natsorted(data)])) + result = result.rstrip() + return result + @classmethod def is_iface_connected(cls, iface): try: @@ -128,6 +160,9 @@ class NetworkDeviceInfo(): self._ipv4 = None self._ipv6 = None self._speed = None + self._supported_modes = None + self._advertised_modes = None + self._partner_modes = None def __str__(self): ret = "" @@ -221,11 +256,17 @@ class NetworkDeviceInfo(): if self.interface is None: return self._mac = Utils.get_mac_address(self.interface) + self._supported_modes = (Utils.get_ethtool_info( + self.interface, "Supported link modes:")) + self._advertised_modes = (Utils.get_ethtool_info( + self.interface, "Advertised link modes:")) if Utils.is_iface_connected(self.interface): self._carrier_status = 'Connected' self._ipv4 = Utils.get_ipv4_address(self.interface) self._ipv6 = Utils.get_ipv6_address(self.interface) self._speed = Utils.get_speed(self.interface) + self._partner_modes = (Utils.get_ethtool_info( + self.interface, "Link partner advertised link modes:")) else: self._carrier_status = 'Disconnected' diff --git a/units/ethernet/packaging.pxu b/units/ethernet/packaging.pxu index 7d4a812..0064e2f 100644 --- a/units/ethernet/packaging.pxu +++ b/units/ethernet/packaging.pxu @@ -1,3 +1,8 @@ unit: packaging meta-data os-id: debian Depends: kmod + +# This is needed by network_device_info.py +unit: packaging meta-data +os-id: debian +Depends: python3-natsort |