]> xenbits.xensource.com Git - people/pauldu/xen.git/commitdiff
tools: set Dom0 UUID if requested
authorWei Liu <wei.liu2@citrix.com>
Mon, 26 Nov 2018 10:40:44 +0000 (10:40 +0000)
committerWei Liu <wei.liu2@citrix.com>
Wed, 28 Nov 2018 16:12:44 +0000 (16:12 +0000)
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 in xen-init-dom0 to use perror.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Sergey Dyasli <sergey.dyasli@citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/helpers/Makefile
tools/helpers/xen-init-dom0.c
tools/hotplug/Linux/init.d/sysconfig.xencommons.in
tools/hotplug/Linux/init.d/xencommons.in
tools/hotplug/Linux/systemd/xen-init-dom0.service.in

index 4f3bbe6a7d1da790de362802843d5760a05f6fd5..f759528322bbac3467e3f299f115d73467db8731 100644 (file)
@@ -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
 
index 09bc0027f96e5d914c3a6c2431ef12aaa8717b57..a1e5729458247f9406763e1629df639459bae884 100644 (file)
@@ -3,7 +3,9 @@
 #include <string.h>
 #include <stdio.h>
 
+#include <xenctrl.h>
 #include <xenstore.h>
+#include <libxl.h>
 
 #include "init-dom-json.h"
 
 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;
 }
 
index 92569cd61b3d6e8ad1642b91db7877971c25554a..0fc6557d4a08e20bdc41dc1295296a5ec7d24428 100644 (file)
@@ -95,3 +95,6 @@ XENSTORE_DOMAIN_ARGS=
 
 # qemu path
 #QEMU_XEN=@qemu_xen_path@
+
+# Dom0 UUID
+#XEN_DOM0_UUID=00000000-0000-0000-0000-000000000000
index ec42b05587e5c11dc3e12eec34ca2fc3a4ae089f..a33058ed449e6604ceb2a4c456aaf6c730a6454b 100644 (file)
@@ -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"
index 3befadcea3da772fb3a11add0a172978cfa69d3b..beed3126c6d78b1b854a41c68dba687578cb097c 100644 (file)
@@ -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