Do a slightly better job at showing default gateways.
This commit is contained in:
parent
73d73dff94
commit
0205423133
|
@ -264,7 +264,8 @@ class NetworkModel(ModelPolicy):
|
|||
self.prober = prober
|
||||
self.info = {}
|
||||
self.devices = {}
|
||||
self.network = {}
|
||||
self.network_devices = {}
|
||||
self.network_routes = {}
|
||||
self.default_gateway = None
|
||||
|
||||
def reset(self):
|
||||
|
@ -287,15 +288,20 @@ class NetworkModel(ModelPolicy):
|
|||
# --- Model Methods ----
|
||||
def probe_network(self):
|
||||
log.debug('model calling prober.get_network()')
|
||||
self.network = self.prober.get_network()
|
||||
self.network_devices = self.prober.get_network_devices()
|
||||
self.network_routes = self.prober.get_network_routes()
|
||||
|
||||
for iface in [iface for iface in self.network.keys()
|
||||
for iface in [iface for iface in self.network_devices.keys()
|
||||
if iface not in NETDEV_IGNORED_IFACES]:
|
||||
ifinfo = self.prober.get_network_info(iface)
|
||||
self.info[iface] = ifinfo
|
||||
|
||||
log.debug('probing network complete!')
|
||||
|
||||
def get_routes(self):
|
||||
''' get collection of currently configured routes '''
|
||||
return self.network_routes
|
||||
|
||||
def get_interface(self, iface):
|
||||
'''get iface object given iface name '''
|
||||
log.debug('get_iface({})'.format(iface))
|
||||
|
@ -367,7 +373,7 @@ class NetworkModel(ModelPolicy):
|
|||
and see if iface is included in a bridge '''
|
||||
bridges = self.get_bridges()
|
||||
for bridge in bridges:
|
||||
brinfo = self.network[bridge].get('bridge', {})
|
||||
brinfo = self.network_devices[bridge].get('bridge', {})
|
||||
if brinfo:
|
||||
if iface in brinfo['interfaces']:
|
||||
return True
|
||||
|
@ -414,7 +420,7 @@ class NetworkModel(ModelPolicy):
|
|||
raise
|
||||
|
||||
def get_bridges(self):
|
||||
return [iface for iface in self.network.keys()
|
||||
return [iface for iface in self.network_devices.keys()
|
||||
if self.iface_is_bridge(iface)]
|
||||
|
||||
def get_hw_addr(self, iface):
|
||||
|
|
|
@ -53,18 +53,26 @@ class Prober():
|
|||
|
||||
return data
|
||||
|
||||
def get_network(self):
|
||||
def _probe_network(self):
|
||||
if 'network' not in self.probe_data:
|
||||
log.debug('get_network: no network in probe_data, fetching')
|
||||
network = Network()
|
||||
results = network.probe()
|
||||
self.probe_data['network'] = results
|
||||
self.probe_data['network'] = {}
|
||||
self.probe_data['network']['devices'] = results
|
||||
self.probe_data['network']['routes'] = network.get_routes()
|
||||
|
||||
return self.probe_data['network']
|
||||
def get_network_devices(self):
|
||||
self._probe_network()
|
||||
return self.probe_data['network']['devices']
|
||||
|
||||
def get_network_routes(self):
|
||||
self._probe_network()
|
||||
return self.probe_data['network']['routes']
|
||||
|
||||
def get_network_info(self, device):
|
||||
''' Load a NetworkInfo class for specified device '''
|
||||
return NetworkInfo({device: self.get_network().get(device)})
|
||||
return NetworkInfo({device: self.get_network_devices().get(device)})
|
||||
|
||||
def get_storage(self):
|
||||
''' Load a StorageInfo class. Probe if it's not present '''
|
||||
|
|
|
@ -24,6 +24,7 @@ import textwrap
|
|||
from urwid import (ListBox, Pile, BoxAdapter,
|
||||
Text, Columns)
|
||||
import yaml
|
||||
from netifaces import AF_INET, AF_INET6
|
||||
from subiquitycore.ui.lists import SimpleList
|
||||
from subiquitycore.ui.buttons import cancel_btn, menu_btn, done_btn
|
||||
from subiquitycore.ui.utils import Padding, Color
|
||||
|
@ -86,6 +87,7 @@ class NetworkView(ViewPolicy):
|
|||
'ip': interface.ip,
|
||||
'method': interface.ip_method,
|
||||
'provider': interface.ip_provider,
|
||||
'subnets': interface.subnets,
|
||||
}
|
||||
log.debug('ipv4_status: {}'.format(ipv4_status))
|
||||
ipv4_template = ''
|
||||
|
@ -94,8 +96,8 @@ class NetworkView(ViewPolicy):
|
|||
ipv4_template += '{ip}'.format(**ipv4_status)
|
||||
if ipv4_status['method']:
|
||||
ipv4_template += ' ({method}) '.format(**ipv4_status)
|
||||
#if ipv4_status['provider']:
|
||||
# ipv4_template += 'from {provider} '.format(**ipv4_status)
|
||||
if ipv4_status['subnets']:
|
||||
ipv4_template += 'from {subnets} '.format(**ipv4_status)
|
||||
col_2.append(Color.info_primary(Text(ipv4_template)))
|
||||
# TODO: add IPv6 address information retrieval.
|
||||
col_2.append(Color.info_primary(Text("No IPv6 connection"))) # vert. holder for ipv6
|
||||
|
@ -135,13 +137,34 @@ class NetworkView(ViewPolicy):
|
|||
|
||||
# Display default route status
|
||||
if len(ifaces) > 0:
|
||||
default_route = ("Default route is ")
|
||||
route_source = ("whatever DHCP provides on any interface")
|
||||
# FIXME: correctly get default gateway
|
||||
gateways = self.model.get_routes()
|
||||
ipv4_gateways = gateways['default'][AF_INET]
|
||||
ipv6_gateways = gateways['default'][AF_INET6]
|
||||
route_source = "is unset"
|
||||
if self.model.default_gateway is not None:
|
||||
route_source = self.model.default_gateway
|
||||
route_source = "via " + self.model.default_gateway
|
||||
elif len(ipv4_gateways):
|
||||
route_source = ""
|
||||
if ipv4_gateways[0]:
|
||||
route_source += "via {}".format(ipv4_gateways[0])
|
||||
elif ipv4_gateways[1]:
|
||||
route_source += "through interface {}".format(ipv4_gateways[1])
|
||||
default_route_w = Color.info_minor(
|
||||
Text(" " + default_route + route_source))
|
||||
Text(" IPv4 default route " + route_source + "."))
|
||||
opts.append(default_route_w)
|
||||
|
||||
# FIXME: do ipv6 default gateway
|
||||
# if ipv6:
|
||||
# if self.model.default_gateway6 is not None:
|
||||
route_source = "is unset"
|
||||
if len(ipv6_gateways):
|
||||
route_source = ""
|
||||
if ipv6_gateways[0]:
|
||||
route_source += "via {}".format(ipv6_gateways[0])
|
||||
elif ipv6_gateways[1]:
|
||||
route_source += "through interface {}".format(ipv6_gateways[1])
|
||||
default_route_w = Color.info_minor(
|
||||
Text(" IPv6 default route " + route_source + "."))
|
||||
opts.append(default_route_w)
|
||||
|
||||
for opt, sig, _ in self.model.get_menu():
|
||||
|
|
Loading…
Reference in New Issue