in selftest/selftest.py [0:0]
def enumerate_interfaces(cls) -> Dict[str, NetworkInterface]:
"""Retrieve all Ethernet interfaces on the system."""
interfaces: Dict[str, NetworkInterface] = {}
interface_names = [
interface
for interface in os.listdir(SYS_CLASS_NET)
if os.path.exists(os.path.join(SYS_CLASS_NET, interface, "device"))
]
for interface_name in interface_names:
sys_path = Path(SYS_CLASS_NET, interface_name)
udev_properties = cls.query_udev_properties(interface_name)
driver_path = Path(sys_path, "device", "driver")
if not driver_path.is_symlink():
logger.debug(
"ignoring interface %s without driver symlink", interface_name
)
continue
link = os.readlink(driver_path)
driver = os.path.basename(link)
mac = (sys_path / "address").read_text().strip()
ipv4_addrs = cls.get_ipv4_addresses(interface_name)
interfaces[interface_name] = NetworkInterface(
name=interface_name,
driver=driver,
mac=mac,
ipv4_addrs=ipv4_addrs,
udev_properties=udev_properties,
)
return interfaces