Mailing List Archive

[xen-unstable] xl: use help table to describe command help information
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1273577846 -3600
# Node ID 2b5e14e4c5e57b0064d1c0415d9c4629bd0aac9b
# Parent 60b3417b1499a3cbe28a88d286f1b3c2ac01d5fa
xl: use help table to describe command help information

This patch generate a help table to describe command help
information.

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
tools/libxl/xl_cmdimpl.c | 122 +++---------------------------
tools/libxl/xl_cmdtable.c | 184 +++++++++++++++++++++++++++++++++++++++-------
tools/libxl/xl_cmdtable.h | 2
3 files changed, 173 insertions(+), 135 deletions(-)

diff -r 60b3417b1499 -r 2b5e14e4c5e5 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Tue May 11 11:23:54 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c Tue May 11 12:37:26 2010 +0100
@@ -1170,114 +1170,20 @@ void help(char *command)
for (i = 0; i < cmdtable_len; i++)
printf(" %-20s%s\n",
cmd_table[i].cmd_name, cmd_table[i].cmd_desc);
- } else if(!strcmp(command, "create")) {
- printf("Usage: xl create <ConfigFile> [options] [vars]\n\n");
- printf("Create a domain based on <ConfigFile>.\n\n");
- printf("Options:\n\n");
- printf("-h Print this help.\n");
- printf("-p Leave the domain paused after it is created.\n");
- printf("-c Connect to the console after the domain is created.\n");
- printf("-d Enable debug messages.\n");
- printf("-e Do not wait in the background for the death of the domain.\n");
- } else if(!strcmp(command, "list")) {
- printf("Usage: xl list [-v] [Domain]\n\n");
- printf("List information about all/some domains.\n\n");
- } else if(!strcmp(command, "pci-attach")) {
- printf("Usage: xl pci-attach <Domain> <BDF> [Virtual Slot]\n\n");
- printf("Insert a new pass-through pci device.\n\n");
- } else if(!strcmp(command, "pci-detach")) {
- printf("Usage: xl pci-detach <Domain> <BDF>\n\n");
- printf("Remove a domain's pass-through pci device.\n\n");
- } else if(!strcmp(command, "pci-list")) {
- printf("Usage: xl pci-list <Domain>\n\n");
- printf("List pass-through pci devices for a domain.\n\n");
- } else if(!strcmp(command, "pause")) {
- printf("Usage: xl pause <Domain>\n\n");
- printf("Pause execution of a domain.\n\n");
- } else if(!strcmp(command, "unpause")) {
- printf("Usage: xl unpause <Domain>\n\n");
- printf("Unpause a paused domain.\n\n");
- } else if(!strcmp(command, "save")) {
- printf("Usage: xl save [options] <Domain> <CheckpointFile> [<ConfigFile>]\n\n");
- printf("Save a domain state to restore later.\n\n");
- printf("Options:\n\n");
- printf("-h Print this help.\n");
- printf("-c Leave domain running after creating the snapshot.\n");
- } else if(!strcmp(command, "restore")) {
- printf("Usage: xl restore [options] [<ConfigFile>] <CheckpointFile>\n\n");
- printf("Restore a domain from a saved state.\n\n");
- printf("Options:\n\n");
- printf("-h Print this help.\n");
- printf("-p Do not unpause domain after restoring it.\n");
- printf("-e Do not wait in the background for the death of the domain.\n");
- printf("-d Enable debug messages.\n");
- } else if(!strcmp(command, "migrate")) {
- printf("Usage: xl migrate [options] <Domain> <host>\n\n");
- printf("Save a domain state to restore later.\n\n");
- printf("Options:\n\n");
- printf("-h Print this help.\n");
- printf("-C <config> Send <config> instead of config file from creation.\n");
- printf("-s <sshcommand> Use <sshcommand> instead of ssh. String will be passed to sh. If empty, run <host> instead of ssh <host> xl migrate-receive [-d -e]\n");
- printf("-e Do not wait in the background (on <host>) for the death of the domain.\n");
- } else if(!strcmp(command, "migrate-receive")) {
- printf("Usage: xl migrate-receive - for internal use only");
- } else if(!strcmp(command, "restore")) {
- printf("Usage: xl restore [options] [<ConfigFile>] <CheckpointFile>\n\n");
- printf("Restore a domain from a saved state.\n\n");
- printf("Options:\n\n");
- printf("-h Print this help.\n");
- printf("-O Old (configless) xl save format.\n");
- printf("-p Do not unpause domain after restoring it.\n");
- printf("-e Do not wait in the background for the death of the domain.\n");
- } else if(!strcmp(command, "destroy")) {
- printf("Usage: xl destroy <Domain>\n\n");
- printf("Terminate a domain immediately.\n\n");
- } else if (!strcmp(command, "console")) {
- printf("Usage: xl console <Domain>\n\n");
- printf("Attach to domain's console.\n\n");
- } else if (!strcmp(command, "cd-insert")) {
- printf("Usage: xl cd-insert <Domain> <VirtualDevice> <type:path>\n\n");
- printf("Insert a cdrom into a guest's cd drive.\n\n");
- } else if (!strcmp(command, "cd-eject")) {
- printf("Usage: xl cd-eject <Domain> <VirtualDevice>\n\n");
- printf("Eject a cdrom from a guest's cd drive.\n\n");
- } else if (!strcmp(command, "mem-set")) {
- printf("Usage: xl mem-set <Domain> <MemKB>\n\n");
- printf("Set the current memory usage for a domain.\n\n");
- } else if (!strcmp(command, "button-press")) {
- printf("Usage: xl button-press <Domain> <Button>\n\n");
- printf("Indicate <Button> press to a domain.\n");
- printf("<Button> may be 'power' or 'sleep'.\n\n");
- } else if (!strcmp(command, "vcpu-list")) {
- printf("Usage: xl vcpu-list [Domain, ...]\n\n");
- printf("List the VCPUs for all/some domains.\n\n");
- } else if (!strcmp(command, "vcpu-pin")) {
- printf("Usage: xl vcpu-pin <Domain> <VCPU|all> <CPUs|all>\n\n");
- printf("Set which CPUs a VCPU can use.\n\n");
- } else if (!strcmp(command, "vcpu-set")) {
- printf("Usage: xl vcpu-set <Domain> <vCPUs>\n\n");
- printf("Set the number of active VCPUs for allowed for the domain.\n\n");
- } else if(!strcmp(command, "info")) {
- printf("Usage: xl info\n\n");
- printf("Get information about Xen host.\n\n");
- } else if (!strcmp(command, "sched-credit")) {
- printf("Usage: xl sched-credit [-d <Domain> [-w[=WEIGHT]|-c[=CAP]]]\n\n");
- printf("Get/set credit scheduler parameters.\n");
- printf(" -d DOMAIN, --domain=DOMAIN Domain to modify\n");
- printf(" -w WEIGHT, --weight=WEIGHT Weight (int)\n");
- printf(" -c CAP, --cap=CAP Cap (int)\n");
- } else if (!strcmp(command, "domid")) {
- printf("Usage: xl domid <DomainName>\n\n");
- printf("Convert a domain name to domain id.\n");
- } else if (!strcmp(command, "domname")) {
- printf("Usage: xl domname <DomainId>\n\n");
- printf("Convert a domain id to domain name.\n");
- } else if (!strcmp(command, "rename")) {
- printf("Usage: xl rename <Domain> <NewDomainName>\n\n");
- printf("Rename a domain.\n");
- } else if (!strcmp(command, "trigger")) {
- printf("Usage: xm trigger <Domain> <nmi|reset|init|power|sleep> [<VCPU>]\n\n");
- printf("Send a trigger to a domain.\n");
+ } else {
+ for (i = 0; i < cmdtable_len; i++)
+ if (!strcmp(command, cmd_table[i].cmd_name))
+ break;
+ if (i == cmdtable_len) {
+ printf("command not implemented\n");
+ } else {
+ printf("Usage: xl %s %s\n\n%s.\n\n",
+ cmd_table[i].cmd_name,
+ cmd_table[i].cmd_usage,
+ cmd_table[i].cmd_desc);
+ if (cmd_table[i].cmd_option)
+ printf("Options:\n\n%s\n", cmd_table[i].cmd_option);
+ }
}
}

diff -r 60b3417b1499 -r 2b5e14e4c5e5 tools/libxl/xl_cmdtable.c
--- a/tools/libxl/xl_cmdtable.c Tue May 11 11:23:54 2010 +0100
+++ b/tools/libxl/xl_cmdtable.c Tue May 11 12:37:26 2010 +0100
@@ -15,33 +15,163 @@
#include "xl_cmdtable.h"

struct cmd_spec cmd_table[] = {
- { "create", &main_create, "create a domain from config file <filename>" },
- { "list", &main_list, "list information about all domains" },
- { "destroy", &main_destroy, "terminate a domain immediately" },
- { "pci-attach", &main_pciattach, "insert a new pass-through pci device" },
- { "pci-detach", &main_pcidetach, "remove a domain's pass-through pci device" },
- { "pci-list", &main_pcilist, "list pass-through pci devices for a domain" },
- { "pause", &main_pause, "pause execution of a domain" },
- { "unpause", &main_unpause, "unpause a paused domain" },
- { "console", &main_console, "attach to domain's console" },
- { "save", &main_save, "save a domain state to restore later" },
- { "migrate", &main_migrate, "save a domain state to restore later" },
- { "restore", &main_restore, "restore a domain from a saved state" },
- { "migrate-receive", &main_migrate_receive, "restore a domain from a saved state" },
- { "cd-insert", &main_cd_insert, "insert a cdrom into a guest's cd drive" },
- { "cd-eject", &main_cd_eject, "eject a cdrom from a guest's cd drive" },
- { "mem-set", &main_memset, "set the current memory usage for a domain" },
- { "button-press", &main_button_press, "indicate an ACPI button press to the domain" },
- { "vcpu-list", &main_vcpulist, "list the VCPUs for all/some domains" },
- { "vcpu-pin", &main_vcpupin, "set which CPUs a VCPU can use" },
- { "vcpu-set", &main_vcpuset, "set the number of active VCPUs allowed for the domain" },
- { "list-vm", &main_list_vm, "list the VMs,without DOM0" },
- { "info", &main_info, "get information about Xen host" },
- { "sched-credit", &main_sched_credit, "get/set credit scheduler parameters" },
- { "domid", &main_domid, "convert a domain name to domain id"},
- { "domname", &main_domname, "convert a domain id to domain name"},
- { "rename", &main_rename, "rename a domain"},
- { "trigger", &main_trigger, "send a trigger to a domain"},
+ { "create",
+ &main_create,
+ "Create a domain from config file <filename>",
+ "<ConfigFile> [options] [vars]",
+ "-h Print this help.\n"
+ "-p Leave the domain paused after it is created.\n"
+ "-c Connect to the console after the domain is created.\n"
+ "-d Enable debug messages.\n"
+ "-e Do not wait in the background for the death of the domain."
+ },
+ { "list",
+ &main_list,
+ "List information about all/some domains",
+ "[-v] [Domain]",
+ },
+ { "destroy",
+ &main_destroy,
+ "Terminate a domain immediately",
+ "<Domain>",
+ },
+ { "pci-attach",
+ &main_pciattach,
+ "Insert a new pass-through pci device",
+ "<Domain> <BDF> [Virtual Slot]",
+ },
+ { "pci-detach",
+ &main_pcidetach,
+ "Remove a domain's pass-through pci device",
+ "<Domain> <BDF>",
+ },
+ { "pci-list",
+ &main_pcilist,
+ "List pass-through pci devices for a domain",
+ "<Domain>",
+ },
+ { "pause",
+ &main_pause,
+ "Pause execution of a domain",
+ "<Domain>",
+ },
+ { "unpause",
+ &main_unpause,
+ "Unpause a paused domain",
+ "<Domain>",
+ },
+ { "console",
+ &main_console,
+ "Attach to domain's console",
+ "<Domain>",
+ },
+ { "save",
+ &main_save,
+ "Save a domain state to restore later",
+ "[options] <Domain> <CheckpointFile> [<ConfigFile>]",
+ "-h Print this help.\n"
+ "-c Leave domain running after creating the snapshot."
+ },
+ { "migrate",
+ &main_migrate,
+ "Save a domain state to restore later",
+ "[options] <Domain> <host>",
+ "-h Print this help.\n"
+ "-C <config> Send <config> instead of config file from creation.\n"
+ "-s <sshcommand> Use <sshcommand> instead of ssh. String will be passed\n"
+ " to sh. If empty, run <host> instead of ssh <host> xl\n"
+ " migrate-receive [-d -e]\n"
+ "-e Do not wait in the background (on <host>) for the death\n"
+ " of the domain."
+ },
+ { "restore",
+ &main_restore,
+ "Restore a domain from a saved state",
+ "[options] [<ConfigFile>] <CheckpointFile>",
+ "-h Print this help.\n"
+ "-p Do not unpause domain after restoring it.\n"
+ "-e Do not wait in the background for the death of the domain.\n"
+ "-d Enable debug messages."
+ },
+ { "migrate-receive",
+ &main_migrate_receive,
+ "Restore a domain from a saved state",
+ "- for internal use only",
+ },
+ { "cd-insert",
+ &main_cd_insert,
+ "Insert a cdrom into a guest's cd drive",
+ "<Domain> <VirtualDevice> <type:path>",
+ },
+ { "cd-eject",
+ &main_cd_eject,
+ "Eject a cdrom from a guest's cd drive",
+ "<Domain> <VirtualDevice>",
+ },
+ { "mem-set",
+ &main_memset,
+ "Set the current memory usage for a domain",
+ "<Domain> <MemKB>",
+ },
+ { "button-press",
+ &main_button_press,
+ "Indicate an ACPI button press to the domain",
+ "<Domain> <Button>",
+ "<Button> may be 'power' or 'sleep'."
+ },
+ { "vcpu-list",
+ &main_vcpulist,
+ "List the VCPUs for all/some domains",
+ "[Domain, ...]",
+ },
+ { "vcpu-pin",
+ &main_vcpupin,
+ "Set which CPUs a VCPU can use",
+ "<Domain> <VCPU|all> <CPUs|all>",
+ },
+ { "vcpu-set",
+ &main_vcpuset,
+ "Set the number of active VCPUs allowed for the domain",
+ "<Domain> <vCPUs>",
+ },
+ { "list-vm",
+ &main_list_vm,
+ "List the VMs,without DOM0",
+ "",
+ },
+ { "info",
+ &main_info,
+ "Get information about Xen host",
+ "",
+ },
+ { "sched-credit",
+ &main_sched_credit,
+ "Get/set credit scheduler parameters",
+ "[-d <Domain> [-w[=WEIGHT]|-c[=CAP]]]",
+ "-d DOMAIN, --domain=DOMAIN Domain to modify\n"
+ "-w WEIGHT, --weight=WEIGHT Weight (int)\n"
+ "-c CAP, --cap=CAP Cap (int)"
+ },
+ { "domid",
+ &main_domid,
+ "Convert a domain name to domain id",
+ "<DomainName>",
+ },
+ { "domname",
+ &main_domname,
+ "Convert a domain id to domain name",
+ "<DomainId>",
+ },
+ { "rename",
+ &main_rename,
+ "Rename a domain",
+ "<Domain> <NewDomainName>",
+ },
+ { "trigger",
+ &main_trigger,
+ "Send a trigger to a domain",
+ "<Domain> <nmi|reset|init|power|sleep> [<VCPU>]",
+ },
};

int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec);
diff -r 60b3417b1499 -r 2b5e14e4c5e5 tools/libxl/xl_cmdtable.h
--- a/tools/libxl/xl_cmdtable.h Tue May 11 11:23:54 2010 +0100
+++ b/tools/libxl/xl_cmdtable.h Tue May 11 12:37:26 2010 +0100
@@ -18,6 +18,8 @@ struct cmd_spec {
char *cmd_name;
int (*cmd_impl)(int argc, char **argv);
char *cmd_desc;
+ char *cmd_usage;
+ char *cmd_option;
};

extern struct cmd_spec cmd_table[];

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog