From 682c81c2890978cefecc718a4611d8ecd9f821d4 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Fri, 16 Sep 2016 14:27:37 +1200 Subject: [PATCH 1/3] Really probe (i.e. call into probert) every time we load the network screen. Connected-ness of a link is something that can plausibly change over short timescales. --- subiquitycore/models/network.py | 1 + subiquitycore/prober.py | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/subiquitycore/models/network.py b/subiquitycore/models/network.py index 0eb9b3d9..ea995995 100644 --- a/subiquitycore/models/network.py +++ b/subiquitycore/models/network.py @@ -360,6 +360,7 @@ class NetworkModel(BaseModel): # --- Model Methods ---- def probe_network(self): log.debug('model calling prober.get_network()') + self.prober.probe() network_devices = self.prober.get_network_devices() self.network_routes = self.prober.get_network_routes() diff --git a/subiquitycore/prober.py b/subiquitycore/prober.py index 70f5c1e6..c59ea631 100644 --- a/subiquitycore/prober.py +++ b/subiquitycore/prober.py @@ -53,21 +53,23 @@ class Prober(): return data - 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'] = {} - self.probe_data['network']['devices'] = results - self.probe_data['network']['routes'] = network.get_routes() + def probe(self): + network = Network() + results = network.probe() + self.probe_data['network'] = {} + self.probe_data['network']['devices'] = results + self.probe_data['network']['routes'] = network.get_routes() def get_network_devices(self): - self._probe_network() + if 'network' not in self.probe_data: + log.debug('get_network_devices: no network in probe_data, fetching') + self.probe() return self.probe_data['network']['devices'] def get_network_routes(self): - self._probe_network() + if 'network' not in self.probe_data: + log.debug('get_network_routes: no network in probe_data, fetching') + self.probe() return self.probe_data['network']['routes'] def get_network_info(self, device): From f78cae64bdbb2d79e8e138b95bae97f0bd9be73e Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Fri, 16 Sep 2016 14:28:40 +1200 Subject: [PATCH 2/3] Show if a link is not connected. At least as well as ip(8) does it. --- subiquitycore/models/network.py | 9 +++++++++ subiquitycore/ui/views/network.py | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/subiquitycore/models/network.py b/subiquitycore/models/network.py index ea995995..50deaeea 100644 --- a/subiquitycore/models/network.py +++ b/subiquitycore/models/network.py @@ -17,7 +17,10 @@ import errno import ipaddress import logging import os + import netifaces +from probert.network import IFF_UP, IFF_RUNNING + from subiquitycore.prober import make_network_info from subiquitycore.model import BaseModel from subiquitycore.utils import (read_sys_net, @@ -228,6 +231,12 @@ class Networkdev(): ip_info = self._get_ip_info() return ip_info['ip6_providers'] + def is_connected(self): + flags = self.info.flags + # This is the logic ip from iproute2 uses to determine whether + # to show NO-CARRIER or not. + return (not (flags & IFF_UP)) or (flags & IFF_RUNNING) + def remove_networks(self): self.remove_ipv4_networks() self.remove_ipv6_networks() diff --git a/subiquitycore/ui/views/network.py b/subiquitycore/ui/views/network.py index 84b7d24c..78b1c296 100644 --- a/subiquitycore/ui/views/network.py +++ b/subiquitycore/ui/views/network.py @@ -156,7 +156,13 @@ class NetworkView(BaseView): if ( not ip_status['dhcp4'] and not ip_status['dhcp6'] ) \ and len(ip_status['ipv4_addresses']) == 0 and \ len(ip_status['ipv6_addresses']) == 0: - template = "Not configured" + if interface.type == 'eth': + if interface.is_connected(): + template = "Not configured" + else: + template = "Not connected" + else: + template = "Not configured" if ip_status['dhcp4'] and ip_status['dhcp6'] and \ len(ip_status['ipv4_addresses']) == 0 and \ From cbc6e97af7b353fcc4ff12289b15b2cf3df5c05b Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Mon, 19 Sep 2016 11:27:12 +1200 Subject: [PATCH 3/3] use is_connected from probert --- subiquitycore/models/network.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/subiquitycore/models/network.py b/subiquitycore/models/network.py index 50deaeea..f9e0bec1 100644 --- a/subiquitycore/models/network.py +++ b/subiquitycore/models/network.py @@ -19,7 +19,6 @@ import logging import os import netifaces -from probert.network import IFF_UP, IFF_RUNNING from subiquitycore.prober import make_network_info from subiquitycore.model import BaseModel @@ -232,10 +231,7 @@ class Networkdev(): return ip_info['ip6_providers'] def is_connected(self): - flags = self.info.flags - # This is the logic ip from iproute2 uses to determine whether - # to show NO-CARRIER or not. - return (not (flags & IFF_UP)) or (flags & IFF_RUNNING) + return self.probe_info.is_connected def remove_networks(self): self.remove_ipv4_networks()