Latest QEMU code now allows setting of the UUID in its SMBIOS data tables
via the -uuid command line arg. THis patch makes use of that feature by
pasing in the libvirt UUID for the VM. While doing this I also added
support for the Xenner specific -domid flag
Daniel
Index: src/qemu_conf.c
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_conf.c,v
retrieving revision 1.103
diff -u -p -r1.103 qemu_conf.c
--- src/qemu_conf.c 28 Oct 2008 17:43:25 -0000 1.103
+++ src/qemu_conf.c 3 Nov 2008 12:52:06 -0000
@@ -439,6 +439,10 @@ int qemudExtractVersionInfo(const char *
flags |= QEMUD_CMD_FLAG_NO_REBOOT;
if (strstr(help, "-name"))
flags |= QEMUD_CMD_FLAG_NAME;
+ if (strstr(help, "-uuid"))
+ flags |= QEMUD_CMD_FLAG_UUID;
+ if (strstr(help, "-domid"))
+ flags |= QEMUD_CMD_FLAG_DOMID;
if (strstr(help, "-drive"))
flags |= QEMUD_CMD_FLAG_DRIVE;
if (strstr(help, "boot=on"))
@@ -713,6 +717,8 @@ int qemudBuildCommandLine(virConnectPtr
int qenvc = 0, qenva = 0;
const char **qenv = NULL;
const char *emulator;
+ char uuid[VIR_UUID_STRING_BUFLEN];
+ char domid[50];
uname(&ut);
@@ -723,6 +729,8 @@ int qemudBuildCommandLine(virConnectPtr
!ut.machine[4])
ut.machine[1] = '6';
+ virUUIDFormat(vm->def->uuid, uuid);
+
/* Need to explicitly disable KQEMU if
* 1. Arch matches host arch
* 2. Guest is 'qemu'
@@ -802,6 +810,7 @@ int qemudBuildCommandLine(virConnectPtr
snprintf(memory, sizeof(memory), "%lu", vm->def->memory/1024);
snprintf(vcpus, sizeof(vcpus), "%lu", vm->def->vcpus);
+ snprintf(domid, sizeof(domid), "%d", vm->def->id);
ADD_ENV_LIT("LC_ALL=C");
@@ -834,6 +843,15 @@ int qemudBuildCommandLine(virConnectPtr
ADD_ARG_LIT("-name");
ADD_ARG_LIT(vm->def->name);
}
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_UUID) {
+ ADD_ARG_LIT("-uuid");
+ ADD_ARG_LIT(uuid);
+ }
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_DOMID) {
+ ADD_ARG_LIT("-domid");
+ ADD_ARG_LIT(domid);
+ }
+
/*
* NB, -nographic *MUST* come before any serial, or monitor
* or parallel port flags due to QEMU craziness, where it
Index: src/qemu_conf.h
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_conf.h,v
retrieving revision 1.43
diff -u -p -r1.43 qemu_conf.h
--- src/qemu_conf.h 23 Oct 2008 13:18:18 -0000 1.43
+++ src/qemu_conf.h 3 Nov 2008 12:52:06 -0000
@@ -44,6 +44,8 @@ enum qemud_cmd_flags {
QEMUD_CMD_FLAG_DRIVE = (1 << 3),
QEMUD_CMD_FLAG_DRIVE_BOOT = (1 << 4),
QEMUD_CMD_FLAG_NAME = (1 << 5),
+ QEMUD_CMD_FLAG_UUID = (1 << 6),
+ QEMUD_CMD_FLAG_DOMID = (1 << 7), /* Xenner only */
};
/* Main driver state */
Index: src/qemu_driver.c
===================================================================
RCS file: /data/cvs/libvirt/src/qemu_driver.c,v
retrieving revision 1.144
diff -u -p -r1.144 qemu_driver.c
--- src/qemu_driver.c 29 Oct 2008 14:32:41 -0000 1.144
+++ src/qemu_driver.c 3 Nov 2008 12:52:07 -0000
@@ -860,10 +860,12 @@ static int qemudStartVMDaemon(virConnect
return -1;
}
+ vm->def->id = driver->nextvmid++;
if (qemudBuildCommandLine(conn, driver, vm,
qemuCmdFlags, &argv, &progenv,
&tapfds, &ntapfds, migrateFrom) < 0) {
close(vm->logfile);
+ vm->def->id = -1;
vm->logfile = -1;
return -1;
}
@@ -901,10 +903,10 @@ static int qemudStartVMDaemon(virConnect
ret = virExec(conn, argv, progenv, &keepfd, &vm->pid,
vm->stdin_fd, &vm->stdout_fd, &vm->stderr_fd,
VIR_EXEC_NONBLOCK);
- if (ret == 0) {
- vm->def->id = driver->nextvmid++;
+ if (ret == 0)
vm->state = migrateFrom ? VIR_DOMAIN_PAUSED : VIR_DOMAIN_RUNNING;
- }
+ else
+ vm->def->id = -1;
for (i = 0 ; argv[i] ; i++)
VIR_FREE(argv[i]);
Index: tests/qemuxml2argvtest.c
===================================================================
RCS file: /data/cvs/libvirt/tests/qemuxml2argvtest.c,v
retrieving revision 1.32
diff -u -p -r1.32 qemuxml2argvtest.c
--- tests/qemuxml2argvtest.c 10 Oct 2008 16:52:20 -0000 1.32
+++ tests/qemuxml2argvtest.c 3 Nov 2008 12:52:07 -0000
@@ -43,7 +43,10 @@ static int testCompareXMLToArgvFiles(con
memset(&vm, 0, sizeof vm);
vm.def = vmdef;
- vm.def->id = -1;
+ if (extraFlags & QEMUD_CMD_FLAG_DOMID)
+ vm.def->id = 6;
+ else
+ vm.def->id = -1;
vm.pid = -1;
flags = QEMUD_CMD_FLAG_VNC_COLON |
@@ -196,6 +199,8 @@ mymain(int argc, char **argv)
DO_TEST("input-xen", 0);
DO_TEST("misc-acpi", 0);
DO_TEST("misc-no-reboot", 0);
+ DO_TEST("misc-uuid", QEMUD_CMD_FLAG_NAME |
+ QEMUD_CMD_FLAG_UUID | QEMUD_CMD_FLAG_DOMID);
DO_TEST("net-user", 0);
DO_TEST("net-virtio", 0);
Index: tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args
diff -N tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args 3 Nov 2008 12:52:07 -0000
@@ -0,0 +1 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -name QEMUGuest1 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 -domid 6 -nographic
-monitor pty -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none
-usb
Index: tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.xml
===================================================================
RCS file: tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.xml
diff -N tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.xml
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.xml 3 Nov 2008 12:52:07 -0000
@@ -0,0 +1,25 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219200</memory>
+ <currentMemory>219200</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ </features>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|