[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.