|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4] tools: set Dom0 UUID if requested
Introduce XEN_DOM0_UUID in Xen's global configuration file. Make
xen-init-dom0 accept an extra argument for UUID.
Also switch xs_open error message to use perror.
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx>
---
v4:
1. use perror
2. added Rb from Juergen and Sergey as the changes are only cosmetic.
v3: new approach
---
tools/helpers/Makefile | 3 +-
tools/helpers/xen-init-dom0.c | 44 ++++++++++++++++++++--
tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 3 ++
tools/hotplug/Linux/init.d/xencommons.in | 2 +-
.../hotplug/Linux/systemd/xen-init-dom0.service.in | 3 +-
5 files changed, 48 insertions(+), 7 deletions(-)
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..a1e5729458 100644
--- a/tools/helpers/xen-init-dom0.c
+++ b/tools/helpers/xen-init-dom0.c
@@ -3,7 +3,9 @@
#include <string.h>
#include <stdio.h>
+#include <xenctrl.h>
#include <xenstore.h>
+#include <libxl.h>
#include "init-dom-json.h"
@@ -13,13 +15,30 @@
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;
+
+ /* Accept 0 or 1 argument */
+ if (argc > 2) {
+ fprintf(stderr, "too many arguments\n");
+ rc = 1;
+ goto out;
+ }
xsh = xs_open(0);
if (!xsh) {
- fprintf(stderr, "cannot open xenstore connection\n");
- exit(1);
+ perror("cannot open xenstore connection");
+ rc = 1;
+ goto out;
+ }
+
+ xch = xc_interface_open(NULL, NULL, 0);
+ if (!xch) {
+ perror("xc_interface_open() failed");
+ rc = 1;
+ goto out;
}
/* Sanity check: this program can only be run once. */
@@ -31,7 +50,23 @@ int main(int argc, char **argv)
goto out;
}
- rc = gen_stub_json_config(0, NULL);
+ libxl_uuid_clear(&uuid);
+
+ /* If UUID is supplied, parse it. */
+ if (argc == 2 && libxl_uuid_from_string(&uuid, argv[1])) {
+ fprintf(stderr, "failed to parse UUID %s\n", argv[1]);
+ rc = 1;
+ goto out;
+ }
+
+ if (!libxl_uuid_is_nil(&uuid) &&
+ xc_domain_sethandle(xch, 0, libxl_uuid_bytearray(&uuid))) {
+ perror("failed to set Dom0 UUID");
+ rc = 1;
+ goto out;
+ }
+
+ rc = gen_stub_json_config(0, &uuid);
if (rc)
goto out;
@@ -55,6 +90,7 @@ out:
free(domid_string);
free(domname_string);
xs_close(xsh);
+ xc_interface_close(xch);
return rc;
}
diff --git a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
index 92569cd61b..0fc6557d4a 100644
--- a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
+++ b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
@@ -95,3 +95,6 @@ XENSTORE_DOMAIN_ARGS=
# qemu path
#QEMU_XEN=@qemu_xen_path@
+
+# Dom0 UUID
+#XEN_DOM0_UUID=00000000-0000-0000-0000-000000000000
diff --git a/tools/hotplug/Linux/init.d/xencommons.in
b/tools/hotplug/Linux/init.d/xencommons.in
index ec42b05587..a33058ed44 100644
--- a/tools/hotplug/Linux/init.d/xencommons.in
+++ b/tools/hotplug/Linux/init.d/xencommons.in
@@ -63,7 +63,7 @@ do_start () {
@XEN_SCRIPT_DIR@/launch-xenstore || exit 1
echo Setting domain 0 name, domid and JSON config...
- ${LIBEXEC_BIN}/xen-init-dom0
+ ${LIBEXEC_BIN}/xen-init-dom0 ${XEN_DOM0_UUID}
echo Starting xenconsoled...
test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS="
--log=$XENCONSOLED_TRACE"
diff --git a/tools/hotplug/Linux/systemd/xen-init-dom0.service.in
b/tools/hotplug/Linux/systemd/xen-init-dom0.service.in
index 3befadcea3..beed3126c6 100644
--- a/tools/hotplug/Linux/systemd/xen-init-dom0.service.in
+++ b/tools/hotplug/Linux/systemd/xen-init-dom0.service.in
@@ -7,8 +7,9 @@ ConditionPathExists=/proc/xen/capabilities
[Service]
Type=oneshot
RemainAfterExit=true
+EnvironmentFile=@CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
-ExecStart=@LIBEXEC_BIN@/xen-init-dom0
+ExecStart=@LIBEXEC_BIN@/xen-init-dom0 $XEN_DOM0_UUID
[Install]
WantedBy=multi-user.target
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |