From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yang Hongyang Subject: [PATCH]xl: Add "xl shutdown" command Date: Tue, 18 May 2010 15:03:08 +0800 Message-ID: <4BF23BAC.9060009@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org Add "xl shutdown" command. Signed-off-by: Yang Hongyang diff -r baccadfd9418 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Fri May 14 08:05:05 2010 +0100 +++ b/tools/libxl/xl_cmdimpl.c Tue May 18 22:47:32 2010 +0800 @@ -3667,3 +3667,66 @@ exit(0); } + +int main_shutdown(int argc, char **argv) +{ + int all = 0, reboot = 0, halt = 0, action = 0/*default action is poweroff*/; + struct libxl_vminfo *info; + char *dom = NULL; + int nb_vm = 0; + int opt, i; + + while ((opt = getopt(argc, argv, "haRH")) != -1) { + switch (opt) { + case 'a': + all = 1; + break; + case 'R': + reboot = 1; + break; + case 'H': + halt = 1; + break; + case 'h': + help("shutdown"); + exit(0); + default: + fprintf(stderr, "option `%c' not supported.\n", opt); + break; + } + } + + if (reboot && halt) { + fprintf(stderr, "Reboot and Halt can not be specified together.\n\n"); + help("shutdown"); + exit(1); + } + + dom = argv[optind]; + if (!dom && all == 0) { + fprintf(stderr, "You must specify -a or a domain id.\n\n"); + help("shutdown"); + exit(1); + } + + if (reboot) + action = 1; + else if (halt) + action = 4; + + if (all) { + info = libxl_list_vm(&ctx, &nb_vm); + for (i = 0; i < nb_vm; i++) + libxl_domain_shutdown(&ctx, info[i].domid, action); + } else { + find_domain(dom); + if (domid == 0) { + fprintf(stderr, "Domain 0 cannot be shutdown.\n\n"); + exit(1); + } + libxl_domain_shutdown(&ctx, domid, action); + } + + exit(0); +} + diff -r baccadfd9418 tools/libxl/xl_cmdimpl.h --- a/tools/libxl/xl_cmdimpl.h Fri May 14 08:05:05 2010 +0100 +++ b/tools/libxl/xl_cmdimpl.h Tue May 18 22:47:32 2010 +0800 @@ -52,6 +52,7 @@ int main_blocklist(int argc, char **argv); int main_blockdetach(int argc, char **argv); int main_uptime(int argc, char **argv); +int main_shutdown(int argc, char **argv); void help(char *command); diff -r baccadfd9418 tools/libxl/xl_cmdtable.c --- a/tools/libxl/xl_cmdtable.c Fri May 14 08:05:05 2010 +0100 +++ b/tools/libxl/xl_cmdtable.c Tue May 18 22:47:32 2010 +0800 @@ -224,6 +224,14 @@ "Print uptime for all/some domains", "[-s] [Domain]", }, + { "shutdown", + &main_shutdown, + "Shutdown a domain", + " [-aRH]", + "-a Shutdown all VMs.\n" + "-R Shutdown and reboot.\n" + "-H Shutdown without reboot(halt).\n" + }, }; int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec); -- Regards Yang Hongyang