X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Fsysteminfo.py;h=78fc2b63a999abd45c53c22d47b87f6a459f5a13;hb=b4e653e0b89780332aac00afdbde3590dba17c4e;hp=9997342bd1973f25e783256a8b30017c7dc114c3;hpb=ae3bdac18c0a8d5a92b55219fe82164bc641ea2e;p=bootmanager.git diff --git a/source/systeminfo.py b/source/systeminfo.py index 9997342..78fc2b6 100755 --- a/source/systeminfo.py +++ b/source/systeminfo.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python # Copyright (c) 2003 Intel Corporation # All rights reserved. @@ -26,27 +26,7 @@ import popen2 import re import errno import ModelOptions -try: - from pypciscan import get_devices -except: - def get_devices(): - """ This is a replacement to the version in pypciscan library for 3.3 and lower bootcds - that will help maintain backward compatibility. This version has limitations wrt accuracy - that the library does not. In particular it is limited to the output of - lspci and 'forces' all devices to appear on the '0000' domain, rather than - where they actually are.""" - - ret = {} - #pci = os.popen("lspci -nm | sed -e 's/\"//g'", 'r') - pci = os.popen("lspci -nm | sed -e 's/\"//g' -e 's/Class //g'", 'r') - for line in pci: - l = line[:-1] - f = l.split(" ") - key = "0000:%s" % f[0] - ret[key] = (int(f[2],16), int(f[3],16), 0xffff, 0xffff, int(f[1],16) << 8) - return ret - -import pypcimap +from pypci import * from Exceptions import * """ @@ -66,16 +46,12 @@ DEVICES_SCANNED_FLAG= "/tmp/devices_scanned" BLOCKS_PER_GB = pow(10, 9) / 1024.0; -# -n is numeric ids (no lookup), -m is machine readable -LSPCI_CMD= "/sbin/lspci -nm" - MODULE_CLASS_NETWORK= "network" MODULE_CLASS_SCSI= "scsi" -PCI_BASE_CLASS_NETWORK=0x02L -PCI_BASE_CLASS_STORAGE=0x01L - -PCI_ANY=0xffffffffL +#PCI_* is now defined in the pypci modules +#PCI_BASE_CLASS_NETWORK=0x02L +#PCI_BASE_CLASS_STORAGE=0x01L def get_total_phsyical_mem(vars = {}, log = sys.stderr): """ @@ -141,7 +117,8 @@ def get_block_device_list(vars = {}, log = sys.stderr): # table with valid scsi/sata/ide/raid block device names valid_blk_names = {} # add in valid sd and hd block device names - for blk_prefix in ('sd','hd'): + # also check for vd (virtio devices used with kvm) + for blk_prefix in ('sd','hd','vd'): for blk_num in map ( \ lambda x: chr(x), range(ord('a'),ord('z')+1)): devicename="%s%c" % (blk_prefix, blk_num) @@ -286,7 +263,7 @@ def get_system_modules( vars = {}, log = sys.stderr): modules_pcimap_path = "%s/lib/modules/%s/modules.pcimap" % \ (SYSIMG_PATH,kernel_version) if not os.access(modules_pcimap_path,os.R_OK): - print( "Unable to read %s" % path ) + print( "WARNING: Unable to read %s" % modules_pcimap_path ) return pcimap = pypcimap.PCIMap(modules_pcimap_path) @@ -301,13 +278,22 @@ def get_system_modules( vars = {}, log = sys.stderr): # XXX: this is really similar to what BootCD/conf_files/pl_hwinit does. merge? pcidevs = get_devices() - for (slot, dev) in pcidevs.iteritems(): + devlist=pcidevs.keys() + devlist.sort() + for slot in devlist: + dev = pcidevs[slot] base = (dev[4] & 0xff0000) >> 16 + modules = pcimap.get(dev) if base not in (PCI_BASE_CLASS_STORAGE, PCI_BASE_CLASS_NETWORK): - continue + # special exception for forcedeth NICs whose base id + # claims to be a Bridge, even though it is clearly a + # network device + if "forcedeth" in modules: + base=PCI_BASE_CLASS_NETWORK + else: + continue - modules = pcimap.get(dev) if len(modules) > 0: if base == PCI_BASE_CLASS_NETWORK: network_mods += modules @@ -385,13 +371,10 @@ if __name__ == "__main__": if not modules: print "unable to list system modules" else: - for type in modules: - if type == MODULE_CLASS_SCSI: - print( "all scsi modules:" ) - for a_mod in modules[type]: - print a_mod - elif type == MODULE_CLASS_NETWORK: - print( "all network modules:" ) - for a_mod in modules[type]: - print a_mod + for module_class in (MODULE_CLASS_SCSI,MODULE_CLASS_NETWORK): + if len(modules[module_class]) > 0: + module_list = "" + for a_mod in modules[module_class]: + module_list = module_list + "%s " % a_mod + print "all %s modules: %s" % (module_class, module_list)