From: Wei Liu Date: Fri, 24 Feb 2017 13:43:37 +0000 (+0000) Subject: xl: split out block related code X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2655 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c6e4853200fe7080ea1e56c844b7a17f84c4f624;p=xen.git xl: split out block related code Signed-off-by: Wei Liu Acked-by: Ian Jackson --- diff --git a/tools/xl/Makefile b/tools/xl/Makefile index b31ec052c1..331ae21293 100644 --- a/tools/xl/Makefile +++ b/tools/xl/Makefile @@ -17,7 +17,7 @@ CFLAGS_XL += -Wshadow XL_OBJS = xl.o xl_cmdimpl.o xl_cmdtable.o xl_sxp.o xl_utils.o XL_OBJS += xl_tmem.o xl_parse.o xl_cpupool.o xl_flask.o -XL_OBJS += xl_vtpm.o +XL_OBJS += xl_vtpm.o xl_block.o $(XL_OBJS): CFLAGS += $(CFLAGS_libxentoollog) $(XL_OBJS): CFLAGS += $(CFLAGS_XL) diff --git a/tools/xl/xl_block.c b/tools/xl/xl_block.c new file mode 100644 index 0000000000..da337efc49 --- /dev/null +++ b/tools/xl/xl_block.c @@ -0,0 +1,129 @@ +/* + * Copyright 2009-2017 Citrix Ltd and other contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. with the special + * exception on linking described in file LICENSE. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#include + +#include +#include +#include + +#include "xl.h" +#include "xl_utils.h" +#include "xl_parse.h" + +int main_blockattach(int argc, char **argv) +{ + int opt; + uint32_t fe_domid; + libxl_device_disk disk; + XLU_Config *config = 0; + + SWITCH_FOREACH_OPT(opt, "", NULL, "block-attach", 2) { + /* No options */ + } + + if (libxl_domain_qualifier_to_domid(ctx, argv[optind], &fe_domid) < 0) { + fprintf(stderr, "%s is an invalid domain identifier\n", argv[optind]); + return 1; + } + optind++; + + parse_disk_config_multistring + (&config, argc-optind, (const char* const*)argv + optind, &disk); + + if (dryrun_only) { + char *json = libxl_device_disk_to_json(ctx, &disk); + printf("disk: %s\n", json); + free(json); + if (ferror(stdout) || fflush(stdout)) { perror("stdout"); exit(-1); } + return 0; + } + + if (libxl_device_disk_add(ctx, fe_domid, &disk, 0)) { + fprintf(stderr, "libxl_device_disk_add failed.\n"); + return 1; + } + return 0; +} + +int main_blocklist(int argc, char **argv) +{ + int opt; + int i, nb; + libxl_device_disk *disks; + libxl_diskinfo diskinfo; + + SWITCH_FOREACH_OPT(opt, "", NULL, "block-list", 1) { + /* No options */ + } + + printf("%-5s %-3s %-6s %-5s %-6s %-8s %-30s\n", + "Vdev", "BE", "handle", "state", "evt-ch", "ring-ref", "BE-path"); + for (argv += optind, argc -= optind; argc > 0; --argc, ++argv) { + uint32_t domid; + if (libxl_domain_qualifier_to_domid(ctx, *argv, &domid) < 0) { + fprintf(stderr, "%s is an invalid domain identifier\n", *argv); + continue; + } + disks = libxl_device_disk_list(ctx, domid, &nb); + if (!disks) { + continue; + } + for (i=0; i 0; --argc, ++argv) { - uint32_t domid; - if (libxl_domain_qualifier_to_domid(ctx, *argv, &domid) < 0) { - fprintf(stderr, "%s is an invalid domain identifier\n", *argv); - continue; - } - disks = libxl_device_disk_list(ctx, domid, &nb); - if (!disks) { - continue; - } - for (i=0; i