def get_wireless_firmware(): environment = os.environ.copy() environment['PATH'] = '%s:/usr/sbin' % (environment['PATH'], ) firmware_info = {} wireless_interfaces = get_wireless_interfaces() if not wireless_interfaces: _logger.warning('NetworkManager knows of no wireless devices, ' 'falling back to static list') wireless_interfaces = ['wlan0', 'eth0'] for interface in get_wireless_interfaces(): try: output = subprocess.Popen(['ethtool', '-i', interface], stdout=subprocess.PIPE, env=environment).stdout.readlines() except OSError: _logger.exception('Error running ethtool for %r', interface) continue try: for line in output: line = line.decode() if line.startswith('firmware'): version = line.split()[1] if line.startswith('driver'): driver = line.split()[1] except IndexError: _logger.exception('Error parsing ethtool output for %r', interface) continue card = None if driver == 'mwifiex': card = 'mv8787, IEEE 802.11n 5GHz' if driver == 'libertas': if version.startswith('5.'): card = 'usb8388, IEEE 802.11g 2.4GHz' else: card = 'mv8686, IEEE 802.11g 2.4GHz' if card: firmware_info[interface] = '%s (%s, %s)' % (version, driver, card) else: firmware_info[interface] = '%s (%s)' % (version, driver) if not firmware_info: return _not_available if len(firmware_info) == 1: return list(firmware_info.values())[0] return ', '.join([ '%(interface)s: %(info)s' % { 'interface': interface, 'info': info } for interface, info in list(firmware_info.items()) ])
def get_wireless_firmware(): environment = os.environ.copy() environment['PATH'] = '%s:/usr/sbin' % (environment['PATH'], ) firmware_info = {} wireless_interfaces = get_wireless_interfaces() if not wireless_interfaces: _logger.warning('Cannot connect to NetworkManager, falling back to' ' static list of devices') wireless_interfaces = ['wlan0', 'eth0'] for interface in get_wireless_interfaces(): try: output = subprocess.Popen(['ethtool', '-i', interface], stdout=subprocess.PIPE, env=environment).stdout.readlines() except OSError: _logger.exception('Error running ethtool for %r', interface) continue try: for line in output: if line.startswith('firmware'): version = line.split()[1] if line.startswith('driver'): driver = line.split()[1] except IndexError: _logger.exception('Error parsing ethtool output for %r', interface) continue card = None if driver == 'mwifiex': card = 'mv8787, IEEE 802.11n 5GHz' if driver == 'libertas': if version.startswith('5.'): card = 'usb8388, IEEE 802.11g 2.4GHz' else: card = 'mv8686, IEEE 802.11g 2.4GHz' if card: firmware_info[interface] = '%s (%s, %s)' % (version, driver, card) else: firmware_info[interface] = '%s (%s)' % (version, driver) if not firmware_info: return _not_available if len(firmware_info) == 1: return firmware_info.values()[0] return ', '.join(['%(interface)s: %(info)s' % {'interface': interface, 'info': info} for interface, info in firmware_info.items()])