From: Wei Liu <wei.liu2@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <Ian.Jackson@eu.citrix.com>,
edvin.torok@citrix.com, Sergey Dyasli <sergey.dyasli@citrix.com>
Subject: [PATCH v2 3/3] xen-init-dom0: set Dom0 UUID if requested
Date: Thu, 15 Nov 2018 14:30:51 +0000 [thread overview]
Message-ID: <20181115143051.7420-1-wei.liu2@citrix.com> (raw)
In-Reply-To: <20181114181732.19013-4-wei.liu2@citrix.com>
Read from XEN_CONFIG_DIR/dom0-uuid. If it contains a valid UUID, set
it for Dom0.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
v2:
1. add missing "goto out"
2. print file names more
3. also print errno in xc_interface_open error message
4. take care of short-read
---
tools/examples/Makefile | 1 +
tools/examples/README | 2 ++
tools/examples/dom0-uuid | 0
tools/helpers/Makefile | 3 +-
tools/helpers/xen-init-dom0.c | 65 +++++++++++++++++++++++++++++++++++++++++--
5 files changed, 67 insertions(+), 4 deletions(-)
create mode 100644 tools/examples/dom0-uuid
diff --git a/tools/examples/Makefile b/tools/examples/Makefile
index f86ed3a271..f8492462db 100644
--- a/tools/examples/Makefile
+++ b/tools/examples/Makefile
@@ -9,6 +9,7 @@ XEN_CONFIGS += xlexample.hvm
XEN_CONFIGS += xlexample.pvlinux
XEN_CONFIGS += xl.conf
XEN_CONFIGS += cpupool
+XEN_CONFIGS += dom0-uuid
XEN_CONFIGS += $(XEN_CONFIGS-y)
diff --git a/tools/examples/README b/tools/examples/README
index 80a4652b06..8f940a55c1 100644
--- a/tools/examples/README
+++ b/tools/examples/README
@@ -14,6 +14,8 @@ block-common.sh - sourced by block, block-*
block-enbd - binds/unbinds network block devices
block-nbd - binds/unbinds network block devices
cpupool - example configuration script for 'xl cpupool-create'
+dom0-uuid - stores the UUID in canonical form for Dom0, will be
+ read by xen-init-dom0
external-device-migrate - called by xend for migrating external devices
locking.sh - locking functions to prevent concurrent access to
critical sections inside script files
diff --git a/tools/examples/dom0-uuid b/tools/examples/dom0-uuid
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tools/helpers/Makefile b/tools/helpers/Makefile
index 4f3bbe6a7d..f759528322 100644
--- a/tools/helpers/Makefile
+++ b/tools/helpers/Makefile
@@ -14,6 +14,7 @@ XEN_INIT_DOM0_OBJS = xen-init-dom0.o init-dom-json.o
$(XEN_INIT_DOM0_OBJS): CFLAGS += $(CFLAGS_libxentoollog)
$(XEN_INIT_DOM0_OBJS): CFLAGS += $(CFLAGS_libxenstore)
$(XEN_INIT_DOM0_OBJS): CFLAGS += $(CFLAGS_libxenlight)
+$(XEN_INIT_DOM0_OBJS): CFLAGS += $(CFLAGS_libxenctrl)
INIT_XENSTORE_DOMAIN_OBJS = init-xenstore-domain.o init-dom-json.o
$(INIT_XENSTORE_DOMAIN_OBJS): CFLAGS += $(CFLAGS_libxentoollog)
@@ -26,7 +27,7 @@ $(INIT_XENSTORE_DOMAIN_OBJS): CFLAGS += $(CFLAGS_libxenlight)
all: $(PROGS)
xen-init-dom0: $(XEN_INIT_DOM0_OBJS)
- $(CC) $(LDFLAGS) -o $@ $(XEN_INIT_DOM0_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenlight) $(APPEND_LDFLAGS)
+ $(CC) $(LDFLAGS) -o $@ $(XEN_INIT_DOM0_OBJS) $(LDLIBS_libxenctrl) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenlight) $(APPEND_LDFLAGS)
$(INIT_XENSTORE_DOMAIN_OBJS): _paths.h
diff --git a/tools/helpers/xen-init-dom0.c b/tools/helpers/xen-init-dom0.c
index 09bc0027f9..e826da57b4 100644
--- a/tools/helpers/xen-init-dom0.c
+++ b/tools/helpers/xen-init-dom0.c
@@ -3,23 +3,72 @@
#include <string.h>
#include <stdio.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)
+{
+ FILE *f = NULL;
+ size_t r;
+ char uuid_buf[LIBXL_UUID_FMTLEN+1];
+ bool ok = false;
+
+ f = fopen(DOM0_UUID_PATH, "r");
+ if (!f) {
+ fprintf(stderr, "failed to open %s, errno %d\n",
+ DOM0_UUID_PATH, errno);
+ goto out;
+ }
+
+ r = fread(uuid_buf, 1, LIBXL_UUID_FMTLEN, f);
+ if (r != LIBXL_UUID_FMTLEN) {
+ fprintf(stderr, "failed to read %s, read %zu, errno %d\n",
+ DOM0_UUID_PATH, r, ferror(f));
+ goto out;
+ }
+
+ uuid_buf[LIBXL_UUID_FMTLEN] = 0;
+
+ if (libxl_uuid_from_string(uuid, uuid_buf)) {
+ fprintf(stderr, "failed to parse UUID in %s\n", DOM0_UUID_PATH);
+ goto out;
+ }
+
+ ok = true;
+out:
+ if (f) fclose(f);
+ if (!ok) libxl_uuid_clear(uuid);
+}
+
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;
+ goto out;
}
/* Sanity check: this program can only be run once. */
@@ -31,7 +80,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, errno %d\n", errno);
+ rc = 1;
+ goto out;
+ }
+
+ rc = gen_stub_json_config(0, &uuid);
if (rc)
goto out;
@@ -55,6 +113,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@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-11-15 14:31 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-14 18:17 [PATCH 0/3] Provide mechanism to set UUID for Dom0 Wei Liu
2018-11-14 18:17 ` [PATCH 1/3] tools: update examples/README Wei Liu
2018-11-15 14:28 ` Andrew Cooper
2018-11-15 14:32 ` Wei Liu
2018-11-20 14:25 ` Ian Jackson
2018-11-14 18:17 ` [PATCH 2/3] tools/helpers: make gen_stub_json_config accept an UUID argument Wei Liu
2018-11-15 14:42 ` Andrew Cooper
2018-11-20 14:24 ` Ian Jackson
2018-11-14 18:17 ` [PATCH 3/3] xen-init-dom0: set Dom0 UUID if requested Wei Liu
2018-11-14 20:16 ` Jason Andryuk
2018-11-14 20:44 ` Wei Liu
2018-11-15 10:45 ` Edwin Török
2018-11-15 11:20 ` Wei Liu
2018-11-15 13:35 ` Wei Liu
2018-11-15 13:36 ` Andrew Cooper
2018-11-15 14:30 ` Wei Liu [this message]
2018-11-15 15:14 ` [PATCH v2 " Edwin Török
2018-11-20 14:28 ` [PATCH " Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181115143051.7420-1-wei.liu2@citrix.com \
--to=wei.liu2@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=edvin.torok@citrix.com \
--cc=sergey.dyasli@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).