diff --git a/subiquitycore/models/network.py b/subiquitycore/models/network.py index 0371adcf..cb198206 100644 --- a/subiquitycore/models/network.py +++ b/subiquitycore/models/network.py @@ -23,7 +23,8 @@ from subiquitycore.model import BaseModel from subiquitycore.utils import (read_sys_net, sys_dev_path) -NETDEV_IGNORED_IFACES = ['lo', 'bridge', 'tun', 'tap', 'dummy'] +NETDEV_IGNORED_IFACE_NAMES = ['lo'] +NETDEV_IGNORED_IFACE_TYPES = ['bridge', 'tun', 'tap', 'dummy'] log = logging.getLogger('subiquitycore.models.network') @@ -312,14 +313,7 @@ class NetworkModel(BaseModel): def __init__(self, prober, opts): self.opts = opts self.prober = prober - self.info = {} - self.devices = {} - self.network_devices = {} - self.network_routes = {} - self.default_v4_gateway = None - self.default_v6_gateway = None - self.v4_gateway_dev = None - self.v6_gateway_dev = None + self.reset() def reset(self): log.debug('resetting network model') @@ -329,6 +323,7 @@ class NetworkModel(BaseModel): self.default_v6_gateway = None self.v4_gateway_dev = None self.v6_gateway_dev = None + self.network_routes = {} def get_signal_by_name(self, selection): for x, y, z in self.get_signals(): @@ -344,13 +339,23 @@ class NetworkModel(BaseModel): # --- Model Methods ---- def probe_network(self): log.debug('model calling prober.get_network()') - self.network_devices = self.prober.get_network_devices() + network_devices = self.prober.get_network_devices() self.network_routes = self.prober.get_network_routes() - for iface in [iface for iface in self.network_devices.keys() - if iface not in NETDEV_IGNORED_IFACES]: + for iface in network_devices: + if iface in NETDEV_IGNORED_IFACE_NAMES: + continue ifinfo = self.prober.get_network_info(iface) + if ifinfo.type in NETDEV_IGNORED_IFACE_TYPES: + continue self.info[iface] = ifinfo + netdev = Networkdev(iface, ifinfo.type) + try: + log.debug('configuring with: {}'.format(ifinfo)) + netdev.configure(probe_info=ifinfo) + except Exception as e: + log.error(e) + self.devices[iface] = netdev log.debug('probing network complete!') @@ -361,30 +366,15 @@ class NetworkModel(BaseModel): def get_interface(self, iface): '''get iface object given iface name ''' log.debug('get_iface({})'.format(iface)) - if iface not in self.devices: - ifinfo = self.info[iface] - netdev = Networkdev(iface, ifinfo.type) - - try: - log.debug('configuring with: {}'.format(ifinfo)) - netdev.configure(probe_info=ifinfo) - except Exception as e: - log.error(e) - self.devices[iface] = netdev - return self.devices[iface] def get_all_interfaces(self): - possible_devices = list(set(list(self.devices.keys()) + - list(self.info.keys()))) - possible_ifaces = [self.get_interface(i) for i in - sorted(possible_devices) if - self.info[i].type not in NETDEV_IGNORED_IFACES] + ifaces = [iface for _, iface in sorted(self.devices.items())] log.debug('get_all_interfaces -> {}'.format(",".join( [i.ifname for i in - possible_ifaces]))) - return possible_ifaces + ifaces]))) + return ifaces def get_all_interface_names(self): return [i.ifname for i in self.get_all_interfaces()] @@ -417,7 +407,7 @@ class NetworkModel(BaseModel): and see if iface is included in a bridge ''' bridges = self.get_bridges() for bridge in bridges: - brinfo = self.network_devices[bridge].get('bridge', {}) + brinfo = self.info[bridge].bridge if brinfo: if iface in brinfo['interfaces']: return True @@ -464,7 +454,7 @@ class NetworkModel(BaseModel): raise def get_bridges(self): - return [iface for iface in self.network_devices.keys() + return [iface for iface in self.info if self.iface_is_bridge(iface)] def get_hw_addr(self, iface):