Index: xen/xen-unstable.hg/tools/python/xen/xm/main.py =================================================================== --- xen.orig/xen-unstable.hg/tools/python/xen/xm/main.py +++ xen/xen-unstable.hg/tools/python/xen/xm/main.py @@ -684,29 +684,127 @@ def xm_log(args): from xen.xend.XendClient import server print server.xend_node_log() +def parse_dev_info(info): + def get_info(n, t, d): + i = 0 + while i < len(info): + if (info[i][0] == n): + return t(info[i][1]) + i = i + 1 + return t(d) + return { + #common + 'backend-id' : get_info('backend-id', int, -1), + 'handle' : get_info('handle', int, 0), + 'state' : get_info('state', int, -1), + 'be-path' : get_info('backend', str, '??'), + 'event-ch' : get_info('event-channel',int, -1), + #network specific + 'virtual-device' : get_info('virtual-device', str, '??'), + 'tx-ring-ref': get_info('tx-ring-ref', int, -1), + 'rx-ring-ref': get_info('rx-ring-ref', int, -1), + 'mac' : get_info('mac', str, '??'), + #block-device specific + 'ring-ref' : get_info('ring-ref', int, -1), + } + +def has_long_option(args): + use_long = 0 + try: + (options, params) = getopt.gnu_getopt(args, 'l', ['long']) + except getopt.GetoptError, opterr: + err(opterr) + sys.exit(1) + + for (k, v) in options: + if k in ['-l', '--long']: + use_long = 1 + return (use_long, params) + def xm_network_list(args): - arg_check(args, "network-list", 1) - dom = args[0] + arg_check(args, "network-list", 1, 2) + + (use_long, params) = has_long_option(args) + + dom = params[0] from xen.xend.XendClient import server - for x in server.xend_domain_devices(dom, 'vif'): - sxp.show(x) - print + if use_long: + devs = server.xend_domain_devices(dom, 'vif') + map(PrettyPrint.prettyprint, devs) + else: + hdr = 0 + for x in server.xend_domain_devices(dom, 'vif'): + if hdr == 0: + print 'Attached network devices:' + print 'Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path' + hdr = 1 + ni = parse_dev_info(x[1]) + ni['idx'] = int(x[0]) + print ("%(idx)-3d " + "%(backend-id)-3d" + "%(mac)-17s " + "%(handle)-3d " + "%(state)-3d " + "%(event-ch)-3d " + "%(tx-ring-ref)-5d/%(rx-ring-ref)-5d " + "%(be-path)-30s " + % ni) def xm_block_list(args): - arg_check(args, "block-list", 1) - dom = args[0] + arg_check(args, "block-list", 1, 2) + + (use_long, params) = has_long_option(args) + + dom = params[0] from xen.xend.XendClient import server - for x in server.xend_domain_devices(dom, 'vbd'): - sxp.show(x) - print + if use_long: + devs = server.xend_domain_devices(dom, 'vbd') + map(PrettyPrint.prettyprint, devs) + else: + hdr = 0 + for x in server.xend_domain_devices(dom, 'vbd'): + if hdr == 0: + print 'Attached block devices:' + print 'Vdev BE handle state evt-ch ring-ref BE-path' + hdr = 1 + ni = parse_dev_info(x[1]) + ni['idx'] = int(x[0]) + print ("%(idx)-3d " + "%(backend-id)-3d " + "%(handle)-3d " + "%(state)-3d " + "%(event-ch)-3d " + "%(ring-ref)-5d " + "%(be-path)-30s " + % ni) def xm_vtpm_list(args): - arg_check(args, "vtpm-list", 1) - dom = args[0] + arg_check(args, "vtpm-list", 1, 2) + + (use_long, params) = has_long_option(args) + + dom = params[0] from xen.xend.XendClient import server - for x in server.xend_domain_devices(dom, 'vtpm'): - sxp.show(x) - print + if use_long: + devs = server.xend_domain_devices(dom, 'vtpm') + map(PrettyPrint.prettyprint, devs) + else: + hdr = 0 + for x in server.xend_domain_devices(dom, 'vtpm'): + if hdr == 0: + print 'Attached virtual TPM devices:' + print 'Idx BE handle state evt-ch ring-ref BE-path' + hdr = 1 + ni = parse_dev_info(x[1]) + ni['idx'] = int(x[0]) + print ("%(idx)-3d " + "%(backend-id)-3d " + "%(handle)-3d " + "%(state)-3d " + "%(event-ch)-3d " + "%(ring-ref)-5d " + "%(be-path)-30s " + % ni) def xm_block_attach(args): arg_check(args, 'block-attach', 4, 5)