Correctly detect bonded slave interface state

Bonded slave interfaces under Linux were incorrectly being detected as
always up. We now check sysfs directly to determine their state.
This commit is contained in:
Tom X. Tobin 2014-06-14 11:46:50 -04:00
parent 00c230f4f8
commit 18eaeb45be

View File

@ -59,6 +59,15 @@ def get_bonded_slaves():
return slaves return slaves
def sysfs_interface_up(interface):
try:
with open("/sys/class/net/{}/operstate".format(interface)) as f:
status = f.read().strip()
except FileNotFoundError:
raise RuntimeError("Unknown interface {iface}!".format(iface=interface))
return status == "up"
class Network(IntervalModule): class Network(IntervalModule):
""" """
Display network information about a interface. Display network information about a interface.
@ -113,6 +122,7 @@ class Network(IntervalModule):
except KeyError: except KeyError:
pass pass
else: else:
if sysfs_interface_up(self.interface):
master_info = netifaces.ifaddresses(master) master_info = netifaces.ifaddresses(master)
for af in (netifaces.AF_INET, netifaces.AF_INET6): for af in (netifaces.AF_INET, netifaces.AF_INET6):
try: try: