|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/9] xenstore: modify init-xenstore-domain parameter syntax
+Daniel
On Fri, 2015-12-11 at 16:47 +0100, Juergen Gross wrote:
> init-xenstore-domain takes only positional parameters today. Change
> this to a more flexible parameter syntax allowing to specify additional
> options or to omit some.
>
> Today the supported usage is:
>
> init-xenstore-domain <xenstore-kernel> <memory_mb> <flask-label>
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ[<ramdisk-file>]
>
> Modify this to:
>
> init-xenstore-domain --kernel <xenstore-kernel>
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ--memory <memory_mb>
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ[--flask <flask-label>]
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ[--ramdisk <ramdisk-file>]
>
> The flask label is made optional in order to support xenstore domains
> without the need of a flask enabled hypervisor.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Looks fine to me
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
I'd like to see Daniel opinion of all the changes to init-xenstore-domain.c
in this series though.
> ---
> Âtools/xenstore/init-xenstore-domain.c | 79 ++++++++++++++++++++++++++++-
> ------
> Â1 file changed, 63 insertions(+), 16 deletions(-)
>
> diff --git a/tools/xenstore/init-xenstore-domain.c b/tools/xenstore/init-
> xenstore-domain.c
> index c9963c6..068887c 100644
> --- a/tools/xenstore/init-xenstore-domain.c
> +++ b/tools/xenstore/init-xenstore-domain.c
> @@ -4,6 +4,7 @@
> Â#include <string.h>
> Â#include <stdint.h>
> Â#include <stdlib.h>
> +#include <getopt.h>
> Â#include <sys/ioctl.h>
> Â#include <sys/mman.h>
> Â#include <xenctrl.h>
> @@ -13,16 +14,42 @@
> Â#include <xen-xsm/flask/flask.h>
> Â
> Âstatic uint32_t domid = -1;
> +static char *kernel;
> +static char *ramdisk;
> +static char *flask;
> +static int memory;
> +
> +static struct option options[] = {
> + { "kernel", 1, NULL, 'k' },
> + { "memory", 1, NULL, 'm' },
> + { "flask", 1, NULL, 'f' },
> + { "ramdisk", 1, NULL, 'r' },
> + { NULL, 0, NULL, 0 }
> +};
> +
> +static void usage(void)
> +{
> + fprintf(stderr,
> +"Usage:\n"
> +"\n"
> +"init-xenstore-domain <options>\n"
> +"\n"
> +"where options may include:\n"
> +"\n"
> +"ÂÂ--kernel <xenstore-kernel>ÂÂkernel file of the xenstore domain,
> mandatory\n"
> +"ÂÂ--memory <memory size>ÂÂÂÂÂÂsize of the domain in MB, mandatory\n"
> +"ÂÂ--flask <flask-label>ÂÂÂÂÂÂÂoptional flask label of the domain\n"
> +"ÂÂ--ramdisk <ramdisk-file>ÂÂÂÂoptional ramdisk file for the domain\n");
> +}
> Â
> -static int build(xc_interface *xch, int argc, char** argv)
> +static int build(xc_interface *xch)
> Â{
> Â char cmdline[512];
> Â uint32_t ssid;
> Â xen_domain_handle_t handle = { 0 };
> Â int rv, xs_fd;
> Â struct xc_dom_image *dom = NULL;
> - int maxmem = atoi(argv[2]);
> - int limit_kb = (maxmem + 1)*1024;
> + int limit_kb = (memory + 1)*1024;
> Â
> Â xs_fd = open("/dev/xen/xenbus_backend", O_RDWR);
> Â if (xs_fd == -1) {
> @@ -30,10 +57,14 @@ static int build(xc_interface *xch, int argc, char**
> argv)
> Â return -1;
> Â }
> Â
> - rv = xc_flask_context_to_sid(xch, argv[3], strlen(argv[3]),
> &ssid);
> - if (rv) {
> - fprintf(stderr, "xc_flask_context_to_sid failed\n");
> - goto err;
> + if (flask) {
> + rv = xc_flask_context_to_sid(xch, flask, strlen(flask),
> &ssid);
> + if (rv) {
> + fprintf(stderr, "xc_flask_context_to_sid
> failed\n");
> + goto err;
> + }
> + } else {
> + ssid = SECINITSID_DOMU;
> Â }
> Â rv = xc_domain_create(xch, ssid, handle, 0, &domid, NULL);
> Â if (rv) {
> @@ -64,14 +95,14 @@ static int build(xc_interface *xch, int argc, char**
> argv)
> Â snprintf(cmdline, 512, "--event %d --internal-db", rv);
> Â
> Â dom = xc_dom_allocate(xch, cmdline, NULL);
> - rv = xc_dom_kernel_file(dom, argv[1]);
> + rv = xc_dom_kernel_file(dom, kernel);
> Â if (rv) {
> Â fprintf(stderr, "xc_dom_kernel_file failed\n");
> Â goto err;
> Â }
> Â
> - if (argc > 4) {
> - rv = xc_dom_ramdisk_file(dom, argv[4]);
> + if (ramdisk) {
> + rv = xc_dom_ramdisk_file(dom, ramdisk);
> Â if (rv) {
> Â fprintf(stderr, "xc_dom_ramdisk_file failed\n");
> Â goto err;
> @@ -88,7 +119,7 @@ static int build(xc_interface *xch, int argc, char**
> argv)
> Â fprintf(stderr, "xc_dom_parse_image failed\n");
> Â goto err;
> Â }
> - rv = xc_dom_mem_init(dom, maxmem);
> + rv = xc_dom_mem_init(dom, memory);
> Â if (rv) {
> Â fprintf(stderr, "xc_dom_mem_init failed\n");
> Â goto err;
> @@ -136,15 +167,31 @@ err:
> Â
> Âint main(int argc, char** argv)
> Â{
> + int opt;
> Â xc_interface *xch;
> Â struct xs_handle *xsh;
> Â char buf[16];
> Â int rv, fd;
> Â
> - if (argc < 4 || argc > 5) {
> - fprintf(stderr,
> - "Use: %s <xenstore-kernel> <memory_mb> <flask-
> label> [<ramdisk-file>]\n",
> - argv[0]);
> + while ((opt = getopt_long(argc, argv, "", options, NULL)) != -1)
> {
> + switch (opt) {
> + case 'k':
> + kernel = optarg;
> + break;
> + case 'm':
> + memory = strtol(optarg, NULL, 10);
> + break;
> + case 'f':
> + flask = optarg;
> + break;
> + case 'r':
> + ramdisk = optarg;
> + break;
> + }
> + }
> +
> + if (optind != argc) {
> + usage();
> Â return 2;
> Â }
> Â
> @@ -154,7 +201,7 @@ int main(int argc, char** argv)
> Â return 1;
> Â }
> Â
> - rv = build(xch, argc, argv);
> + rv = build(xch);
> Â
> Â xc_interface_close(xch);
> Â
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |