mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-05 04:41:20 +00:00
qemu: Switch over command line capabilities to virBitmap
This is done for two reasons: - we are getting very close to 64 flags which is the maximum we can use with unsigned long long - by using LL constants in enum we already violates C99 constraint that enum values have to fit into int
This commit is contained in:
parent
23d935bd97
commit
9fc4b6a606
1
cfg.mk
1
cfg.mk
@ -71,6 +71,7 @@ VC_LIST_ALWAYS_EXCLUDE_REGEX = ^docs/news.html.in$$
|
||||
# Functions like free() that are no-ops on NULL arguments.
|
||||
useless_free_options = \
|
||||
--name=VIR_FREE \
|
||||
--name=qemuCapsFree \
|
||||
--name=sexpr_free \
|
||||
--name=virBitmapFree \
|
||||
--name=virCPUDefFree \
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
@ -377,7 +378,7 @@ error:
|
||||
|
||||
int
|
||||
qemuCapsProbeCPUModels(const char *qemu,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const char *arch,
|
||||
unsigned int *count,
|
||||
const char ***cpus)
|
||||
@ -442,7 +443,7 @@ qemuCapsInitGuest(virCapsPtr caps,
|
||||
int nmachines = 0;
|
||||
struct stat st;
|
||||
unsigned int ncpus;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
int ret = -1;
|
||||
|
||||
/* Check for existance of base emulator, or alternate base
|
||||
@ -553,7 +554,7 @@ qemuCapsInitGuest(virCapsPtr caps,
|
||||
guest->arch.defaultInfo.emulator_mtime = binary_mtime;
|
||||
|
||||
if (caps->host.cpu &&
|
||||
qemuCapsProbeCPUModels(binary, 0, info->arch, &ncpus, NULL) == 0 &&
|
||||
qemuCapsProbeCPUModels(binary, NULL, info->arch, &ncpus, NULL) == 0 &&
|
||||
ncpus > 0 &&
|
||||
!virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0))
|
||||
goto error;
|
||||
@ -648,6 +649,7 @@ cleanup:
|
||||
VIR_FREE(binary);
|
||||
VIR_FREE(kvmbin);
|
||||
}
|
||||
qemuCapsFree(qemuCaps);
|
||||
|
||||
return ret;
|
||||
|
||||
@ -781,129 +783,129 @@ virCapsPtr qemuCapsInit(virCapsPtr old_caps)
|
||||
}
|
||||
|
||||
|
||||
static unsigned long long
|
||||
static void
|
||||
qemuCapsComputeCmdFlags(const char *help,
|
||||
unsigned int version,
|
||||
unsigned int is_kvm,
|
||||
unsigned int kvm_version)
|
||||
unsigned int kvm_version,
|
||||
virBitmapPtr flags)
|
||||
{
|
||||
unsigned long long flags = 0;
|
||||
const char *p;
|
||||
|
||||
if (strstr(help, "-no-kqemu"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_KQEMU);
|
||||
qemuCapsSet(flags, QEMU_CAPS_KQEMU);
|
||||
if (strstr(help, "-enable-kqemu"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KQEMU);
|
||||
qemuCapsSet(flags, QEMU_CAPS_ENABLE_KQEMU);
|
||||
if (strstr(help, "-no-kvm"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_KVM);
|
||||
qemuCapsSet(flags, QEMU_CAPS_KVM);
|
||||
if (strstr(help, "-enable-kvm"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KVM);
|
||||
qemuCapsSet(flags, QEMU_CAPS_ENABLE_KVM);
|
||||
if (strstr(help, "-no-reboot"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NO_REBOOT);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NO_REBOOT);
|
||||
if (strstr(help, "-name")) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NAME);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NAME);
|
||||
if (strstr(help, ",process="))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NAME_PROCESS);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NAME_PROCESS);
|
||||
}
|
||||
if (strstr(help, "-uuid"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_UUID);
|
||||
qemuCapsSet(flags, QEMU_CAPS_UUID);
|
||||
if (strstr(help, "-xen-domid"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_XEN_DOMID);
|
||||
qemuCapsSet(flags, QEMU_CAPS_XEN_DOMID);
|
||||
else if (strstr(help, "-domid"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DOMID);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DOMID);
|
||||
if (strstr(help, "-drive")) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE);
|
||||
if (strstr(help, "cache=") &&
|
||||
!strstr(help, "cache=on|off"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_CACHE_V2);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_CACHE_V2);
|
||||
if (strstr(help, "format="))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_FORMAT);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_FORMAT);
|
||||
if (strstr(help, "readonly="))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_READONLY);
|
||||
if (strstr(help, "aio=threads|native"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_AIO);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_AIO);
|
||||
}
|
||||
if ((p = strstr(help, "-vga")) && !strstr(help, "-std-vga")) {
|
||||
const char *nl = strstr(p, "\n");
|
||||
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VGA);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VGA);
|
||||
|
||||
if (strstr(p, "|qxl"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VGA_QXL);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VGA_QXL);
|
||||
if ((p = strstr(p, "|none")) && p < nl)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VGA_NONE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VGA_NONE);
|
||||
}
|
||||
if (strstr(help, "-spice"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_SPICE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_SPICE);
|
||||
if (strstr(help, "boot=on"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_BOOT);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_BOOT);
|
||||
if (strstr(help, "serial=s"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_SERIAL);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_SERIAL);
|
||||
if (strstr(help, "-pcidevice"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_PCIDEVICE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_PCIDEVICE);
|
||||
if (strstr(help, "-mem-path"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MEM_PATH);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MEM_PATH);
|
||||
if (strstr(help, "-chardev")) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_CHARDEV);
|
||||
qemuCapsSet(flags, QEMU_CAPS_CHARDEV);
|
||||
if (strstr(help, "-chardev spicevmc"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_CHARDEV_SPICEVMC);
|
||||
qemuCapsSet(flags, QEMU_CAPS_CHARDEV_SPICEVMC);
|
||||
}
|
||||
if (strstr(help, "-balloon"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_BALLOON);
|
||||
qemuCapsSet(flags, QEMU_CAPS_BALLOON);
|
||||
if (strstr(help, "-device")) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DEVICE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DEVICE);
|
||||
/*
|
||||
* When -device was introduced, qemu already supported drive's
|
||||
* readonly option but didn't advertise that.
|
||||
*/
|
||||
qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY);
|
||||
qemuCapsSet(flags, QEMU_CAPS_DRIVE_READONLY);
|
||||
}
|
||||
if (strstr(help, "-nodefconfig"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NODEFCONFIG);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NODEFCONFIG);
|
||||
/* The trailing ' ' is important to avoid a bogus match */
|
||||
if (strstr(help, "-rtc "))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_RTC);
|
||||
qemuCapsSet(flags, QEMU_CAPS_RTC);
|
||||
/* to wit */
|
||||
if (strstr(help, "-rtc-td-hack"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_RTC_TD_HACK);
|
||||
qemuCapsSet(flags, QEMU_CAPS_RTC_TD_HACK);
|
||||
if (strstr(help, "-no-hpet"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NO_HPET);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NO_HPET);
|
||||
if (strstr(help, "-no-kvm-pit-reinjection"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NO_KVM_PIT);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NO_KVM_PIT);
|
||||
if (strstr(help, "-tdf"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_TDF);
|
||||
qemuCapsSet(flags, QEMU_CAPS_TDF);
|
||||
if (strstr(help, "-enable-nesting"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NESTING);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NESTING);
|
||||
if (strstr(help, ",menu=on"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_BOOT_MENU);
|
||||
qemuCapsSet(flags, QEMU_CAPS_BOOT_MENU);
|
||||
if (strstr(help, "-fsdev"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_FSDEV);
|
||||
qemuCapsSet(flags, QEMU_CAPS_FSDEV);
|
||||
if (strstr(help, "-smbios type"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_SMBIOS_TYPE);
|
||||
qemuCapsSet(flags, QEMU_CAPS_SMBIOS_TYPE);
|
||||
|
||||
if (strstr(help, "-netdev")) {
|
||||
/* Disable -netdev on 0.12 since although it exists,
|
||||
* the corresponding netdev_add/remove monitor commands
|
||||
* do not, and we need them to be able todo hotplug */
|
||||
if (version >= 13000)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_NETDEV);
|
||||
qemuCapsSet(flags, QEMU_CAPS_NETDEV);
|
||||
}
|
||||
|
||||
if (strstr(help, "-sdl"))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_SDL);
|
||||
qemuCapsSet(flags, QEMU_CAPS_SDL);
|
||||
if (strstr(help, "cores=") &&
|
||||
strstr(help, "threads=") &&
|
||||
strstr(help, "sockets="))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_SMP_TOPOLOGY);
|
||||
qemuCapsSet(flags, QEMU_CAPS_SMP_TOPOLOGY);
|
||||
|
||||
if (version >= 9000)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VNC_COLON);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VNC_COLON);
|
||||
|
||||
if (is_kvm && (version >= 10000 || kvm_version >= 74))
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VNET_HDR);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VNET_HDR);
|
||||
|
||||
if (is_kvm && strstr(help, ",vhost=")) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_VNET_HOST);
|
||||
qemuCapsSet(flags, QEMU_CAPS_VNET_HOST);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -919,22 +921,22 @@ qemuCapsComputeCmdFlags(const char *help,
|
||||
* while waiting for data, so pretend it doesn't exist
|
||||
*/
|
||||
if (version >= 10000) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP);
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_TCP);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
if (version >= 12000) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_UNIX);
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_FD);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_UNIX);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_FD);
|
||||
}
|
||||
} else if (kvm_version >= 79) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_TCP);
|
||||
if (kvm_version >= 80)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
} else if (kvm_version > 0) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_KVM_STDIO);
|
||||
qemuCapsSet(flags, QEMU_CAPS_MIGRATE_KVM_STDIO);
|
||||
}
|
||||
|
||||
if (version >= 10000)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_0_10);
|
||||
qemuCapsSet(flags, QEMU_CAPS_0_10);
|
||||
|
||||
/* While JSON mode was available in 0.12.0, it was too
|
||||
* incomplete to contemplate using. The 0.13.0 release
|
||||
@ -943,9 +945,7 @@ qemuCapsComputeCmdFlags(const char *help,
|
||||
* the downside.
|
||||
*/
|
||||
if (version >= 13000)
|
||||
qemuCapsSet(&flags, QEMU_CAPS_MONITOR_JSON);
|
||||
|
||||
return flags;
|
||||
qemuCapsSet(flags, QEMU_CAPS_MONITOR_JSON);
|
||||
}
|
||||
|
||||
/* We parse the output of 'qemu -help' to get the QEMU
|
||||
@ -974,15 +974,16 @@ qemuCapsComputeCmdFlags(const char *help,
|
||||
|
||||
int qemuCapsParseHelpStr(const char *qemu,
|
||||
const char *help,
|
||||
unsigned long long *flags,
|
||||
virBitmapPtr flags,
|
||||
unsigned int *version,
|
||||
unsigned int *is_kvm,
|
||||
unsigned int *kvm_version)
|
||||
{
|
||||
unsigned major, minor, micro;
|
||||
const char *p = help;
|
||||
char *strflags;
|
||||
|
||||
*flags = *version = *is_kvm = *kvm_version = 0;
|
||||
*version = *is_kvm = *kvm_version = 0;
|
||||
|
||||
if (STRPREFIX(p, QEMU_VERSION_STR_1))
|
||||
p += strlen(QEMU_VERSION_STR_1);
|
||||
@ -1029,10 +1030,13 @@ int qemuCapsParseHelpStr(const char *qemu,
|
||||
|
||||
*version = (major * 1000 * 1000) + (minor * 1000) + micro;
|
||||
|
||||
*flags = qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version);
|
||||
qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version, flags);
|
||||
|
||||
strflags = virBitmapString(flags);
|
||||
VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s",
|
||||
major, minor, micro, *version, NULLSTR(strflags));
|
||||
VIR_FREE(strflags);
|
||||
|
||||
VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags 0x%llx",
|
||||
major, minor, micro, *version, *flags);
|
||||
if (*kvm_version)
|
||||
VIR_DEBUG("KVM version %d detected", *kvm_version);
|
||||
else if (*is_kvm)
|
||||
@ -1056,7 +1060,7 @@ fail:
|
||||
|
||||
static int
|
||||
qemuCapsExtractDeviceStr(const char *qemu,
|
||||
unsigned long long *flags)
|
||||
virBitmapPtr flags)
|
||||
{
|
||||
char *output = NULL;
|
||||
virCommandPtr cmd;
|
||||
@ -1094,7 +1098,7 @@ cleanup:
|
||||
|
||||
|
||||
int
|
||||
qemuCapsParseDeviceStr(const char *str, unsigned long long *flags)
|
||||
qemuCapsParseDeviceStr(const char *str, virBitmapPtr flags)
|
||||
{
|
||||
/* Which devices exist. */
|
||||
if (strstr(str, "name \"hda-duplex\""))
|
||||
@ -1104,7 +1108,7 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags)
|
||||
if (strstr(str, "name \"ccid-card-passthru\""))
|
||||
qemuCapsSet(flags, QEMU_CAPS_CCID_PASSTHRU);
|
||||
/* Prefer -chardev spicevmc (detected earlier) over -device spicevmc */
|
||||
if (!qemuCapsGet(*flags, QEMU_CAPS_CHARDEV_SPICEVMC) &&
|
||||
if (!qemuCapsGet(flags, QEMU_CAPS_CHARDEV_SPICEVMC) &&
|
||||
strstr(str, "name \"spicevmc\""))
|
||||
qemuCapsSet(flags, QEMU_CAPS_DEVICE_SPICEVMC);
|
||||
|
||||
@ -1124,16 +1128,16 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags)
|
||||
|
||||
int qemuCapsExtractVersionInfo(const char *qemu, const char *arch,
|
||||
unsigned int *retversion,
|
||||
unsigned long long *retflags)
|
||||
virBitmapPtr *retflags)
|
||||
{
|
||||
int ret = -1;
|
||||
unsigned int version, is_kvm, kvm_version;
|
||||
unsigned long long flags = 0;
|
||||
virBitmapPtr flags = NULL;
|
||||
char *help = NULL;
|
||||
virCommandPtr cmd;
|
||||
|
||||
if (retflags)
|
||||
*retflags = 0;
|
||||
*retflags = NULL;
|
||||
if (retversion)
|
||||
*retversion = 0;
|
||||
|
||||
@ -1154,33 +1158,37 @@ int qemuCapsExtractVersionInfo(const char *qemu, const char *arch,
|
||||
if (virCommandRun(cmd, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuCapsParseHelpStr(qemu, help, &flags,
|
||||
if (!(flags = qemuCapsNew()) ||
|
||||
qemuCapsParseHelpStr(qemu, help, flags,
|
||||
&version, &is_kvm, &kvm_version) == -1)
|
||||
goto cleanup;
|
||||
|
||||
/* Currently only x86_64 and i686 support PCI-multibus. */
|
||||
if (STREQLEN(arch, "x86_64", 6) ||
|
||||
STREQLEN(arch, "i686", 4)) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_PCI_MULTIBUS);
|
||||
qemuCapsSet(flags, QEMU_CAPS_PCI_MULTIBUS);
|
||||
}
|
||||
|
||||
/* qemuCapsExtractDeviceStr will only set additional flags if qemu
|
||||
* understands the 0.13.0+ notion of "-device driver,". */
|
||||
if (qemuCapsGet(flags, QEMU_CAPS_DEVICE) &&
|
||||
strstr(help, "-device driver,?") &&
|
||||
qemuCapsExtractDeviceStr(qemu, &flags) < 0)
|
||||
qemuCapsExtractDeviceStr(qemu, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (retversion)
|
||||
*retversion = version;
|
||||
if (retflags)
|
||||
if (retflags) {
|
||||
*retflags = flags;
|
||||
flags = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(help);
|
||||
virCommandFree(cmd);
|
||||
qemuCapsFree(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1233,25 +1241,55 @@ int qemuCapsExtractVersion(virCapsPtr caps,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuCapsSet(unsigned long long *caps,
|
||||
enum qemuCapsFlags flag)
|
||||
virBitmapPtr
|
||||
qemuCapsNew(void)
|
||||
{
|
||||
*caps |= flag;
|
||||
virBitmapPtr caps;
|
||||
|
||||
if (!(caps = virBitmapAlloc(QEMU_CAPS_LAST)))
|
||||
virReportOOMError();
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuCapsClear(unsigned long long *caps,
|
||||
qemuCapsSet(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag)
|
||||
{
|
||||
*caps &= ~flag;
|
||||
ignore_value(virBitmapSetBit(caps, flag));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuCapsSetList(virBitmapPtr caps, ...)
|
||||
{
|
||||
va_list list;
|
||||
int flag;
|
||||
|
||||
va_start(list, caps);
|
||||
while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST)
|
||||
ignore_value(virBitmapSetBit(caps, flag));
|
||||
va_end(list);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuCapsClear(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag)
|
||||
{
|
||||
ignore_value(virBitmapClearBit(caps, flag));
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
qemuCapsGet(unsigned long long caps,
|
||||
qemuCapsGet(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag)
|
||||
{
|
||||
return !!(caps & flag);
|
||||
bool b;
|
||||
|
||||
if (!caps || virBitmapGetBit(caps, flag, &b) < 0)
|
||||
return false;
|
||||
else
|
||||
return b;
|
||||
}
|
||||
|
@ -24,84 +24,93 @@
|
||||
#ifndef __QEMU_CAPABILITIES_H__
|
||||
# define __QEMU_CAPABILITIES_H__
|
||||
|
||||
# include "bitmap.h"
|
||||
# include "capabilities.h"
|
||||
|
||||
/* Internal flags to keep track of qemu command line capabilities */
|
||||
enum qemuCapsFlags {
|
||||
QEMU_CAPS_KQEMU = (1 << 0), /* Whether KQEMU is compiled in */
|
||||
QEMU_CAPS_VNC_COLON = (1 << 1), /* Does the VNC take just port, or address + display */
|
||||
QEMU_CAPS_NO_REBOOT = (1 << 2), /* Is the -no-reboot flag available */
|
||||
QEMU_CAPS_DRIVE = (1 << 3), /* Is the new -drive arg available */
|
||||
QEMU_CAPS_DRIVE_BOOT = (1 << 4), /* Does -drive support boot=on */
|
||||
QEMU_CAPS_NAME = (1 << 5), /* Is the -name flag available */
|
||||
QEMU_CAPS_UUID = (1 << 6), /* Is the -uuid flag available */
|
||||
QEMU_CAPS_DOMID = (1 << 7), /* Xenner only, special -domid flag available */
|
||||
QEMU_CAPS_VNET_HDR = (1 << 8),
|
||||
QEMU_CAPS_MIGRATE_KVM_STDIO = (1 << 9), /* Original migration code from KVM. Also had tcp, but we can't use that
|
||||
QEMU_CAPS_KQEMU = 0, /* Whether KQEMU is compiled in */
|
||||
QEMU_CAPS_VNC_COLON = 1, /* Does the VNC take just port, or address + display */
|
||||
QEMU_CAPS_NO_REBOOT = 2, /* Is the -no-reboot flag available */
|
||||
QEMU_CAPS_DRIVE = 3, /* Is the new -drive arg available */
|
||||
QEMU_CAPS_DRIVE_BOOT = 4, /* Does -drive support boot=on */
|
||||
QEMU_CAPS_NAME = 5, /* Is the -name flag available */
|
||||
QEMU_CAPS_UUID = 6, /* Is the -uuid flag available */
|
||||
QEMU_CAPS_DOMID = 7, /* Xenner only, special -domid flag available */
|
||||
QEMU_CAPS_VNET_HDR = 8,
|
||||
QEMU_CAPS_MIGRATE_KVM_STDIO = 9, /* Original migration code from KVM. Also had tcp, but we can't use that
|
||||
* since it had a design bug blocking the entire monitor console */
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 = (1 << 12), /* Is the cache= flag wanting new v2 values */
|
||||
QEMU_CAPS_KVM = (1 << 13), /* Whether KVM is compiled in */
|
||||
QEMU_CAPS_DRIVE_FORMAT = (1 << 14), /* Is -drive format= avail */
|
||||
QEMU_CAPS_VGA = (1 << 15), /* Is -vga avail */
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP = 10, /* New migration syntax after merge to QEMU with TCP transport */
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC = 11, /* New migration syntax after merge to QEMU with EXEC transport */
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 = 12, /* Is the cache= flag wanting new v2 values */
|
||||
QEMU_CAPS_KVM = 13, /* Whether KVM is compiled in */
|
||||
QEMU_CAPS_DRIVE_FORMAT = 14, /* Is -drive format= avail */
|
||||
QEMU_CAPS_VGA = 15, /* Is -vga avail */
|
||||
|
||||
/* features added in qemu-0.10.0 or later */
|
||||
QEMU_CAPS_0_10 = (1 << 16),
|
||||
QEMU_CAPS_0_10 = 16,
|
||||
QEMU_CAPS_NET_NAME = QEMU_CAPS_0_10, /* -net ...,name=str */
|
||||
QEMU_CAPS_HOST_NET_ADD = QEMU_CAPS_0_10, /* host_net_add monitor command */
|
||||
|
||||
QEMU_CAPS_PCIDEVICE = (1 << 17), /* PCI device assignment only supported by qemu-kvm */
|
||||
QEMU_CAPS_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */
|
||||
QEMU_CAPS_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */
|
||||
QEMU_CAPS_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */
|
||||
QEMU_CAPS_CHARDEV = (1 << 22), /* Is the new -chardev arg available */
|
||||
QEMU_CAPS_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */
|
||||
QEMU_CAPS_MONITOR_JSON = (1 << 24), /* JSON mode for monitor */
|
||||
QEMU_CAPS_BALLOON = (1 << 25), /* -balloon available */
|
||||
QEMU_CAPS_DEVICE = (1 << 26), /* Is the new -device arg available */
|
||||
QEMU_CAPS_SDL = (1 << 27), /* Is the new -sdl arg available */
|
||||
QEMU_CAPS_SMP_TOPOLOGY = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */
|
||||
QEMU_CAPS_NETDEV = (1 << 29), /* The -netdev flag & netdev_add/remove monitor commands */
|
||||
QEMU_CAPS_RTC = (1 << 30), /* The -rtc flag for clock options */
|
||||
QEMU_CAPS_VNET_HOST = (1LL << 31), /* vnet-host support is available in qemu */
|
||||
QEMU_CAPS_RTC_TD_HACK = (1LL << 32), /* -rtc-td-hack available */
|
||||
QEMU_CAPS_NO_HPET = (1LL << 33), /* -no-hpet flag is supported */
|
||||
QEMU_CAPS_NO_KVM_PIT = (1LL << 34), /* -no-kvm-pit-reinjection supported */
|
||||
QEMU_CAPS_TDF = (1LL << 35), /* -tdf flag (user-mode pit catchup) */
|
||||
QEMU_CAPS_PCI_CONFIGFD = (1LL << 36), /* pci-assign.configfd */
|
||||
QEMU_CAPS_NODEFCONFIG = (1LL << 37), /* -nodefconfig */
|
||||
QEMU_CAPS_BOOT_MENU = (1LL << 38), /* -boot menu=on support */
|
||||
QEMU_CAPS_ENABLE_KQEMU = (1LL << 39), /* -enable-kqemu flag */
|
||||
QEMU_CAPS_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */
|
||||
QEMU_CAPS_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */
|
||||
QEMU_CAPS_NAME_PROCESS = (1LL << 42), /* Is -name process= available */
|
||||
QEMU_CAPS_DRIVE_READONLY= (1LL << 43), /* -drive readonly=on|off */
|
||||
QEMU_CAPS_SMBIOS_TYPE = (1LL << 44), /* Is -smbios type= available */
|
||||
QEMU_CAPS_VGA_QXL = (1LL << 45), /* The 'qxl' arg for '-vga' */
|
||||
QEMU_CAPS_SPICE = (1LL << 46), /* Is -spice avail */
|
||||
QEMU_CAPS_VGA_NONE = (1LL << 47), /* The 'none' arg for '-vga' */
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD = (1LL << 48), /* -incoming fd:n */
|
||||
QEMU_CAPS_BOOTINDEX = (1LL << 49), /* -device bootindex property */
|
||||
QEMU_CAPS_HDA_DUPLEX = (1LL << 50), /* -device hda-duplex */
|
||||
QEMU_CAPS_DRIVE_AIO = (1LL << 51), /* -drive aio= supported */
|
||||
QEMU_CAPS_PCI_MULTIBUS = (1LL << 52), /* bus=pci.0 vs bus=pci */
|
||||
QEMU_CAPS_PCI_BOOTINDEX = (1LL << 53), /* pci-assign.bootindex */
|
||||
QEMU_CAPS_CCID_EMULATED = (1LL << 54), /* -device ccid-card-emulated */
|
||||
QEMU_CAPS_CCID_PASSTHRU = (1LL << 55), /* -device ccid-card-passthru */
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */
|
||||
QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/
|
||||
QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */
|
||||
QEMU_CAPS_PCIDEVICE = 17, /* PCI device assignment only supported by qemu-kvm */
|
||||
QEMU_CAPS_MEM_PATH = 18, /* mmap'ped guest backing supported */
|
||||
QEMU_CAPS_DRIVE_SERIAL = 19, /* -driver serial= available */
|
||||
QEMU_CAPS_XEN_DOMID = 20, /* -xen-domid (new style xen integration) */
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX = 21, /* Does qemu support unix domain sockets for migration? */
|
||||
QEMU_CAPS_CHARDEV = 22, /* Is the new -chardev arg available */
|
||||
QEMU_CAPS_ENABLE_KVM = 23, /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */
|
||||
QEMU_CAPS_MONITOR_JSON = 24, /* JSON mode for monitor */
|
||||
QEMU_CAPS_BALLOON = 25, /* -balloon available */
|
||||
QEMU_CAPS_DEVICE = 26, /* Is the new -device arg available */
|
||||
QEMU_CAPS_SDL = 27, /* Is the new -sdl arg available */
|
||||
QEMU_CAPS_SMP_TOPOLOGY = 28, /* Is sockets=s,cores=c,threads=t available for -smp? */
|
||||
QEMU_CAPS_NETDEV = 29, /* The -netdev flag & netdev_add/remove monitor commands */
|
||||
QEMU_CAPS_RTC = 30, /* The -rtc flag for clock options */
|
||||
QEMU_CAPS_VNET_HOST = 31, /* vnet-host support is available in qemu */
|
||||
QEMU_CAPS_RTC_TD_HACK = 32, /* -rtc-td-hack available */
|
||||
QEMU_CAPS_NO_HPET = 33, /* -no-hpet flag is supported */
|
||||
QEMU_CAPS_NO_KVM_PIT = 34, /* -no-kvm-pit-reinjection supported */
|
||||
QEMU_CAPS_TDF = 35, /* -tdf flag (user-mode pit catchup) */
|
||||
QEMU_CAPS_PCI_CONFIGFD = 36, /* pci-assign.configfd */
|
||||
QEMU_CAPS_NODEFCONFIG = 37, /* -nodefconfig */
|
||||
QEMU_CAPS_BOOT_MENU = 38, /* -boot menu=on support */
|
||||
QEMU_CAPS_ENABLE_KQEMU = 39, /* -enable-kqemu flag */
|
||||
QEMU_CAPS_FSDEV = 40, /* -fstype filesystem passthrough */
|
||||
QEMU_CAPS_NESTING = 41, /* -enable-nesting (SVM/VMX) */
|
||||
QEMU_CAPS_NAME_PROCESS = 42, /* Is -name process= available */
|
||||
QEMU_CAPS_DRIVE_READONLY = 43, /* -drive readonly=on|off */
|
||||
QEMU_CAPS_SMBIOS_TYPE = 44, /* Is -smbios type= available */
|
||||
QEMU_CAPS_VGA_QXL = 45, /* The 'qxl' arg for '-vga' */
|
||||
QEMU_CAPS_SPICE = 46, /* Is -spice avail */
|
||||
QEMU_CAPS_VGA_NONE = 47, /* The 'none' arg for '-vga' */
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD = 48, /* -incoming fd:n */
|
||||
QEMU_CAPS_BOOTINDEX = 49, /* -device bootindex property */
|
||||
QEMU_CAPS_HDA_DUPLEX = 50, /* -device hda-duplex */
|
||||
QEMU_CAPS_DRIVE_AIO = 51, /* -drive aio= supported */
|
||||
QEMU_CAPS_PCI_MULTIBUS = 52, /* bus=pci.0 vs bus=pci */
|
||||
QEMU_CAPS_PCI_BOOTINDEX = 53, /* pci-assign.bootindex */
|
||||
QEMU_CAPS_CCID_EMULATED = 54, /* -device ccid-card-emulated */
|
||||
QEMU_CAPS_CCID_PASSTHRU = 55, /* -device ccid-card-passthru */
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC = 56, /* newer -chardev spicevmc */
|
||||
QEMU_CAPS_DEVICE_SPICEVMC = 57, /* older -device spicevmc*/
|
||||
QEMU_CAPS_VIRTIO_TX_ALG = 58, /* -device virtio-net-pci,tx=string */
|
||||
|
||||
QEMU_CAPS_LAST, /* this must always be the last item */
|
||||
};
|
||||
|
||||
void qemuCapsSet(unsigned long long *caps,
|
||||
enum qemuCapsFlags flag);
|
||||
virBitmapPtr qemuCapsNew(void);
|
||||
|
||||
void qemuCapsClear(unsigned long long *caps,
|
||||
enum qemuCapsFlags flag);
|
||||
# define qemuCapsFree(caps) virBitmapFree(caps)
|
||||
|
||||
bool qemuCapsGet(unsigned long long caps,
|
||||
void qemuCapsSet(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);
|
||||
|
||||
void qemuCapsSetList(virBitmapPtr caps, ...) ATTRIBUTE_NONNULL(1);
|
||||
|
||||
void qemuCapsClear(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);
|
||||
|
||||
bool qemuCapsGet(virBitmapPtr caps,
|
||||
enum qemuCapsFlags flag);
|
||||
|
||||
virCapsPtr qemuCapsInit(virCapsPtr old_caps);
|
||||
@ -111,7 +120,7 @@ int qemuCapsProbeMachineTypes(const char *binary,
|
||||
int *nmachines);
|
||||
|
||||
int qemuCapsProbeCPUModels(const char *qemu,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const char *arch,
|
||||
unsigned int *count,
|
||||
const char ***cpus);
|
||||
@ -120,16 +129,16 @@ int qemuCapsExtractVersion(virCapsPtr caps,
|
||||
unsigned int *version);
|
||||
int qemuCapsExtractVersionInfo(const char *qemu, const char *arch,
|
||||
unsigned int *version,
|
||||
unsigned long long *qemuCaps);
|
||||
virBitmapPtr *qemuCaps);
|
||||
|
||||
int qemuCapsParseHelpStr(const char *qemu,
|
||||
const char *str,
|
||||
unsigned long long *qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
unsigned int *version,
|
||||
unsigned int *is_kvm,
|
||||
unsigned int *kvm_version);
|
||||
int qemuCapsParseDeviceStr(const char *str,
|
||||
unsigned long long *qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
|
||||
#endif /* __QEMU_CAPABILITIES_H__*/
|
||||
|
@ -109,7 +109,7 @@ int
|
||||
qemuPhysIfaceConnect(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const unsigned char *vmuuid,
|
||||
enum virVMOperationType vmop)
|
||||
{
|
||||
@ -170,7 +170,7 @@ int
|
||||
qemuNetworkIfaceConnect(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
char *brname = NULL;
|
||||
int err;
|
||||
@ -305,7 +305,7 @@ cleanup:
|
||||
|
||||
static int
|
||||
qemuOpenVhostNet(virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
int *vhostfd)
|
||||
{
|
||||
|
||||
@ -403,7 +403,7 @@ static int qemuAssignDeviceDiskAliasLegacy(virDomainDiskDefPtr disk)
|
||||
|
||||
|
||||
char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
char *ret;
|
||||
|
||||
@ -501,7 +501,7 @@ no_memory:
|
||||
|
||||
|
||||
int
|
||||
qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps)
|
||||
qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, virBitmapPtr qemuCaps)
|
||||
{
|
||||
if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE)) {
|
||||
if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
|
||||
@ -584,7 +584,7 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller)
|
||||
|
||||
|
||||
static int
|
||||
qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCaps)
|
||||
qemuAssignDeviceAliases(virDomainDefPtr def, virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -720,7 +720,7 @@ int
|
||||
qemuDomainAssignPCIAddresses(virDomainDefPtr def)
|
||||
{
|
||||
int ret = -1;
|
||||
unsigned long long qemuCaps = 0;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
qemuDomainPCIAddressSetPtr addrs = NULL;
|
||||
|
||||
if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch,
|
||||
@ -739,6 +739,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def)
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
qemuCapsFree(qemuCaps);
|
||||
qemuDomainPCIAddressSetFree(addrs);
|
||||
|
||||
return ret;
|
||||
@ -1126,7 +1127,7 @@ error:
|
||||
static int
|
||||
qemuBuildDeviceAddressStr(virBufferPtr buf,
|
||||
virDomainDeviceInfoPtr info,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
|
||||
if (info->addr.pci.domain != 0) {
|
||||
@ -1180,7 +1181,7 @@ qemuSafeSerialParamValue(const char *value)
|
||||
char *
|
||||
qemuBuildDriveStr(virDomainDiskDefPtr disk,
|
||||
int bootable,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||
const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
|
||||
@ -1396,7 +1397,7 @@ error:
|
||||
|
||||
char *
|
||||
qemuBuildDriveDevStr(virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||
const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
|
||||
@ -1453,7 +1454,7 @@ error:
|
||||
|
||||
|
||||
char *qemuBuildFSStr(virDomainFSDefPtr fs,
|
||||
unsigned long long qemuCaps ATTRIBUTE_UNUSED)
|
||||
virBitmapPtr qemuCaps ATTRIBUTE_UNUSED)
|
||||
{
|
||||
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -1489,7 +1490,7 @@ error:
|
||||
|
||||
char *
|
||||
qemuBuildFSDevStr(virDomainFSDefPtr fs,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -1520,7 +1521,7 @@ error:
|
||||
|
||||
char *
|
||||
qemuBuildControllerDevStr(virDomainControllerDefPtr def,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -1605,7 +1606,7 @@ qemuBuildNicStr(virDomainNetDefPtr net,
|
||||
char *
|
||||
qemuBuildNicDevStr(virDomainNetDefPtr net,
|
||||
int vlan,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
const char *nic;
|
||||
@ -1777,7 +1778,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net,
|
||||
|
||||
char *
|
||||
qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -1808,7 +1809,7 @@ error:
|
||||
|
||||
char *
|
||||
qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -1855,7 +1856,7 @@ error:
|
||||
|
||||
char *
|
||||
qemuBuildSoundDevStr(virDomainSoundDefPtr sound,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
const char *model = virDomainSoundModelTypeToString(sound->model);
|
||||
@ -1917,7 +1918,7 @@ error:
|
||||
|
||||
static char *
|
||||
qemuBuildVideoDevStr(virDomainVideoDefPtr video,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
const char *model = qemuVideoTypeToString(video->type);
|
||||
@ -1973,7 +1974,7 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev)
|
||||
|
||||
char *
|
||||
qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -2066,7 +2067,7 @@ qemuBuildUSBHostdevUsbDevStr(virDomainHostdevDefPtr dev)
|
||||
* host side of the character device */
|
||||
static char *
|
||||
qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
bool telnet;
|
||||
@ -2244,7 +2245,7 @@ error:
|
||||
|
||||
static char *
|
||||
qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE)
|
||||
@ -2482,7 +2483,7 @@ static int
|
||||
qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||
const virDomainDefPtr def,
|
||||
const char *emulator,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const struct utsname *ut,
|
||||
char **opt,
|
||||
bool *hasHwVirt)
|
||||
@ -2607,7 +2608,7 @@ no_memory:
|
||||
|
||||
static char *
|
||||
qemuBuildSmpArgStr(const virDomainDefPtr def,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
@ -2660,7 +2661,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
virDomainDefPtr def,
|
||||
virDomainChrSourceDefPtr monitor_chr,
|
||||
bool monitor_json,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const char *migrateFrom,
|
||||
int migrateFd,
|
||||
virDomainSnapshotObjPtr current_snapshot,
|
||||
@ -2698,7 +2699,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
*/
|
||||
if (qemuCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
|
||||
(def->virtType == VIR_DOMAIN_VIRT_QEMU))
|
||||
qemuCapsClear(&qemuCaps, QEMU_CAPS_DRIVE_BOOT);
|
||||
qemuCapsClear(qemuCaps, QEMU_CAPS_DRIVE_BOOT);
|
||||
|
||||
switch (def->virtType) {
|
||||
case VIR_DOMAIN_VIRT_QEMU:
|
||||
@ -3241,13 +3242,13 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
if (disk->bus != VIR_DOMAIN_DISK_BUS_XEN) {
|
||||
withDeviceArg = 1;
|
||||
} else {
|
||||
qemuCapsClear(&qemuCaps, QEMU_CAPS_DEVICE);
|
||||
qemuCapsClear(qemuCaps, QEMU_CAPS_DEVICE);
|
||||
deviceFlagMasked = true;
|
||||
}
|
||||
}
|
||||
optstr = qemuBuildDriveStr(disk, bootable, qemuCaps);
|
||||
if (deviceFlagMasked)
|
||||
qemuCapsSet(&qemuCaps, QEMU_CAPS_DEVICE);
|
||||
qemuCapsSet(qemuCaps, QEMU_CAPS_DEVICE);
|
||||
if (!optstr)
|
||||
goto error;
|
||||
virCommandAddArg(cmd, optstr);
|
||||
|
@ -46,7 +46,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
|
||||
virDomainDefPtr def,
|
||||
virDomainChrSourceDefPtr monitor_chr,
|
||||
bool monitor_json,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const char *migrateFrom,
|
||||
int migrateFd,
|
||||
virDomainSnapshotObjPtr current_snapshot,
|
||||
@ -68,44 +68,44 @@ char * qemuBuildNicStr(virDomainNetDefPtr net,
|
||||
/* Current, best practice */
|
||||
char * qemuBuildNicDevStr(virDomainNetDefPtr net,
|
||||
int vlan,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
/* Both legacy & current support */
|
||||
char *qemuBuildDriveStr(virDomainDiskDefPtr disk,
|
||||
int bootable,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
char *qemuBuildFSStr(virDomainFSDefPtr fs,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
/* Current, best practice */
|
||||
char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
char * qemuBuildFSDevStr(virDomainFSDefPtr fs,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
/* Current, best practice */
|
||||
char * qemuBuildControllerDevStr(virDomainControllerDefPtr def,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
char * qemuBuildUSBInputDevStr(virDomainInputDefPtr dev);
|
||||
|
||||
char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
/* Legacy, pre device support */
|
||||
char * qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev);
|
||||
/* Current, best practice */
|
||||
char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev,
|
||||
const char *configfd,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);
|
||||
|
||||
@ -119,13 +119,13 @@ char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev);
|
||||
int qemuNetworkIfaceConnect(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemCmdFlags)
|
||||
virBitmapPtr qemuCaps)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
int qemuPhysIfaceConnect(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
const unsigned char *vmuuid,
|
||||
enum virVMOperationType vmop);
|
||||
|
||||
@ -156,7 +156,7 @@ int qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr ad
|
||||
|
||||
int qemuDomainNetVLAN(virDomainNetDefPtr def);
|
||||
int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx);
|
||||
int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps);
|
||||
int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, virBitmapPtr qemuCaps);
|
||||
int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr net, int idx);
|
||||
int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller);
|
||||
|
||||
|
@ -3538,7 +3538,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
|
||||
struct qemud_driver *driver = conn->privateData;
|
||||
virDomainDefPtr def = NULL;
|
||||
virDomainChrSourceDef monConfig;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
virCommandPtr cmd = NULL;
|
||||
char *ret = NULL;
|
||||
int i;
|
||||
@ -3611,6 +3611,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
|
||||
cleanup:
|
||||
qemuDriverUnlock(driver);
|
||||
|
||||
qemuCapsFree(qemuCaps);
|
||||
virCommandFree(cmd);
|
||||
virDomainDefFree(def);
|
||||
return ret;
|
||||
@ -3947,7 +3948,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
virCgroupPtr cgroup = NULL;
|
||||
int ret = -1;
|
||||
|
||||
@ -4078,6 +4079,7 @@ cleanup:
|
||||
if (cgroup)
|
||||
virCgroupFree(&cgroup);
|
||||
|
||||
qemuCapsFree(qemuCaps);
|
||||
virDomainDeviceDefFree(dev);
|
||||
if (vm)
|
||||
virDomainObjUnlock(vm);
|
||||
@ -4105,7 +4107,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
virCgroupPtr cgroup = NULL;
|
||||
int ret = -1;
|
||||
bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0;
|
||||
@ -4211,6 +4213,7 @@ cleanup:
|
||||
if (cgroup)
|
||||
virCgroupFree(&cgroup);
|
||||
|
||||
qemuCapsFree(qemuCaps);
|
||||
virDomainDeviceDefFree(dev);
|
||||
if (vm)
|
||||
virDomainObjUnlock(vm);
|
||||
@ -4223,7 +4226,7 @@ static int qemudDomainDetachDevice(virDomainPtr dom,
|
||||
const char *xml) {
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
int ret = -1;
|
||||
|
||||
@ -4296,6 +4299,7 @@ endjob:
|
||||
vm = NULL;
|
||||
|
||||
cleanup:
|
||||
qemuCapsFree(qemuCaps);
|
||||
virDomainDeviceDefFree(dev);
|
||||
if (vm)
|
||||
virDomainObjUnlock(vm);
|
||||
|
@ -44,7 +44,7 @@
|
||||
int qemuDomainChangeEjectableMedia(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
bool force)
|
||||
{
|
||||
virDomainDiskDefPtr origdisk = NULL;
|
||||
@ -140,7 +140,7 @@ error:
|
||||
int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i, ret;
|
||||
const char* type = virDomainDiskBusTypeToString(disk->bus);
|
||||
@ -235,7 +235,7 @@ error:
|
||||
int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainControllerDefPtr controller,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i;
|
||||
int ret = -1;
|
||||
@ -300,7 +300,7 @@ static virDomainControllerDefPtr
|
||||
qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
int controller,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i;
|
||||
virDomainControllerDefPtr cont;
|
||||
@ -346,7 +346,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver,
|
||||
int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
@ -462,7 +462,7 @@ error:
|
||||
int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
int i, ret;
|
||||
@ -547,7 +547,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
char *tapfd_name = NULL;
|
||||
@ -777,7 +777,7 @@ no_memory:
|
||||
int qemuDomainAttachHostPciDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
int ret;
|
||||
@ -872,7 +872,7 @@ error:
|
||||
int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int ret;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
@ -935,7 +935,7 @@ error:
|
||||
int qemuDomainAttachHostDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
|
||||
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@ -1130,7 +1130,7 @@ static inline int qemuFindDisk(virDomainDefPtr def, const char *dst)
|
||||
int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i, ret = -1;
|
||||
virDomainDiskDefPtr detach = NULL;
|
||||
@ -1221,7 +1221,7 @@ cleanup:
|
||||
int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i, ret = -1;
|
||||
virDomainDiskDefPtr detach = NULL;
|
||||
@ -1350,7 +1350,7 @@ static bool qemuDomainControllerIsBusy(virDomainObjPtr vm,
|
||||
int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i, ret = -1;
|
||||
virDomainControllerDefPtr detach = NULL;
|
||||
@ -1434,7 +1434,7 @@ cleanup:
|
||||
int qemuDomainDetachNetDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int i, ret = -1;
|
||||
virDomainNetDefPtr detach = NULL;
|
||||
@ -1561,7 +1561,7 @@ cleanup:
|
||||
int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virDomainHostdevDefPtr detach = NULL;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
@ -1661,7 +1661,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
|
||||
int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virDomainHostdevDefPtr detach = NULL;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
@ -1743,7 +1743,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver,
|
||||
int qemuDomainDetachHostDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
virDomainHostdevDefPtr hostdev = dev->data.hostdev;
|
||||
int ret;
|
||||
|
@ -32,41 +32,41 @@
|
||||
int qemuDomainChangeEjectableMedia(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps,
|
||||
virBitmapPtr qemuCaps,
|
||||
bool force);
|
||||
int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainControllerDefPtr controller,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachNetDevice(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainNetDefPtr net,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachHostPciDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainAttachHostDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainHostdevDefPtr hostdev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainChangeGraphics(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainGraphicsDefPtr dev);
|
||||
@ -78,31 +78,31 @@ int qemuDomainChangeGraphicsPasswords(struct qemud_driver *driver,
|
||||
int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachNetDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
int qemuDomainDetachHostDevice(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev,
|
||||
unsigned long long qemuCaps);
|
||||
virBitmapPtr qemuCaps);
|
||||
|
||||
|
||||
#endif /* __QEMU_HOTPLUG_H__ */
|
||||
|
@ -244,7 +244,7 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver,
|
||||
int ret = -1;
|
||||
int internalret;
|
||||
char *unixfile = NULL;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
qemuDomainObjPrivatePtr priv = NULL;
|
||||
struct timeval now;
|
||||
|
||||
@ -376,6 +376,7 @@ endjob:
|
||||
}
|
||||
|
||||
cleanup:
|
||||
qemuCapsFree(qemuCaps);
|
||||
virDomainDefFree(def);
|
||||
if (unixfile)
|
||||
unlink(unixfile);
|
||||
@ -708,7 +709,7 @@ static int doTunnelMigrate(struct qemud_driver *driver,
|
||||
virStreamPtr st = NULL;
|
||||
char *unixfile = NULL;
|
||||
int internalret;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
int status;
|
||||
unsigned long long transferred, remaining, total;
|
||||
unsigned int background_flags = QEMU_MONITOR_MIGRATE_BACKGROUND;
|
||||
@ -894,6 +895,7 @@ finish:
|
||||
cleanup:
|
||||
VIR_FORCE_CLOSE(client_sock);
|
||||
VIR_FORCE_CLOSE(qemu_sock);
|
||||
qemuCapsFree(qemuCaps);
|
||||
|
||||
if (ddomain)
|
||||
virUnrefDomain(ddomain);
|
||||
|
@ -1137,7 +1137,7 @@ static int
|
||||
qemuProcessInitPasswords(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
unsigned long long qemuCaps)
|
||||
virBitmapPtr qemuCaps)
|
||||
{
|
||||
int ret = 0;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
@ -1789,7 +1789,7 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa
|
||||
struct qemuProcessReconnectData *data = opaque;
|
||||
struct qemud_driver *driver = data->driver;
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
virConnectPtr conn = data->conn;
|
||||
|
||||
virDomainObjLock(obj);
|
||||
@ -1835,9 +1835,12 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa
|
||||
|
||||
if (virDomainObjUnref(obj) > 0)
|
||||
virDomainObjUnlock(obj);
|
||||
|
||||
qemuCapsFree(qemuCaps);
|
||||
return;
|
||||
|
||||
error:
|
||||
qemuCapsFree(qemuCaps);
|
||||
if (!virDomainObjIsActive(obj)) {
|
||||
if (virDomainObjUnref(obj) > 0)
|
||||
virDomainObjUnlock(obj);
|
||||
@ -1879,7 +1882,7 @@ int qemuProcessStart(virConnectPtr conn,
|
||||
enum virVMOperationType vmop)
|
||||
{
|
||||
int ret;
|
||||
unsigned long long qemuCaps;
|
||||
virBitmapPtr qemuCaps = NULL;
|
||||
off_t pos = -1;
|
||||
char ebuf[1024];
|
||||
char *pidfile = NULL;
|
||||
@ -2220,6 +2223,7 @@ int qemuProcessStart(virConnectPtr conn,
|
||||
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
|
||||
goto cleanup;
|
||||
|
||||
qemuCapsFree(qemuCaps);
|
||||
virCommandFree(cmd);
|
||||
VIR_FORCE_CLOSE(logfile);
|
||||
|
||||
@ -2229,6 +2233,7 @@ cleanup:
|
||||
/* We jump here if we failed to start the VM for any reason, or
|
||||
* if we failed to initialize the now running VM. kill it off and
|
||||
* pretend we never started it */
|
||||
qemuCapsFree(qemuCaps);
|
||||
virCommandFree(cmd);
|
||||
VIR_FORCE_CLOSE(logfile);
|
||||
qemuProcessStop(driver, vm, 0);
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
struct testInfo {
|
||||
const char *name;
|
||||
unsigned long long flags;
|
||||
virBitmapPtr flags;
|
||||
unsigned int version;
|
||||
unsigned int is_kvm;
|
||||
unsigned int kvm_version;
|
||||
@ -22,14 +22,14 @@ struct testInfo {
|
||||
static char *progname;
|
||||
static char *abs_srcdir;
|
||||
|
||||
static void printMismatchedFlags(unsigned long long got,
|
||||
unsigned long long expect)
|
||||
static void printMismatchedFlags(virBitmapPtr got,
|
||||
virBitmapPtr expect)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < (sizeof(got)*CHAR_BIT) ; i++) {
|
||||
unsigned long long gotFlag = (got & (1LL << i));
|
||||
unsigned long long expectFlag = (expect & (1LL << i));
|
||||
for (i = 0 ; i < QEMU_CAPS_LAST ; i++) {
|
||||
bool gotFlag = qemuCapsGet(got, i);
|
||||
bool expectFlag = qemuCapsGet(expect, i);
|
||||
if (gotFlag && !expectFlag)
|
||||
fprintf(stderr, "Extra flag %i\n", i);
|
||||
if (!gotFlag && expectFlag)
|
||||
@ -44,8 +44,10 @@ static int testHelpStrParsing(const void *data)
|
||||
char helpStr[MAX_HELP_OUTPUT_SIZE];
|
||||
char *help = &(helpStr[0]);
|
||||
unsigned int version, is_kvm, kvm_version;
|
||||
unsigned long long flags;
|
||||
virBitmapPtr flags = NULL;
|
||||
int ret = -1;
|
||||
char *got = NULL;
|
||||
char *expected = NULL;
|
||||
|
||||
if (virAsprintf(&path, "%s/qemuhelpdata/%s", abs_srcdir, info->name) < 0)
|
||||
return -1;
|
||||
@ -53,7 +55,10 @@ static int testHelpStrParsing(const void *data)
|
||||
if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuCapsParseHelpStr("QEMU", help, &flags,
|
||||
if (!(flags = qemuCapsNew()))
|
||||
goto cleanup;
|
||||
|
||||
if (qemuCapsParseHelpStr("QEMU", help, flags,
|
||||
&version, &is_kvm, &kvm_version) == -1)
|
||||
goto cleanup;
|
||||
|
||||
@ -66,14 +71,19 @@ static int testHelpStrParsing(const void *data)
|
||||
if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuCapsParseDeviceStr(help, &flags) < 0)
|
||||
if (qemuCapsParseDeviceStr(help, flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (flags != info->flags) {
|
||||
got = virBitmapString(flags);
|
||||
expected = virBitmapString(info->flags);
|
||||
if (!got || !expected)
|
||||
goto cleanup;
|
||||
|
||||
if (STRNEQ(got, expected)) {
|
||||
fprintf(stderr,
|
||||
"Computed flags do not match: got 0x%llx, expected 0x%llx\n",
|
||||
flags, info->flags);
|
||||
"Computed flags do not match: got %s, expected %s\n",
|
||||
got, expected);
|
||||
|
||||
if (getenv("VIR_TEST_DEBUG"))
|
||||
printMismatchedFlags(flags, info->flags);
|
||||
@ -104,6 +114,9 @@ static int testHelpStrParsing(const void *data)
|
||||
ret = 0;
|
||||
cleanup:
|
||||
VIR_FREE(path);
|
||||
qemuCapsFree(flags);
|
||||
VIR_FREE(got);
|
||||
VIR_FREE(expected);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -124,365 +137,359 @@ mymain(int argc, char **argv)
|
||||
if (!abs_srcdir)
|
||||
abs_srcdir = getcwd(cwd, sizeof(cwd));
|
||||
|
||||
# define DO_TEST(name, flags, version, is_kvm, kvm_version) \
|
||||
# define DO_TEST(name, version, is_kvm, kvm_version, ...) \
|
||||
do { \
|
||||
const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \
|
||||
struct testInfo info = { \
|
||||
name, NULL, version, is_kvm, kvm_version \
|
||||
}; \
|
||||
if (!(info.flags = qemuCapsNew())) \
|
||||
return EXIT_FAILURE; \
|
||||
qemuCapsSetList(info.flags, __VA_ARGS__, QEMU_CAPS_LAST); \
|
||||
if (virtTestRun("QEMU Help String Parsing " name, \
|
||||
1, testHelpStrParsing, &info) < 0) \
|
||||
ret = -1; \
|
||||
qemuCapsFree(info.flags); \
|
||||
} while (0)
|
||||
|
||||
DO_TEST("qemu-0.9.1",
|
||||
QEMU_CAPS_KQEMU |
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
DO_TEST("qemu-0.9.1", 9001, 0, 0,
|
||||
QEMU_CAPS_KQEMU,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_NAME);
|
||||
DO_TEST("kvm-74", 9001, 1, 74,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
9001, 0, 0);
|
||||
DO_TEST("kvm-74",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_KVM_STDIO |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_KVM_STDIO,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_TDF);
|
||||
DO_TEST("kvm-83-rhel56", 9001, 1, 83,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_RTC_TD_HACK,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
9001, 1, 74);
|
||||
DO_TEST("kvm-83-rhel56",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_RTC_TD_HACK |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_SPICE);
|
||||
DO_TEST("qemu-0.10.5", 10005, 0, 0,
|
||||
QEMU_CAPS_KQEMU,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_RTC_TD_HACK,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_VGA_NONE);
|
||||
DO_TEST("qemu-kvm-0.10.5", 10005, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_RTC_TD_HACK,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_VGA_NONE);
|
||||
DO_TEST("kvm-86", 10050, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_RTC_TD_HACK,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_NONE);
|
||||
DO_TEST("qemu-kvm-0.11.0-rc2", 10092, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_RTC_TD_HACK,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_NONE);
|
||||
DO_TEST("qemu-0.12.1", 12001, 0, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_XEN_DOMID,
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX,
|
||||
QEMU_CAPS_CHARDEV,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_SMP_TOPOLOGY,
|
||||
QEMU_CAPS_RTC,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||
QEMU_CAPS_DRIVE_AIO);
|
||||
DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX,
|
||||
QEMU_CAPS_CHARDEV,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_SMP_TOPOLOGY,
|
||||
QEMU_CAPS_RTC,
|
||||
QEMU_CAPS_VNET_HOST,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_PCI_CONFIGFD,
|
||||
QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_QXL,
|
||||
QEMU_CAPS_SPICE,
|
||||
9001, 1, 83);
|
||||
DO_TEST("qemu-0.10.5",
|
||||
QEMU_CAPS_KQEMU |
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_RTC_TD_HACK |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
10005, 0, 0);
|
||||
DO_TEST("qemu-kvm-0.10.5",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_RTC_TD_HACK |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
10005, 1, 0);
|
||||
DO_TEST("kvm-86",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_RTC_TD_HACK |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
10050, 1, 0);
|
||||
DO_TEST("qemu-kvm-0.11.0-rc2",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_RTC_TD_HACK |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
10092, 1, 0);
|
||||
DO_TEST("qemu-0.12.1",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_XEN_DOMID |
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX |
|
||||
QEMU_CAPS_CHARDEV |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_SMP_TOPOLOGY |
|
||||
QEMU_CAPS_RTC |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_NONE |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||
QEMU_CAPS_DRIVE_AIO,
|
||||
12001, 0, 0);
|
||||
DO_TEST("qemu-kvm-0.12.1.2-rhel60",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX |
|
||||
QEMU_CAPS_CHARDEV |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_SMP_TOPOLOGY |
|
||||
QEMU_CAPS_RTC |
|
||||
QEMU_CAPS_VNET_HOST |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_PCI_CONFIGFD |
|
||||
QEMU_CAPS_NODEFCONFIG |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_QXL |
|
||||
QEMU_CAPS_SPICE |
|
||||
QEMU_CAPS_VGA_NONE |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD |
|
||||
QEMU_CAPS_DRIVE_AIO |
|
||||
QEMU_CAPS_DEVICE_SPICEVMC,
|
||||
12001, 1, 0);
|
||||
DO_TEST("qemu-kvm-0.12.3",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX |
|
||||
QEMU_CAPS_CHARDEV |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_SMP_TOPOLOGY |
|
||||
QEMU_CAPS_RTC |
|
||||
QEMU_CAPS_VNET_HOST |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_NONE |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD |
|
||||
QEMU_CAPS_DEVICE_SPICEVMC);
|
||||
DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX,
|
||||
QEMU_CAPS_CHARDEV,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_SMP_TOPOLOGY,
|
||||
QEMU_CAPS_RTC,
|
||||
QEMU_CAPS_VNET_HOST,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||
QEMU_CAPS_DRIVE_AIO);
|
||||
DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_DRIVE_BOOT,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_XEN_DOMID,
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_SDL,
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX,
|
||||
QEMU_CAPS_CHARDEV,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_MONITOR_JSON,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_SMP_TOPOLOGY,
|
||||
QEMU_CAPS_NETDEV,
|
||||
QEMU_CAPS_RTC,
|
||||
QEMU_CAPS_VNET_HOST,
|
||||
QEMU_CAPS_NO_HPET,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_PCI_CONFIGFD,
|
||||
QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_FSDEV,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_SPICE,
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||
QEMU_CAPS_DRIVE_AIO,
|
||||
12003, 1, 0);
|
||||
DO_TEST("qemu-kvm-0.13.0",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_XEN_DOMID |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_SDL |
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX |
|
||||
QEMU_CAPS_CHARDEV |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_MONITOR_JSON |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_SMP_TOPOLOGY |
|
||||
QEMU_CAPS_NETDEV |
|
||||
QEMU_CAPS_RTC |
|
||||
QEMU_CAPS_VNET_HOST |
|
||||
QEMU_CAPS_NO_HPET |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_PCI_CONFIGFD |
|
||||
QEMU_CAPS_NODEFCONFIG |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_FSDEV |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_SPICE |
|
||||
QEMU_CAPS_VGA_NONE |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD |
|
||||
QEMU_CAPS_DRIVE_AIO |
|
||||
QEMU_CAPS_DEVICE_SPICEVMC,
|
||||
13000, 1, 0);
|
||||
DO_TEST("qemu-kvm-0.12.1.2-rhel61",
|
||||
QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID |
|
||||
QEMU_CAPS_VNET_HDR |
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP |
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 |
|
||||
QEMU_CAPS_KVM |
|
||||
QEMU_CAPS_DRIVE_FORMAT |
|
||||
QEMU_CAPS_DRIVE_SERIAL |
|
||||
QEMU_CAPS_DRIVE_READONLY |
|
||||
QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_0_10 |
|
||||
QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_MEM_PATH |
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX |
|
||||
QEMU_CAPS_CHARDEV |
|
||||
QEMU_CAPS_ENABLE_KVM |
|
||||
QEMU_CAPS_BALLOON |
|
||||
QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_SMP_TOPOLOGY |
|
||||
QEMU_CAPS_RTC |
|
||||
QEMU_CAPS_VNET_HOST |
|
||||
QEMU_CAPS_NO_KVM_PIT |
|
||||
QEMU_CAPS_TDF |
|
||||
QEMU_CAPS_PCI_CONFIGFD |
|
||||
QEMU_CAPS_NODEFCONFIG |
|
||||
QEMU_CAPS_BOOT_MENU |
|
||||
QEMU_CAPS_NESTING |
|
||||
QEMU_CAPS_NAME_PROCESS |
|
||||
QEMU_CAPS_SMBIOS_TYPE |
|
||||
QEMU_CAPS_VGA_QXL |
|
||||
QEMU_CAPS_SPICE |
|
||||
QEMU_CAPS_VGA_NONE |
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD |
|
||||
QEMU_CAPS_HDA_DUPLEX |
|
||||
QEMU_CAPS_DRIVE_AIO |
|
||||
QEMU_CAPS_CCID_PASSTHRU |
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC |
|
||||
QEMU_CAPS_VIRTIO_TX_ALG,
|
||||
12001, 1, 0);
|
||||
QEMU_CAPS_DEVICE_SPICEVMC);
|
||||
DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_DRIVE,
|
||||
QEMU_CAPS_NAME,
|
||||
QEMU_CAPS_UUID,
|
||||
QEMU_CAPS_VNET_HDR,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2,
|
||||
QEMU_CAPS_KVM,
|
||||
QEMU_CAPS_DRIVE_FORMAT,
|
||||
QEMU_CAPS_DRIVE_SERIAL,
|
||||
QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_VGA,
|
||||
QEMU_CAPS_0_10,
|
||||
QEMU_CAPS_PCIDEVICE,
|
||||
QEMU_CAPS_MEM_PATH,
|
||||
QEMU_CAPS_MIGRATE_QEMU_UNIX,
|
||||
QEMU_CAPS_CHARDEV,
|
||||
QEMU_CAPS_ENABLE_KVM,
|
||||
QEMU_CAPS_BALLOON,
|
||||
QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_SMP_TOPOLOGY,
|
||||
QEMU_CAPS_RTC,
|
||||
QEMU_CAPS_VNET_HOST,
|
||||
QEMU_CAPS_NO_KVM_PIT,
|
||||
QEMU_CAPS_TDF,
|
||||
QEMU_CAPS_PCI_CONFIGFD,
|
||||
QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_BOOT_MENU,
|
||||
QEMU_CAPS_NESTING,
|
||||
QEMU_CAPS_NAME_PROCESS,
|
||||
QEMU_CAPS_SMBIOS_TYPE,
|
||||
QEMU_CAPS_VGA_QXL,
|
||||
QEMU_CAPS_SPICE,
|
||||
QEMU_CAPS_VGA_NONE,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||
QEMU_CAPS_HDA_DUPLEX,
|
||||
QEMU_CAPS_DRIVE_AIO,
|
||||
QEMU_CAPS_CCID_PASSTHRU,
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC,
|
||||
QEMU_CAPS_VIRTIO_TX_ALG);
|
||||
|
||||
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ static struct qemud_driver driver;
|
||||
|
||||
static int testCompareXMLToArgvFiles(const char *xml,
|
||||
const char *cmdline,
|
||||
unsigned long long extraFlags,
|
||||
virBitmapPtr extraFlags,
|
||||
const char *migrateFrom,
|
||||
int migrateFd,
|
||||
bool expectError) {
|
||||
@ -38,7 +38,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
int len;
|
||||
char *actualargv = NULL;
|
||||
int ret = -1;
|
||||
unsigned long long flags;
|
||||
virDomainDefPtr vmdef = NULL;
|
||||
virDomainChrSourceDef monitor_chr;
|
||||
virConnectPtr conn;
|
||||
@ -89,14 +88,15 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
monitor_chr.data.nix.path = (char *)"/tmp/test-monitor";
|
||||
monitor_chr.data.nix.listen = true;
|
||||
|
||||
flags = QEMU_CAPS_VNC_COLON |
|
||||
QEMU_CAPS_NO_REBOOT |
|
||||
extraFlags;
|
||||
qemuCapsSetList(extraFlags,
|
||||
QEMU_CAPS_VNC_COLON,
|
||||
QEMU_CAPS_NO_REBOOT,
|
||||
QEMU_CAPS_LAST);
|
||||
|
||||
if (qemudCanonicalizeMachine(&driver, vmdef) < 0)
|
||||
goto fail;
|
||||
|
||||
if (qemuCapsGet(flags, QEMU_CAPS_DEVICE)) {
|
||||
if (qemuCapsGet(extraFlags, QEMU_CAPS_DEVICE)) {
|
||||
qemuDomainPCIAddressSetPtr pciaddrs;
|
||||
if (!(pciaddrs = qemuDomainPCIAddressSetCreate(vmdef)))
|
||||
goto fail;
|
||||
@ -117,11 +117,11 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
*/
|
||||
if (STREQLEN(vmdef->os.arch, "x86_64", 6) ||
|
||||
STREQLEN(vmdef->os.arch, "i686", 4)) {
|
||||
qemuCapsSet(&flags, QEMU_CAPS_PCI_MULTIBUS);
|
||||
qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
|
||||
}
|
||||
|
||||
if (!(cmd = qemuBuildCommandLine(conn, &driver,
|
||||
vmdef, &monitor_chr, false, flags,
|
||||
vmdef, &monitor_chr, false, extraFlags,
|
||||
migrateFrom, migrateFd, NULL,
|
||||
VIR_VM_OP_CREATE)))
|
||||
goto fail;
|
||||
@ -169,7 +169,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
|
||||
struct testInfo {
|
||||
const char *name;
|
||||
unsigned long long extraFlags;
|
||||
virBitmapPtr extraFlags;
|
||||
const char *migrateFrom;
|
||||
int migrateFd;
|
||||
bool expectError;
|
||||
@ -230,18 +230,24 @@ mymain(int argc, char **argv)
|
||||
if (cpuMapOverride(map) < 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
# define DO_TEST_FULL(name, extraFlags, migrateFrom, migrateFd, expectError) \
|
||||
# define DO_TEST_FULL(name, migrateFrom, migrateFd, expectError, ...) \
|
||||
do { \
|
||||
const struct testInfo info = { \
|
||||
name, extraFlags, migrateFrom, migrateFd, expectError \
|
||||
struct testInfo info = { \
|
||||
name, NULL, migrateFrom, migrateFd, expectError \
|
||||
}; \
|
||||
if (!(info.extraFlags = qemuCapsNew())) \
|
||||
return EXIT_FAILURE; \
|
||||
qemuCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST); \
|
||||
if (virtTestRun("QEMU XML-2-ARGV " name, \
|
||||
1, testCompareXMLToArgvHelper, &info) < 0) \
|
||||
ret = -1; \
|
||||
qemuCapsFree(info.extraFlags); \
|
||||
} while (0)
|
||||
|
||||
# define DO_TEST(name, extraFlags, expectError) \
|
||||
DO_TEST_FULL(name, extraFlags, NULL, -1, expectError)
|
||||
# define DO_TEST(name, expectError, ...) \
|
||||
DO_TEST_FULL(name, NULL, -1, expectError, __VA_ARGS__)
|
||||
|
||||
# define NONE QEMU_CAPS_LAST
|
||||
|
||||
/* Unset or set all envvars here that are copied in qemudBuildCommandLine
|
||||
* using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
|
||||
@ -256,241 +262,235 @@ mymain(int argc, char **argv)
|
||||
unsetenv("QEMU_AUDIO_DRV");
|
||||
unsetenv("SDL_AUDIODRIVER");
|
||||
|
||||
DO_TEST("minimal", QEMU_CAPS_NAME, false);
|
||||
DO_TEST("machine-aliases1", 0, false);
|
||||
DO_TEST("machine-aliases2", 0, true);
|
||||
DO_TEST("boot-cdrom", 0, false);
|
||||
DO_TEST("boot-network", 0, false);
|
||||
DO_TEST("boot-floppy", 0, false);
|
||||
DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU, false);
|
||||
DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU, false);
|
||||
DO_TEST("boot-order", QEMU_CAPS_BOOTINDEX |
|
||||
QEMU_CAPS_DRIVE | QEMU_CAPS_DEVICE, false);
|
||||
DO_TEST("bootloader", QEMU_CAPS_DOMID, true);
|
||||
DO_TEST("clock-utc", 0, false);
|
||||
DO_TEST("clock-localtime", 0, false);
|
||||
DO_TEST("minimal", false, QEMU_CAPS_NAME);
|
||||
DO_TEST("machine-aliases1", false, NONE);
|
||||
DO_TEST("machine-aliases2", true, NONE);
|
||||
DO_TEST("boot-cdrom", false, NONE);
|
||||
DO_TEST("boot-network", false, NONE);
|
||||
DO_TEST("boot-floppy", false, NONE);
|
||||
DO_TEST("boot-multi", false, QEMU_CAPS_BOOT_MENU);
|
||||
DO_TEST("boot-menu-disable", false, QEMU_CAPS_BOOT_MENU);
|
||||
DO_TEST("boot-order", false,
|
||||
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE);
|
||||
DO_TEST("bootloader", true, QEMU_CAPS_DOMID);
|
||||
DO_TEST("clock-utc", false, NONE);
|
||||
DO_TEST("clock-localtime", false, NONE);
|
||||
/*
|
||||
* Can't be enabled since the absolute timestamp changes every time
|
||||
DO_TEST("clock-variable", QEMU_CAPS_RTC, false);
|
||||
DO_TEST("clock-variable", false, QEMU_CAPS_RTC);
|
||||
*/
|
||||
DO_TEST("clock-france", QEMU_CAPS_RTC, false);
|
||||
DO_TEST("clock-france", false, QEMU_CAPS_RTC);
|
||||
|
||||
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH, false);
|
||||
DO_TEST("disk-cdrom", 0, false);
|
||||
DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE, false);
|
||||
DO_TEST("disk-floppy", 0, false);
|
||||
DO_TEST("disk-many", 0, false);
|
||||
DO_TEST("disk-virtio", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT, false);
|
||||
DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT, false);
|
||||
DO_TEST("disk-drive-boot-disk", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT, false);
|
||||
DO_TEST("disk-drive-boot-cdrom", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT, false);
|
||||
DO_TEST("floppy-drive-fat", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-fat", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-readonly-disk", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("disk-drive-readonly-no-device", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("disk-drive-fmt-qcow", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-shared", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT | QEMU_CAPS_DRIVE_SERIAL, false);
|
||||
DO_TEST("disk-drive-cache-v1-wt", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-cache-v1-wb", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-cache-v1-none", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-error-policy-stop", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_MONITOR_JSON |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-cache-v2-wt", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-cache-v2-wb", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-cache-v2-none", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-network-nbd", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-network-rbd", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-drive-network-sheepdog", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("disk-usb", 0, false);
|
||||
DO_TEST("disk-usb-device", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("disk-scsi-device", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("disk-scsi-device-auto", QEMU_CAPS_DRIVE |
|
||||
QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("disk-aio", QEMU_CAPS_DRIVE | QEMU_CAPS_DRIVE_AIO |
|
||||
QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
|
||||
DO_TEST("graphics-vnc", 0, false);
|
||||
DO_TEST("graphics-vnc-socket", 0, false);
|
||||
DO_TEST("hugepages", false, QEMU_CAPS_MEM_PATH);
|
||||
DO_TEST("disk-cdrom", false, NONE);
|
||||
DO_TEST("disk-cdrom-empty", false, QEMU_CAPS_DRIVE);
|
||||
DO_TEST("disk-floppy", false, NONE);
|
||||
DO_TEST("disk-many", false, NONE);
|
||||
DO_TEST("disk-virtio", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
|
||||
DO_TEST("disk-xenvbd", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
|
||||
DO_TEST("disk-drive-boot-disk", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
|
||||
DO_TEST("disk-drive-boot-cdrom", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
|
||||
DO_TEST("floppy-drive-fat", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-fat", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-readonly-disk", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-drive-readonly-no-device", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-drive-fmt-qcow", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-shared", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT, QEMU_CAPS_DRIVE_SERIAL);
|
||||
DO_TEST("disk-drive-cache-v1-wt", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-cache-v1-wb", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-cache-v1-none", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-error-policy-stop", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-cache-v2-wt", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-cache-v2-wb", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-cache-v2-none", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-network-nbd", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-network-rbd", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-drive-network-sheepdog", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("disk-usb", false, NONE);
|
||||
DO_TEST("disk-usb-device", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-scsi-device", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-scsi-device-auto", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("disk-aio", false,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_AIO,
|
||||
QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
|
||||
DO_TEST("graphics-vnc", false, NONE);
|
||||
DO_TEST("graphics-vnc-socket", false, NONE);
|
||||
|
||||
driver.vncSASL = 1;
|
||||
driver.vncSASLdir = strdup("/root/.sasl2");
|
||||
DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VGA, false);
|
||||
DO_TEST("graphics-vnc-sasl", false, QEMU_CAPS_VGA);
|
||||
driver.vncTLS = 1;
|
||||
driver.vncTLSx509verify = 1;
|
||||
driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
|
||||
DO_TEST("graphics-vnc-tls", 0, false);
|
||||
DO_TEST("graphics-vnc-tls", false, NONE);
|
||||
driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
|
||||
free(driver.vncSASLdir);
|
||||
free(driver.vncTLSx509certdir);
|
||||
driver.vncSASLdir = driver.vncTLSx509certdir = NULL;
|
||||
|
||||
DO_TEST("graphics-sdl", 0, false);
|
||||
DO_TEST("graphics-sdl-fullscreen", 0, false);
|
||||
DO_TEST("nographics", QEMU_CAPS_VGA, false);
|
||||
DO_TEST("nographics-vga", QEMU_CAPS_VGA |
|
||||
QEMU_CAPS_VGA_NONE, false);
|
||||
DO_TEST("graphics-spice",
|
||||
QEMU_CAPS_VGA | QEMU_CAPS_VGA_QXL |
|
||||
QEMU_CAPS_DEVICE | QEMU_CAPS_SPICE, false);
|
||||
DO_TEST("graphics-sdl", false, NONE);
|
||||
DO_TEST("graphics-sdl-fullscreen", false, NONE);
|
||||
DO_TEST("nographics", false, QEMU_CAPS_VGA);
|
||||
DO_TEST("nographics-vga", false,
|
||||
QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
|
||||
DO_TEST("graphics-spice", false,
|
||||
QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE);
|
||||
|
||||
DO_TEST("input-usbmouse", 0, false);
|
||||
DO_TEST("input-usbtablet", 0, false);
|
||||
DO_TEST("input-xen", QEMU_CAPS_DOMID, true);
|
||||
DO_TEST("misc-acpi", 0, false);
|
||||
DO_TEST("misc-no-reboot", 0, false);
|
||||
DO_TEST("misc-uuid", QEMU_CAPS_NAME |
|
||||
QEMU_CAPS_UUID, false);
|
||||
DO_TEST("net-user", 0, false);
|
||||
DO_TEST("net-virtio", 0, false);
|
||||
DO_TEST("net-virtio-device", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_VIRTIO_TX_ALG, false);
|
||||
DO_TEST("net-virtio-netdev", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NETDEV | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("net-eth", 0, false);
|
||||
DO_TEST("net-eth-ifname", 0, false);
|
||||
DO_TEST("net-eth-names", QEMU_CAPS_NET_NAME, false);
|
||||
DO_TEST("input-usbmouse", false, NONE);
|
||||
DO_TEST("input-usbtablet", false, NONE);
|
||||
DO_TEST("input-xen", true, QEMU_CAPS_DOMID);
|
||||
DO_TEST("misc-acpi", false, NONE);
|
||||
DO_TEST("misc-no-reboot", false, NONE);
|
||||
DO_TEST("misc-uuid", false, QEMU_CAPS_NAME, QEMU_CAPS_UUID);
|
||||
DO_TEST("net-user", false, NONE);
|
||||
DO_TEST("net-virtio", false, NONE);
|
||||
DO_TEST("net-virtio-device", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
|
||||
DO_TEST("net-virtio-netdev", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("net-eth", false, NONE);
|
||||
DO_TEST("net-eth-ifname", false, NONE);
|
||||
DO_TEST("net-eth-names", false, QEMU_CAPS_NET_NAME);
|
||||
|
||||
DO_TEST("serial-vc", 0, false);
|
||||
DO_TEST("serial-pty", 0, false);
|
||||
DO_TEST("serial-dev", 0, false);
|
||||
DO_TEST("serial-file", 0, false);
|
||||
DO_TEST("serial-unix", 0, false);
|
||||
DO_TEST("serial-tcp", 0, false);
|
||||
DO_TEST("serial-udp", 0, false);
|
||||
DO_TEST("serial-tcp-telnet", 0, false);
|
||||
DO_TEST("serial-many", 0, false);
|
||||
DO_TEST("parallel-tcp", 0, false);
|
||||
DO_TEST("console-compat", 0, false);
|
||||
DO_TEST("console-compat-auto", 0, false);
|
||||
DO_TEST("serial-vc", false, NONE);
|
||||
DO_TEST("serial-pty", false, NONE);
|
||||
DO_TEST("serial-dev", false, NONE);
|
||||
DO_TEST("serial-file", false, NONE);
|
||||
DO_TEST("serial-unix", false, NONE);
|
||||
DO_TEST("serial-tcp", false, NONE);
|
||||
DO_TEST("serial-udp", false, NONE);
|
||||
DO_TEST("serial-tcp-telnet", false, NONE);
|
||||
DO_TEST("serial-many", false, NONE);
|
||||
DO_TEST("parallel-tcp", false, NONE);
|
||||
DO_TEST("console-compat", false, NONE);
|
||||
DO_TEST("console-compat-auto", false, NONE);
|
||||
|
||||
DO_TEST("serial-vc-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-pty-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-dev-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-file-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-unix-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-udp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-tcp-telnet-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-many-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("parallel-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("console-compat-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("serial-vc-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-pty-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-dev-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-file-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-unix-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-tcp-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-udp-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-tcp-telnet-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("serial-many-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("parallel-tcp-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("console-compat-chardev", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
|
||||
DO_TEST("channel-guestfwd", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("channel-virtio", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("channel-virtio-auto", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("console-virtio", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("channel-spicevmc", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE |
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC, false);
|
||||
DO_TEST("channel-spicevmc-old", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE |
|
||||
QEMU_CAPS_DEVICE_SPICEVMC, false);
|
||||
DO_TEST("channel-guestfwd", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("channel-virtio", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("channel-virtio-auto", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("console-virtio", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("channel-spicevmc", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
|
||||
DO_TEST("channel-spicevmc-old", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
|
||||
|
||||
DO_TEST("smartcard-host",
|
||||
QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
|
||||
DO_TEST("smartcard-host-certificates",
|
||||
QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
|
||||
DO_TEST("smartcard-passthrough-tcp",
|
||||
QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU, false);
|
||||
DO_TEST("smartcard-passthrough-spicevmc",
|
||||
QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU |
|
||||
QEMU_CAPS_CHARDEV_SPICEVMC, false);
|
||||
DO_TEST("smartcard-controller",
|
||||
QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
|
||||
DO_TEST("smartcard-host", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
||||
DO_TEST("smartcard-host-certificates", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
||||
DO_TEST("smartcard-passthrough-tcp", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
|
||||
DO_TEST("smartcard-passthrough-spicevmc", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||
QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
|
||||
DO_TEST("smartcard-controller", false,
|
||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
|
||||
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
||||
|
||||
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE, false);
|
||||
DO_TEST("smbios", false, QEMU_CAPS_SMBIOS_TYPE);
|
||||
|
||||
DO_TEST("watchdog", 0, false);
|
||||
DO_TEST("watchdog-device", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("watchdog-dump", 0, false);
|
||||
DO_TEST("balloon-device", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("balloon-device-auto", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("sound", 0, false);
|
||||
DO_TEST("sound-device", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_HDA_DUPLEX, false);
|
||||
DO_TEST("fs9p", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_FSDEV, false);
|
||||
DO_TEST("watchdog", false, NONE);
|
||||
DO_TEST("watchdog-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("watchdog-dump", false, NONE);
|
||||
DO_TEST("balloon-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("balloon-device-auto", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("sound", false, NONE);
|
||||
DO_TEST("sound-device", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_HDA_DUPLEX);
|
||||
DO_TEST("fs9p", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV);
|
||||
|
||||
DO_TEST("hostdev-usb-address", 0, false);
|
||||
DO_TEST("hostdev-usb-address-device", QEMU_CAPS_DEVICE |
|
||||
QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE, false);
|
||||
DO_TEST("hostdev-pci-address-device", QEMU_CAPS_PCIDEVICE |
|
||||
QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
|
||||
DO_TEST("hostdev-usb-address", false, NONE);
|
||||
DO_TEST("hostdev-usb-address-device", false,
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
DO_TEST("hostdev-pci-address", false, QEMU_CAPS_PCIDEVICE);
|
||||
DO_TEST("hostdev-pci-address-device", false,
|
||||
QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||
|
||||
DO_TEST_FULL("restore-v1", QEMU_CAPS_MIGRATE_KVM_STDIO, "stdio", 7,
|
||||
false);
|
||||
DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "stdio", 7,
|
||||
false);
|
||||
DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "exec:cat", 7,
|
||||
false);
|
||||
DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "stdio", 7,
|
||||
false);
|
||||
DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "fd:7", 7,
|
||||
false);
|
||||
DO_TEST_FULL("migrate", QEMU_CAPS_MIGRATE_QEMU_TCP,
|
||||
"tcp:10.0.0.1:5000", -1, false);
|
||||
DO_TEST_FULL("restore-v1", "stdio", 7, false,
|
||||
QEMU_CAPS_MIGRATE_KVM_STDIO);
|
||||
DO_TEST_FULL("restore-v2", "stdio", 7, false,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
DO_TEST_FULL("restore-v2", "exec:cat", 7, false,
|
||||
QEMU_CAPS_MIGRATE_QEMU_EXEC);
|
||||
DO_TEST_FULL("restore-v2-fd", "stdio", 7, false,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD);
|
||||
DO_TEST_FULL("restore-v2-fd", "fd:7", 7, false,
|
||||
QEMU_CAPS_MIGRATE_QEMU_FD);
|
||||
DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, false,
|
||||
QEMU_CAPS_MIGRATE_QEMU_TCP);
|
||||
|
||||
DO_TEST("qemu-ns", 0, false);
|
||||
DO_TEST("qemu-ns", false, NONE);
|
||||
|
||||
DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY, false);
|
||||
DO_TEST("smp", false, QEMU_CAPS_SMP_TOPOLOGY);
|
||||
|
||||
DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY, false);
|
||||
DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY, false);
|
||||
DO_TEST("cpu-topology3", 0, false);
|
||||
DO_TEST("cpu-minimum1", 0, false);
|
||||
DO_TEST("cpu-minimum2", 0, false);
|
||||
DO_TEST("cpu-exact1", 0, false);
|
||||
DO_TEST("cpu-exact2", 0, false);
|
||||
DO_TEST("cpu-strict1", 0, false);
|
||||
DO_TEST("cpu-topology1", false, QEMU_CAPS_SMP_TOPOLOGY);
|
||||
DO_TEST("cpu-topology2", false, QEMU_CAPS_SMP_TOPOLOGY);
|
||||
DO_TEST("cpu-topology3", false, NONE);
|
||||
DO_TEST("cpu-minimum1", false, NONE);
|
||||
DO_TEST("cpu-minimum2", false, NONE);
|
||||
DO_TEST("cpu-exact1", false, NONE);
|
||||
DO_TEST("cpu-exact2", false, NONE);
|
||||
DO_TEST("cpu-strict1", false, NONE);
|
||||
|
||||
DO_TEST("memtune", QEMU_CAPS_NAME, false);
|
||||
DO_TEST("blkiotune", QEMU_CAPS_NAME, false);
|
||||
DO_TEST("memtune", false, QEMU_CAPS_NAME);
|
||||
DO_TEST("blkiotune", false, QEMU_CAPS_NAME);
|
||||
|
||||
free(driver.stateDir);
|
||||
virCapabilitiesFree(driver.caps);
|
||||
|
Loading…
Reference in New Issue
Block a user