Пример #1
0
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())
    ])
Пример #2
0
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()])