+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 <jgr...@suse.com>

Looks fine to me

Acked-by: Ian Campbell <ian.campb...@citrix.com>

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@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to