18 hours agoqemu: capabilities: Remove support for downstream-only QMP monitor backport master
Peter Krempa [Wed, 20 Sep 2017 08:45:23 +0000]
qemu: capabilities: Remove support for downstream-only QMP monitor backport

Some distros (see diff) chose to backport QMP support rather than rebase
to newer version of qemu. As a hack they added the string 'libvirt' to
the qemu -help output. Remove this as downstream-only hacks should be
carried by downstream and not litter upstream.

This effectively reverts commit ff88cd590572277f10ecee4ebb1174d9b70fc0d7

19 hours agoqemu: Use qemuDomainDefFormatXML in qemuDomainDefCopy
Jiri Denemark [Fri, 15 Sep 2017 14:32:00 +0000]
qemu: Use qemuDomainDefFormatXML in qemuDomainDefCopy

Because qemuDomainDefCopy needs a string representation of a domain
definition, there's no reason for calling the lower level
qemuDomainDefFormatBuf API.

Signed-off-by: Jiri Denemark <>

19 hours agoqemu: Fix error checking in qemuDomainDefFormatXMLInternal
Jiri Denemark [Fri, 15 Sep 2017 14:41:18 +0000]
qemu: Fix error checking in qemuDomainDefFormatXMLInternal

virDomainDefFormatInternal (called by qemuDomainDefFormatXMLInternal)
already checks for buffer errors and properly resets the buffer on

Signed-off-by: Jiri Denemark <>

20 hours agolibvirt_nss.c: Fix typo in aiforaf()
Michal Privoznik [Fri, 22 Sep 2017 10:41:51 +0000]
libvirt_nss.c: Fix typo in aiforaf()

In my previous commit of b1d87f9ad96f I've made a typo breaking
the FreeBSD build. s/ipAaddr/ipAddr/

Signed-off-by: Michal Privoznik <>

20 hours agoapparmor: delete profile on VM shutdown
Guido Günther [Mon, 18 Sep 2017 19:23:25 +0000]
apparmor: delete profile on VM shutdown

instead of only unloading it. This makes sure old profiles don't pile up
in /etc/apparmor.d/libvirt and we get updates to modified templates on
VM restart.

Reviewed-by: Jim Fehlig <>

24 hours agoutil: Fix stack smashing in virNetDevGetFamilyId
Laine Stump [Thu, 21 Sep 2017 17:57:30 +0000]
util: Fix stack smashing in virNetDevGetFamilyId

After commit 8708ca01c0d libvirtd consistently aborts with "stack
 smashing detected" when nodedev driver is initialized.

This is caused by nlmsg_parse() being told that its array of nlattr*
has CTRL_CMD_MAX (10) entries, when in fact it is declared to have
CTRL_ATTR_MAX (8) entries. Since all the entries are initialized to
NULL, the result is that nlmsg_parse is overwriting 2*(sizof(nlattr*))
bytes outside the array.

Signed-off-by: Laine Stump <>
Reviewed-by: John Ferlan <>
Signed-off-by: Jiri Denemark <>

24 hours agonss: Don't leak @ipAddr
Michal Privoznik [Thu, 21 Sep 2017 15:47:45 +0000]
nss: Don't leak @ipAddr

In aiforaf() (which exists only when building for BSD) the
@ipAddr may be leaked.

Signed-off-by: Michal Privoznik <>

35 hours agoutil: Fix secret generation in virStorageSourceParseRBDColonString
John Ferlan [Fri, 15 Sep 2017 19:21:35 +0000]
util: Fix secret generation in virStorageSourceParseRBDColonString

Commit id '5604c056' used the wrong API to generate the
<secret type='%s'..." field. The previous code used the
correct API as was done in commit id '6887af39'. The data
is actually a usage type not an auth type even though the
result is the same.

35 hours agoutil: Move virSecretUsageType to virsecret.h
John Ferlan [Fri, 15 Sep 2017 18:55:46 +0000]
util: Move virSecretUsageType to virsecret.h

Move the virSecretUsageType into the util.

35 hours agoqemu: Avoid a possible NULL pointer deref in qemuDomainGetTLSObjects
Ashish Mittal [Wed, 20 Sep 2017 12:32:29 +0000]
qemu: Avoid a possible NULL pointer deref in qemuDomainGetTLSObjects

Passing a NULL value for the argument secAlias to the function
qemuDomainGetTLSObjects would cause a segmentation fault in

Changed code to check before dereferencing a NULL secAlias.

Signed-off-by: Ashish Mittal <>

35 hours agotests: Add QEMU 2.10.0 capabilities test for s390x
Boris Fiuczynski [Tue, 19 Sep 2017 14:06:11 +0000]
tests: Add QEMU 2.10.0 capabilities test for s390x

Adding s390x qemu caps test for qemu version 2.10.0.

Signed-off-by: Boris Fiuczynski <>

40 hours agoqemu: Introduce a wrapper over virFileWrapperFdClose
Michal Privoznik [Thu, 14 Sep 2017 14:28:34 +0000]
qemu: Introduce a wrapper over virFileWrapperFdClose

When migrating to a file (e.g. when doing 'virsh save file'),
couple of things are happening in the thread that is executing
the API:

1) the domain obj is locked
2) iohelper is spawned as a separate process to handle all I/O
3) the thread waits for iohelper to finish
4) the domain obj is unlocked

Now, the problem is that while the thread waits in step 3 for
iohelper to finish this may take ages because iohelper calls
fdatasync(). And unfortunately, we are waiting the whole time
with the domain locked. So if another thread wants to jump in and
say copy the domain name ('virsh list' for instance), they are

The solution is to unlock the domain whenever waiting for I/O and
lock it back again when it finished.

Signed-off-by: Michal Privoznik <>
Reviewed-by: John Ferlan <>

41 hours agoqemu: Be more selective when determining cdrom for taint messaging
John Ferlan [Mon, 11 Sep 2017 12:35:05 +0000]
qemu: Be more selective when determining cdrom for taint messaging

Commit id '99a2d6af2' was a bit too aggressive with determining whether
the provided path was a "physical" cd-rom in order to generate a taint
message due to the possibility of some guest and host trying to control
the tray. For cd-rom guest devices backed to some VIR_STORAGE_TYPE_FILE
storage, this wouldn't be a problem and as such it shouldn't be a problem
for guest devices using some sort of block device on the host such as
iSCSI, LVM, or a Disk pool would present.

So before issuing a taint message, let's check if the provided path of
the VIR_STORAGE_TYPE_BLOCK backed device is a "known" physical cdrom name
by comparing the beginning of the path w/ "/dev/cdrom" and "/dev/sr".
Also since it's possible the provided path could resolve to some /dev/srN
device, let's get that path as well and perform the same check.

Signed-off-by: John Ferlan <>

41 hours agoqemuBuildHostNetStr: Don't leak @addr
Michal Privoznik [Thu, 21 Sep 2017 12:52:58 +0000]
qemuBuildHostNetStr: Don't leak @addr

The virSocketAddrFormat() allocates the string and it's caller
responsibility to free it afterwards.

==28857== 11 bytes in 1 blocks are definitely lost in loss record 37 of 168
==28857==    at 0x4C2BEDF: malloc (vg_replace_malloc.c:299)
==28857==    by 0x9A81D79: strdup (in /lib64/
==28857==    by 0x5DA3BF0: virStrdup (virstring.c:902)
==28857==    by 0x5D96182: virSocketAddrFormatFull (virsocketaddr.c:427)
==28857==    by 0x5D95E13: virSocketAddrFormat (virsocketaddr.c:352)
==28857==    by 0x5706890: qemuBuildHostNetStr (qemu_command.c:3891)
==28857==    by 0x57138D3: qemuBuildInterfaceCommandLine (qemu_command.c:8597)
==28857==    by 0x5713D6A: qemuBuildNetCommandLine (qemu_command.c:8699)
==28857==    by 0x57176F6: qemuBuildCommandLine (qemu_command.c:10027)
==28857==    by 0x5769D61: qemuProcessCreatePretendCmd (qemu_process.c:6004)
==28857==    by 0x4056EC: testCompareXMLToArgv (qemuxml2argvtest.c:502)
==28857==    by 0x41DF40: virTestRun (testutils.c:180)

Signed-off-by: Michal Privoznik <>
Reviewed-by: John Ferlan <>

41 hours agoqemu: Don't update CPU when formatting live def
Jiri Denemark [Fri, 30 Jun 2017 14:55:20 +0000]
qemu: Don't update CPU when formatting live def

Since commit v2.2.0-199-g7ce711a30e libvirt stores an updated guest CPU
in domain's live definition and there's no need to update it every time
we want to format the definition. The commit itself tried to address
this in qemuDomainFormatXML, but forgot to fix qemuDomainDefFormatLive.
Not to mention that masking a previously set flag is only acceptable if
the flag was set by a public API user. Internally, libvirt should have
never set the flag in the first place.

Signed-off-by: Jiri Denemark <>

41 hours agoqemu: Use correct host model for updating guest cpu
Jiri Denemark [Fri, 30 Jun 2017 15:05:22 +0000]
qemu: Use correct host model for updating guest cpu

When a user requested a domain XML description with
VIR_DOMAIN_XML_UPDATE_CPU flag, libvirt would use the host CPU
definition from host capabilities rather than the one which will
actually be used once the domain is started.

Signed-off-by: Jiri Denemark <>

42 hours agoconf: Drop unused VIR_DOMAIN_DEF_FORMAT_UPDATE_CPU
Jiri Denemark [Fri, 30 Jun 2017 14:09:06 +0000]

The only real usage of this flag was removed by "cpu_conf: Drop
updateCPU from virCPUDefFormat".

Signed-off-by: Jiri Denemark <>

42 hours agocpu_conf: Simplify formatting of guest CPU attributes
Jiri Denemark [Fri, 30 Jun 2017 14:05:28 +0000]
cpu_conf: Simplify formatting of guest CPU attributes

Signed-off-by: Jiri Denemark <>

42 hours agocpu_conf: Drop updateCPU from virCPUDefFormat
Jiri Denemark [Fri, 30 Jun 2017 13:47:23 +0000]
cpu_conf: Drop updateCPU from virCPUDefFormat

In the past we updated host-model CPUs with host CPU data by adding a
model and features, but keeping the host-model mode. And since the CPU
model is not normally formatted for host-model CPU defs, we had to pass
the updateCPU flag to the formatting code to be able to properly output
updated host-model CPUs. Libvirt doesn't do this anymore, host-model
CPUs are turned into custom mode CPUs once updated with host CPU data
and thus there's no reason for keeping the hacks inside CPU XML

Signed-off-by: Jiri Denemark <>

42 hours agoqemuxml2xmltest: Add tests for Power CPUs
Jiri Denemark [Mon, 18 Sep 2017 07:59:18 +0000]
qemuxml2xmltest: Add tests for Power CPUs

Signed-off-by: Jiri Denemark <>

44 hours agoqemu: reject parallel ports for pseries machines
Pino Toscano [Thu, 7 Sep 2017 12:19:40 +0000]
qemu: reject parallel ports for pseries machines

They are simply not supported on that machine type.


Signed-off-by: Pino Toscano <>

44 hours agoqemu: reject parallel ports for s390 archs
Pino Toscano [Thu, 7 Sep 2017 12:19:39 +0000]
qemu: reject parallel ports for s390 archs

They are simply not supported on those architectures.


Signed-off-by: Pino Toscano <>

44 hours agoqemu: pass the virDomainDef to qemuDomainChrDefValidate
Pino Toscano [Thu, 7 Sep 2017 12:19:38 +0000]
qemu: pass the virDomainDef to qemuDomainChrDefValidate

This will be used to improve the validation for this type of devices.

The former @def parameter is renamed to @dev, leaving @def for the
virDomainDef (following the style used elsewhere).

Signed-off-by: Pino Toscano <>

44 hours agotests: qemuxml2argv: fail also on unexpected pass
Pino Toscano [Thu, 7 Sep 2017 12:19:37 +0000]
tests: qemuxml2argv: fail also on unexpected pass

If a test expects either a parse error or a failure but then there is
neither a parse error nor a failure, then properly mark the test as
failing, instead of failing later on (e.g. trying to open a
non-existing .args file).

Signed-off-by: Pino Toscano <>

44 hours agotests: qemuxml2argv: fix expected type for usb-bus-missing
Pino Toscano [Thu, 7 Sep 2017 12:19:36 +0000]
tests: qemuxml2argv: fix expected type for usb-bus-missing

The guest of usb-bus-missing does not cause a parse error, but a
validation issue -- hence, switch from DO_TEST_PARSE_ERROR to

Fixes commit b003b9781b6ae633cfe4fdf6b9620ca246fa2432.

Signed-off-by: Pino Toscano <>

47 hours agoFix commandhelper build on win32
Daniel P. Berrange [Thu, 21 Sep 2017 07:55:07 +0000]
Fix commandhelper build on win32

For win32 we need EXIT_AM_SKIP which is in testutils.h. We must
define NO_LIBVIRT to prevent replacement of fprintf with
virFilePrintf as we can't link to

Signed-off-by: Daniel P. Berrange <>

47 hours agoiohelper: avoid calling read() with misaligned buffers for O_DIRECT
Daniel P. Berrange [Wed, 20 Sep 2017 15:25:56 +0000]
iohelper: avoid calling read() with misaligned buffers for O_DIRECT

The iohelper currently calls saferead() to get data from the
underlying file. This has a problem with O_DIRECT when hitting
end-of-file. saferead() is asked to read 1MB, but the first
read() it does may return only a few KB, so it'll try another
read() to fill the remaining buffer. Unfortunately the buffer
pointer passed into this 2nd read() is likely not aligned
to the extent that O_DIRECT requires, so rather than seeing
'0' for end-of-file, we'll get -1 + EINVAL due to misaligned

The way the iohelper is currently written, it already handles
getting short reads, so there is actually no need to use
saferead() at all. We can simply call read() directly. The
benefit of this is that we can now write() the data immediately
so when we go into the subsequent reads() we'll always have a
correctly aligned buffer.

Technically the file position ought to be aligned for O_DIRECT
too, but this does not appear to matter when at end-of-file.

Tested-by: Nikolay Shirokovskiy <>
Reviewed-by: Eric Blake <>
Signed-off-by: Daniel P. Berrange <>

2 days agoStop linking tests/commandhelper to libvirt code
Daniel P. Berrange [Wed, 20 Sep 2017 11:03:47 +0000]
Stop linking tests/commandhelper to libvirt code

The commandhelper binary is a helper for commandtest that
validates what file handles were inherited. For this to
work reliably we must not have any libraries that leak
file descriptors into commandhelper. Unfortunately some
versions of gnutls will intentionally open file handles
at library load time via a constructor function.

We previously hacked around this in

  commit 4cbc15d037e1cd8abf5c4aa6acc30d83ae13e34d
  Author: Martin Kletzander <>
  Date:   Fri May 2 09:55:52 2014 +0200

    tests: don't fail with newer gnutls

    gnutls-3.3.0 and newer leaves 2 FDs open in order to be backwards
    compatible when it comes to chrooted binaries [1].  Linking
    commandhelper with gnutls then leaves these two FDs open and
    commandtest fails thanks to that.  This patch does not link
    commandhelper with, but rather only the utilities making
    the test pass.

    Based on suggestion from Daniel [2].


That fix relied on fact that while linked with
gnutls, did not link to it.  With the
introduction of the util/vircrypto.c file that assumption
is no longer valid. We must not link to
at all - only gnulib and libc can (hopefully) be relied
on not to open random file descriptors in constructors.

Reviewed-by: Martin Kletzander <>
Signed-off-by: Daniel P. Berrange <>

2 days agovhost-user: add support reconnect for vhost-user ports
ZhiPeng Lu [Fri, 8 Sep 2017 09:12:09 +0000]
vhost-user: add support reconnect for vhost-user ports

For vhost-user ports, Open vSwitch acts as the server and QEMU the client.
When OVS crashed or restart, QEMU shoule be reconnect to OVS.

Signed-off-by: ZhiPeng Lu <>
Signed-off-by: Michal Privoznik <>

2 days agostorage: Add new events for *PoolBuild() and *PoolDelete().
Julio Faracco [Sat, 9 Sep 2017 15:09:49 +0000]
storage: Add new events for *PoolBuild() and *PoolDelete().

This commit adds new events for two methods and operations: *PoolBuild() and
*PoolDelete(). Using the event-test and the commands set below we have the
following outputs:

$ sudo ./event-test
Registering event callbacks
myStoragePoolEventCallback EVENT: Storage pool test Defined 0
myStoragePoolEventCallback EVENT: Storage pool test Created 0
myStoragePoolEventCallback EVENT: Storage pool test Started 0
myStoragePoolEventCallback EVENT: Storage pool test Stopped 0
myStoragePoolEventCallback EVENT: Storage pool test Deleted 0
myStoragePoolEventCallback EVENT: Storage pool test Undefined 0

Another terminal:
$ sudo virsh pool-define test.xml
Pool test defined from test.xml

$ sudo virsh pool-build test
Pool test built

$ sudo virsh pool-start test
Pool test started

$ sudo virsh pool-destroy test
Pool test destroyed

$ sudo virsh pool-delete test
Pool test deleted

$ sudo virsh pool-undefine test
Pool test has been undefined

This commits can be a solution for RHBZ #1475227.


Signed-off-by: Julio Faracco <>
Signed-off-by: Michal Privoznik <>

2 days agoqemu: handle reconnect on chardev hotplug
ZhiPeng Lu [Wed, 13 Sep 2017 00:33:40 +0000]
qemu: handle reconnect on chardev hotplug

The patch passes the reconnect timeout to QEMU by monitor on
chardev hotplug.

Signed-off-by: ZhiPeng Lu <>
Signed-off-by: Michal Privoznik <>

2 days agoLink with gnutls
Daniel P. Berrange [Wed, 20 Sep 2017 08:08:40 +0000]
Link with gnutls

The util/vircrypto.c file uses gnutls, so we must directly link with gnutls to avoid errors on OS which do not
resolve symbols against indirectly linked libraries.

This fixes a build failure on Ubuntu Trusty

  CCLD     storagevolxml2argvtest
/usr/bin/ld: ../src/.libs/libvirt_util.a(libvirt_util_la-vircrypto.o): undefined reference to symbol 'gnutls_strerror@@GNUTLS_1_4'

//usr/lib/x86_64-linux-gnu/ error adding symbols: DSO missing from command line

Signed-off-by: Daniel P. Berrange <>

3 days agoqemu: Add qemu command line generation for a VxHS block device
Ashish Mittal [Wed, 30 Aug 2017 13:46:53 +0000]
qemu: Add qemu command line generation for a VxHS block device

The VxHS block device will only use the newer formatting options and
avoid the legacy URI syntax.

An excerpt for a sample QEMU command line is:

  -drive file.driver=vxhs,file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc251,\
   file.server.port=9999,format=raw,if=none,id=drive-virtio-disk0,cache=none \
  -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\

Update qemuxml2argvtest with a simple test.

Signed-off-by: Ashish Mittal <>
Signed-off-by: John Ferlan <>

3 days agoqemu: Refactor qemuBlockStorageSourceBuildHostsJSONSocketAddress
Ashish Mittal [Tue, 12 Sep 2017 11:43:31 +0000]
qemu: Refactor qemuBlockStorageSourceBuildHostsJSONSocketAddress

Extract out the "guts" of building a server entry into it's own
separately callable/usable function in order to allow building
a server entry for a consumer with src->nhosts == 1.

3 days agoutil: storage: Add JSON backing volume parse for VxHS
Ashish Mittal [Wed, 30 Aug 2017 13:46:50 +0000]
util: storage: Add JSON backing volume parse for VxHS

Add the backing parse and a test case to verify parsing of VxHS
backing storage.

Signed-off-by: Ashish Mittal <>
Signed-off-by: John Ferlan <>

3 days agodocs: Add schema and docs for Veritas HyperScale (VxHS)
Ashish Mittal [Wed, 30 Aug 2017 13:41:23 +0000]
docs: Add schema and docs for Veritas HyperScale (VxHS)

Alter the schema to allow a VxHS block device. Sample XML is:

  <disk type='network' device='disk'>
    <driver name='qemu' type='raw' cache='none'/>
    <source protocol='vxhs' name='eb90327c-8302-4725-9e1b-4e85ed4dc251'>
      <host name='' port='9999'/>
    <target dev='vda' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

Update the html docs to describe the capability for VxHS.

Alter the qemuxml2xmltest to validate the formatting.

Signed-off-by: Ashish Mittal <>
Signed-off-by: John Ferlan <>

3 days agostorage: Introduce VIR_STORAGE_NET_PROTOCOL_VXHS
Ashish Mittal [Tue, 29 Aug 2017 11:21:51 +0000]

Add a new virStorageNetProtocol for Veritas HyperScale (VxHS) disks

Signed-off-by: Ashish Mittal <>
Signed-off-by: John Ferlan <>

3 days agoqemu: Detect support for vxhs
John Ferlan [Tue, 29 Aug 2017 22:44:19 +0000]
qemu: Detect support for vxhs

Using the query-qmp-schema introspection - look for the 'vxhs'
blockdevOptions type.

NB: This is a "best effort" type situation as there is not a
    mechanism to determine whether the running QEMU has been
    built with '--enable-vxhs'. All we can do is check if the
    option to use vxhs for a blockdev-add exists in the command
    infrastructure which does not take that into account when
    building its table of commands and options.

Signed-off-by: John Ferlan <>

3 days agoutil: virPCIGetNetName(): use first netdev name when phys_port_id isn't matched
Laine Stump [Fri, 15 Sep 2017 15:26:14 +0000]
util: virPCIGetNetName(): use first netdev name when phys_port_id isn't matched

The mlx4 (Mellanox) netdev driver implements the sysfs phys_port_id
file for both VFs and PFs, so you can find the VF netdev plugged into
the same physical port as any given PF netdev by comparing the
contents of phys_port_id of the respective netdevs. That's what
libvirt does when attempting to find the PF netdev for a given VF
netdev (or vice versa).

Most other netdev's drivers don't implement phys_port_id, so the file
is visible in sysfs directory listing, but attempts to read it result
in ENOTSUPP. In these cases, libvirt is unable to read phys_port_id of
either the PF or the VF, so it just returns the first entry in the
PF/VF's list of netdevs.

But we've found that the i40e driver is in between those two
situations - it implements phys_port_id for PF netdevs, but doesn't
implement it for VF netdevs. So libvirt would successfully read the
phys_port_id of the PF netdev, then try to find a VF netdev with
matching phys_port_id, but would fail because phys_port_id is NULL for
all VFs. This would result in a message like the following:

   Could not find network device with phys_port_id '3cfdfe9edc39'
   under PCI device at /sys/class/net/ens4f1/device/virtfn0

To solve this problem in a way that won't break functionality for
anyone else, this patch saves the first netdev name we find for the
device, and returns that if we fail to find a netdev with the desired

3 days agoqemu: blockPeek: Enforce buffer filling
Peter Krempa [Mon, 18 Sep 2017 14:08:40 +0000]
qemu: blockPeek: Enforce buffer filling

Documentation states:

"'offset' and 'size' represent an area which must lie entirely within
the device or file." Enforce the that the buffer lies within fully.

3 days agoqemu: blockPeek: Fix filling of the return buffer
Peter Krempa [Mon, 18 Sep 2017 14:03:58 +0000]
qemu: blockPeek: Fix filling of the return buffer

Commit 3956af495e broke the blockPeek API since virStorageFileRead
allocates a return buffer and fills it with the data, while the API
fills a user-provided buffer. This did not get caught by the compiler
since the API prototype uses a 'void *'.

Fix it by transferring the data from the allocated buffer to the user
provided buffer.


3 days agoRevert "travis: Limit git depth to 5 commits"
Andrea Bolognani [Tue, 19 Sep 2017 13:49:19 +0000]
Revert "travis: Limit git depth to 5 commits"

Turns out a build job can be stuck waiting for a macOS worker to
become available for a pretty long time: if more than 5 commits
have been pushed in the meantime, the clone will be too shallow
for the worker to find the commit it's supposed to verify, and
the build job will fail.

See for an
example of the failure described.

This reverts commit 2e975abdc9bbc9e965486e8486cc17a771cdaeb3.

Signed-off-by: Andrea Bolognani <>
Reviewed-by: Daniel P. Berrange <>

3 days agopython: Don't hardcode interpreter path
Andrea Bolognani [Tue, 19 Sep 2017 10:42:09 +0000]
python: Don't hardcode interpreter path

This is particularly useful on operating systems that don't ship
Python as part of the base system (eg. FreeBSD) while still working
just as well as it did before on Linux.

While at it, make it explicit that our scripts are only going to
work with Python 2, and remove the usage of unbuffered I/O, which
as far as I can tell has no effect on the output files.

Signed-off-by: Andrea Bolognani <>

3 days agoperl: Don't hardcode interpreter path
Andrea Bolognani [Mon, 18 Sep 2017 12:35:50 +0000]
perl: Don't hardcode interpreter path

This is particularly useful on operating systems that don't ship
Perl as part of the base system (eg. FreeBSD) while still working
just as well as it did before on Linux.

In one case (src/rpc/ the interpreter path was
missing altogether.

Signed-off-by: Andrea Bolognani <>

3 days agoqemu: Mark graphics ports used on reconnect
Michal Privoznik [Mon, 18 Sep 2017 13:39:58 +0000]
qemu: Mark graphics ports used on reconnect

I don't want to mask the real problem, but one can advocate
that we should be marking graphics ports as already in use on
qemuProcessReconnect anyway, because we already know that they
are taken.

Signed-off-by: Michal Privoznik <>

3 days agoconfigure: fix check for DEVLINK_CMD_ESWITCH_GET
Ján Tomko [Mon, 18 Sep 2017 17:21:47 +0000]
configure: fix check for DEVLINK_CMD_ESWITCH_GET

Instead of checking for all possible constants that every
kernel header with devlink support should have (and defining
HAVE_DECL_DEVLINK as 1 if any of them is present due to the
way AC_CHECK_DECLS works), only check for DEVLINK_CMD_ESWITCH_GET.

This is the name of the constant since kernel 4.11. Between 4.8
and 4.11, the now deprecated spelling DEVLINK_CMD_ESWITCH_MODE_GET
was used.

Assume DEVLINK_ESWITCH_MODE_SWITCHDEV is available, since it was
introduced along with the deprecated spelling.

3 days agostorage: Use virStoragePoolObjDefUseNewDef
John Ferlan [Wed, 26 Jul 2017 17:05:03 +0000]
storage: Use virStoragePoolObjDefUseNewDef

Use the new accessor API for storage_driver.

3 days agostorage: Use virStoragePoolObj{Get|Incr|Decr}Asyncjobs
John Ferlan [Wed, 26 Jul 2017 16:27:26 +0000]
storage: Use virStoragePoolObj{Get|Incr|Decr}Asyncjobs

Use the new accessor APIs for storage_driver.

3 days agostorage: Internally represent @autostart as bool
John Ferlan [Sat, 19 Aug 2017 12:16:18 +0000]
storage: Internally represent @autostart as bool

Since it's been used that way anyway, let's just convert it to a bool
and only make the external representation be an int.

3 days agostorage: Use virStoragePoolObj{Is|Set}Autostart
John Ferlan [Wed, 26 Jul 2017 16:23:11 +0000]
storage: Use virStoragePoolObj{Is|Set}Autostart

Use the new accessor APIs for storage_driver and test_driver.

3 days agostorage: Use virStoragePoolObj{Is|Set}Active
John Ferlan [Wed, 26 Jul 2017 16:15:42 +0000]
storage: Use virStoragePoolObj{Is|Set}Active

Use the new accessor APIs for storage_driver, test_driver, and
gluster backend.

3 days agostorage: Use virStoragePoolObjGetAutostartLink
John Ferlan [Wed, 26 Jul 2017 16:06:58 +0000]
storage: Use virStoragePoolObjGetAutostartLink

Use the new accessor API for storage_driver.

3 days agostorage: Use virStoragePoolObj{Get|Set}ConfigFile
John Ferlan [Wed, 26 Jul 2017 15:56:31 +0000]
storage: Use virStoragePoolObj{Get|Set}ConfigFile

Use the new accessor APIs for storage_driver and test_driver.

3 days agostorage: Introduce APIs to search/scan storage pool volumes list
John Ferlan [Tue, 9 May 2017 12:18:33 +0000]
storage: Introduce APIs to search/scan storage pool volumes list

Introduce virStoragePoolObjForEachVolume to scan each volume
calling the passed callback function until all volumes have been
processed in the storage pool volume list, unless the callback
function returns an error.

Introduce virStoragePoolObjSearchVolume to search each volume
calling the passed callback function until it returns true
indicating that the desired volume was found.

Signed-off-by: John Ferlan <>

3 days agostorage: Introduce storage volume add, delete, count APIs
John Ferlan [Tue, 9 May 2017 12:05:16 +0000]
storage: Introduce storage volume add, delete, count APIs

Create/use virStoragePoolObjAddVol in order to add volumes onto list.

Create/use virStoragePoolObjRemoveVol in order to remove volumes from list.

Create/use virStoragePoolObjGetVolumesCount to get count of volumes on list.

For the storage driver, the logic alters when the volumes.obj list grows
to after we've fetched the volobj. This is an optimization of sorts, but
also doesn't "needlessly" grow the volumes.objs list and then just decr
the count if the virGetStorageVol fails.

Signed-off-by: John Ferlan <>

3 days agostorage: Fill in storage pool @active properly
John Ferlan [Sat, 19 Aug 2017 12:25:21 +0000]
storage: Fill in storage pool @active properly

It's a bool not an int, so use true/false and not 1/0

3 days agostorage: Introduce virStoragePoolObjNew
John Ferlan [Mon, 8 May 2017 20:02:36 +0000]
storage: Introduce virStoragePoolObjNew

Create/use a helper to perform object allocation.

Adjust storagevolxml2argvtest.c in order to use the allocator and
setting of the obj->def.

Signed-off-by: John Ferlan <>

3 days agostorage: Create accessor API's for virStoragePoolObj
John Ferlan [Sun, 7 May 2017 11:56:03 +0000]
storage: Create accessor API's for virStoragePoolObj

In preparation for making a private object, create accessor API's for
consumer storage functions to use:


Signed-off-by: John Ferlan <>

3 days agovirsh: man: Describe the 'create' command a bit more
Erik Skultety [Fri, 8 Sep 2017 12:52:44 +0000]
virsh: man: Describe the 'create' command a bit more

So we refer to the terms 'persistent' and 'transient' across the whole
man page, without describing it further, but more importantly, how the
create command affects it, i.e. explicitly stating that domain created
via the 'create' command are going to be transient or persistent,
depending on whether there is an existing persistent domain with a
matching <name> and <uuid>, in which case it will remain persistent, but
will run using a one-time configuration, otherwise it's going to be
transient and will vanish once destroyed.

Signed-off-by: Erik Skultety <>

3 days agoiohelper: reduce zero-out in align case
Nikolay Shirokovskiy [Thu, 7 Sep 2017 07:44:15 +0000]
iohelper: reduce zero-out in align case

We only need to zero-out bytes that will be written.
May be we even don't need to zero-out at all because
of immediate truncate.

3 days agoiohelper: simplify last direct write alignment
Nikolay Shirokovskiy [Thu, 7 Sep 2017 07:44:14 +0000]
iohelper: simplify last direct write alignment

Make alignment of last direct write more straightforward. Using
additionally two flags 'end' and 'shortRead' looks complicated.

3 days agoiohelper: drop unused operation length limit
Nikolay Shirokovskiy [Thu, 7 Sep 2017 07:44:13 +0000]
iohelper: drop unused operation length limit

4 days agoapparmor: cater for new AAVMF image location
Guido Günther [Fri, 15 Sep 2017 16:04:21 +0000]
apparmor: cater for new AAVMF image location

Things moved again, sigh.

Reviewed-By: Jamie Strandboge <>
Michal Privoznik <>

4 days agoapparmor: add attach_disconnected
Guido Günther [Fri, 15 Sep 2017 15:13:16 +0000]
apparmor: add attach_disconnected

Otherwise we fail to reconnect to /dev/net/tun opened by libvirtd

    [ 8144.507756] audit: type=1400 audit(1505488162.386:38069121): apparmor="DENIED" operation="file_perm" info="Failed name lookup - disconnected path" error=-13 profile="libvirt-5dfcc8a7-b79a-4fa9-a41f-f6271651934c" name="dev/net/tun" pid=9607 comm="qemu-system-x86" requested_mask="r" denied_mask="r" fsuid=117 ouid=0

Reviewed-By: Jamie Strandboge <>
Acked-By: Michal Privoznik <>

4 days agocpu: Add new Skylake-Server CPU model
Jiri Denemark [Wed, 13 Sep 2017 11:27:03 +0000]
cpu: Add new Skylake-Server CPU model

Available since QEMU 2.10.0 (specifically commit

Signed-off-by: Jiri Denemark <>
Reviewed-by: Pavel Hrdina <>

4 days agocpu: Add clwb/pcommit CPU features
Jiri Denemark [Wed, 13 Sep 2017 11:27:10 +0000]
cpu: Add clwb/pcommit CPU features

The features were added to QEMU by commit v2.4.0-1690-gf7fda28094 as
Skylake Server features.

Signed-off-by: Jiri Denemark <>
Reviewed-by: Pavel Hrdina <>

4 days agotests: Add CPUID data for Intel(R) Xeon(R) Gold 6148 CPU
Jiri Denemark [Wed, 13 Sep 2017 11:07:50 +0000]
tests: Add CPUID data for Intel(R) Xeon(R) Gold 6148 CPU

Signed-off-by: Jiri Denemark <>
Reviewed-by: Pavel Hrdina <>

4 days agodocs: Update news.xml to describe switchdev offloading
John Ferlan [Sat, 26 Aug 2017 13:22:25 +0000]
docs: Update news.xml to describe switchdev offloading

4 days agonodedev: add switchdev to NIC capabilities
Edan David [Mon, 21 Aug 2017 09:19:53 +0000]
nodedev: add switchdev to NIC capabilities

Adding functionality to libvirt that will allow querying the interface
for the availability of switchdev Offloading NIC capabilities.

The switchdev mode was introduced in kernel 4.8, the iproute2-devlink
command to retrieve the switchdev NIC feature with command example:

    devlink dev eswitch show pci/0000:03:00.0

This feature is needed for Openstack so we can do a scheduling decision
if the NIC is in Hardware Offload (switchdev) or regular SR-IOV (legacy) mode.
And select the appropriate hypervisors with the requested capability see [1].

[1] -

Reviewed-by: Laine Stump <>
Reviewed-by: John Ferlan <>

4 days agoqemu: Implement usernet address
Michal Privoznik [Wed, 13 Sep 2017 09:16:04 +0000]
qemu: Implement usernet address

Apart from generic checks, we need to constrain netmask/prefix
length a bit. Thing is, with current implementation QEMU needs to
be able to 'assign' some IP addresses to the virtual network. For
instance, the default gateway is at x.x.x.2, dns is at x.x.x.3,
the default DHCP range is x.x.x.15-x.x.x.30. Since we don't
expose these settings yet, it's safer to require shorter prefix
to have room for the defaults.

Signed-off-by: Michal Privoznik <>

4 days agoconf: Allow usernet to have an address
Michal Privoznik [Wed, 13 Sep 2017 08:47:52 +0000]
conf: Allow usernet to have an address

Currently, all that users can specify for an interface type of
'user' is the common attributes: PCI address, NIC model (and
that's basically it). However, some need to configure other
address range than the default one.

Signed-off-by: Michal Privoznik <>

4 days agocpu_x86: Implement virCPUValidateFeatures
Jiri Denemark [Thu, 14 Sep 2017 14:14:40 +0000]
cpu_x86: Implement virCPUValidateFeatures

The function checks whether all CPU features used in a CPU definition
are specified in cpu_map.xml.

Signed-off-by: Jiri Denemark <>

4 days agocpu_s390: Implement virCPUValidateFeatures
Jiri Denemark [Thu, 14 Sep 2017 14:09:35 +0000]
cpu_s390: Implement virCPUValidateFeatures

Only feature policy is checked on s390, which was previously done in
virCPUUpdate, but that's not the correct place for the check once we
have virCPUValidateFeatures.

Signed-off-by: Jiri Denemark <>

4 days agoqemu: Validate guest CPU features before starting a domain
Jiri Denemark [Thu, 14 Sep 2017 14:07:59 +0000]
qemu: Validate guest CPU features before starting a domain

Signed-off-by: Jiri Denemark <>

4 days agocpu: Introduce virCPUValidateFeatures
Jiri Denemark [Thu, 14 Sep 2017 14:04:13 +0000]
cpu: Introduce virCPUValidateFeatures

This new API may be used to check whether all features used in a CPU
definition are valid (e.g., libvirt knows their name, their policy is
supported, etc.). Leaving this API unimplemented in an arch subdriver
means libvirt does not restrict CPU features usable on the associated

Signed-off-by: Jiri Denemark <>

4 days agoqemu: Filter CPU features returned by qemuConnectBaselineCPU
Jiri Denemark [Wed, 13 Sep 2017 15:28:48 +0000]
qemu: Filter CPU features returned by qemuConnectBaselineCPU

The host CPU definitions reported in the capabilities XML may contain
CPU features unknown to QEMU, but the result of virConnectBaselineCPU is
supposed to be directly usable as a guest CPU definition and thus it
should only contain features QEMU knows about.

Signed-off-by: Jiri Denemark <>

4 days agoqemu: Publish virQEMUCapsCPUFilterFeatures
Jiri Denemark [Wed, 13 Sep 2017 15:28:13 +0000]
qemu: Publish virQEMUCapsCPUFilterFeatures

Signed-off-by: Jiri Denemark <>

4 days agoqemu: Pass virArch * to virQEMUCapsCPUFilterFeatures
Jiri Denemark [Wed, 13 Sep 2017 15:26:07 +0000]
qemu: Pass virArch * to virQEMUCapsCPUFilterFeatures

The filter only needs to know the CPU architecture. Passing
virQEMUCapsPtr as opaque is a bit overkill.

Signed-off-by: Jiri Denemark <>

4 days agocpu: Drop cpuBaselineXML
Jiri Denemark [Wed, 13 Sep 2017 14:27:15 +0000]
cpu: Drop cpuBaselineXML

The implementation of virConnectBaselineCPU may be different for each
hypervisor. Thus it shouldn't really be implmented in the cpu code.

Signed-off-by: Jiri Denemark <>

4 days agocpu: Don't log CPU models in cpuBaselineXML
Jiri Denemark [Wed, 13 Sep 2017 14:05:15 +0000]
cpu: Don't log CPU models in cpuBaselineXML

They are logged in cpuBaseline anyway.

Signed-off-by: Jiri Denemark <>

4 days agocpu: Use virCPUDefListParse in cpuBaselineXML
Jiri Denemark [Wed, 13 Sep 2017 13:38:31 +0000]
cpu: Use virCPUDefListParse in cpuBaselineXML

Signed-off-by: Jiri Denemark <>

4 days agocpu_conf: Introduce virCPUDefList{Parse,Free}
Jiri Denemark [Wed, 13 Sep 2017 13:23:43 +0000]
cpu_conf: Introduce virCPUDefList{Parse,Free}

For parsing a list of CPU XMLs into a NULL-terminated list of CPU defs.

Signed-off-by: Jiri Denemark <>

4 days agovirsh: Enhance documentation of --rdma-pin-all option
Jiri Denemark [Fri, 8 Sep 2017 19:31:29 +0000]
virsh: Enhance documentation of --rdma-pin-all option

Signed-off-by: Jiri Denemark <>
Reviewed-by: Pavel Hrdina <>

7 days agospec: Fix %license compat on RHEL6
Cole Robinson [Fri, 15 Sep 2017 17:04:18 +0000]
spec: Fix %license compat on RHEL6

The macro needs to be defined closer to its usage

7 days agospec: Use %license when available
Cole Robinson [Thu, 14 Sep 2017 21:21:29 +0000]
spec: Use %license when available

This is required by the fedora packaging guidelines:

This macro isn't available on stock RHEL6 so provide a backcompat

Reported-by: Ville Skyttä <>

7 days agospec: Own %{_libdir}/libvirt{,/connection-driver} dirs
Ville Skyttä [Sun, 27 Aug 2017 16:35:07 +0000]
spec: Own %{_libdir}/libvirt{,/connection-driver} dirs

Owning all created directories is a requirement of the Fedora
packaging guidelines
Signed-off-by: Cole Robinson <>

7 days agoqemu: Fix return check on virHashAddEntry call
John Ferlan [Fri, 15 Sep 2017 11:36:55 +0000]
qemu: Fix return check on virHashAddEntry call

Luckily it only returns 0 or -1

7 days agoconf: Use virXMLFormatElement to format disk source network
John Ferlan [Wed, 13 Sep 2017 20:45:51 +0000]
conf: Use virXMLFormatElement to format disk source network

Commit id 'e02ff020cac' neglected to use the attrBuf and childBuf
in the virDomainDiskSourceFormatNetwork call.

So make the necessary alterations to allow usage.

7 days agoconf: Move <disk> encryption validation
John Ferlan [Thu, 14 Sep 2017 15:01:40 +0000]
conf: Move <disk> encryption validation

Rather than checking during XML processing, move the check for
valid <encryption> into virDomainDiskDefParseValidate and alter
the text of the message slightly to be a bit more correct.

7 days agoconf: Add invalid domain disk encryption test
John Ferlan [Thu, 14 Sep 2017 15:14:57 +0000]
conf: Add invalid domain disk encryption test

Add a test to prove checking for invalid luks disk formatting check.
The error message will indicate supplying the <cipher> element is

7 days agoconf: Move <disk> authdef validation
John Ferlan [Wed, 13 Sep 2017 15:00:28 +0000]
conf: Move <disk> authdef validation

Rather than checking during XML processing, move the checks for correct
and valid auth into virDomainDiskDefParseValidate. This will introduce
virDomainDiskSourceDefParseAuthValidate to validate that the authdef
stored for the virStorageSource is valid. This can then be expanded
to service backingStore sources as well.

Alter the message text slightly as well to distinguish between an
unknown name and an incorrectly used name.  Since type is not a
mandatory field, add the NULLSTR() around the output of the unknown
error. NB, a config using unknown formatting would fail virschematest
since it only accepts 'iscsi' and 'ceph' as "valid" types.

7 days agoconf: Add invalid secrettype checks
John Ferlan [Wed, 13 Sep 2017 19:24:41 +0000]
conf: Add invalid secrettype checks

Add a couple of tests to "validate" checks in domain_conf that either
a missing secrettype (CONFIG_UNSUPPORTED) or an mismatched secrettype
of ceph for an iSCSI disk (INTERNAL_ERROR) will cause a parsing error.

7 days agodocs: Remove unnecessary <auth> example for iscsi disk type='volume'
John Ferlan [Wed, 13 Sep 2017 18:22:55 +0000]
docs: Remove unnecessary <auth> example for iscsi disk type='volume'

Alter the example to remove the <auth> from:

  <disk type='volume' device='disk'>
    <driver name='qemu' type='raw'/>
    <source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/>
    <auth username='myuser'>
      <secret type='iscsi' usage='libvirtiscsi'/>
    <target dev='vdb' bus='virtio'/>


  <disk type='volume' device='disk'>
    <driver name='qemu' type='raw'/>
    <source pool='iscsi-pool' volume='unit:0:0:2' mode='direct'/>
    <auth username='myuser'>
      <secret type='iscsi' usage='libvirtiscsi'/>
    <target dev='vdc' bus='virtio'/>

The reality is, it's not even used. For a <source pool> the authdef
from the storage source pool will supercede whatever is in the <disk>
definition during virStorageTranslateDiskSourcePool processing. In fact,
if the pool doesn't have/need authentication, then the authdef would
be removed anyway as the storage pool would be handling things.

The "proof" for this is in the adjustment to the test to add an
<auth> for a disk. The resulting .args file won't add what normally
would be added "myname:encodedpassword@" prior to the hostname in
the IQN (e.g. iscsi://

8 days agoqemu: Restore errors when rolling back disk image state
Peter Krempa [Mon, 11 Sep 2017 13:28:15 +0000]
qemu: Restore errors when rolling back disk image state

Some operations done to rollback disk image labelling and locking might
overwrite (or clear) the actual error. Remember the original error when
tearing down disk access so that it's not obscured.


8 days agoqemu: hotplug: Use new helpers for storing libvirt errors
Peter Krempa [Tue, 12 Sep 2017 08:32:27 +0000]
qemu: hotplug: Use new helpers for storing libvirt errors

The helpers allow to simplify restoring original errors in most cases.

8 days agoutil: error: Add helpers for saving and restoring of last error
Peter Krempa [Fri, 1 Sep 2017 14:19:56 +0000]
util: error: Add helpers for saving and restoring of last error

Some cleanup paths overwrite a usefull error message with a less useful
one and we then try to preserve the original message. The handlers added
in this patch will simplify the operations since they are designed right
for the purpose.

8 days agonews: document spice rendernode DAC changes
Cole Robinson [Tue, 12 Sep 2017 16:31:29 +0000]
news: document spice rendernode DAC changes

Reviewed-by: Andrea Bolognani <>

8 days agotravis: Shuffle sections around
Andrea Bolognani [Thu, 14 Sep 2017 11:31:17 +0000]
travis: Shuffle sections around

Order them more logically and make sure that stuff that doesn't
need to be modified frequently if at all, such as the notification
settings, are out of the way.

Perform other very minor tweaks as well.

Signed-off-by: Andrea Bolognani <>
Reviewed-by: Martin Kletzander <>

8 days agotravis: Install more build dependencies
Andrea Bolognani [Fri, 8 Sep 2017 14:42:28 +0000]
travis: Install more build dependencies

Since configure automatically picks up as many optional dependencies
as possible, installing more packages allows us to improve our test

Signed-off-by: Andrea Bolognani <>
Reviewed-by: Daniel P. Berrange <>

8 days agotravis: Improve test matrix
Andrea Bolognani [Wed, 6 Sep 2017 14:08:26 +0000]
travis: Improve test matrix

The default distribution is apparently ignored if an explicit test
matrix is provided, so we haven't actually been testing the precise
plus gcc combo.

Signed-off-by: Andrea Bolognani <>
Reviewed-by: Daniel P. Berrange <>