Created
May 17, 2017 12:44
-
-
Save adragomir/c501cbaeb7fa62408ee7fe89d12b3790 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import os | |
from optparse import OptionParser | |
parser = OptionParser() | |
parser.add_option("-v", "--verbose", dest="verbose", | |
help="print verbose messages. Try -vv, -vvv for \ | |
more verbose messages", action="count") | |
(options, args) = parser.parse_args() | |
verbose = 0 | |
if options.verbose is not None: | |
verbose = options.verbose | |
vmbus_sys_path = '/sys/bus/vmbus/devices' | |
if not os.path.isdir(vmbus_sys_path): | |
print("%s doesn't exist: exiting..." % vmbus_sys_path) | |
exit(-1) | |
vmbus_dev_dict = { | |
'{0e0b6031-5213-4934-818b-38d90ced39db}' : '[Operating system shutdown]', | |
'{9527e630-d0ae-497b-adce-e80ab0175caf}' : '[Time Synchronization]', | |
'{57164f39-9115-4e78-ab55-382f3bd5422d}' : '[Heartbeat]', | |
'{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}' : '[Data Exchange]', | |
'{35fa2e29-ea23-4236-96ae-3a6ebacba440}' : '[Backup (volume checkpoint)]', | |
'{34d14be3-dee4-41c8-9ae7-6b174977c192}' : '[Guest services]', | |
'{525074dc-8985-46e2-8057-a307dc18a502}' : '[Dynamic Memory]', | |
'{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}' : 'Synthetic mouse', | |
'{f912ad6d-2b17-48ea-bd65-f927a61c7684}' : 'Synthetic keyboard', | |
'{da0a7802-e377-4aac-8e77-0558eb1073f8}' : 'Synthetic framebuffer adapter', | |
'{f8615163-df3e-46c5-913f-f2d2f965ed0e}' : 'Synthetic network adapter', | |
'{32412632-86cb-44a2-9b5c-50d1417354f5}' : 'Synthetic IDE Controller', | |
'{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}' : 'Synthetic SCSI Controller', | |
'{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}' : 'Synthetic fiber channel adapter', | |
'{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}' : 'Synthetic RDMA adapter', | |
'{44c4f61d-4444-4400-9d52-802e27ede19f}' : 'PCI Express pass-through', | |
'{276aacf4-ac15-426c-98dd-7521ad3f01fe}' : '[Reserved system device]', | |
'{f8e65716-3cb3-4a06-9a60-1889c5cccab5}' : '[Reserved system device]', | |
'{3375baf4-9e15-4b30-b765-67acb10d607b}' : '[Reserved system device]', | |
} | |
def get_vmbus_dev_attr(dev_name, attr): | |
try: | |
f = open('%s/%s/%s' % (vmbus_sys_path, dev_name, attr), 'r') | |
lines = f.readlines() | |
f.close() | |
except IOError: | |
lines = [] | |
return lines | |
class VMBus_Dev: | |
pass | |
vmbus_dev_list = [] | |
for f in os.listdir(vmbus_sys_path): | |
vmbus_id = get_vmbus_dev_attr(f, 'id')[0].strip() | |
class_id = get_vmbus_dev_attr(f, 'class_id')[0].strip() | |
device_id = get_vmbus_dev_attr(f, 'device_id')[0].strip() | |
dev_desc = vmbus_dev_dict.get(class_id, 'Unknown') | |
chn_vp_mapping = get_vmbus_dev_attr(f, 'channel_vp_mapping') | |
chn_vp_mapping = [c.strip() for c in chn_vp_mapping] | |
chn_vp_mapping = sorted(chn_vp_mapping, | |
key = lambda c : int(c.split(':')[0])) | |
chn_vp_mapping = ['\tRel_ID=%s, target_cpu=%s' % | |
(c.split(':')[0], c.split(':')[1]) | |
for c in chn_vp_mapping] | |
d = VMBus_Dev() | |
d.sysfs_path = '%s/%s' % (vmbus_sys_path, f) | |
d.vmbus_id = vmbus_id | |
d.class_id = class_id | |
d.device_id = device_id | |
d.dev_desc = dev_desc | |
d.chn_vp_mapping = '\n'.join(chn_vp_mapping) | |
if d.chn_vp_mapping: | |
d.chn_vp_mapping += '\n' | |
vmbus_dev_list.append(d) | |
vmbus_dev_list = sorted(vmbus_dev_list, key = lambda d : int(d.vmbus_id)) | |
format0 = '%2s: %s' | |
format1 = '%2s: Class_ID = %s - %s\n%s' | |
format2 = '%2s: Class_ID = %s - %s\n\tDevice_ID = %s\n\tSysfs path: %s\n%s' | |
for d in vmbus_dev_list: | |
if verbose == 0: | |
print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc)) | |
elif verbose == 1: | |
print(('VMBUS ID ' + format1) % \ | |
(d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping)) | |
else: | |
print(('VMBUS ID ' + format2) % \ | |
(d.vmbus_id, d.class_id, d.dev_desc, \ | |
d.device_id, d.sysfs_path, d.chn_vp_mapping)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment