[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 3/3] xen-init-dom0: set Dom0 UUID if requested



On Wed, Nov 14, 2018 at 1:20 PM Wei Liu <wei.liu2@xxxxxxxxxx> wrote:
>
> Read from XEN_CONFIG_DIR/dom0-uuid. If it contains a valid UUID, set
> it for Dom0.
>
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>

<snip>
> diff --git a/tools/helpers/xen-init-dom0.c b/tools/helpers/xen-init-dom0.c
> index 09bc0027f9..2b06610c7c 100644
> --- a/tools/helpers/xen-init-dom0.c
> +++ b/tools/helpers/xen-init-dom0.c
> @@ -2,24 +2,75 @@
>  #include <stdint.h>
>  #include <string.h>
>  #include <stdio.h>
> +#include <fcntl.h>
>
> +#include <xenctrl.h>
>  #include <xenstore.h>
> +#include <libxl.h>
>
>  #include "init-dom-json.h"
> +#include "_paths.h"
>
>  #define DOMNAME_PATH   "/local/domain/0/name"
>  #define DOMID_PATH     "/local/domain/0/domid"
>
> +#define DOM0_UUID_PATH XEN_CONFIG_DIR "/dom0-uuid"
> +
> +static void get_dom0_uuid(libxl_uuid *uuid)
> +{
> +    int fd = -1;
> +    ssize_t r;
> +    char uuid_buf[LIBXL_UUID_FMTLEN+1];
> +
> +    libxl_uuid_clear(uuid);
> +
> +    fd = open(DOM0_UUID_PATH, O_RDONLY);
> +    if (fd < 0) {
> +        fprintf(stderr, "failed to open %s\n", DOM0_UUID_PATH);
> +        goto out;
> +    }
> +
> +    r = read(fd, uuid_buf, LIBXL_UUID_FMTLEN);
> +    if (r == -1) {
> +        fprintf(stderr, "failed to read %s, errno %d\n", DOM0_UUID_PATH, 
> errno);
> +        goto out;
> +    }
> +
> +    if (r != LIBXL_UUID_FMTLEN) {
> +        fprintf(stderr, "file too short\n");
> +        goto out;
> +    }
> +
> +    uuid_buf[LIBXL_UUID_FMTLEN] = 0;
> +
> +    if (libxl_uuid_from_string(uuid, uuid_buf)) {
> +        fprintf(stderr, "failed to parse UUID\n");
> +        libxl_uuid_clear(uuid);
> +    }
> +
> +out:
> +    if (fd >= 0) close(fd);
> +}
> +
>  int main(int argc, char **argv)
>  {
>      int rc;
> -    struct xs_handle *xsh;
> +    struct xs_handle *xsh = NULL;
> +    xc_interface *xch = NULL;
>      char *domname_string = NULL, *domid_string = NULL;
> +    libxl_uuid uuid;
>
>      xsh = xs_open(0);
>      if (!xsh) {
>          fprintf(stderr, "cannot open xenstore connection\n");
> -        exit(1);
> +        rc = 1;
> +        goto out;
> +    }
> +
> +    xch = xc_interface_open(NULL, NULL, 0);
> +    if (!xch) {
> +        fprintf(stderr, "xc_interface_open() failed\n");
> +        rc = 1;

Do you want a goto out here?

Regards,
Jason

>      }
>
>      /* Sanity check: this program can only be run once. */
> @@ -31,7 +82,16 @@ int main(int argc, char **argv)
>          goto out;
>      }
>
> -    rc = gen_stub_json_config(0, NULL);
> +    get_dom0_uuid(&uuid);
> +
> +    if (!libxl_uuid_is_nil(&uuid) &&
> +        xc_domain_sethandle(xch, 0, libxl_uuid_bytearray(&uuid))) {
> +        fprintf(stderr, "failed to set Dom0 UUID\n");
> +        rc = 1;
> +        goto out;
> +    }
> +
> +    rc = gen_stub_json_config(0, &uuid);
>      if (rc)
>          goto out;
>
> @@ -55,6 +115,7 @@ out:
>      free(domid_string);
>      free(domname_string);
>      xs_close(xsh);
> +    xc_interface_close(xch);
>      return rc;
>  }
>
> --
> 2.11.0
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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