From e1f7e509eac26a6a2328bc88ef79475a4e9e7e7f Mon Sep 17 00:00:00 2001 From: Ryan Harper Date: Mon, 29 Jun 2015 13:57:45 -0500 Subject: [PATCH] Handle network devices with missing udev hardware data We've encountered some usb nics which don't have an entry in the udev database, subsequently the ID_XXX_FROM_DATABASE isn't present in the output. Address this by using some fallback keys, ID_XXX, ID_XXX_ID and an Unknown value if all fail. Signed-off-by: Ryan Harper --- subiquity/models/network.py | 46 +++++++++++++++++++++++++++++++++---- subiquity/views/network.py | 2 ++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/subiquity/models/network.py b/subiquity/models/network.py index 4f50a5bb..264048c4 100644 --- a/subiquity/models/network.py +++ b/subiquity/models/network.py @@ -19,10 +19,13 @@ Provides network device listings and extended network information """ +import logging from subiquity import models import argparse from probert import prober +log = logging.getLogger('subiquity.filesystemView') + class NetworkModel(models.Model): """ Model representing network interfaces @@ -44,12 +47,47 @@ class NetworkModel(models.Model): def get_interfaces(self): return [iface for iface in self.network.keys() - if self.network[iface]['type'] == 'eth'] + if self.network[iface]['type'] == 'eth' and + not self.network[iface]['hardware']['DEVPATH'].startswith( + '/devices/virtual/net')] + + def get_vendor(self, iface): + hwinfo = self.network[iface]['hardware'] + vendor_keys = [ + 'ID_VENDOR_FROM_DATABASE', + 'ID_VENDOR', + 'ID_VENDOR_ID' + ] + for key in vendor_keys: + try: + return hwinfo[key] + except KeyError: + log.warn('Failed to get key ' + '{} from interface {}'.format(key, iface)) + pass + + return 'Unknown Vendor' + + def get_model(self, iface): + hwinfo = self.network[iface]['hardware'] + model_keys = [ + 'ID_MODEL_FROM_DATABASE', + 'ID_MODEL', + 'ID_MODEL_ID' + ] + for key in model_keys: + try: + return hwinfo[key] + except KeyError: + log.warn('Failed to get key ' + '{} from interface {}'.format(key, iface)) + pass + + return 'Unknown Model' def get_iface_info(self, iface): ipinfo = self.network[iface]['ip'] - hwinfo = self.network[iface]['hardware'] return "{}/{} -- {} {}".format(ipinfo['addr'], ipinfo['netmask'], - hwinfo['ID_VENDOR_FROM_DATABASE'], - hwinfo['ID_MODEL_FROM_DATABASE']) + self.get_vendor(iface), + self.get_model(iface)) diff --git a/subiquity/views/network.py b/subiquity/views/network.py index cfc84381..d148a264 100644 --- a/subiquity/views/network.py +++ b/subiquity/views/network.py @@ -46,8 +46,10 @@ class NetworkView(WidgetWrap): def _build_model_inputs(self): sl = [] + log.info("probing for network devices") self.model.probe_network() for iface in self.model.get_interfaces(): + log.info("looking at {}".format(iface)) sl.append(Color.button_primary(confirm_btn(label=iface, on_press=self.confirm), focus_map='button_primary focus'))