Merge pull request #144 from CanonicalLtd/mwhudson/network-model-simplify

simplify network model code a bit
This commit is contained in:
Michael Hudson-Doyle 2016-08-23 09:48:47 +12:00 committed by GitHub
commit 045f1e5159
1 changed files with 22 additions and 32 deletions

View File

@ -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):