2008-01-29 18:15:54 +00:00
|
|
|
#include <config.h>
|
2007-11-26 12:03:34 +00:00
|
|
|
|
2007-07-18 21:34:22 +00:00
|
|
|
#include <stdio.h>
|
2007-11-26 12:03:34 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
2007-07-18 21:34:22 +00:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
2013-04-16 13:41:44 +00:00
|
|
|
#include "testutils.h"
|
|
|
|
|
2007-11-26 12:03:34 +00:00
|
|
|
#ifdef WITH_QEMU
|
|
|
|
|
2010-03-09 18:22:22 +00:00
|
|
|
# include "internal.h"
|
2012-12-12 18:06:53 +00:00
|
|
|
# include "viralloc.h"
|
2016-02-16 15:24:35 +00:00
|
|
|
# include "qemu/qemu_alias.h"
|
2010-12-17 16:41:51 +00:00
|
|
|
# include "qemu/qemu_capabilities.h"
|
|
|
|
# include "qemu/qemu_command.h"
|
2011-07-11 17:29:09 +00:00
|
|
|
# include "qemu/qemu_domain.h"
|
2015-10-20 13:48:33 +00:00
|
|
|
# include "qemu/qemu_migration.h"
|
2016-02-04 14:29:49 +00:00
|
|
|
# include "qemu/qemu_process.h"
|
2010-03-09 18:22:22 +00:00
|
|
|
# include "datatypes.h"
|
2013-11-20 15:04:10 +00:00
|
|
|
# include "conf/storage_conf.h"
|
2010-04-16 06:21:23 +00:00
|
|
|
# include "cpu/cpu_map.h"
|
2013-04-03 10:36:23 +00:00
|
|
|
# include "virstring.h"
|
2014-08-14 16:05:48 +00:00
|
|
|
# include "storage/storage_driver.h"
|
2015-02-02 10:26:49 +00:00
|
|
|
# include "virmock.h"
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2016-08-03 10:26:41 +00:00
|
|
|
# define __QEMU_CAPSRIV_H_ALLOW__
|
|
|
|
# include "qemu/qemu_capspriv.h"
|
|
|
|
# undef __QEMU_CAPSRIV_H_ALLOW__
|
|
|
|
|
2010-03-09 18:22:22 +00:00
|
|
|
# include "testutilsqemu.h"
|
2008-05-16 16:51:30 +00:00
|
|
|
|
2013-05-03 12:52:21 +00:00
|
|
|
# define VIR_FROM_THIS VIR_FROM_QEMU
|
|
|
|
|
2010-04-16 06:21:23 +00:00
|
|
|
static const char *abs_top_srcdir;
|
2012-11-28 16:43:10 +00:00
|
|
|
static virQEMUDriver driver;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2011-11-01 01:29:07 +00:00
|
|
|
static unsigned char *
|
|
|
|
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
|
|
|
|
size_t *value_size,
|
|
|
|
unsigned int fakeflags ATTRIBUTE_UNUSED,
|
|
|
|
unsigned int internalFlags ATTRIBUTE_UNUSED)
|
|
|
|
{
|
2013-05-03 12:52:21 +00:00
|
|
|
char *secret;
|
|
|
|
if (VIR_STRDUP(secret, "AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A") < 0)
|
2013-02-04 14:54:33 +00:00
|
|
|
return NULL;
|
2011-11-01 01:29:07 +00:00
|
|
|
*value_size = strlen(secret);
|
|
|
|
return (unsigned char *) secret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static virSecretPtr
|
|
|
|
fakeSecretLookupByUsage(virConnectPtr conn,
|
2016-06-02 20:28:28 +00:00
|
|
|
int usageType,
|
2011-11-01 01:29:07 +00:00
|
|
|
const char *usageID)
|
|
|
|
{
|
Convert public datatypes to inherit from virObject
This converts the following public API datatypes to use the
virObject infrastructure:
virConnectPtr
virDomainPtr
virDomainSnapshotPtr
virInterfacePtr
virNetworkPtr
virNodeDevicePtr
virNWFilterPtr
virSecretPtr
virStreamPtr
virStorageVolPtr
virStoragePoolPtr
The code is significantly simplified, since the mutex in the
virConnectPtr object now only needs to be held when accessing
the per-connection virError object instance. All other operations
are completely lock free.
* src/datatypes.c, src/datatypes.h, src/libvirt.c: Convert
public datatypes to use virObject
* src/conf/domain_event.c, src/phyp/phyp_driver.c,
src/qemu/qemu_command.c, src/qemu/qemu_migration.c,
src/qemu/qemu_process.c, src/storage/storage_driver.c,
src/vbox/vbox_tmpl.c, src/xen/xend_internal.c,
tests/qemuxml2argvtest.c, tests/qemuxmlnstest.c,
tests/sexpr2xmltest.c, tests/xmconfigtest.c: Convert
to use virObjectUnref/virObjectRef
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-07-31 16:55:36 +00:00
|
|
|
unsigned char uuid[VIR_UUID_BUFLEN];
|
2016-06-02 20:28:28 +00:00
|
|
|
if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) {
|
|
|
|
if (!STRPREFIX(usageID, "/storage/guest_disks/")) {
|
|
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
|
"test provided invalid volume storage prefix '%s'",
|
|
|
|
usageID);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
} else if (STRNEQ(usageID, "mycluster_myname")) {
|
|
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
|
"test provided incorrect usage '%s'", usageID);
|
2011-11-01 01:29:07 +00:00
|
|
|
return NULL;
|
2016-06-02 20:28:28 +00:00
|
|
|
}
|
Convert public datatypes to inherit from virObject
This converts the following public API datatypes to use the
virObject infrastructure:
virConnectPtr
virDomainPtr
virDomainSnapshotPtr
virInterfacePtr
virNetworkPtr
virNodeDevicePtr
virNWFilterPtr
virSecretPtr
virStreamPtr
virStorageVolPtr
virStoragePoolPtr
The code is significantly simplified, since the mutex in the
virConnectPtr object now only needs to be held when accessing
the per-connection virError object instance. All other operations
are completely lock free.
* src/datatypes.c, src/datatypes.h, src/libvirt.c: Convert
public datatypes to use virObject
* src/conf/domain_event.c, src/phyp/phyp_driver.c,
src/qemu/qemu_command.c, src/qemu/qemu_migration.c,
src/qemu/qemu_process.c, src/storage/storage_driver.c,
src/vbox/vbox_tmpl.c, src/xen/xend_internal.c,
tests/qemuxml2argvtest.c, tests/qemuxmlnstest.c,
tests/sexpr2xmltest.c, tests/xmconfigtest.c: Convert
to use virObjectUnref/virObjectRef
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-07-31 16:55:36 +00:00
|
|
|
|
2014-06-11 09:40:44 +00:00
|
|
|
if (virUUIDGenerate(uuid) < 0)
|
|
|
|
return NULL;
|
|
|
|
|
Convert public datatypes to inherit from virObject
This converts the following public API datatypes to use the
virObject infrastructure:
virConnectPtr
virDomainPtr
virDomainSnapshotPtr
virInterfacePtr
virNetworkPtr
virNodeDevicePtr
virNWFilterPtr
virSecretPtr
virStreamPtr
virStorageVolPtr
virStoragePoolPtr
The code is significantly simplified, since the mutex in the
virConnectPtr object now only needs to be held when accessing
the per-connection virError object instance. All other operations
are completely lock free.
* src/datatypes.c, src/datatypes.h, src/libvirt.c: Convert
public datatypes to use virObject
* src/conf/domain_event.c, src/phyp/phyp_driver.c,
src/qemu/qemu_command.c, src/qemu/qemu_migration.c,
src/qemu/qemu_process.c, src/storage/storage_driver.c,
src/vbox/vbox_tmpl.c, src/xen/xend_internal.c,
tests/qemuxml2argvtest.c, tests/qemuxmlnstest.c,
tests/sexpr2xmltest.c, tests/xmconfigtest.c: Convert
to use virObjectUnref/virObjectRef
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-07-31 16:55:36 +00:00
|
|
|
return virGetSecret(conn, uuid, usageType, usageID);
|
2011-11-01 01:29:07 +00:00
|
|
|
}
|
|
|
|
|
2016-06-02 20:28:28 +00:00
|
|
|
static virSecretPtr
|
|
|
|
fakeSecretLookupByUUID(virConnectPtr conn,
|
|
|
|
const unsigned char *uuid)
|
|
|
|
{
|
|
|
|
return virGetSecret(conn, uuid, 0, "");
|
|
|
|
}
|
|
|
|
|
2011-11-01 01:29:07 +00:00
|
|
|
static virSecretDriver fakeSecretDriver = {
|
2013-04-22 17:26:01 +00:00
|
|
|
.connectNumOfSecrets = NULL,
|
|
|
|
.connectListSecrets = NULL,
|
2016-06-02 20:28:28 +00:00
|
|
|
.secretLookupByUUID = fakeSecretLookupByUUID,
|
2013-04-22 17:26:01 +00:00
|
|
|
.secretLookupByUsage = fakeSecretLookupByUsage,
|
|
|
|
.secretDefineXML = NULL,
|
|
|
|
.secretGetXMLDesc = NULL,
|
|
|
|
.secretSetValue = NULL,
|
|
|
|
.secretGetValue = fakeSecretGetValue,
|
|
|
|
.secretUndefine = NULL,
|
2011-11-01 01:29:07 +00:00
|
|
|
};
|
|
|
|
|
2013-11-20 15:04:10 +00:00
|
|
|
|
|
|
|
# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
|
|
|
|
static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";
|
|
|
|
|
|
|
|
static virStoragePoolPtr
|
|
|
|
fakeStoragePoolLookupByName(virConnectPtr conn,
|
|
|
|
const char *name)
|
|
|
|
{
|
|
|
|
char *xmlpath = NULL;
|
|
|
|
virStoragePoolPtr ret = NULL;
|
|
|
|
|
|
|
|
if (STRNEQ(name, "inactive")) {
|
|
|
|
if (virAsprintf(&xmlpath, "%s/%s%s.xml",
|
|
|
|
abs_srcdir,
|
|
|
|
STORAGE_POOL_XML_PATH,
|
|
|
|
name) < 0)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (!virFileExists(xmlpath)) {
|
|
|
|
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
|
|
"File '%s' not found", xmlpath);
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = virGetStoragePool(conn, name, fakeUUID, NULL, NULL);
|
|
|
|
|
2014-03-25 06:53:44 +00:00
|
|
|
cleanup:
|
2013-11-20 15:04:10 +00:00
|
|
|
VIR_FREE(xmlpath);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static virStorageVolPtr
|
|
|
|
fakeStorageVolLookupByName(virStoragePoolPtr pool,
|
|
|
|
const char *name)
|
|
|
|
{
|
|
|
|
char **volinfo = NULL;
|
|
|
|
virStorageVolPtr ret = NULL;
|
|
|
|
|
|
|
|
if (STREQ(pool->name, "inactive")) {
|
|
|
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
|
|
"storage pool '%s' is not active", pool->name);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (STREQ(name, "nonexistent")) {
|
|
|
|
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
|
|
"no storage vol with matching name '%s'", name);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!strchr(name, '+'))
|
|
|
|
goto fallback;
|
|
|
|
|
|
|
|
if (!(volinfo = virStringSplit(name, "+", 2)))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (!volinfo[1])
|
|
|
|
goto fallback;
|
|
|
|
|
|
|
|
ret = virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0],
|
|
|
|
NULL, NULL);
|
|
|
|
|
2014-03-25 06:53:44 +00:00
|
|
|
cleanup:
|
2013-11-20 15:04:10 +00:00
|
|
|
virStringFreeList(volinfo);
|
|
|
|
return ret;
|
|
|
|
|
2014-03-25 06:53:44 +00:00
|
|
|
fallback:
|
2013-11-20 15:04:10 +00:00
|
|
|
ret = virGetStorageVol(pool->conn, pool->name, name, "block", NULL, NULL);
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
fakeStorageVolGetInfo(virStorageVolPtr vol,
|
|
|
|
virStorageVolInfoPtr info)
|
|
|
|
{
|
|
|
|
memset(info, 0, sizeof(*info));
|
|
|
|
|
|
|
|
info->type = virStorageVolTypeFromString(vol->key);
|
|
|
|
|
|
|
|
if (info->type < 0) {
|
|
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
|
"Invalid volume type '%s'", vol->key);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static char *
|
|
|
|
fakeStorageVolGetPath(virStorageVolPtr vol)
|
|
|
|
{
|
|
|
|
char *ret = NULL;
|
|
|
|
|
|
|
|
ignore_value(virAsprintf(&ret, "/some/%s/device/%s", vol->key, vol->name));
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static char *
|
|
|
|
fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
|
|
|
|
unsigned int flags_unused ATTRIBUTE_UNUSED)
|
|
|
|
{
|
|
|
|
char *xmlpath = NULL;
|
|
|
|
char *xmlbuf = NULL;
|
|
|
|
|
|
|
|
if (STREQ(pool->name, "inactive")) {
|
|
|
|
virReportError(VIR_ERR_NO_STORAGE_POOL, NULL);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (virAsprintf(&xmlpath, "%s/%s%s.xml",
|
|
|
|
abs_srcdir,
|
|
|
|
STORAGE_POOL_XML_PATH,
|
|
|
|
pool->name) < 0)
|
|
|
|
return NULL;
|
|
|
|
|
2016-05-26 15:01:52 +00:00
|
|
|
if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
|
2013-11-20 15:04:10 +00:00
|
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
|
"failed to load XML file '%s'",
|
|
|
|
xmlpath);
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
2014-03-25 06:53:44 +00:00
|
|
|
cleanup:
|
2013-11-20 15:04:10 +00:00
|
|
|
VIR_FREE(xmlpath);
|
|
|
|
|
|
|
|
return xmlbuf;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
fakeStoragePoolIsActive(virStoragePoolPtr pool)
|
|
|
|
{
|
|
|
|
if (STREQ(pool->name, "inactive"))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Test storage pool implementation
|
|
|
|
*
|
|
|
|
* These functions aid testing of storage pool related stuff when creating a
|
2013-12-02 12:25:01 +00:00
|
|
|
* qemu command line.
|
2013-11-20 15:04:10 +00:00
|
|
|
*
|
|
|
|
* There are a few "magic" values to pass to these functions:
|
|
|
|
*
|
2013-12-02 12:25:01 +00:00
|
|
|
* 1) "inactive" as a pool name to create an inactive pool. All other names are
|
|
|
|
* interpreted as file names in storagepoolxml2xmlout/ and are used as the
|
2013-11-20 15:04:10 +00:00
|
|
|
* definition for the pool. If the file doesn't exist the pool doesn't exist.
|
|
|
|
*
|
|
|
|
* 2) "nonexistent" returns an error while looking up a volume. Otherwise
|
2013-12-02 12:25:01 +00:00
|
|
|
* pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
|
2013-11-20 15:04:10 +00:00
|
|
|
* This creates a fake path for this volume. If the '+' sign is omitted, block
|
|
|
|
* type is assumed.
|
|
|
|
*/
|
|
|
|
static virStorageDriver fakeStorageDriver = {
|
|
|
|
.storagePoolLookupByName = fakeStoragePoolLookupByName,
|
|
|
|
.storageVolLookupByName = fakeStorageVolLookupByName,
|
|
|
|
.storagePoolGetXMLDesc = fakeStoragePoolGetXMLDesc,
|
|
|
|
.storageVolGetPath = fakeStorageVolGetPath,
|
|
|
|
.storageVolGetInfo = fakeStorageVolGetInfo,
|
|
|
|
.storagePoolIsActive = fakeStoragePoolIsActive,
|
|
|
|
};
|
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
typedef enum {
|
2016-04-13 06:21:42 +00:00
|
|
|
FLAG_EXPECT_FAILURE = 1 << 0,
|
|
|
|
FLAG_EXPECT_PARSE_ERROR = 1 << 1,
|
|
|
|
FLAG_JSON = 1 << 2,
|
|
|
|
FLAG_FIPS = 1 << 3,
|
2012-07-09 16:29:55 +00:00
|
|
|
} virQemuXML2ArgvTestFlags;
|
|
|
|
|
2016-08-03 08:42:08 +00:00
|
|
|
struct testInfo {
|
|
|
|
const char *name;
|
|
|
|
virQEMUCapsPtr qemuCaps;
|
|
|
|
const char *migrateFrom;
|
|
|
|
int migrateFd;
|
|
|
|
unsigned int flags;
|
|
|
|
unsigned int parseFlags;
|
2016-08-03 10:21:19 +00:00
|
|
|
bool skipLegacyCPUs;
|
2016-08-03 08:42:08 +00:00
|
|
|
};
|
|
|
|
|
2016-08-03 08:47:00 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
|
|
|
|
{
|
2016-08-04 11:25:02 +00:00
|
|
|
virArch arch = virQEMUCapsGetArch(caps);
|
|
|
|
const char *x86Models[] = {
|
2016-08-03 08:47:00 +00:00
|
|
|
"Opteron_G3", "Opteron_G2", "Opteron_G1",
|
|
|
|
"Nehalem", "Penryn", "Conroe",
|
|
|
|
"Haswell-noTSX", "Haswell",
|
|
|
|
};
|
2016-08-04 11:25:02 +00:00
|
|
|
const char *x86LegacyModels[] = {
|
2016-08-03 08:47:00 +00:00
|
|
|
"n270", "athlon", "pentium3", "pentium2", "pentium",
|
|
|
|
"486", "coreduo", "kvm32", "qemu32", "kvm64",
|
|
|
|
"core2duo", "phenom", "qemu64",
|
|
|
|
};
|
2016-08-04 11:25:02 +00:00
|
|
|
const char *armModels[] = {
|
|
|
|
"cortex-a9", "cortex-a8", "cortex-a57", "cortex-a53",
|
|
|
|
};
|
|
|
|
const char *ppc64Models[] = {
|
|
|
|
"POWER8", "POWER7",
|
|
|
|
};
|
2016-08-03 08:47:00 +00:00
|
|
|
|
2016-08-04 11:25:02 +00:00
|
|
|
if (ARCH_IS_X86(arch)) {
|
|
|
|
if (virQEMUCapsAddCPUDefinitions(caps, x86Models,
|
|
|
|
ARRAY_CARDINALITY(x86Models)) < 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (!skipLegacy &&
|
|
|
|
virQEMUCapsAddCPUDefinitions(caps, x86LegacyModels,
|
|
|
|
ARRAY_CARDINALITY(x86LegacyModels)) < 0)
|
|
|
|
return -1;
|
|
|
|
} else if (ARCH_IS_ARM(arch)) {
|
|
|
|
if (virQEMUCapsAddCPUDefinitions(caps, armModels,
|
|
|
|
ARRAY_CARDINALITY(armModels)) < 0)
|
|
|
|
return -1;
|
|
|
|
} else if (ARCH_IS_PPC64(arch)) {
|
|
|
|
if (virQEMUCapsAddCPUDefinitions(caps, ppc64Models,
|
|
|
|
ARRAY_CARDINALITY(ppc64Models)) < 0)
|
|
|
|
return -1;
|
|
|
|
}
|
2016-08-03 08:47:00 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
2016-08-03 10:21:19 +00:00
|
|
|
testInitQEMUCaps(struct testInfo *info,
|
|
|
|
int gic)
|
2016-08-03 08:47:00 +00:00
|
|
|
{
|
|
|
|
int ret = -1;
|
|
|
|
|
|
|
|
if (!(info->qemuCaps = virQEMUCapsNew()))
|
|
|
|
goto cleanup;
|
|
|
|
|
2016-08-03 10:21:19 +00:00
|
|
|
virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_NO_ACPI);
|
2016-08-03 08:47:00 +00:00
|
|
|
|
|
|
|
if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
ret = 0;
|
|
|
|
|
|
|
|
cleanup:
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-08-03 10:21:19 +00:00
|
|
|
static int
|
|
|
|
testUpdateQEMUCaps(const struct testInfo *info,
|
2016-06-15 12:35:18 +00:00
|
|
|
virDomainObjPtr vm,
|
|
|
|
virCapsPtr caps)
|
2016-08-03 10:21:19 +00:00
|
|
|
{
|
|
|
|
int ret = -1;
|
|
|
|
|
2016-08-03 10:26:41 +00:00
|
|
|
virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);
|
|
|
|
|
2016-08-03 10:21:19 +00:00
|
|
|
if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0)
|
|
|
|
goto cleanup;
|
|
|
|
|
qemu: Fix crash in qemucapsprobe
The qemucapsprobe helper calls virQEMUCapsNewForBinaryInternal with
caps == NULL, causing the following crash:
Program received signal SIGSEGV, Segmentation fault.
#0 0x00007ffff788775f in virQEMUCapsInitHostCPUModel
(qemuCaps=qemuCaps@entry=0x649680, host=host@entry=0x10) at
src/qemu/qemu_capabilities.c:2969
#1 0x00007ffff7889dbf in virQEMUCapsNewForBinaryInternal
(caps=caps@entry=0x0, binary=<optimized out>,
libDir=libDir@entry=0x4033f6 "/tmp", cacheDir=cacheDir@entry=0x0,
runUid=runUid@entry=4294967295, runGid=runGid@entry=4294967295,
qmpOnly=true) at src/qemu/qemu_capabilities.c:4039
#2 0x0000000000401702 in main (argc=2, argv=0x7fffffffd968) at
tests/qemucapsprobe.c:73
Caused by v2.2.0-182-g68c7011.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2016-09-27 11:39:51 +00:00
|
|
|
virQEMUCapsInitHostCPUModel(info->qemuCaps, caps);
|
2016-06-15 12:35:18 +00:00
|
|
|
|
2016-08-03 10:21:19 +00:00
|
|
|
virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);
|
|
|
|
|
|
|
|
if (ARCH_IS_X86(vm->def->os.arch))
|
|
|
|
virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
|
|
|
|
|
|
|
|
ret = 0;
|
|
|
|
|
|
|
|
cleanup:
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-08-03 08:42:08 +00:00
|
|
|
static int
|
|
|
|
testCompareXMLToArgv(const void *data)
|
2011-04-24 22:25:10 +00:00
|
|
|
{
|
2016-08-03 08:42:08 +00:00
|
|
|
const struct testInfo *info = data;
|
|
|
|
char *xml = NULL;
|
|
|
|
char *args = NULL;
|
|
|
|
char *migrateURI = NULL;
|
2007-07-18 21:34:22 +00:00
|
|
|
char *actualargv = NULL;
|
2016-08-03 08:42:08 +00:00
|
|
|
unsigned int flags = info->flags;
|
|
|
|
unsigned int parseFlags = info->parseFlags;
|
2010-11-22 23:09:13 +00:00
|
|
|
int ret = -1;
|
2016-03-17 12:19:35 +00:00
|
|
|
virDomainObjPtr vm = NULL;
|
2011-01-07 23:36:25 +00:00
|
|
|
virDomainChrSourceDef monitor_chr;
|
2010-02-10 13:19:17 +00:00
|
|
|
virConnectPtr conn;
|
2010-10-22 16:50:34 +00:00
|
|
|
char *log = NULL;
|
2010-11-22 23:09:13 +00:00
|
|
|
virCommandPtr cmd = NULL;
|
2013-09-20 08:39:51 +00:00
|
|
|
size_t i;
|
2016-03-15 12:54:24 +00:00
|
|
|
qemuDomainObjPrivatePtr priv = NULL;
|
2010-02-10 13:19:17 +00:00
|
|
|
|
2016-07-08 21:45:22 +00:00
|
|
|
memset(&monitor_chr, 0, sizeof(monitor_chr));
|
|
|
|
|
2010-02-10 13:19:17 +00:00
|
|
|
if (!(conn = virGetConnect()))
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2016-08-03 08:42:08 +00:00
|
|
|
|
2011-11-01 01:29:07 +00:00
|
|
|
conn->secretDriver = &fakeSecretDriver;
|
2013-11-20 15:04:10 +00:00
|
|
|
conn->storageDriver = &fakeStorageDriver;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2016-08-03 08:42:08 +00:00
|
|
|
if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_MONITOR_JSON))
|
|
|
|
flags |= FLAG_JSON;
|
|
|
|
|
|
|
|
if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
|
|
|
|
flags |= FLAG_FIPS;
|
|
|
|
|
|
|
|
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
|
|
|
|
info->qemuCaps) < 0)
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
|
|
|
|
abs_srcdir, info->name) < 0 ||
|
|
|
|
virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
|
|
|
|
abs_srcdir, info->name) < 0)
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
if (info->migrateFrom &&
|
|
|
|
!(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
|
|
|
|
info->migrateFd)))
|
|
|
|
goto cleanup;
|
|
|
|
|
2016-03-17 12:19:35 +00:00
|
|
|
if (!(vm = virDomainObjNew(driver.xmlopt)))
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2016-03-17 12:19:35 +00:00
|
|
|
|
2016-08-03 08:42:08 +00:00
|
|
|
parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
|
2016-03-17 12:19:35 +00:00
|
|
|
if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
|
2016-09-22 15:14:17 +00:00
|
|
|
NULL, parseFlags))) {
|
2016-03-14 09:37:40 +00:00
|
|
|
if (flags & FLAG_EXPECT_PARSE_ERROR)
|
2012-07-09 16:29:55 +00:00
|
|
|
goto ok;
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2012-07-09 16:29:55 +00:00
|
|
|
}
|
2016-03-15 12:54:24 +00:00
|
|
|
priv = vm->privateData;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2016-06-17 12:56:45 +00:00
|
|
|
if (virBitmapParse("0-3", &priv->autoNodeset, 4) < 0)
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2016-03-15 12:57:47 +00:00
|
|
|
|
2016-03-17 12:19:35 +00:00
|
|
|
if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
|
2015-04-23 17:38:00 +00:00
|
|
|
VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2014-01-10 17:18:03 +00:00
|
|
|
}
|
|
|
|
|
2016-03-17 12:19:35 +00:00
|
|
|
vm->def->id = -1;
|
2007-09-21 21:20:32 +00:00
|
|
|
|
2016-03-15 12:54:24 +00:00
|
|
|
if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2009-07-09 17:06:38 +00:00
|
|
|
|
2016-03-17 12:19:35 +00:00
|
|
|
if (STREQ(vm->def->os.machine, "pc") &&
|
|
|
|
STREQ(vm->def->emulator, "/usr/bin/qemu-system-x86_64")) {
|
|
|
|
VIR_FREE(vm->def->os.machine);
|
|
|
|
if (VIR_STRDUP(vm->def->os.machine, "pc-0.11") < 0)
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2012-08-22 15:25:57 +00:00
|
|
|
}
|
2009-09-10 10:09:06 +00:00
|
|
|
|
2016-06-15 12:35:18 +00:00
|
|
|
if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
|
2016-08-03 10:21:19 +00:00
|
|
|
goto cleanup;
|
2015-02-12 13:50:31 +00:00
|
|
|
|
2016-05-26 15:01:58 +00:00
|
|
|
log = virTestLogContentAndReset();
|
2012-02-02 23:16:43 +00:00
|
|
|
VIR_FREE(log);
|
2010-11-29 13:11:53 +00:00
|
|
|
virResetLastError();
|
2010-10-22 16:50:34 +00:00
|
|
|
|
2016-03-17 12:19:35 +00:00
|
|
|
for (i = 0; i < vm->def->nhostdevs; i++) {
|
|
|
|
virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
|
2013-09-20 08:39:51 +00:00
|
|
|
|
|
|
|
if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
|
|
|
hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
|
|
|
|
hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
|
|
|
|
hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-03-15 12:57:47 +00:00
|
|
|
if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
|
|
|
|
(flags & FLAG_FIPS), false,
|
|
|
|
VIR_QEMU_PROCESS_START_COLD))) {
|
2016-03-14 09:37:40 +00:00
|
|
|
if (flags & FLAG_EXPECT_FAILURE)
|
|
|
|
goto ok;
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2010-10-22 16:50:34 +00:00
|
|
|
}
|
|
|
|
|
2010-11-22 23:09:13 +00:00
|
|
|
if (!(actualargv = virCommandToString(cmd)))
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2010-11-22 23:09:13 +00:00
|
|
|
|
2016-08-03 08:42:08 +00:00
|
|
|
if (virTestCompareToFile(actualargv, args) < 0)
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2016-03-14 09:37:40 +00:00
|
|
|
ret = 0;
|
|
|
|
|
2012-01-13 03:39:24 +00:00
|
|
|
ok:
|
2016-04-13 06:21:42 +00:00
|
|
|
if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
|
2016-03-14 09:37:40 +00:00
|
|
|
ret = -1;
|
|
|
|
VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
|
2016-08-03 08:19:10 +00:00
|
|
|
goto cleanup;
|
2016-03-14 09:37:40 +00:00
|
|
|
}
|
2016-05-26 15:01:56 +00:00
|
|
|
if (!virTestOOMActive()) {
|
2016-04-13 06:21:42 +00:00
|
|
|
if (flags & FLAG_EXPECT_FAILURE) {
|
2016-05-26 15:01:58 +00:00
|
|
|
if ((log = virTestLogContentAndReset()))
|
2016-03-14 09:37:40 +00:00
|
|
|
VIR_TEST_DEBUG("Got expected error: \n%s", log);
|
|
|
|
}
|
2012-01-13 03:39:24 +00:00
|
|
|
virResetLastError();
|
2016-03-14 09:37:40 +00:00
|
|
|
ret = 0;
|
2012-01-13 03:39:24 +00:00
|
|
|
}
|
|
|
|
|
2016-08-03 08:19:10 +00:00
|
|
|
cleanup:
|
2012-02-02 23:16:43 +00:00
|
|
|
VIR_FREE(log);
|
|
|
|
VIR_FREE(actualargv);
|
2016-07-08 21:45:22 +00:00
|
|
|
virDomainChrSourceDefClear(&monitor_chr);
|
2010-11-22 23:09:13 +00:00
|
|
|
virCommandFree(cmd);
|
2016-03-17 12:19:35 +00:00
|
|
|
virObjectUnref(vm);
|
Convert public datatypes to inherit from virObject
This converts the following public API datatypes to use the
virObject infrastructure:
virConnectPtr
virDomainPtr
virDomainSnapshotPtr
virInterfacePtr
virNetworkPtr
virNodeDevicePtr
virNWFilterPtr
virSecretPtr
virStreamPtr
virStorageVolPtr
virStoragePoolPtr
The code is significantly simplified, since the mutex in the
virConnectPtr object now only needs to be held when accessing
the per-connection virError object instance. All other operations
are completely lock free.
* src/datatypes.c, src/datatypes.h, src/libvirt.c: Convert
public datatypes to use virObject
* src/conf/domain_event.c, src/phyp/phyp_driver.c,
src/qemu/qemu_command.c, src/qemu/qemu_migration.c,
src/qemu/qemu_process.c, src/storage/storage_driver.c,
src/vbox/vbox_tmpl.c, src/xen/xend_internal.c,
tests/qemuxml2argvtest.c, tests/qemuxmlnstest.c,
tests/sexpr2xmltest.c, tests/xmconfigtest.c: Convert
to use virObjectUnref/virObjectRef
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-07-31 16:55:36 +00:00
|
|
|
virObjectUnref(conn);
|
2015-10-20 11:51:01 +00:00
|
|
|
VIR_FREE(migrateURI);
|
2012-02-02 23:16:43 +00:00
|
|
|
VIR_FREE(xml);
|
|
|
|
VIR_FREE(args);
|
2016-08-03 08:42:08 +00:00
|
|
|
return ret;
|
2007-07-18 21:34:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-05-29 15:31:49 +00:00
|
|
|
static int
|
2011-04-29 16:21:20 +00:00
|
|
|
mymain(void)
|
2007-07-18 21:34:22 +00:00
|
|
|
{
|
|
|
|
int ret = 0;
|
2012-08-22 15:28:55 +00:00
|
|
|
bool skipLegacyCPUs = false;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2010-04-16 06:21:23 +00:00
|
|
|
abs_top_srcdir = getenv("abs_top_srcdir");
|
|
|
|
if (!abs_top_srcdir)
|
2013-11-27 21:31:53 +00:00
|
|
|
abs_top_srcdir = abs_srcdir "/..";
|
2010-04-16 06:21:23 +00:00
|
|
|
|
2014-02-06 13:24:02 +00:00
|
|
|
/* Set the timezone because we are mocking the time() function.
|
|
|
|
* If we don't do that, then localtime() may return unpredictable
|
|
|
|
* results. In order to detect things that just work by a blind
|
|
|
|
* chance, we need to set an virtual timezone that no libvirt
|
|
|
|
* developer resides in. */
|
|
|
|
if (setenv("TZ", "VIR00:30", 1) < 0) {
|
|
|
|
perror("setenv");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
2015-09-15 06:16:02 +00:00
|
|
|
if (qemuTestDriverInit(&driver) < 0)
|
2014-04-07 06:53:26 +00:00
|
|
|
return EXIT_FAILURE;
|
2015-06-15 18:59:58 +00:00
|
|
|
|
|
|
|
driver.privileged = true;
|
2014-04-07 06:53:26 +00:00
|
|
|
|
2016-09-14 09:44:44 +00:00
|
|
|
VIR_FREE(driver.config->defaultTLSx509certdir);
|
|
|
|
if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
|
|
|
|
return EXIT_FAILURE;
|
2013-02-07 16:39:16 +00:00
|
|
|
VIR_FREE(driver.config->vncTLSx509certdir);
|
2013-05-03 12:52:21 +00:00
|
|
|
if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
|
2013-02-07 16:39:16 +00:00
|
|
|
return EXIT_FAILURE;
|
|
|
|
VIR_FREE(driver.config->spiceTLSx509certdir);
|
2013-05-03 12:52:21 +00:00
|
|
|
if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
|
2013-02-07 16:39:16 +00:00
|
|
|
return EXIT_FAILURE;
|
2016-09-14 09:44:44 +00:00
|
|
|
VIR_FREE(driver.config->chardevTLSx509certdir);
|
|
|
|
if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
|
|
|
|
return EXIT_FAILURE;
|
2013-02-07 16:39:16 +00:00
|
|
|
|
2013-01-10 21:03:14 +00:00
|
|
|
VIR_FREE(driver.config->stateDir);
|
2013-05-03 12:52:21 +00:00
|
|
|
if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
|
Support configuration of huge pages in guests
Add option to domain XML for
<memoryBacking>
<hugepages/>
</memoryBacking>
* configure.in: Add check for mntent.h
* qemud/libvirtd_qemu.aug, qemud/test_libvirtd_qemu.aug, src/qemu.conf
Add 'hugetlbfs_mount' config parameter
* src/qemu_conf.c, src/qemu_conf.h: Check for -mem-path flag in QEMU,
and pass it when hugepages are requested.
Load hugetlbfs_mount config parameter, search for mount if not given.
* src/qemu_driver.c: Free hugetlbfs_mount/path parameter in driver shutdown.
Create directory for QEMU hugepage usage, chowning if required.
* docs/formatdomain.html.in: Document memoryBacking/hugepages elements
* docs/schemas/domain.rng: Add memoryBacking/hugepages elements to schema
* src/util.c, src/util.h, src/libvirt_private.syms: Add virFileFindMountPoint
helper API
* tests/qemuhelptest.c: Add -mem-path constants
* tests/qemuxml2argvtest.c, tests/qemuxml2xmltest.c: Add tests for hugepage
handling
* tests/qemuxml2argvdata/qemuxml2argv-hugepages.xml,
tests/qemuxml2argvdata/qemuxml2argv-hugepages.args: Data files for
hugepage tests
2009-08-25 14:05:18 +00:00
|
|
|
return EXIT_FAILURE;
|
2014-07-23 15:37:18 +00:00
|
|
|
VIR_FREE(driver.config->hugetlbfs);
|
2014-07-23 15:37:21 +00:00
|
|
|
if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
|
2008-12-18 15:22:49 +00:00
|
|
|
return EXIT_FAILURE;
|
2014-07-23 15:37:21 +00:00
|
|
|
driver.config->nhugetlbfs = 2;
|
|
|
|
if (VIR_STRDUP(driver.config->hugetlbfs[0].mnt_dir, "/dev/hugepages2M") < 0 ||
|
|
|
|
VIR_STRDUP(driver.config->hugetlbfs[1].mnt_dir, "/dev/hugepages1G") < 0)
|
2010-03-05 20:31:50 +00:00
|
|
|
return EXIT_FAILURE;
|
2014-07-23 15:37:18 +00:00
|
|
|
driver.config->hugetlbfs[0].size = 2048;
|
|
|
|
driver.config->hugetlbfs[0].deflt = true;
|
2014-07-23 15:37:21 +00:00
|
|
|
driver.config->hugetlbfs[1].size = 1048576;
|
2013-01-10 21:03:14 +00:00
|
|
|
driver.config->spiceTLS = 1;
|
2013-05-03 12:52:21 +00:00
|
|
|
if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
|
2010-03-05 20:31:50 +00:00
|
|
|
return EXIT_FAILURE;
|
2010-04-16 06:21:23 +00:00
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
|
|
|
|
parseFlags, gic, ...) \
|
|
|
|
do { \
|
|
|
|
static struct testInfo info = { \
|
2016-08-03 10:21:19 +00:00
|
|
|
name, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
|
|
|
|
false \
|
2016-05-26 15:01:50 +00:00
|
|
|
}; \
|
2016-08-03 10:21:19 +00:00
|
|
|
info.skipLegacyCPUs = skipLegacyCPUs; \
|
|
|
|
if (testInitQEMUCaps(&info, gic) < 0) \
|
2016-05-26 15:01:50 +00:00
|
|
|
return EXIT_FAILURE; \
|
2016-08-03 07:49:42 +00:00
|
|
|
virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \
|
2016-05-26 15:01:50 +00:00
|
|
|
if (virTestRun("QEMU XML-2-ARGV " name, \
|
2016-08-03 08:42:08 +00:00
|
|
|
testCompareXMLToArgv, &info) < 0) \
|
2016-05-26 15:01:50 +00:00
|
|
|
ret = -1; \
|
2016-08-03 07:49:42 +00:00
|
|
|
virObjectUnref(info.qemuCaps); \
|
2008-05-09 16:41:19 +00:00
|
|
|
} while (0)
|
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST(name, ...) \
|
2016-05-10 09:35:43 +00:00
|
|
|
DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
|
2012-07-09 16:29:55 +00:00
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_GIC(name, gic, ...) \
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)
|
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_FAILURE(name, ...) \
|
|
|
|
DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
|
2016-05-10 09:35:43 +00:00
|
|
|
0, GIC_NONE, __VA_ARGS__)
|
2012-07-09 16:29:55 +00:00
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_PARSE_ERROR(name, ...) \
|
|
|
|
DO_TEST_FULL(name, NULL, -1, \
|
|
|
|
FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
|
2016-05-10 09:35:43 +00:00
|
|
|
0, GIC_NONE, __VA_ARGS__)
|
2016-02-25 15:21:13 +00:00
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
|
|
|
|
DO_TEST_FULL(name, NULL, -1, \
|
|
|
|
FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
|
2016-05-10 09:35:43 +00:00
|
|
|
parseFlags, GIC_NONE, __VA_ARGS__)
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_LINUX(name, ...) \
|
2016-05-10 09:35:43 +00:00
|
|
|
DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
|
2015-09-21 17:10:12 +00:00
|
|
|
|
2014-11-12 09:26:43 +00:00
|
|
|
# ifdef __linux__
|
|
|
|
/* This is a macro that invokes test only on Linux. It's
|
|
|
|
* meant to be called in those cases where qemuxml2argvmock
|
|
|
|
* cooperation is expected (e.g. we need a fixed time,
|
|
|
|
* predictable NUMA topology and so on). On non-Linux
|
|
|
|
* platforms the macro just consume its argument. */
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_LINUX_FULL(name, ...) \
|
2015-09-21 17:10:12 +00:00
|
|
|
DO_TEST_FULL(name, __VA_ARGS__)
|
2014-11-12 09:26:43 +00:00
|
|
|
# else /* __linux__ */
|
2016-05-26 15:01:50 +00:00
|
|
|
# define DO_TEST_LINUX_FULL(name, ...) \
|
|
|
|
do { \
|
|
|
|
const char *tmp ATTRIBUTE_UNUSED = name; \
|
2014-11-12 09:26:43 +00:00
|
|
|
} while (0)
|
|
|
|
# endif /* __linux__ */
|
|
|
|
|
2011-02-08 14:22:39 +00:00
|
|
|
# define NONE QEMU_CAPS_LAST
|
2009-01-29 17:27:54 +00:00
|
|
|
|
2009-12-28 15:21:15 +00:00
|
|
|
/* Unset or set all envvars here that are copied in qemudBuildCommandLine
|
|
|
|
* using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
|
|
|
|
* values for these envvars */
|
2008-10-10 16:52:20 +00:00
|
|
|
setenv("PATH", "/bin", 1);
|
|
|
|
setenv("USER", "test", 1);
|
|
|
|
setenv("LOGNAME", "test", 1);
|
|
|
|
setenv("HOME", "/home/test", 1);
|
|
|
|
unsetenv("TMPDIR");
|
|
|
|
unsetenv("LD_PRELOAD");
|
|
|
|
unsetenv("LD_LIBRARY_PATH");
|
2009-12-28 15:21:15 +00:00
|
|
|
unsetenv("QEMU_AUDIO_DRV");
|
|
|
|
unsetenv("SDL_AUDIODRIVER");
|
2008-10-10 16:52:20 +00:00
|
|
|
|
2015-11-06 14:29:41 +00:00
|
|
|
DO_TEST("minimal", NONE);
|
2015-03-04 10:04:27 +00:00
|
|
|
DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
|
2015-11-06 14:29:41 +00:00
|
|
|
DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("machine-aliases1", NONE);
|
2012-09-14 14:34:33 +00:00
|
|
|
DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
|
2013-03-29 05:22:46 +00:00
|
|
|
DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_DUMP_GUEST_CORE);
|
2016-08-03 15:20:19 +00:00
|
|
|
driver.config->dumpGuestCore = true;
|
2013-03-29 05:22:46 +00:00
|
|
|
DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_DUMP_GUEST_CORE);
|
2016-08-03 15:20:19 +00:00
|
|
|
driver.config->dumpGuestCore = false;
|
|
|
|
DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_DUMP_GUEST_CORE);
|
2012-08-15 08:16:36 +00:00
|
|
|
DO_TEST_FAILURE("machine-core-on", NONE);
|
2013-03-29 05:22:46 +00:00
|
|
|
DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
|
2016-07-13 12:09:20 +00:00
|
|
|
DO_TEST("machine-smm-opt",
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACHINE_SMM_OPT,
|
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
2013-04-07 08:31:57 +00:00
|
|
|
DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACHINE_USB_OPT);
|
2015-04-02 16:44:44 +00:00
|
|
|
DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACHINE_VMPORT_OPT);
|
2013-04-23 14:17:08 +00:00
|
|
|
DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
|
2015-05-06 22:32:05 +00:00
|
|
|
DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
|
|
|
|
DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-cdrom", NONE);
|
|
|
|
DO_TEST("boot-network", NONE);
|
|
|
|
DO_TEST("boot-floppy", NONE);
|
2015-06-22 13:20:55 +00:00
|
|
|
DO_TEST("boot-floppy-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-22 13:20:55 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI);
|
2015-06-22 13:20:55 +00:00
|
|
|
DO_TEST("bootindex-floppy-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-22 13:20:55 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
|
2015-06-22 13:20:55 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
|
|
|
|
DO_TEST("boot-menu-enable",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU);
|
2016-06-28 20:15:25 +00:00
|
|
|
DO_TEST("boot-menu-enable-bootindex",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU,
|
2011-05-26 14:15:01 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX);
|
2014-08-22 12:13:37 +00:00
|
|
|
DO_TEST("boot-menu-enable-with-timeout",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_SPLASH_TIMEOUT);
|
2014-08-22 12:13:37 +00:00
|
|
|
DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
|
2014-08-22 11:39:26 +00:00
|
|
|
DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
|
|
|
|
DO_TEST("boot-menu-disable-drive",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-menu-disable-drive-bootindex",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU,
|
2011-05-26 14:15:01 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX);
|
2012-10-16 10:25:32 +00:00
|
|
|
DO_TEST_PARSE_ERROR("boot-dev+order",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-order",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-complex",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("boot-complex-bootindex",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT,
|
qemu: add new disk device='lun' for bus='virtio' & type='block'
In the past, generic SCSI commands issued from a guest to a virtio
disk were always passed through to the underlying disk by qemu, and
the kernel would also pass them on.
As a result of CVE-2011-4127 (see:
http://seclists.org/oss-sec/2011/q4/536), qemu now honors its
scsi=on|off device option for virtio-blk-pci (which enables/disables
passthrough of generic SCSI commands), and the kernel will only allow
the commands for physical devices (not for partitions or logical
volumes). The default behavior of qemu is still to allow sending
generic SCSI commands to physical disks that are presented to a guest
as virtio-blk-pci devices, but libvirt prefers to disable those
commands in the standard virtio block devices, enabling it only when
specifically requested (hopefully indicating that the requester
understands what they're asking for). For this purpose, a new libvirt
disk device type (device='lun') has been created.
device='lun' is identical to the default device='disk', except that:
1) It is only allowed if bus='virtio', type='block', and the qemu
version is "new enough" to support it ("new enough" == qemu 0.11 or
better), otherwise the domain will fail to start and a
CONFIG_UNSUPPORTED error will be logged).
2) The option "scsi=on" will be added to the -device arg to allow
SG_IO commands (if device !='lun', "scsi=off" will be added to the
-device arg so that SG_IO commands are specifically forbidden).
Guests which continue to use disk device='disk' (the default) will no
longer be able to use SG_IO commands on the disk; those that have
their disk device changed to device='lun' will still be able to use SG_IO
commands.
*docs/formatdomain.html.in - document the new device attribute value.
*docs/schemas/domaincommon.rng - allow it in the RNG
*tests/* - update the args of several existing tests to add scsi=off, and
add one new test that will test scsi=on.
*src/conf/domain_conf.c - update domain XML parser and formatter
*src/qemu/qemu_(command|driver|hotplug).c - treat
VIR_DOMAIN_DISK_DEVICE_LUN *almost* identically to
VIR_DOMAIN_DISK_DEVICE_DISK, except as indicated above.
Note that no support for this new device value was added to any
hypervisor drivers other than qemu, because it's unclear what it might
mean (if anything) to those drivers.
2012-01-05 03:48:38 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
qemu: add "-boot strict" to commandline whenever possible
This resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=888635
(which was already closed as CANTFIX because the qemu "-boot strict"
commandline option wasn't available at the time).
Problem: you couldn't have a domain that used PXE to boot, but also
had an un-bootable disk device *even if that disk wasn't listed in the
boot order*, because if PXE timed out (e.g. due to the bridge
forwarding delay), the BIOS would move on to the next target, which
would be the unbootable disk device (again - even though it wasn't
given a boot order), and get stuck at a "BOOT DISK FAILURE, PRESS ANY
KEY" message until a user intervened.
The solution available since sometime around QEMU 1.5, is to add
"-boot strict=on" to *every* qemu command. When this is done, if any
devices have a boot order specified, then QEMU will *only* attempt to
boot from those devices that have an explicit boot order, ignoring the
rest.
2013-12-02 12:07:12 +00:00
|
|
|
DO_TEST("boot-strict",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT,
|
qemu: add "-boot strict" to commandline whenever possible
This resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=888635
(which was already closed as CANTFIX because the qemu "-boot strict"
commandline option wasn't available at the time).
Problem: you couldn't have a domain that used PXE to boot, but also
had an un-bootable disk device *even if that disk wasn't listed in the
boot order*, because if PXE timed out (e.g. due to the bridge
forwarding delay), the BIOS would move on to the next target, which
would be the unbootable disk device (again - even though it wasn't
given a boot order), and get stuck at a "BOOT DISK FAILURE, PRESS ANY
KEY" message until a user intervened.
The solution available since sometime around QEMU 1.5, is to add
"-boot strict=on" to *every* qemu command. When this is done, if any
devices have a boot order specified, then QEMU will *only* attempt to
boot from those devices that have an explicit boot order, ignoring the
rest.
2013-12-02 12:07:12 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-09-18 10:32:07 +00:00
|
|
|
|
|
|
|
DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
|
|
|
|
DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
|
|
|
|
DO_TEST_FAILURE("reboot-timeout-enabled", NONE);
|
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("bios", QEMU_CAPS_SGA);
|
2016-05-20 12:25:22 +00:00
|
|
|
DO_TEST("bios-nvram", NONE);
|
qemu: Enable secure boot
In qemu, enabling this feature boils down to adding the following
onto the command line:
-global driver=cfi.pflash01,property=secure,value=on
However, there are some constraints resulting from the
implementation. For instance, System Management Mode (SMM) is
required to be enabled, the machine type must be q35-2.4 or
later, and the guest should be x86_64. While technically it is
possible to have 32 bit guests with secure boot, some non-trivial
CPU flags tuning is required (for instance lm and nx flags must
be prohibited). Given complexity of our CPU driver, this is not
trivial. Therefore I've chosen to forbid 32 bit guests for now.
If there's ever need, we can refine the check later.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2016-07-13 09:33:52 +00:00
|
|
|
DO_TEST("bios-nvram-secure",
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACHINE_SMM_OPT,
|
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("clock-localtime", NONE);
|
2014-02-05 14:18:46 +00:00
|
|
|
DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("clock-variable", QEMU_CAPS_RTC);
|
|
|
|
DO_TEST("clock-france", QEMU_CAPS_RTC);
|
2013-10-08 21:41:16 +00:00
|
|
|
DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
|
|
|
|
QEMU_CAPS_NO_KVM_PIT);
|
2014-02-04 18:02:04 +00:00
|
|
|
DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("kvmclock", QEMU_CAPS_KVM);
|
2014-01-21 17:50:12 +00:00
|
|
|
DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
|
2012-07-09 16:29:55 +00:00
|
|
|
|
2012-09-13 13:27:07 +00:00
|
|
|
DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
|
|
|
DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST("controller-order",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
|
2012-11-05 11:12:04 +00:00
|
|
|
QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
|
|
|
|
QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
|
2016-06-17 14:50:36 +00:00
|
|
|
QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE,
|
|
|
|
QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB);
|
2012-09-13 13:27:07 +00:00
|
|
|
DO_TEST("eoi-disabled", NONE);
|
|
|
|
DO_TEST("eoi-enabled", NONE);
|
2013-09-23 16:32:11 +00:00
|
|
|
DO_TEST("pv-spinlock-disabled", NONE);
|
|
|
|
DO_TEST("pv-spinlock-enabled", NONE);
|
2012-10-08 16:51:57 +00:00
|
|
|
DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
|
2012-09-13 13:27:07 +00:00
|
|
|
|
2012-10-17 12:55:18 +00:00
|
|
|
DO_TEST("hyperv", NONE);
|
2013-07-04 10:12:57 +00:00
|
|
|
DO_TEST("hyperv-off", NONE);
|
2015-11-24 12:26:33 +00:00
|
|
|
DO_TEST("hyperv-panic", NONE);
|
2012-10-17 12:55:18 +00:00
|
|
|
|
2014-08-21 17:04:45 +00:00
|
|
|
DO_TEST("kvm-features", NONE);
|
|
|
|
DO_TEST("kvm-features-off", NONE);
|
|
|
|
|
2015-01-05 15:52:18 +00:00
|
|
|
DO_TEST("pmu-feature", NONE);
|
|
|
|
DO_TEST("pmu-feature-off", NONE);
|
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
|
2015-06-24 16:09:57 +00:00
|
|
|
DO_TEST("hugepages-numa", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT,
|
2016-01-04 22:57:06 +00:00
|
|
|
QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-06-24 16:09:57 +00:00
|
|
|
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2015-06-24 16:09:57 +00:00
|
|
|
QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
|
qemuBuildMemoryBackendStr: Honour passed @pagesize
So far the argument has not much meaning and was practically ignored.
This is not good since when doing memory hotplug, the size of desired
hugepage backing is passed in that argument. Taking closer look at the
tests I'm fixing reveals the bug. For instance, while the following is
in the test:
<memory model='dimm'>
<source>
<nodemask>1-3</nodemask>
<pagesize unit='KiB'>4096</pagesize>
</source>
<target>
<size unit='KiB'>524287</size>
<node>0</node>
</target>
<address type='dimm' slot='0' base='0x100000000'/>
</memory>
the generated commandline corresponding to this XML was:
-object memory-backend-ram,id=memdimm0,size=536870912,\
host-nodes=1-3,policy=bind
Have you noticed? Yes, memory-backend-ram! Nothing can be further away
from the right answer. The hugepage backing is requested in the XML
and we happily ignore it. This is just not right. It's
memory-backend-file which should have been used:
-object memory-backend-file,id=memdimm0,prealloc=yes,\
mem-path=/dev/hugepages4M/libvirt/qemu,size=536870912,\
host-nodes=1-3,policy=bind
The problem is, that @pagesize passed to qemuBuildMemoryBackendStr
(where this part of commandline is built) was ignored. The hugepage to
back memory was searched only and only by NUMA nodes pinning. This
works only for regular guest NUMA nodes.
Then, I'm changing the hugepages size in the test XMLs too. This is
simply because in the test suite we create dummy mount points just for
2M and 1G hugepages. And in the test 4M was requested. I'm sticking to
2M, but 1G should just work too.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2015-06-25 15:27:29 +00:00
|
|
|
QEMU_CAPS_DEVICE_PC_DIMM,
|
2015-06-24 16:09:57 +00:00
|
|
|
QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-11-12 09:26:43 +00:00
|
|
|
DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-07-23 15:37:21 +00:00
|
|
|
DO_TEST("hugepages-pages2", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
|
|
|
DO_TEST("hugepages-pages3", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-11-12 09:26:43 +00:00
|
|
|
DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-09-25 11:28:33 +00:00
|
|
|
DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
|
2014-09-15 09:59:09 +00:00
|
|
|
DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-09-02 14:53:10 +00:00
|
|
|
DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
|
2014-12-12 09:37:35 +00:00
|
|
|
DO_TEST("hugepages-pages6", NONE);
|
2013-05-14 05:25:50 +00:00
|
|
|
DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-cdrom", NONE);
|
2015-03-26 22:48:07 +00:00
|
|
|
DO_TEST("disk-iscsi", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("disk-cdrom-network-http", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("disk-cdrom-network-https", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("disk-cdrom-network-ftp", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("disk-cdrom-network-ftps", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("disk-cdrom-network-tftp", QEMU_CAPS_KVM);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-cdrom-empty", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-cdrom-tray",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_TX_ALG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
|
|
|
|
DO_TEST("disk-floppy", NONE);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST_FAILURE("disk-floppy-pseries", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-floppy-tray-no-device-cap", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("disk-floppy-tray", NONE);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-virtio-s390",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_S390);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-many", NONE);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
|
|
|
|
DO_TEST("disk-virtio-ccw",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-virtio-ccw-many",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-order",
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-boot-disk",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-boot-cdrom",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("floppy-drive-fat",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-readonly-disk",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-readonly-no-device",
|
2016-05-20 12:25:22 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-fmt-qcow",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_BOOT);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-shared",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_SERIAL);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-error-policy-stop",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_MONITOR_JSON);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-error-policy-enospace",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_MONITOR_JSON);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-error-policy-wreport-rignore",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_MONITOR_JSON);
|
|
|
|
DO_TEST("disk-drive-cache-v2-wt", NONE);
|
|
|
|
DO_TEST("disk-drive-cache-v2-wb", NONE);
|
|
|
|
DO_TEST("disk-drive-cache-v2-none", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-cache-directsync",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-cache-unsafe",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_CACHE_UNSAFE);
|
2014-04-14 22:54:19 +00:00
|
|
|
DO_TEST("disk-drive-copy-on-read",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_COPY_ON_READ);
|
|
|
|
DO_TEST("disk-drive-network-nbd", NONE);
|
|
|
|
DO_TEST("disk-drive-network-nbd-export", NONE);
|
|
|
|
DO_TEST("disk-drive-network-nbd-ipv6", NONE);
|
|
|
|
DO_TEST("disk-drive-network-nbd-ipv6-export", NONE);
|
|
|
|
DO_TEST("disk-drive-network-nbd-unix", NONE);
|
|
|
|
DO_TEST("disk-drive-network-iscsi", NONE);
|
|
|
|
DO_TEST("disk-drive-network-iscsi-auth", NONE);
|
2013-03-21 11:53:50 +00:00
|
|
|
DO_TEST("disk-drive-network-iscsi-lun",
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_SCSI_BLOCK);
|
2015-11-06 18:20:20 +00:00
|
|
|
DO_TEST("disk-drive-network-gluster", NONE);
|
|
|
|
DO_TEST("disk-drive-network-rbd", NONE);
|
|
|
|
DO_TEST("disk-drive-network-sheepdog", NONE);
|
|
|
|
DO_TEST("disk-drive-network-rbd-auth", NONE);
|
2016-05-22 13:20:39 +00:00
|
|
|
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
|
qemu: Utilize qemu secret objects for RBD auth/secret
https://bugzilla.redhat.com/show_bug.cgi?id=1182074
If they're available and we need to pass secrets to qemu, then use the
qemu domain secret object in order to pass the secrets for RBD volumes
instead of passing the base64 encoded secret on the command line.
The goal is to make AES secrets the default and have no user interaction
required in order to allow using the AES mechanism. If the mechanism
is not available, then fall back to the current plain mechanism using
a base64 encoded secret.
New APIs:
qemu_domain.c:
qemuDomainGetSecretAESAlias:
Generate/return the secret object alias for an AES Secret Info type.
This will be called from qemuDomainSecretAESSetup.
qemuDomainSecretAESSetup: (private)
This API handles the details of the generation of the AES secret
and saves the pieces that need to be passed to qemu in order for
the secret to be decrypted. The encrypted secret based upon the
domain master key, an initialization vector (16 byte random value),
and the stored secret. Finally, the requirement from qemu is the IV
and encrypted secret are to be base64 encoded.
qemu_command.c:
qemuBuildSecretInfoProps: (private)
Generate/return a JSON properties object for the AES secret to
be used by both the command building and eventually the hotplug
code in order to add the secret object. Code was designed so that
in the future perhaps hotplug could use it if it made sense.
qemuBuildObjectSecretCommandLine (private)
Generate and add to the command line the -object secret for the
secret. This will be required for the subsequent RBD reference
to the object.
qemuBuildDiskSecinfoCommandLine (private)
Handle adding the AES secret object.
Adjustments:
qemu_domain.c:
The qemuDomainSecretSetup was altered to call either the AES or Plain
Setup functions based upon whether AES secrets are possible (we have
the encryption API) or not, we have secrets, and of course if the
protocol source is RBD.
qemu_command.c:
Adjust the qemuBuildRBDSecinfoURI API's in order to generate the
specific command options for an AES secret, such as:
-object secret,id=$alias,keyid=$masterKey,data=$base64encodedencrypted,
format=base64
-drive file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
mon_host=mon1.example.org\:6321,password-secret=$alias,...
where the 'id=' value is the secret object alias generated by
concatenating the disk alias and "-aesKey0". The 'keyid= $masterKey'
is the master key shared with qemu, and the -drive syntax will
reference that alias as the 'password-secret'. For the -drive
syntax, the 'id=myname' is kept to define the username, while the
'key=$base64 encoded secret' is removed.
While according to the syntax described for qemu commit '60390a21'
or as seen in the email archive:
https://lists.gnu.org/archive/html/qemu-devel/2016-01/msg04083.html
it is possible to pass a plaintext password via a file, the qemu
commit 'ac1d8878' describes the more feature rich 'keyid=' option
based upon the shared masterKey.
Add tests for checking/comparing output.
NB: For hotplug, since the hotplug code doesn't add command line
arguments, passing the encoded secret directly to the monitor
will suffice.
2016-04-11 15:26:14 +00:00
|
|
|
DO_TEST("disk-drive-network-rbd-auth-AES",
|
|
|
|
QEMU_CAPS_OBJECT_SECRET);
|
2016-05-22 13:20:39 +00:00
|
|
|
# endif
|
2015-11-06 18:20:20 +00:00
|
|
|
DO_TEST("disk-drive-network-rbd-ipv6", NONE);
|
|
|
|
DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-drive-no-boot",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX);
|
2015-06-26 17:48:06 +00:00
|
|
|
DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
|
|
|
DO_TEST_FAILURE("disk-usb-nosupport", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-usb-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_USB_STORAGE,
|
2013-08-23 10:38:10 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2013-08-23 10:38:11 +00:00
|
|
|
DO_TEST("disk-usb-device-removable",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_USB_STORAGE,
|
2013-08-23 10:38:11 +00:00
|
|
|
QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
|
2015-04-30 12:16:40 +00:00
|
|
|
DO_TEST_FAILURE("disk-usb-pci",
|
|
|
|
QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2012-08-08 07:06:33 +00:00
|
|
|
QEMU_CAPS_SCSI_LSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-device-auto",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2012-08-08 07:06:33 +00:00
|
|
|
QEMU_CAPS_SCSI_LSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-disk-split",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
|
2012-09-11 08:57:04 +00:00
|
|
|
DO_TEST("disk-scsi-disk-wwn",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
|
2012-12-06 10:23:02 +00:00
|
|
|
QEMU_CAPS_SCSI_DISK_WWN);
|
|
|
|
DO_TEST("disk-scsi-disk-vpd",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
|
2012-12-06 10:23:02 +00:00
|
|
|
QEMU_CAPS_SCSI_DISK_WWN);
|
|
|
|
DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
|
2012-09-11 08:57:04 +00:00
|
|
|
QEMU_CAPS_SCSI_DISK_WWN);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-vscsi",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-virtio-scsi",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
2013-04-05 16:21:23 +00:00
|
|
|
DO_TEST("disk-virtio-scsi-num_queues",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-04-05 16:21:23 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
2014-05-22 18:22:52 +00:00
|
|
|
DO_TEST("disk-virtio-scsi-cmd_per_lun",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-05-22 18:22:52 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
|
|
|
DO_TEST("disk-virtio-scsi-max_sectors",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-05-22 18:22:52 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI);
|
2015-07-26 18:41:34 +00:00
|
|
|
DO_TEST("disk-virtio-scsi-ioeventfd",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2015-07-26 18:41:34 +00:00
|
|
|
QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
|
2013-03-21 14:11:39 +00:00
|
|
|
DO_TEST("disk-scsi-megasas",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-03-21 14:11:39 +00:00
|
|
|
QEMU_CAPS_SCSI_MEGASAS);
|
2016-02-11 10:48:20 +00:00
|
|
|
DO_TEST("disk-scsi-mptsas1068",
|
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_SCSI_MPTSAS1068,
|
|
|
|
QEMU_CAPS_SCSI_DISK_WWN);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-sata-device",
|
2011-09-28 03:46:08 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-aio",
|
2015-11-06 18:20:20 +00:00
|
|
|
QEMU_CAPS_DRIVE_AIO);
|
2013-11-21 08:12:07 +00:00
|
|
|
DO_TEST("disk-source-pool",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2013-11-21 10:04:50 +00:00
|
|
|
DO_TEST("disk-source-pool-mode",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-ioeventfd",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_IOEVENTFD,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_TX_ALG,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-copy_on_read",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_COPY_ON_READ,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_TX_ALG,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2013-05-14 12:44:54 +00:00
|
|
|
DO_TEST("disk-drive-discard",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DRIVE_DISCARD);
|
2015-12-14 08:35:20 +00:00
|
|
|
DO_TEST("disk-drive-detect-zeroes",
|
|
|
|
QEMU_CAPS_DRIVE_DISCARD,
|
|
|
|
QEMU_CAPS_DRIVE_DETECT_ZEROES);
|
2015-11-06 18:20:20 +00:00
|
|
|
DO_TEST("disk-snapshot", NONE);
|
2016-05-27 10:34:14 +00:00
|
|
|
DO_TEST_PARSE_ERROR("disk-same-targets",
|
|
|
|
QEMU_CAPS_SCSI_LSI,
|
|
|
|
QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("event_idx",
|
2011-08-13 06:32:45 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
|
|
|
|
QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("virtio-lun",
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BLK_SCSI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-scsi-lun-passthrough",
|
2016-05-16 08:29:57 +00:00
|
|
|
QEMU_CAPS_SCSI_BLOCK,
|
2013-03-14 18:32:24 +00:00
|
|
|
QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
|
2015-02-23 11:34:23 +00:00
|
|
|
DO_TEST("disk-serial",
|
|
|
|
QEMU_CAPS_KVM,
|
|
|
|
QEMU_CAPS_DRIVE_SERIAL);
|
2011-06-20 08:26:47 +00:00
|
|
|
|
2012-10-19 19:40:52 +00:00
|
|
|
DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
|
|
|
|
DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
|
2013-04-30 14:26:43 +00:00
|
|
|
DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET);
|
2013-05-21 14:31:49 +00:00
|
|
|
DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY);
|
2016-04-11 11:05:42 +00:00
|
|
|
DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC);
|
2016-05-19 08:53:55 +00:00
|
|
|
DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC);
|
|
|
|
driver.config->vncAutoUnixSocket = true;
|
|
|
|
DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC);
|
|
|
|
driver.config->vncAutoUnixSocket = false;
|
2016-06-08 13:18:25 +00:00
|
|
|
DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
|
|
|
|
DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC);
|
2016-06-08 13:15:54 +00:00
|
|
|
DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC);
|
2009-03-16 13:54:26 +00:00
|
|
|
|
2013-01-10 21:03:14 +00:00
|
|
|
driver.config->vncSASL = 1;
|
|
|
|
VIR_FREE(driver.config->vncSASLdir);
|
2013-05-03 12:52:21 +00:00
|
|
|
ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
|
2015-11-09 15:39:54 +00:00
|
|
|
DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC);
|
2013-01-10 21:03:14 +00:00
|
|
|
driver.config->vncTLS = 1;
|
|
|
|
driver.config->vncTLSx509verify = 1;
|
2012-10-19 19:40:52 +00:00
|
|
|
DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
|
2013-01-10 21:03:14 +00:00
|
|
|
driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
|
2013-02-04 14:54:33 +00:00
|
|
|
VIR_FREE(driver.config->vncSASLdir);
|
|
|
|
VIR_FREE(driver.config->vncTLSx509certdir);
|
2009-03-16 13:54:26 +00:00
|
|
|
|
2015-11-09 16:20:08 +00:00
|
|
|
DO_TEST("graphics-sdl", QEMU_CAPS_SDL);
|
|
|
|
DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL);
|
2015-11-09 15:39:54 +00:00
|
|
|
DO_TEST("nographics", NONE);
|
2016-07-05 12:35:28 +00:00
|
|
|
DO_TEST("nographics-display",
|
|
|
|
QEMU_CAPS_DISPLAY);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("nographics-vga",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2014-01-16 16:11:15 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL,
|
|
|
|
QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
|
2016-03-16 11:11:58 +00:00
|
|
|
DO_TEST("graphics-spice-no-args",
|
|
|
|
QEMU_CAPS_SPICE);
|
2012-02-24 14:13:06 +00:00
|
|
|
driver.config->spiceSASL = 1;
|
|
|
|
ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
|
|
|
|
DO_TEST("graphics-spice-sasl",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2012-02-24 14:13:06 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL);
|
|
|
|
VIR_FREE(driver.config->spiceSASLdir);
|
|
|
|
driver.config->spiceSASL = 0;
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice-agentmouse",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2012-03-09 09:10:53 +00:00
|
|
|
QEMU_CAPS_CHARDEV_SPICEVMC,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice-compression",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2012-12-14 07:08:01 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice-timeout",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_KVM,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2011-05-26 11:52:08 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice-qxl-vga",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2012-12-14 07:08:01 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_DEVICE_QXL);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("graphics-spice-usb-redir",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2012-05-08 13:00:28 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
|
|
|
|
QEMU_CAPS_CHARDEV_SPICEVMC);
|
2014-01-16 16:11:15 +00:00
|
|
|
DO_TEST("graphics-spice-agent-file-xfer",
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_VGA_QXL,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_SPICE,
|
2014-01-16 16:11:15 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_DEVICE_QXL,
|
|
|
|
QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
|
2016-06-08 13:18:59 +00:00
|
|
|
DO_TEST("graphics-spice-socket",
|
|
|
|
QEMU_CAPS_SPICE,
|
|
|
|
QEMU_CAPS_SPICE_UNIX);
|
|
|
|
DO_TEST("graphics-spice-auto-socket",
|
|
|
|
QEMU_CAPS_SPICE,
|
|
|
|
QEMU_CAPS_SPICE_UNIX);
|
2016-05-18 12:11:20 +00:00
|
|
|
driver.config->spiceAutoUnixSocket = true;
|
|
|
|
DO_TEST("graphics-spice-auto-socket-cfg",
|
|
|
|
QEMU_CAPS_SPICE,
|
|
|
|
QEMU_CAPS_SPICE_UNIX);
|
|
|
|
driver.config->spiceAutoUnixSocket = false;
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("input-usbmouse", NONE);
|
|
|
|
DO_TEST("input-usbtablet", NONE);
|
|
|
|
DO_TEST("misc-acpi", NONE);
|
2016-01-04 22:57:06 +00:00
|
|
|
DO_TEST("misc-disable-s3", QEMU_CAPS_PIIX_DISABLE_S3);
|
|
|
|
DO_TEST("misc-disable-suspends", QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
|
|
|
|
DO_TEST("misc-enable-s4", QEMU_CAPS_PIIX_DISABLE_S4);
|
2012-08-02 10:18:16 +00:00
|
|
|
DO_TEST_FAILURE("misc-enable-s4", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("misc-no-reboot", NONE);
|
2015-11-06 14:29:52 +00:00
|
|
|
DO_TEST("misc-uuid", NONE);
|
2014-09-16 08:06:50 +00:00
|
|
|
DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
|
2015-02-26 11:45:57 +00:00
|
|
|
DO_TEST("net-vhostuser-multiq",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
|
|
|
|
DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-user", NONE);
|
|
|
|
DO_TEST("net-virtio", NONE);
|
|
|
|
DO_TEST("net-virtio-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
|
2014-09-11 10:58:04 +00:00
|
|
|
DO_TEST("net-virtio-disable-offloads",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-virtio-netdev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-virtio-s390",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_S390);
|
2013-03-05 15:44:23 +00:00
|
|
|
DO_TEST("net-virtio-ccw",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2016-08-19 07:50:31 +00:00
|
|
|
DO_TEST("net-virtio-rxqueuesize",
|
|
|
|
QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE);
|
2016-08-18 16:19:13 +00:00
|
|
|
DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-eth", NONE);
|
|
|
|
DO_TEST("net-eth-ifname", NONE);
|
2015-11-09 16:20:08 +00:00
|
|
|
DO_TEST("net-eth-names", NONE);
|
2016-06-21 16:00:45 +00:00
|
|
|
DO_TEST("net-eth-hostip", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-client", NONE);
|
|
|
|
DO_TEST("net-server", NONE);
|
|
|
|
DO_TEST("net-mcast", NONE);
|
2015-08-29 20:19:10 +00:00
|
|
|
DO_TEST("net-udp", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("net-hostdev",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2014-04-30 11:32:19 +00:00
|
|
|
DO_TEST("net-hostdev-multidomain",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-04-30 11:32:19 +00:00
|
|
|
QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
|
|
|
|
DO_TEST_FAILURE("net-hostdev-multidomain",
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2013-04-25 11:58:37 +00:00
|
|
|
DO_TEST("net-hostdev-vfio",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-04-25 11:58:37 +00:00
|
|
|
QEMU_CAPS_DEVICE_VFIO_PCI);
|
2014-04-30 11:32:19 +00:00
|
|
|
DO_TEST("net-hostdev-vfio-multidomain",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-04-30 11:32:19 +00:00
|
|
|
QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
|
|
|
|
DO_TEST_FAILURE("net-hostdev-vfio-multidomain",
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-vc", NONE);
|
|
|
|
DO_TEST("serial-pty", NONE);
|
|
|
|
DO_TEST("serial-dev", NONE);
|
|
|
|
DO_TEST("serial-file", NONE);
|
2016-02-23 11:56:34 +00:00
|
|
|
DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
|
|
|
|
QEMU_CAPS_CHARDEV_LOGFILE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-unix", NONE);
|
|
|
|
DO_TEST("serial-tcp", NONE);
|
|
|
|
DO_TEST("serial-udp", NONE);
|
|
|
|
DO_TEST("serial-tcp-telnet", NONE);
|
|
|
|
DO_TEST("serial-many", NONE);
|
2014-01-30 11:19:12 +00:00
|
|
|
DO_TEST("serial-spiceport",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2014-01-30 11:19:12 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
|
2015-11-06 14:29:41 +00:00
|
|
|
DO_TEST("serial-spiceport-nospice", NONE);
|
2014-01-30 11:19:12 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("parallel-tcp", NONE);
|
|
|
|
DO_TEST("console-compat", NONE);
|
|
|
|
DO_TEST("console-compat-auto", NONE);
|
|
|
|
|
|
|
|
DO_TEST("serial-vc-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-pty-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-dev-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-06-16 13:07:59 +00:00
|
|
|
DO_TEST("serial-dev-chardev-iobase",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-file-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-12-24 14:27:55 +00:00
|
|
|
QEMU_CAPS_CHARDEV_FILE_APPEND);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-unix-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-tcp-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-udp-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-tcp-telnet-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2016-06-09 22:30:55 +00:00
|
|
|
driver.config->chardevTLS = 1;
|
|
|
|
DO_TEST("serial-tcp-tlsx509-chardev",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_OBJECT_TLS_CREDS_X509);
|
|
|
|
driver.config->chardevTLS = 0;
|
|
|
|
VIR_FREE(driver.config->chardevTLSx509certdir);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("serial-many-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("parallel-tcp-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("parallel-parport-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("console-compat-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-05-06 15:50:03 +00:00
|
|
|
DO_TEST("pci-serial-dev-chardev",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-05-06 15:50:03 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_SERIAL);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("channel-guestfwd",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("channel-virtio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2014-10-29 15:03:53 +00:00
|
|
|
DO_TEST("channel-virtio-state",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("channel-virtio-auto",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2014-05-29 13:16:47 +00:00
|
|
|
DO_TEST("channel-virtio-autoassign",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-03-24 14:23:46 +00:00
|
|
|
DO_TEST("channel-virtio-autoadd",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("console-virtio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("console-virtio-many",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("console-virtio-s390",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
|
2013-03-05 15:44:23 +00:00
|
|
|
DO_TEST("console-virtio-ccw",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
|
2013-03-05 15:44:23 +00:00
|
|
|
QEMU_CAPS_VIRTIO_S390);
|
2013-01-07 17:17:15 +00:00
|
|
|
DO_TEST("console-sclp",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("channel-spicevmc",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("channel-spicevmc-old",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
|
2015-06-30 08:21:21 +00:00
|
|
|
DO_TEST("channel-virtio-default",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-06-30 08:21:21 +00:00
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
|
2015-06-30 11:34:20 +00:00
|
|
|
DO_TEST("channel-virtio-unix",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smartcard-host",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smartcard-host-certificates",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smartcard-passthrough-tcp",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smartcard-passthrough-spicevmc",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smartcard-controller",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2011-02-08 14:22:39 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
|
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-controller",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2011-09-02 13:21:23 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-piix3-controller",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
|
2011-09-02 14:49:42 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-ich9-ehci-addr",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2011-09-02 13:26:55 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("input-usbmouse-addr",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-ich9-companion",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2011-09-02 14:03:51 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
|
2013-04-23 14:23:51 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2013-04-23 14:23:51 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
|
2016-07-18 15:16:33 +00:00
|
|
|
DO_TEST("usb-ich9-autoassign",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_USB_HUB);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-hub",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
2011-09-02 14:20:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2016-06-17 07:49:54 +00:00
|
|
|
DO_TEST("usb-hub-autoadd",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2015-08-12 14:52:17 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-hub-conflict",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2016-08-15 15:39:35 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2016-07-01 12:20:44 +00:00
|
|
|
DO_TEST("usb-port-missing",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-ports",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
2011-09-02 14:31:26 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2016-07-18 15:16:33 +00:00
|
|
|
DO_TEST("usb-port-autoassign",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb-redir",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2011-09-02 15:09:14 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
|
2011-09-02 15:19:11 +00:00
|
|
|
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
|
2012-11-20 18:47:09 +00:00
|
|
|
DO_TEST("usb-redir-boot",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2012-11-20 18:47:09 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_BOOTINDEX,
|
|
|
|
QEMU_CAPS_USB_REDIR_BOOTINDEX);
|
2012-09-13 07:25:47 +00:00
|
|
|
DO_TEST("usb-redir-filter",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2012-09-13 07:25:47 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
|
|
|
|
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
|
|
|
|
QEMU_CAPS_USB_REDIR_FILTER);
|
2015-04-10 13:49:42 +00:00
|
|
|
DO_TEST("usb-redir-filter-version",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-04-10 13:49:42 +00:00
|
|
|
QEMU_CAPS_USB_REDIR,
|
|
|
|
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
|
|
|
|
QEMU_CAPS_USB_REDIR_FILTER);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("usb1-usb2",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2011-09-05 07:07:01 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
|
2012-07-03 13:43:13 +00:00
|
|
|
DO_TEST("usb-none",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-03 13:43:13 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-none-other",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-03 13:43:13 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-none-hub",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2012-07-03 13:43:13 +00:00
|
|
|
QEMU_CAPS_USB_HUB);
|
|
|
|
DO_TEST_PARSE_ERROR("usb-none-usbtablet",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2016-01-08 15:20:47 +00:00
|
|
|
DO_TEST("usb-controller-default-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-08 15:20:47 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
|
|
|
|
QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_NEC_USB_XHCI);
|
|
|
|
DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-08 15:20:47 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
|
|
|
|
QEMU_CAPS_NEC_USB_XHCI);
|
|
|
|
DO_TEST("usb-controller-explicit-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-08 15:20:47 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
|
|
|
|
QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_NEC_USB_XHCI);
|
|
|
|
DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-08 15:20:47 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
|
|
|
|
QEMU_CAPS_PIIX3_USB_UHCI);
|
2016-04-23 23:52:56 +00:00
|
|
|
DO_TEST("usb-controller-xhci",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS);
|
2016-07-18 15:16:33 +00:00
|
|
|
DO_TEST("usb-xhci-autoassign",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS,
|
|
|
|
QEMU_CAPS_USB_HUB);
|
2011-09-02 13:21:23 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
|
2013-04-26 12:33:26 +00:00
|
|
|
DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
|
2013-04-26 18:29:37 +00:00
|
|
|
DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("watchdog", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("watchdog-dump", NONE);
|
2015-06-24 09:28:42 +00:00
|
|
|
DO_TEST("watchdog-injectnmi", NONE);
|
2015-06-24 09:28:44 +00:00
|
|
|
DO_TEST("watchdog-diag288",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
|
|
|
|
DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
|
2016-01-08 10:45:07 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
|
2016-01-08 10:45:07 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
|
2016-01-08 10:45:07 +00:00
|
|
|
QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
|
|
|
QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
|
2016-01-08 10:45:07 +00:00
|
|
|
QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("balloon-device-auto",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
|
|
|
DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("sound", NONE);
|
|
|
|
DO_TEST("sound-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-09-24 14:17:38 +00:00
|
|
|
QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
|
2014-07-24 15:32:31 +00:00
|
|
|
QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
|
|
|
|
QEMU_CAPS_OBJECT_USB_AUDIO);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("fs9p",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
|
2012-01-17 12:44:18 +00:00
|
|
|
QEMU_CAPS_FSDEV_WRITEOUT);
|
2015-07-07 15:30:43 +00:00
|
|
|
DO_TEST("fs9p-ccw",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_FSDEV_WRITEOUT,
|
2015-07-07 15:30:43 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("hostdev-usb-address", NONE);
|
|
|
|
DO_TEST("hostdev-usb-address-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
|
|
|
DO_TEST("hostdev-usb-address-device-boot",
|
2012-11-20 18:47:09 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
|
|
|
|
QEMU_CAPS_USB_HOST_BOOTINDEX);
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST("hostdev-pci-address", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("hostdev-pci-address-device",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2013-04-25 11:58:37 +00:00
|
|
|
DO_TEST("hostdev-vfio",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2013-04-25 11:58:37 +00:00
|
|
|
QEMU_CAPS_DEVICE_VFIO_PCI);
|
2014-04-30 11:32:19 +00:00
|
|
|
DO_TEST("hostdev-vfio-multidomain",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-04-30 11:32:19 +00:00
|
|
|
QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
|
|
|
|
DO_TEST_FAILURE("hostdev-vfio-multidomain",
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("pci-rom",
|
2016-05-20 12:41:49 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2016-05-10 09:35:43 +00:00
|
|
|
DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, 0, GIC_NONE, NONE);
|
|
|
|
DO_TEST_FULL("restore-v2-fd", "stdio", 7, 0, 0, GIC_NONE, NONE);
|
|
|
|
DO_TEST_FULL("restore-v2-fd", "fd:7", 7, 0, 0, GIC_NONE, NONE);
|
|
|
|
DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0, 0, GIC_NONE, NONE);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2016-05-10 09:35:43 +00:00
|
|
|
DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
|
2015-11-06 16:50:26 +00:00
|
|
|
QEMU_CAPS_NUMA,
|
2015-09-21 17:10:12 +00:00
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM);
|
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("qemu-ns", NONE);
|
2016-01-08 14:48:06 +00:00
|
|
|
DO_TEST("qemu-ns-no-env", NONE);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2016-06-23 11:29:16 +00:00
|
|
|
DO_TEST("smp", NONE);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2014-08-22 22:15:30 +00:00
|
|
|
DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
|
2015-04-10 13:21:23 +00:00
|
|
|
DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
|
|
|
|
DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
|
qemu: Fix qemu startup check for QEMU_CAPS_OBJECT_IOTHREAD
https://bugzilla.redhat.com/show_bug.cgi?id=1249981
When qemuDomainPinIOThread was added in commit id 'fb562614', a check
for the IOThread capability was not needed since a check for iothreadpids
covered the condition where the support for IOThreads was not present.
The iothreadpids array was only created if qemuProcessDetectIOThreadPIDs
was able to query the monitor for IOThreads. It would only do that if
the QEMU_CAPS_OBJECT_IOTHREAD capability was set.
However, when iothreadids were added in commit id '8d4614a5' and the
check for iothreadpids was replaced by a search through the iothreadids[]
array for the matching iothread_id that left open the possibility that
an iothreadids[] array was defined, but the entries essentially pointed
to elements with only the 'iothread_id' defined leaving the 'thread_id'
value of 0 and eventually the cpumap entry of NULL.
This was because, the original IOThreads commit id '72edaae7' only
checked if IOThreads were defined and if the emulator had the IOThreads
capability, then IOThread objects were added at startup. The "capability
failure" check was only done when a disk was assigned to an IOThread in
qemuCheckIOThreads. This was because the initial implementation had no way
to dynamically add IOThreads, but it was possible to dynamically add a
disk to the domain. So the decision was if the domain supported it, then
add the IOThread objects. Then if a disk with an IOThread defined was
added, it could check the capability and fail to add if not there. This
just meant the 'iothreads' value was essentially ignored.
Eventually commit id 'a27ed6e7' allowed for the dynamic addition and
deletion of IOThread objects. So it was no longer necessary to generate
IOThread objects to dynamically attach a disk to. However, the startup
and disk check code was not modified to reflect this.
This patch will move the capability failure check to when IOThread
objects are being added to the command line. Thus a domain that has
IOThreads defined will not be started if the emulator doesn't support
the capability. This means when qemuCheckIOThreads is called to add
a disk, it's no longer necessary to check the capability. Instead the
code can use the IOThreadFind call to indicate that the IOThread
doesn't exist.
Finally because it could be possible to have a domain running with the
iothreadids[] defined prior to this change if libvirtd is restarted each
having mostly empty elements, qemuProcessDetectIOThreadPIDs will check
if there are niothreadids when the QEMU_CAPS_OBJECT_IOTHREAD capability
check fails and remove the elements and array if it exists.
With these changes in place, it turns out the cputune-numatune test
was failing because the right bit wasn't set in the test. So used the
opportunity to fix that and create a test that would expect to fail
with some sort of iothreads defined and used, but not having the
correct capability.
2015-10-15 16:30:40 +00:00
|
|
|
DO_TEST_FAILURE("iothreads-nocap", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
|
|
|
|
DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2016-04-21 16:07:00 +00:00
|
|
|
DO_TEST("iothreads-virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI,
|
|
|
|
QEMU_CAPS_OBJECT_IOTHREAD,
|
|
|
|
QEMU_CAPS_VIRTIO_SCSI_IOTHREAD);
|
|
|
|
DO_TEST("iothreads-virtio-scsi-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
|
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD,
|
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2014-08-22 22:15:30 +00:00
|
|
|
|
2016-06-23 11:29:16 +00:00
|
|
|
DO_TEST("cpu-topology1", NONE);
|
|
|
|
DO_TEST("cpu-topology2", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("cpu-topology3", NONE);
|
2014-09-23 17:07:09 +00:00
|
|
|
DO_TEST("cpu-minimum1", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-minimum2", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-exact1", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-exact2", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-exact2-nofallback", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-fallback", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-strict1", QEMU_CAPS_KVM);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("cpu-numa1", NONE);
|
2016-06-23 11:29:16 +00:00
|
|
|
DO_TEST("cpu-numa2", NONE);
|
|
|
|
DO_TEST("cpu-numa-no-memory-element", NONE);
|
2014-05-22 07:13:05 +00:00
|
|
|
DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
|
2014-06-17 12:16:59 +00:00
|
|
|
DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
|
|
|
|
DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
|
2016-06-23 11:29:16 +00:00
|
|
|
DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
|
|
|
|
DO_TEST_FAILURE("cpu-numa-memshared", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("cpu-host-model", NONE);
|
2015-04-30 09:10:16 +00:00
|
|
|
DO_TEST("cpu-host-model-vendor", NONE);
|
2012-08-22 15:28:55 +00:00
|
|
|
skipLegacyCPUs = true;
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("cpu-host-model-fallback", NONE);
|
2011-12-21 12:47:17 +00:00
|
|
|
DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
|
2012-08-22 15:28:55 +00:00
|
|
|
skipLegacyCPUs = false;
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
|
2011-12-21 12:47:17 +00:00
|
|
|
DO_TEST_FAILURE("cpu-host-passthrough", NONE);
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
|
2011-02-08 14:22:39 +00:00
|
|
|
|
2016-08-04 06:25:55 +00:00
|
|
|
qemuTestSetHostCPU(driver.caps, cpuHaswell);
|
2015-03-23 16:19:28 +00:00
|
|
|
DO_TEST("cpu-Haswell", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM);
|
|
|
|
DO_TEST("cpu-Haswell-noTSX", QEMU_CAPS_KVM);
|
2016-08-09 13:03:20 +00:00
|
|
|
DO_TEST("cpu-host-model-cmt", NONE);
|
2016-08-04 06:25:55 +00:00
|
|
|
qemuTestSetHostCPU(driver.caps, NULL);
|
2015-03-23 16:19:28 +00:00
|
|
|
|
2016-06-06 12:57:38 +00:00
|
|
|
DO_TEST("encrypted-disk", NONE);
|
2016-05-30 11:47:46 +00:00
|
|
|
DO_TEST("encrypted-disk-usage", NONE);
|
2016-07-19 17:40:41 +00:00
|
|
|
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
|
2016-06-02 20:28:28 +00:00
|
|
|
DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
|
2016-07-19 17:40:41 +00:00
|
|
|
# else
|
|
|
|
DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
|
|
|
|
# endif
|
2016-06-06 12:57:38 +00:00
|
|
|
|
2015-11-06 14:29:41 +00:00
|
|
|
DO_TEST("memtune", NONE);
|
|
|
|
DO_TEST("memtune-unlimited", NONE);
|
|
|
|
DO_TEST("blkiotune", NONE);
|
|
|
|
DO_TEST("blkiotune-device", NONE);
|
|
|
|
DO_TEST("cputune", NONE);
|
|
|
|
DO_TEST("cputune-zero-shares", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("cputune-iothreadsched-toomuch", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("cputune-vcpusched-overlap", NONE);
|
2016-06-23 11:29:16 +00:00
|
|
|
DO_TEST("cputune-numatune",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_KVM,
|
qemu: Fix qemu startup check for QEMU_CAPS_OBJECT_IOTHREAD
https://bugzilla.redhat.com/show_bug.cgi?id=1249981
When qemuDomainPinIOThread was added in commit id 'fb562614', a check
for the IOThread capability was not needed since a check for iothreadpids
covered the condition where the support for IOThreads was not present.
The iothreadpids array was only created if qemuProcessDetectIOThreadPIDs
was able to query the monitor for IOThreads. It would only do that if
the QEMU_CAPS_OBJECT_IOTHREAD capability was set.
However, when iothreadids were added in commit id '8d4614a5' and the
check for iothreadpids was replaced by a search through the iothreadids[]
array for the matching iothread_id that left open the possibility that
an iothreadids[] array was defined, but the entries essentially pointed
to elements with only the 'iothread_id' defined leaving the 'thread_id'
value of 0 and eventually the cpumap entry of NULL.
This was because, the original IOThreads commit id '72edaae7' only
checked if IOThreads were defined and if the emulator had the IOThreads
capability, then IOThread objects were added at startup. The "capability
failure" check was only done when a disk was assigned to an IOThread in
qemuCheckIOThreads. This was because the initial implementation had no way
to dynamically add IOThreads, but it was possible to dynamically add a
disk to the domain. So the decision was if the domain supported it, then
add the IOThread objects. Then if a disk with an IOThread defined was
added, it could check the capability and fail to add if not there. This
just meant the 'iothreads' value was essentially ignored.
Eventually commit id 'a27ed6e7' allowed for the dynamic addition and
deletion of IOThread objects. So it was no longer necessary to generate
IOThread objects to dynamically attach a disk to. However, the startup
and disk check code was not modified to reflect this.
This patch will move the capability failure check to when IOThread
objects are being added to the command line. Thus a domain that has
IOThreads defined will not be started if the emulator doesn't support
the capability. This means when qemuCheckIOThreads is called to add
a disk, it's no longer necessary to check the capability. Instead the
code can use the IOThreadFind call to indicate that the IOThread
doesn't exist.
Finally because it could be possible to have a domain running with the
iothreadids[] defined prior to this change if libvirtd is restarted each
having mostly empty elements, qemuProcessDetectIOThreadPIDs will check
if there are niothreadids when the QEMU_CAPS_OBJECT_IOTHREAD capability
check fails and remove the elements and array if it exists.
With these changes in place, it turns out the cputune-numatune test
was failing because the right bit wasn't set in the test. So used the
opportunity to fix that and create a test that would expect to fail
with some sort of iothreads defined and used, but not having the
correct capability.
2015-10-15 16:30:40 +00:00
|
|
|
QEMU_CAPS_OBJECT_IOTHREAD,
|
qemuBuildMemoryBackendStr: Report backend requirement more appropriately
So, when building the '-numa' command line, the
qemuBuildMemoryBackendStr() function does quite a lot of checks to
chose the best backend, or to check if one is in fact needed. However,
it returned that backend is needed even for this little fella:
<numatune>
<memory mode="strict" nodeset="0,2"/>
</numatune>
This can be guaranteed via CGroups entirely, there's no need to use
memory-backend-ram to let qemu know where to get memory from. Well, as
long as there's no <memnode/> element, which explicitly requires the
backend. Long story short, we wouldn't have to care, as qemu works
either way. However, the problem is migration (as always). Previously,
libvirt would have started qemu with:
-numa node,memory=X
in this case and restricted memory placement in CGroups. Today, libvirt
creates more complicated command line:
-object memory-backend-ram,id=ram-node0,size=X
-numa node,memdev=ram-node0
Again, one wouldn't find anything wrong with these two approaches.
Both work just fine. Unless you try to migrated from the older libvirt
into the newer one. These two approaches are, unfortunately, not
compatible. My suggestion is, in order to allow users to migrate, lets
use the older approach for as long as the newer one is not needed.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2015-02-12 16:43:27 +00:00
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-07-02 09:15:45 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("numatune-memory", NONE);
|
2014-08-11 14:06:23 +00:00
|
|
|
DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
|
2014-11-12 09:26:43 +00:00
|
|
|
DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM);
|
2014-07-02 09:15:45 +00:00
|
|
|
DO_TEST_FAILURE("numatune-memnode", NONE);
|
|
|
|
|
2014-11-12 09:26:43 +00:00
|
|
|
DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM);
|
2014-07-02 09:15:45 +00:00
|
|
|
DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);
|
|
|
|
|
2013-09-11 08:49:39 +00:00
|
|
|
DO_TEST("numatune-auto-nodeset-invalid", NONE);
|
qemuBuildMemoryBackendStr: Report backend requirement more appropriately
So, when building the '-numa' command line, the
qemuBuildMemoryBackendStr() function does quite a lot of checks to
chose the best backend, or to check if one is in fact needed. However,
it returned that backend is needed even for this little fella:
<numatune>
<memory mode="strict" nodeset="0,2"/>
</numatune>
This can be guaranteed via CGroups entirely, there's no need to use
memory-backend-ram to let qemu know where to get memory from. Well, as
long as there's no <memnode/> element, which explicitly requires the
backend. Long story short, we wouldn't have to care, as qemu works
either way. However, the problem is migration (as always). Previously,
libvirt would have started qemu with:
-numa node,memory=X
in this case and restricted memory placement in CGroups. Today, libvirt
creates more complicated command line:
-object memory-backend-ram,id=ram-node0,size=X
-numa node,memdev=ram-node0
Again, one wouldn't find anything wrong with these two approaches.
Both work just fine. Unless you try to migrated from the older libvirt
into the newer one. These two approaches are, unfortunately, not
compatible. My suggestion is, in order to allow users to migrate, lets
use the older approach for as long as the newer one is not needed.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2015-02-12 16:43:27 +00:00
|
|
|
DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-11-04 02:44:40 +00:00
|
|
|
DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
|
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM);
|
2014-07-15 09:39:44 +00:00
|
|
|
DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("numad", NONE);
|
|
|
|
DO_TEST("numad-auto-vcpu-static-numatune", NONE);
|
2014-08-22 14:05:37 +00:00
|
|
|
DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("numad-auto-memory-vcpu-cpuset", NONE);
|
|
|
|
DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement", NONE);
|
|
|
|
DO_TEST("numad-static-memory-auto-vcpu", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("blkdeviotune",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_IOTUNE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("blkdeviotune-max",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DRIVE_IOTUNE,
|
2014-11-12 15:16:52 +00:00
|
|
|
QEMU_CAPS_DRIVE_IOTUNE_MAX);
|
2011-02-08 06:59:38 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("multifunction-pci-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2012-08-08 07:06:33 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
|
2011-06-08 04:34:04 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("monitor-json",
|
2011-06-15 16:49:58 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("no-shutdown",
|
2011-09-21 08:25:29 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_NO_SHUTDOWN);
|
2011-06-15 16:49:58 +00:00
|
|
|
|
2015-11-06 14:29:41 +00:00
|
|
|
DO_TEST("seclabel-dynamic", NONE);
|
|
|
|
DO_TEST("seclabel-dynamic-baselabel", NONE);
|
|
|
|
DO_TEST("seclabel-dynamic-override", NONE);
|
|
|
|
DO_TEST("seclabel-dynamic-labelskip", NONE);
|
|
|
|
DO_TEST("seclabel-dynamic-relabel", NONE);
|
|
|
|
DO_TEST("seclabel-static", NONE);
|
|
|
|
DO_TEST("seclabel-static-relabel", NONE);
|
|
|
|
DO_TEST("seclabel-static-labelskip", NONE);
|
|
|
|
DO_TEST("seclabel-none", NONE);
|
|
|
|
DO_TEST("seclabel-dac-none", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("seclabel-multiple", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("seclabel-device-duplicates", NONE);
|
2011-12-23 00:47:46 +00:00
|
|
|
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("pseries-basic",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("pseries-vio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("pseries-usb-default",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2013-04-19 10:26:36 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("pseries-usb-multi",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV,
|
2013-04-19 10:26:36 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
|
|
|
|
QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("pseries-vio-user-assigned",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2016-05-14 18:52:45 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2013-04-25 08:46:04 +00:00
|
|
|
DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
|
2014-02-17 10:17:56 +00:00
|
|
|
DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
|
|
|
|
QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
|
|
|
DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
|
2014-09-23 17:07:09 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2016-08-04 11:19:39 +00:00
|
|
|
|
|
|
|
qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2016-08-04 11:19:39 +00:00
|
|
|
qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
|
|
|
|
|
2015-05-28 14:39:13 +00:00
|
|
|
DO_TEST("pseries-panic-missing",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-05-28 14:39:12 +00:00
|
|
|
DO_TEST("pseries-panic-no-address",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2015-05-28 14:39:12 +00:00
|
|
|
DO_TEST_FAILURE("pseries-panic-address",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
|
2012-07-09 16:29:55 +00:00
|
|
|
DO_TEST("disk-ide-drive-split",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2012-04-17 09:16:52 +00:00
|
|
|
QEMU_CAPS_IDE_CD);
|
2012-09-11 08:57:04 +00:00
|
|
|
DO_TEST("disk-ide-wwn",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_IDE_CD,
|
2012-09-11 08:57:04 +00:00
|
|
|
QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
|
2012-01-13 03:39:25 +00:00
|
|
|
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST("disk-geometry", NONE);
|
2012-09-04 14:30:55 +00:00
|
|
|
DO_TEST("disk-blockio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2012-09-04 14:30:55 +00:00
|
|
|
QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
|
2012-08-20 13:58:51 +00:00
|
|
|
|
2012-12-14 07:09:17 +00:00
|
|
|
DO_TEST("video-device-pciaddr-default",
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_VNC,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
2013-12-19 14:00:43 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2015-11-09 15:39:54 +00:00
|
|
|
DO_TEST("video-vga-nodevice", NONE);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
|
2014-11-20 18:51:12 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
|
2014-11-20 18:51:12 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
|
2015-11-09 15:39:54 +00:00
|
|
|
DO_TEST("video-qxl-nodevice", QEMU_CAPS_VGA_QXL);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-qxl-device", QEMU_CAPS_DEVICE_QXL_VGA,
|
2014-11-20 18:51:12 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-qxl-device-vgamem",
|
2014-11-20 18:52:00 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_QXL_VGA_VGAMEM);
|
2015-11-09 15:39:54 +00:00
|
|
|
DO_TEST_FAILURE("video-qxl-sec-nodevice", QEMU_CAPS_VGA_QXL);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-qxl-sec-device", QEMU_CAPS_DEVICE_QXL_VGA,
|
2014-11-20 18:51:12 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("video-qxl-sec-device-vgamem",
|
2014-11-20 18:51:12 +00:00
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_QXL,
|
2014-11-20 18:52:00 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_QXL_VGA_VGAMEM,
|
|
|
|
QEMU_CAPS_QXL_VGAMEM);
|
2015-12-11 13:43:10 +00:00
|
|
|
DO_TEST("video-qxl-heads",
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL,
|
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_DEVICE_QXL,
|
|
|
|
QEMU_CAPS_QXL_MAX_OUTPUTS,
|
|
|
|
QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
|
|
|
|
DO_TEST("video-qxl-noheads",
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL,
|
|
|
|
QEMU_CAPS_DEVICE_QXL_VGA,
|
|
|
|
QEMU_CAPS_DEVICE_QXL,
|
|
|
|
QEMU_CAPS_QXL_MAX_OUTPUTS,
|
|
|
|
QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
|
2015-11-25 08:42:32 +00:00
|
|
|
DO_TEST("video-virtio-gpu-device",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU,
|
2015-11-25 08:42:32 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2015-11-25 08:42:33 +00:00
|
|
|
DO_TEST("video-virtio-gpu-virgl",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU,
|
2015-11-25 08:42:33 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2016-02-19 14:30:15 +00:00
|
|
|
DO_TEST("video-virtio-gpu-spice-gl",
|
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU,
|
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
|
|
|
|
QEMU_CAPS_SPICE,
|
|
|
|
QEMU_CAPS_SPICE_GL,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
2015-02-10 07:55:06 +00:00
|
|
|
DO_TEST_PARSE_ERROR("video-invalid", NONE);
|
2012-12-14 07:09:17 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
|
2013-03-07 11:50:14 +00:00
|
|
|
QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
|
2013-02-12 16:56:00 +00:00
|
|
|
QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
|
2013-02-12 16:56:00 +00:00
|
|
|
QEMU_CAPS_OBJECT_RNG_EGD);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
|
2014-07-24 13:15:20 +00:00
|
|
|
QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
|
2013-09-26 06:12:39 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
|
2013-03-14 18:32:26 +00:00
|
|
|
DO_TEST("virtio-rng-ccw",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
|
2013-03-14 18:32:26 +00:00
|
|
|
QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
|
|
|
|
QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2013-02-12 16:56:00 +00:00
|
|
|
|
qemu: remove test for allowing ide controller in s390, rename usb tests
Back in 2013, commit 877bc089 added in some tests that made sure no
error was generated on a domain definition that had an automatically
added usb controller if that domain didn't have a PCI bus to attach
the usb controller to. This was done because, at that time, libvirt
was automatically adding a usb controller to *any* domain definition
that didn't have one. Along with permitting the controller, two
s390-specific tests were added to ensure this behavior was maintained
- one with <controller type='usb' model='none'/> and another (called
"s390-piix-controllers") that had both usb and ide controllers, but
nothing attached to them.
Then in February of this year, commit 09ab9dcc eliminated the annoying
auto-adding of a usb device for s390 and s390x machines, stating:
"Since s390 does not support usb the default creation of a usb
controller for a domain should not occur."
Although, as verified here, the s390 doesn't support usb, and usb
controllers aren't currently added to s390 domain definitions
automatically, there are likely still some domain definitions in the
wild that have a usb controller (which was added *by libvirt*, not by
the user), so we will keep the tests verifying that behavior for
now. But this patch changes the names of the tests to reflect that
they don't actually contain a valid s390 config; this way future
developers won't propagate the incorrect idea that an s390 virtual
machine can have a USB (or IDE) bus.
In the case of the IDE controller, though, libvirt has never
automatically added an IDE controller unless a user added an IDE disk
(which itself would have caused an error), and we specifically *do*
want to begin generating an error when someone tries to add an IDE
controller to a domain that can't support one. For that reason, while
renaming the sz390-piix-controllers patch, this patch removes the
<controller type='ide'...> from it (otherwise the upcoming patch would
break make check)
2015-05-05 17:09:42 +00:00
|
|
|
DO_TEST("s390-allow-bogus-usb-none",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
|
2013-04-26 17:52:43 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
qemu: remove test for allowing ide controller in s390, rename usb tests
Back in 2013, commit 877bc089 added in some tests that made sure no
error was generated on a domain definition that had an automatically
added usb controller if that domain didn't have a PCI bus to attach
the usb controller to. This was done because, at that time, libvirt
was automatically adding a usb controller to *any* domain definition
that didn't have one. Along with permitting the controller, two
s390-specific tests were added to ensure this behavior was maintained
- one with <controller type='usb' model='none'/> and another (called
"s390-piix-controllers") that had both usb and ide controllers, but
nothing attached to them.
Then in February of this year, commit 09ab9dcc eliminated the annoying
auto-adding of a usb device for s390 and s390x machines, stating:
"Since s390 does not support usb the default creation of a usb
controller for a domain should not occur."
Although, as verified here, the s390 doesn't support usb, and usb
controllers aren't currently added to s390 domain definitions
automatically, there are likely still some domain definitions in the
wild that have a usb controller (which was added *by libvirt*, not by
the user), so we will keep the tests verifying that behavior for
now. But this patch changes the names of the tests to reflect that
they don't actually contain a valid s390 config; this way future
developers won't propagate the incorrect idea that an s390 virtual
machine can have a USB (or IDE) bus.
In the case of the IDE controller, though, libvirt has never
automatically added an IDE controller unless a user added an IDE disk
(which itself would have caused an error), and we specifically *do*
want to begin generating an error when someone tries to add an IDE
controller to a domain that can't support one. For that reason, while
renaming the sz390-piix-controllers patch, this patch removes the
<controller type='ide'...> from it (otherwise the upcoming patch would
break make check)
2015-05-05 17:09:42 +00:00
|
|
|
DO_TEST("s390-allow-bogus-usb-controller",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
|
2013-04-26 15:50:36 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
|
|
|
|
2016-04-29 13:23:43 +00:00
|
|
|
DO_TEST("s390-panic-no-address",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("s390-panic-address",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST("s390-panic-missing",
|
|
|
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
|
2013-03-14 04:49:43 +00:00
|
|
|
DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
|
2013-03-14 04:49:43 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("tpm-passthrough",
|
2013-04-12 20:55:46 +00:00
|
|
|
QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
|
2013-05-09 10:33:11 +00:00
|
|
|
QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
|
2013-04-12 20:55:46 +00:00
|
|
|
|
conf: more useful error message when pci function is out of range
If a pci address had a function number out of range, the error message
would be:
Insufficient specification for PCI address
which is logged by virDevicePCIAddressParseXML() after
virDevicePCIAddressIsValid returns a failure.
This patch enhances virDevicePCIAddressIsValid() to optionally report
the error itself (since it is the place that decides which part of the
address is "invalid"), and uses that feature when calling from
virDevicePCIAddressParseXML(), so that the error will be more useful,
e.g.:
Invalid PCI address function=0x8, must be <= 7
Previously, virDevicePCIAddressIsValid didn't check for the
theoretical limits of domain or bus, only for slot or function. While
adding log messages, we also correct that ommission. (The RNG for PCI
addresses already enforces this limit, which by the way means that we
can't add any negative tests for this - as far as I know our
domainschematest has no provisions for passing XML that is supposed to
fail).
Note that virDevicePCIAddressIsValid() can only check against the
absolute maximum attribute values for *any* possible PCI controller,
not for the actual maximums of the specific controller that this
device is attaching to; fortunately there is later more specific
validation for guest-side PCI addresses when building the set of
assigned PCI addresses. For host-side PCI addresses (e.g. for
<hostdev> and for network device pools), we rely on the error that
will be logged when it is found that the device doesn't actually
exist.
This resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1004596
2015-07-22 15:59:00 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-domain-invalid", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("pci-bus-invalid", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("pci-slot-invalid", NONE);
|
|
|
|
DO_TEST_PARSE_ERROR("pci-function-invalid", NONE);
|
conf: more useful error message when pci function is out of range
If a pci address had a function number out of range, the error message
would be:
Insufficient specification for PCI address
which is logged by virDevicePCIAddressParseXML() after
virDevicePCIAddressIsValid returns a failure.
This patch enhances virDevicePCIAddressIsValid() to optionally report
the error itself (since it is the place that decides which part of the
address is "invalid"), and uses that feature when calling from
virDevicePCIAddressParseXML(), so that the error will be more useful,
e.g.:
Invalid PCI address function=0x8, must be <= 7
Previously, virDevicePCIAddressIsValid didn't check for the
theoretical limits of domain or bus, only for slot or function. While
adding log messages, we also correct that ommission. (The RNG for PCI
addresses already enforces this limit, which by the way means that we
can't add any negative tests for this - as far as I know our
domainschematest has no provisions for passing XML that is supposed to
fail).
Note that virDevicePCIAddressIsValid() can only check against the
absolute maximum attribute values for *any* possible PCI controller,
not for the actual maximums of the specific controller that this
device is attaching to; fortunately there is later more specific
validation for guest-side PCI addresses when building the set of
assigned PCI addresses. For host-side PCI addresses (e.g. for
<hostdev> and for network device pools), we rely on the error that
will be logged when it is found that the device doesn't actually
exist.
This resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1004596
2015-07-22 15:59:00 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
|
|
|
DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2016-05-17 18:08:13 +00:00
|
|
|
DO_TEST("pci-autofill-addr", NONE);
|
2015-01-15 13:14:19 +00:00
|
|
|
DO_TEST("pci-many",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
qemu: set/validate slot/connection type when assigning slots for PCI devices
Since PCI bridges, PCIe bridges, PCIe switches, and PCIe root ports
all share the same namespace, they are all defined as controllers of
type='pci' in libvirt (but with a differing model attribute). Each of
these controllers has a certain connection type upstream, allows
certain connection types downstream, and each can either allow a
single downstream connection at slot 0, or connections from slot 1 -
31.
Right now, we only support the pci-root and pci-bridge devices, both
of which only allow PCI devices to connect, and both which have usable
slots 1 - 31. In preparation for adding other types of controllers
that have different capabilities, this patch 1) adds info to the
qemuDomainPCIAddressBus object to indicate the capabilities, 2) sets
those capabilities appropriately for pci-root and pci-bridge devices,
and 3) validates that the controller being connected to is the proper
type when allocating slots or validating that a user-selected slot is
appropriate for a device..
Having this infrastructure in place will make it much easier to add
support for the other PCI controller types.
While it would be possible to do all the necessary checking by just
storing the controller model in the qemyuDomainPCIAddressBus, it
greatly simplifies all the validation code to also keep a "flags",
"minSlot" and "maxSlot" for each - that way we can just check those
attributes rather than requiring a nearly identical switch statement
everywhere we need to validate compatibility.
You may notice many places where the flags are seemingly hard-coded to
QEMU_PCI_CONNECT_HOTPLUGGABLE | QEMU_PCI_CONNECT_TYPE_PCI
This is currently the correct value for all PCI devices, and in the
future will be the default, with small bits of code added to change to
the flags for the few devices which are the exceptions to this rule.
Finally, there are a few places with "FIXME" comments. Note that these
aren't indicating places that are broken according to the currently
supported devices, they are places that will need fixing when support
for new PCI controller models is added.
To assure that there was no regression in the auto-allocation of PCI
addresses or auto-creation of integrated pci-root, ide, and usb
controllers, a new test case (pci-bridge-many-disks) has been added to
both the qemuxml2argv and qemuxml2xml tests. This new test defines a
domain with several dozen virtio disks but no pci-root or
pci-bridges. The .args file of the new test case was created using
libvirt sources from before this patch, and the test still passes
after this patch has been applied.
2013-07-15 00:09:44 +00:00
|
|
|
DO_TEST("pci-bridge-many-disks",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2013-07-10 19:19:32 +00:00
|
|
|
DO_TEST("pcie-root",
|
qemu: fix handling of default/implicit devices for q35
This patch adds in special handling for a few devices that need to be
treated differently for q35 domains:
usb - there is no implicit/default usb controller for the q35
machinetype. This is done because normally the default usb controller
is added to a domain by just adding "-usb" to the qemu commandline,
and it's assumed that this will add a single piix3 usb1 controller at
slot 1 function 2. That's not what happens when the machinetype is
q35, though. Instead, adding -usb to the commandline adds 3 usb
(version 2) controllers to the domain at slot 0x1D.{1,2,7}. Rather
than having
<controller type='usb' index='0'/>
translate into 3 separate devices on the PCI bus, it's cleaner to not
automatically add a default usb device; one can always be added
explicitly if desired. Or we may decide that on q35 machines, 3 usb
controllers will be automatically added when none is given. But for
this initial commit, at least we aren't locking ourselves into
something we later won't want.
video - qemu always initializes the primary video device immediately
after any integrated devices for the machinetype. Unless instructed
otherwise (by using "-device vga..." instead of "-vga" which libvirt
uses in many cases to work around deficiencies and bugs in various
qemu versions) qemu will always pick the first unused slot. In the
case of the "pc" machinetype and its derivatives, this is always slot
2, but on q35 machinetypes, the first free slot is slot 1 (since the
q35's integrated peripheral devices are placed in other slots,
e.g. slot 0x1f). In order to make the PCI address of the video device
predictable, that slot (1 or 2, depending on machinetype) is reserved
even when no video device has been specified.
sata - a q35 machine always has a sata controller implicitly added at
slot 0x1F, function 2. There is no way to avoid this controller, so we
always add it. Note that the xml2xml tests for the pcie-root and q35
cases were changed to use DO_TEST_DIFFERENT() so that we can check for
the sata controller being automatically added. This is especially
important because we can't check for it in the xml2argv output (it has
no effect on that output since it's an implicit device).
ide - q35 has no ide controllers.
isa and smbus controllers - these two are always present in a q35 (at
slot 0x1F functions 0 and 3) but we have no way of modelling them in
our config. We do need to reserve those functions so that the user
doesn't attempt to put anything else there though. (note that the "pc"
machine type also has an ISA controller, which we also ignore).
2013-08-02 08:55:55 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
qemu: add dmi-to-pci-bridge controller
This PCI controller, named "dmi-to-pci-bridge" in the libvirt config,
and implemented with qemu's "i82801b11-bridge" device, connects to a
PCI Express slot (e.g. one of the slots provided by the pcie-root
controller, aka "pcie.0" on the qemu commandline), and provides 31
*non-hot-pluggable* PCI (*not* PCIe) slots, numbered 1-31.
Any time a machine is defined which has a pcie-root controller
(i.e. any q35-based machinetype), libvirt will automatically add a
dmi-to-pci-bridge controller if one doesn't exist, and also add a
pci-bridge controller. The reasoning here is that any useful domain
will have either an immediate (startup time) or eventual (subsequent
hot-plug) need for a standard PCI slot; since the pcie-root controller
only provides PCIe slots, we need to connect a dmi-to-pci-bridge
controller to it in order to get a non-hot-plug PCI slot that we can
then use to connect a pci-bridge - the slots provided by the
pci-bridge will be both standard PCI and hot-pluggable.
Since pci-bridge devices themselves can not be hot-plugged into a
running system (although you can hot-plug other devices into a
pci-bridge's slots), any new pci-bridge controller that is added can
(and will) be plugged into the dmi-to-pci-bridge as long as it has
empty slots available.
This patch is also changing the qemuxml2xml-pcie test from a "DO_TEST"
to a "DO_DIFFERENT_TEST". This is so that the "before" xml can omit
the automatically added dmi-to-pci-bridge and pci-bridge devices, and
the "after" xml can include it - this way we are testing if libvirt is
properly adding these devices.
2013-07-31 01:37:32 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
|
|
|
|
DO_TEST("q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
qemu: add dmi-to-pci-bridge controller
This PCI controller, named "dmi-to-pci-bridge" in the libvirt config,
and implemented with qemu's "i82801b11-bridge" device, connects to a
PCI Express slot (e.g. one of the slots provided by the pcie-root
controller, aka "pcie.0" on the qemu commandline), and provides 31
*non-hot-pluggable* PCI (*not* PCIe) slots, numbered 1-31.
Any time a machine is defined which has a pcie-root controller
(i.e. any q35-based machinetype), libvirt will automatically add a
dmi-to-pci-bridge controller if one doesn't exist, and also add a
pci-bridge controller. The reasoning here is that any useful domain
will have either an immediate (startup time) or eventual (subsequent
hot-plug) need for a standard PCI slot; since the pcie-root controller
only provides PCIe slots, we need to connect a dmi-to-pci-bridge
controller to it in order to get a non-hot-plug PCI slot that we can
then use to connect a pci-bridge - the slots provided by the
pci-bridge will be both standard PCI and hot-pluggable.
Since pci-bridge devices themselves can not be hot-plugged into a
running system (although you can hot-plug other devices into a
pci-bridge's slots), any new pci-bridge controller that is added can
(and will) be plugged into the dmi-to-pci-bridge as long as it has
empty slots available.
This patch is also changing the qemuxml2xml-pcie test from a "DO_TEST"
to a "DO_DIFFERENT_TEST". This is so that the "before" xml can omit
the automatically added dmi-to-pci-bridge and pci-bridge devices, and
the "after" xml can include it - this way we are testing if libvirt is
properly adding these devices.
2013-07-31 01:37:32 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-10-20 16:08:56 +00:00
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2016-08-05 19:01:08 +00:00
|
|
|
DO_TEST_PARSE_ERROR("q35-dmi-bad-address1",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420);
|
|
|
|
DO_TEST_PARSE_ERROR("q35-dmi-bad-address2",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420);
|
2016-01-09 21:00:01 +00:00
|
|
|
DO_TEST("q35-pm-disable",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-09 21:00:01 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
|
|
|
|
QEMU_CAPS_ICH9_DISABLE_S3, QEMU_CAPS_ICH9_DISABLE_S4);
|
|
|
|
DO_TEST("q35-pm-disable-fallback",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2016-01-09 21:00:01 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
|
2015-10-21 19:08:49 +00:00
|
|
|
DO_TEST("q35-usb2",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-10-21 19:08:49 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
|
|
|
DO_TEST("q35-usb2-multi",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-10-21 19:08:49 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
|
|
|
DO_TEST("q35-usb2-reorder",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-10-21 19:08:49 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2015-06-17 17:27:57 +00:00
|
|
|
DO_TEST("pcie-root-port",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-17 17:27:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2016-05-10 17:14:32 +00:00
|
|
|
DO_TEST("autoindex",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_NEC_USB_XHCI);
|
2015-06-17 17:27:57 +00:00
|
|
|
|
2016-04-19 21:05:54 +00:00
|
|
|
DO_TEST_PARSE_ERROR("q35-wrong-root",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
|
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
|
|
|
DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
|
|
|
|
|
2016-05-14 20:36:16 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-17 17:27:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2013-04-19 10:38:53 +00:00
|
|
|
|
2015-06-16 19:09:07 +00:00
|
|
|
DO_TEST("pcie-switch-upstream-port",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-16 19:09:07 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2015-06-17 21:48:28 +00:00
|
|
|
DO_TEST("pcie-switch-downstream-port",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2015-06-17 21:48:28 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
2015-06-16 19:09:07 +00:00
|
|
|
|
2016-03-04 19:35:20 +00:00
|
|
|
DO_TEST("pci-expander-bus",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PXB);
|
|
|
|
DO_TEST_PARSE_ERROR("pci-expander-bus-bad-node",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PXB);
|
|
|
|
DO_TEST_PARSE_ERROR("pci-expander-bus-bad-machine",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PXB);
|
2016-08-06 23:03:31 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_PXB);
|
2016-03-04 19:35:20 +00:00
|
|
|
|
2016-03-23 19:49:29 +00:00
|
|
|
DO_TEST("pcie-expander-bus",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_PXB_PCIE);
|
|
|
|
DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-machine",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
|
|
|
|
QEMU_CAPS_DEVICE_PXB_PCIE);
|
2016-08-06 23:03:31 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_DEVICE_PXB_PCIE);
|
2016-03-23 19:49:29 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-lsi",
|
qemu: Build qemu command line for scsi host device
Except the scsi host device's controller is "lsilogic", mapping
between the libvirt attributes and scsi-generic properties is:
libvirt qemu
-----------------------------------------
controller bus ($libvirt_controller.0)
bus channel
target scsi-id
unit lun
For scsi host device with "lsilogic" controller, the mapping is:
('target (libvirt)' must be 0, as it's not used; 'unit (libvirt)
must <= 7).
libvirt qemu
----------------------------------------------------------
controller && bus bus ($libvirt_controller.$libvirt_bus)
unit scsi-id
It's not good to hardcode/hard-check limits of these attributes,
and even worse, these limits are not documented, one has to find
out by either testing or reading the qemu code, I'm looking forward
to qemu expose limits like these one day). For example, exposing
"max_target", "max_lun" for megasas:
static const struct SCSIBusInfo megasas_scsi_info = {
.tcq = true,
.max_target = MFI_MAX_LD,
.max_lun = 255,
.transfer_data = megasas_xfer_complete,
.get_sg_list = megasas_get_sg_list,
.complete = megasas_command_complete,
.cancel = megasas_command_cancel,
};
Example of the qemu command line (lsilogic controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,scsi-id=8,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Example of the qemu command line (virtio-scsi controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,channel=0,scsi-id=128,lun=128,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Signed-off-by: Han Cheng <hanc.fnst@cn.fujitsu.com>
Signed-off-by: Osier Yang <jyang@redhat.com>
2013-05-03 18:07:23 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-virtio-scsi",
|
qemu: Build qemu command line for scsi host device
Except the scsi host device's controller is "lsilogic", mapping
between the libvirt attributes and scsi-generic properties is:
libvirt qemu
-----------------------------------------
controller bus ($libvirt_controller.0)
bus channel
target scsi-id
unit lun
For scsi host device with "lsilogic" controller, the mapping is:
('target (libvirt)' must be 0, as it's not used; 'unit (libvirt)
must <= 7).
libvirt qemu
----------------------------------------------------------
controller && bus bus ($libvirt_controller.$libvirt_bus)
unit scsi-id
It's not good to hardcode/hard-check limits of these attributes,
and even worse, these limits are not documented, one has to find
out by either testing or reading the qemu code, I'm looking forward
to qemu expose limits like these one day). For example, exposing
"max_target", "max_lun" for megasas:
static const struct SCSIBusInfo megasas_scsi_info = {
.tcq = true,
.max_target = MFI_MAX_LD,
.max_lun = 255,
.transfer_data = megasas_xfer_complete,
.get_sg_list = megasas_get_sg_list,
.complete = megasas_command_complete,
.cancel = megasas_command_cancel,
};
Example of the qemu command line (lsilogic controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,scsi-id=8,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Example of the qemu command line (virtio-scsi controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,channel=0,scsi-id=128,lun=128,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Signed-off-by: Han Cheng <hanc.fnst@cn.fujitsu.com>
Signed-off-by: Osier Yang <jyang@redhat.com>
2013-05-03 18:07:23 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-readonly",
|
2016-05-20 12:25:22 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2013-05-03 18:07:25 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-virtio-scsi",
|
2013-05-03 18:07:26 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-lsi-iscsi",
|
2014-07-09 14:08:34 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-lsi-iscsi-auth",
|
2014-07-09 14:08:34 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-virtio-iscsi",
|
2014-07-09 14:08:34 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("hostdev-scsi-virtio-iscsi-auth",
|
2014-07-09 14:08:34 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
|
|
|
|
QEMU_CAPS_DEVICE_SCSI_GENERIC);
|
qemu: Build qemu command line for scsi host device
Except the scsi host device's controller is "lsilogic", mapping
between the libvirt attributes and scsi-generic properties is:
libvirt qemu
-----------------------------------------
controller bus ($libvirt_controller.0)
bus channel
target scsi-id
unit lun
For scsi host device with "lsilogic" controller, the mapping is:
('target (libvirt)' must be 0, as it's not used; 'unit (libvirt)
must <= 7).
libvirt qemu
----------------------------------------------------------
controller && bus bus ($libvirt_controller.$libvirt_bus)
unit scsi-id
It's not good to hardcode/hard-check limits of these attributes,
and even worse, these limits are not documented, one has to find
out by either testing or reading the qemu code, I'm looking forward
to qemu expose limits like these one day). For example, exposing
"max_target", "max_lun" for megasas:
static const struct SCSIBusInfo megasas_scsi_info = {
.tcq = true,
.max_target = MFI_MAX_LD,
.max_lun = 255,
.transfer_data = megasas_xfer_complete,
.get_sg_list = megasas_get_sg_list,
.complete = megasas_command_complete,
.cancel = megasas_command_cancel,
};
Example of the qemu command line (lsilogic controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,scsi-id=8,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Example of the qemu command line (virtio-scsi controller):
-drive file=/dev/sg2,if=none,id=drive-hostdev-scsi_host7-0-0-0 \
-device scsi-generic,bus=scsi0.0,channel=0,scsi-id=128,lun=128,\
drive=drive-hostdev-scsi_host7-0-0-0,id=hostdev-scsi_host7-0-0-0
Signed-off-by: Han Cheng <hanc.fnst@cn.fujitsu.com>
Signed-off-by: Osier Yang <jyang@redhat.com>
2013-05-03 18:07:23 +00:00
|
|
|
|
2016-07-25 12:44:16 +00:00
|
|
|
DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
|
2013-05-16 20:01:05 +00:00
|
|
|
DO_TEST_FAILURE("mlock-on", NONE);
|
2016-07-25 12:44:16 +00:00
|
|
|
DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
|
2013-05-16 20:01:05 +00:00
|
|
|
DO_TEST("mlock-unsupported", NONE);
|
|
|
|
|
2013-07-12 12:17:23 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2013-07-22 06:51:55 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2013-07-22 06:51:55 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2013-07-22 06:51:55 +00:00
|
|
|
DO_TEST_PARSE_ERROR("pci-root-address",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE);
|
2013-07-12 12:17:23 +00:00
|
|
|
|
2013-07-18 09:19:23 +00:00
|
|
|
DO_TEST("hotplug-base",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
|
2013-07-18 09:19:23 +00:00
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
|
|
|
|
DO_TEST_FAILURE("pcihole64-none", NONE);
|
2013-08-12 11:48:34 +00:00
|
|
|
DO_TEST("pcihole64-q35",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
2013-08-12 11:48:34 +00:00
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_ICH9_AHCI,
|
2015-11-09 15:39:54 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
2013-08-12 11:48:34 +00:00
|
|
|
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
|
|
|
|
QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
|
|
|
|
|
2013-07-30 19:41:14 +00:00
|
|
|
DO_TEST("arm-vexpressa9-nodevs",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
|
2013-07-30 22:51:30 +00:00
|
|
|
DO_TEST("arm-vexpressa9-basic",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
|
2013-08-01 01:40:35 +00:00
|
|
|
DO_TEST("arm-vexpressa9-virtio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2013-08-01 01:40:35 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2013-11-19 21:49:40 +00:00
|
|
|
DO_TEST("arm-virt-virtio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2013-11-19 21:49:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2013-07-30 19:41:14 +00:00
|
|
|
|
2014-01-02 10:42:56 +00:00
|
|
|
DO_TEST("aarch64-virt-virtio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2014-01-02 10:42:56 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2016-01-27 22:47:14 +00:00
|
|
|
|
|
|
|
/* Demonstrates the virtio-pci default... namely that there isn't any!
|
|
|
|
q35 style PCI controllers will be added if the binary supports it,
|
|
|
|
but virtio-mmio is always used unless PCI addresses are manually
|
|
|
|
specified. */
|
|
|
|
DO_TEST("aarch64-virtio-pci-default",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2016-04-08 08:46:41 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
|
|
|
|
QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
|
|
|
|
DO_TEST("aarch64-virt-2.6-virtio-pci-default",
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2015-09-30 00:10:07 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
|
|
|
|
QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
|
2016-01-27 22:47:14 +00:00
|
|
|
/* Example of using virtio-pci with no explicit PCI controller
|
|
|
|
but with manual PCI addresses */
|
|
|
|
DO_TEST("aarch64-virtio-pci-manual-addresses",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2015-09-30 00:10:07 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
|
|
|
|
QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI);
|
qemu: map "virtio" video model to "virt" machtype correctly (arm/aarch64)
Most of QEMU's PCI display device models, such as:
libvirt video/model/@type QEMU -device
------------------------- ------------
cirrus cirrus-vga
vga VGA
qxl qxl-vga
virtio virtio-vga
come with a linear framebuffer (sometimes called "VGA compatibility
framebuffer"). This linear framebuffer lives in one of the PCI device's
MMIO BARs, and allows guest code (primarily: firmware drivers, and
non-accelerated OS drivers) to display graphics with direct memory access.
Due to architectural reasons on aarch64/KVM hosts, this kind of
framebuffer doesn't / can't work in
qemu-system-(arm|aarch64) -M virt
machines. Cache coherency issues guarantee a corrupted / unusable display.
The problem has been researched by several people, including kvm-arm
maintainers, and it's been decided that the best way (practically the only
way) to have boot time graphics for such guests is to consolidate on
QEMU's "virtio-gpu-pci" device.
>From <https://bugzilla.redhat.com/show_bug.cgi?id=1195176>, libvirt
supports
<devices>
<video>
<model type='virtio'/>
</video>
</devices>
but libvirt unconditionally maps @type='virtio' to QEMU's "virtio-vga"
device model. (See the qemuBuildDeviceVideoStr() function and the
"qemuDeviceVideo" enum impl.)
According to the above, this is not right for the "virt" machine type; the
qemu-system-(arm|aarch64) binaries don't even recognize the "virtio-vga"
device model (justifiedly). Whereas "virtio-gpu-pci", which is a pure
virtio device without a compatibility framebuffer, is available, and works
fine.
(The ArmVirtQemu ("AAVMF") platform of edk2 -- that is, the UEFI firmware
for "virt" -- supports "virtio-gpu-pci", as of upstream commit
3ef3209d3028. See
<https://tianocore.acgmultimedia.com/show_bug.cgi?id=66>.)
Override the default mapping of "virtio", from "virtio-vga" to
"virtio-gpu-pci", if qemuDomainMachineIsVirt() evaluates to true.
Cc: Andrea Bolognani <abologna@redhat.com>
Cc: Drew Jones <drjones@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Martin Kletzander <mkletzan@redhat.com>
Suggested-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1372901
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Martin Kletzander <mkletzan@redhat.com>
2016-09-16 07:30:23 +00:00
|
|
|
DO_TEST("aarch64-video-virtio-gpu-pci",
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_OBJECT_GPEX,
|
|
|
|
QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
|
|
|
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_BOOTINDEX);
|
2015-02-25 14:12:31 +00:00
|
|
|
DO_TEST("aarch64-aavmf-virtio-mmio",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2015-02-25 14:12:31 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
|
2014-02-14 14:09:00 +00:00
|
|
|
DO_TEST("aarch64-virt-default-nic",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG,
|
2014-02-14 14:09:00 +00:00
|
|
|
QEMU_CAPS_DEVICE_VIRTIO_MMIO);
|
2016-08-04 11:19:39 +00:00
|
|
|
qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("aarch64-cpu-passthrough",
|
2015-04-23 17:47:06 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
|
|
|
|
DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-default", GIC_V2,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2015-09-30 11:04:11 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-default", GIC_V3,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-default", GIC_BOTH,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 15:58:20 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-07-29 16:11:26 +00:00
|
|
|
DO_TEST_FAILURE("aarch64-gic-v3",
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-07-29 16:11:26 +00:00
|
|
|
DO_TEST_FAILURE("aarch64-gic-host",
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
|
2016-05-10 10:36:10 +00:00
|
|
|
DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-host", GIC_V2,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-host", GIC_V3,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
|
|
|
DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
|
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-07-29 16:11:26 +00:00
|
|
|
DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-07-29 16:11:26 +00:00
|
|
|
DO_TEST_FAILURE("aarch64-gic-not-virt",
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-07-29 16:11:26 +00:00
|
|
|
DO_TEST_FAILURE("aarch64-gic-not-arm",
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
|
2016-02-03 13:35:41 +00:00
|
|
|
QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("aarch64-kvm-32-on-64",
|
2015-05-21 22:18:20 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST_FAILURE("aarch64-kvm-32-on-64",
|
2015-05-21 22:18:20 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
|
2016-05-16 08:08:29 +00:00
|
|
|
QEMU_CAPS_KVM);
|
2016-08-04 06:25:55 +00:00
|
|
|
qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
|
2015-05-21 22:18:20 +00:00
|
|
|
|
2013-07-01 16:28:50 +00:00
|
|
|
DO_TEST("kvm-pit-device", QEMU_CAPS_KVM_PIT_TICK_POLICY);
|
|
|
|
DO_TEST("kvm-pit-delay", QEMU_CAPS_NO_KVM_PIT);
|
|
|
|
DO_TEST("kvm-pit-device", QEMU_CAPS_NO_KVM_PIT,
|
|
|
|
QEMU_CAPS_KVM_PIT_TICK_POLICY);
|
|
|
|
|
2013-12-09 09:11:15 +00:00
|
|
|
DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2015-11-24 12:26:36 +00:00
|
|
|
DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2013-12-09 09:11:15 +00:00
|
|
|
|
2015-02-26 14:28:07 +00:00
|
|
|
DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_NODEFCONFIG);
|
2015-02-26 14:28:07 +00:00
|
|
|
|
2014-09-18 15:38:32 +00:00
|
|
|
DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);
|
|
|
|
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
|
2014-09-25 07:00:47 +00:00
|
|
|
DO_TEST_FAILURE("shmem", NONE);
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST_FAILURE("shmem-invalid-size",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_IVSHMEM);
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST_FAILURE("shmem-invalid-address",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_IVSHMEM);
|
2016-05-20 12:41:49 +00:00
|
|
|
DO_TEST_FAILURE("shmem-small-size",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_DEVICE_IVSHMEM);
|
2014-09-22 08:49:39 +00:00
|
|
|
DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
|
2016-05-16 08:08:29 +00:00
|
|
|
DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
|
2014-09-22 08:49:39 +00:00
|
|
|
|
2015-12-01 13:08:37 +00:00
|
|
|
DO_TEST_FAILURE("memory-align-fail", NONE);
|
2014-10-06 12:18:37 +00:00
|
|
|
DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
|
|
|
|
DO_TEST_FAILURE("memory-hotplug", NONE);
|
|
|
|
DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
|
2015-01-09 09:40:37 +00:00
|
|
|
DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2015-03-26 06:30:56 +00:00
|
|
|
DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2015-10-13 17:12:23 +00:00
|
|
|
DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
|
2014-10-06 12:18:37 +00:00
|
|
|
|
2015-04-27 21:57:30 +00:00
|
|
|
DO_TEST("machine-aeskeywrap-on-caps",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-aeskeywrap-on-cap",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-aeskeywrap-off-caps",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-aeskeywrap-off-cap",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-deakeywrap-on-caps",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2015-11-06 14:28:57 +00:00
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-deakeywrap-on-cap",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-deakeywrap-off-caps",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-deakeywrap-off-cap",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);
|
|
|
|
|
|
|
|
DO_TEST("machine-keywrap-none-caps",
|
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_SCSI,
|
2015-04-27 21:57:30 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
|
|
|
DO_TEST("machine-keywrap-none",
|
2015-11-06 14:28:57 +00:00
|
|
|
QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
|
2015-04-27 21:57:30 +00:00
|
|
|
|
2015-10-20 14:01:01 +00:00
|
|
|
DO_TEST("qemu-ns-domain-ns0", NONE);
|
|
|
|
DO_TEST("qemu-ns-domain-commandline", NONE);
|
|
|
|
DO_TEST("qemu-ns-domain-commandline-ns0", NONE);
|
|
|
|
DO_TEST("qemu-ns-commandline", NONE);
|
|
|
|
DO_TEST("qemu-ns-commandline-ns0", NONE);
|
|
|
|
DO_TEST("qemu-ns-commandline-ns1", NONE);
|
|
|
|
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
|
2015-11-13 10:38:07 +00:00
|
|
|
QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
|
2016-01-13 00:26:40 +00:00
|
|
|
DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
|
2015-11-13 10:38:07 +00:00
|
|
|
|
2016-01-07 15:14:58 +00:00
|
|
|
DO_TEST("ppc64-usb-controller",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_PCI_OHCI);
|
2016-01-07 15:14:58 +00:00
|
|
|
DO_TEST("ppc64-usb-controller-legacy",
|
2016-01-13 00:26:40 +00:00
|
|
|
QEMU_CAPS_PIIX3_USB_UHCI);
|
2016-01-07 15:14:58 +00:00
|
|
|
|
2016-02-25 15:21:41 +00:00
|
|
|
DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
|
|
|
|
VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
|
|
|
|
NONE);
|
|
|
|
|
2016-04-22 14:40:57 +00:00
|
|
|
DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
|
2016-04-22 22:39:09 +00:00
|
|
|
QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
|
|
|
|
QEMU_CAPS_NAME_GUEST);
|
2016-03-10 19:46:39 +00:00
|
|
|
DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);
|
|
|
|
|
2016-03-29 22:23:02 +00:00
|
|
|
DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
|
2016-04-20 13:03:57 +00:00
|
|
|
DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
|
|
|
|
QEMU_CAPS_USB_HUB);
|
2016-07-29 11:54:13 +00:00
|
|
|
DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
|
|
|
|
QEMU_CAPS_CHARDEV,
|
|
|
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
|
2016-03-29 22:23:02 +00:00
|
|
|
|
2016-05-12 11:21:01 +00:00
|
|
|
DO_TEST("acpi-table", NONE);
|
2016-06-22 15:27:57 +00:00
|
|
|
DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
|
|
|
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU);
|
2016-05-12 11:21:01 +00:00
|
|
|
|
2016-08-04 12:36:24 +00:00
|
|
|
DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
|
|
|
|
|
2015-09-15 06:16:02 +00:00
|
|
|
qemuTestDriverFree(&driver);
|
2008-02-27 04:35:08 +00:00
|
|
|
|
2014-03-17 09:38:38 +00:00
|
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
2007-07-18 21:34:22 +00:00
|
|
|
}
|
|
|
|
|
qemu: Utilize qemu secret objects for RBD auth/secret
https://bugzilla.redhat.com/show_bug.cgi?id=1182074
If they're available and we need to pass secrets to qemu, then use the
qemu domain secret object in order to pass the secrets for RBD volumes
instead of passing the base64 encoded secret on the command line.
The goal is to make AES secrets the default and have no user interaction
required in order to allow using the AES mechanism. If the mechanism
is not available, then fall back to the current plain mechanism using
a base64 encoded secret.
New APIs:
qemu_domain.c:
qemuDomainGetSecretAESAlias:
Generate/return the secret object alias for an AES Secret Info type.
This will be called from qemuDomainSecretAESSetup.
qemuDomainSecretAESSetup: (private)
This API handles the details of the generation of the AES secret
and saves the pieces that need to be passed to qemu in order for
the secret to be decrypted. The encrypted secret based upon the
domain master key, an initialization vector (16 byte random value),
and the stored secret. Finally, the requirement from qemu is the IV
and encrypted secret are to be base64 encoded.
qemu_command.c:
qemuBuildSecretInfoProps: (private)
Generate/return a JSON properties object for the AES secret to
be used by both the command building and eventually the hotplug
code in order to add the secret object. Code was designed so that
in the future perhaps hotplug could use it if it made sense.
qemuBuildObjectSecretCommandLine (private)
Generate and add to the command line the -object secret for the
secret. This will be required for the subsequent RBD reference
to the object.
qemuBuildDiskSecinfoCommandLine (private)
Handle adding the AES secret object.
Adjustments:
qemu_domain.c:
The qemuDomainSecretSetup was altered to call either the AES or Plain
Setup functions based upon whether AES secrets are possible (we have
the encryption API) or not, we have secrets, and of course if the
protocol source is RBD.
qemu_command.c:
Adjust the qemuBuildRBDSecinfoURI API's in order to generate the
specific command options for an AES secret, such as:
-object secret,id=$alias,keyid=$masterKey,data=$base64encodedencrypted,
format=base64
-drive file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
mon_host=mon1.example.org\:6321,password-secret=$alias,...
where the 'id=' value is the secret object alias generated by
concatenating the disk alias and "-aesKey0". The 'keyid= $masterKey'
is the master key shared with qemu, and the -drive syntax will
reference that alias as the 'password-secret'. For the -drive
syntax, the 'id=myname' is kept to define the username, while the
'key=$base64 encoded secret' is removed.
While according to the syntax described for qemu commit '60390a21'
or as seen in the email archive:
https://lists.gnu.org/archive/html/qemu-devel/2016-01/msg04083.html
it is possible to pass a plaintext password via a file, the qemu
commit 'ac1d8878' describes the more feature rich 'keyid=' option
based upon the shared masterKey.
Add tests for checking/comparing output.
NB: For hotplug, since the hotplug code doesn't add command line
arguments, passing the encoded secret directly to the monitor
will suffice.
2016-04-11 15:26:14 +00:00
|
|
|
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
|
|
|
|
abs_builddir "/.libs/virrandommock.so")
|
2008-05-29 15:31:49 +00:00
|
|
|
|
2007-11-26 12:03:34 +00:00
|
|
|
#else
|
|
|
|
|
2011-07-08 23:24:44 +00:00
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return EXIT_AM_SKIP;
|
|
|
|
}
|
2007-11-26 12:03:34 +00:00
|
|
|
|
|
|
|
#endif /* WITH_QEMU */
|