25 hours agotests: Add SELINUX_LIBS to fix viridentitytest linker bug master
Julio Faracco [Fri, 24 Oct 2014 12:33:52 +0000]
tests: Add SELINUX_LIBS to fix viridentitytest linker bug

In a clean build system (Ubuntu 14.04), the viridentitytest failed to compile.
Even if all the SELINUX libraries and depedencies are installed. See the error
message below:

CC viridentitytest.o
  CCLD     viridentitytest
/usr/bin/ld: viridentitytest.o: undefined reference to symbol
//lib/x86_64-linux-gnu/ error adding symbols: DSO missing
                                                           from command line
collect2: error: ld returned 1 exit status
make: *** [viridentitytest] Error 1

Simply adding the variable SELINUX_LIBS in viridentitytest rules of to include SELINUX libraries into viridentitytest solved that
compilation issue.

Signed-off-by: Julio Faracco <>
Signed-off-by: Eric Blake <>

26 hours agovbox: network: make sure driver is not NULL in virRegisterNetworkDriver
Shanzhi Yu [Fri, 24 Oct 2014 09:31:43 +0000]
vbox: network: make sure driver is not NULL in virRegisterNetworkDriver

libvirtd will report below error if it does not make sure driver was not NULL
in virRegisterNetworkDriver

$ libvirtd
2014-10-24 09:24:36.443+0000: 28876: info : libvirt version: 1.2.10
2014-10-24 09:24:36.443+0000: 28876: error : virRegisterNetworkDriver:549 : driver in virRegisterNetworkDriver must not be NULL
2014-10-24 09:24:36.443+0000: 28876: error : virDriverLoadModule:99 : Failed module registration vboxNetworkRegister

Signed-off-by: Shanzhi Yu <>
Signed-off-by: Eric Blake <>

26 hours agoAdd new driver-*.h files to DRIVER_SOURCES
Daniel P. Berrange [Fri, 24 Oct 2014 16:39:48 +0000]
Add new driver-*.h files to DRIVER_SOURCES

The recently added driver-*.h files were not listed in the causing them to be missed when creating dists.

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

27 hours agoFix indentation of sysinfo data
Daniel P. Berrange [Thu, 23 Oct 2014 17:35:57 +0000]
Fix indentation of sysinfo data

The <sysinfo> data block was indented by 2 spaces too many.
This was missed because we never had any test validating
the XML formatting.

27 hours agoFix preprocessor indentation in
Daniel P. Berrange [Thu, 23 Oct 2014 12:54:31 +0000]
Fix preprocessor indentation in

The rule for checking preprocessor indentation was
mistakenly missing the file due to bad file
extension matching rule. Fix that and the resolve the
incorrect indentation that is identified.

27 hours agoMove virConnect related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virConnect related APIs out of

Create a new libvirt-host.h file to hold the public
API definitions for the virConnect type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virDomain related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virDomain related APIs out of

Create a new libvirt-domain.h file to hold the public
API definitions for the virDomain type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virEvent related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virEvent related APIs out of

Create a new libvirt-event.h file to hold the public
API definitions for the virEvent type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virStoragePool/Vol related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virStoragePool/Vol related APIs out of

Create a new libvirt-storage.h file to hold the public
API definitions for the virStorage/Vol type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virStream related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virStream related APIs out of

Create a new libvirt-stream.h file to hold the public
API definitions for the virStream type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

Note the definition of virStreamPtr is not moved, since that
must be declared early for all other libvirt APIs to be able
to reference it.

27 hours agoMove virSecret related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virSecret related APIs out of

Create a new libvirt-secret.h file to hold the public
API definitions for the virSecret type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virNodeDevice related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virNodeDevice related APIs out of

Create a new libvirt-nodedev.h file to hold the public
API definitions for the virNodeDevice type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virNWFilter related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virNWFilter related APIs out of

Create a new libvirt-nwfilter.h file to hold the public
API definitions for the virNWFilter type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virInterface related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virInterface related APIs out of

Create a new libvirt-interface.h file to hold the public
API definitions for the virInterface type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virNetwork related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virNetwork related APIs out of

Create a new libvirt-network.h file to hold the public
API definitions for the virNetwork type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virDomainSnapshot related APIs out of
Daniel P. Berrange [Thu, 23 Oct 2014 10:28:16 +0000]
Move virDomainSnapshot related APIs out of

Create a new libvirt-domain-snapshot.h file to hold the public
API definitions for the virDomainSnapshot type. This header
file is not self-contained, so applications will not directly
include it. They will continue to #include <libvirt/libvirt.h>

27 hours agoMove virConnect/virNode related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virConnect/virNode related APIs out of libvirt.c

Introduce a src/libvirt-host.c file to hold all the
methods related to the virConnect type.

27 hours agoMove virDomain related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virDomain related APIs out of libvirt.c

Introduce a src/libvirt-domain.c file to hold all the
methods related to the virDomain type.

27 hours agoMake virTypedParameterValidateSet non-static
Daniel P. Berrange [Fri, 24 Oct 2014 15:54:29 +0000]
Make virTypedParameterValidateSet non-static

The virTypedParameterValidateSet method will need to be used
from several libvirt-*.c files so must be non-static

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

27 hours agoMove virStorage{Pool,Vol} related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virStorage{Pool,Vol} related APIs out of libvirt.c

Introduce a src/libvirt-storage.c file to hold all the
methods related to the virStorage{Pool,Vol} types.

27 hours agoMove virStream related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virStream related APIs out of libvirt.c

Introduce a src/libvirt-stream.c file to hold all the
methods related to the virStream type.

27 hours agoMove virSecret related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virSecret related APIs out of libvirt.c

Introduce a src/libvirt-secret.c file to hold all the
methods related to the virSecret type.

28 hours agoMove virNodeDevice related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virNodeDevice related APIs out of libvirt.c

Introduce a src/libvirt-nodedev.c file to hold all the
methods related to the virNodeDevice type.

28 hours agoMove virNWFilter related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virNWFilter related APIs out of libvirt.c

Introduce a src/libvirt-nwfilter.c file to hold all the
methods related to the virNWFilter type.

28 hours agoMove virInterface related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virInterface related APIs out of libvirt.c

Introduce a src/libvirt-interface.c file to hold all the
methods related to the virInterface type.

28 hours agoMove virNetwork related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virNetwork related APIs out of libvirt.c

Introduce a src/libvirt-network.c file to hold all the
methods related to the virNetwork type.

28 hours agoMove virDomainSnapshot related APIs out of libvirt.c
Daniel P. Berrange [Wed, 22 Oct 2014 15:29:09 +0000]
Move virDomainSnapshot related APIs out of libvirt.c

Introduce a src/libvirt-domain-snapshot.c file to hold all the
methods related to the virDomainSnapshot type.

44 hours agohyperv: avoid query memleaks on failure
Eric Blake [Wed, 8 Oct 2014 16:23:59 +0000]
hyperv: avoid query memleaks on failure

The function hypervEnumAndPull consumes query on success, but leaked
it on failure.  Rather than having to change all callers (many of
them indirect callers through the generated
hypervGetMsvmComputerSystemList), it was easier to just guarantee
that the buffer is cleaned on return from the function.

* src/hyperv/hyperv_wmi.c (hypervEnumAndPull): Don't leak query on

Signed-off-by: Eric Blake <>

2 days agoSplit driver.h into multiple parts
Daniel P. Berrange [Thu, 16 Oct 2014 10:01:19 +0000]
Split driver.h into multiple parts

With the large number of APIs in libvirt the driver.h file,
it is easy to get lost looking for things. Split each driver
into a separate header file based on the functional driver

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

2 days agoRename virDriver to virHypervisorDriver
Daniel P. Berrange [Thu, 16 Oct 2014 09:25:59 +0000]
Rename virDriver to virHypervisorDriver

To prepare for introducing a single global driver, rename the
virDriver struct to virHypervisorDriver and the registration
API to virRegisterHypervisorDriver()

3 days agoqemu: Disallow NUMA/network tuning for session mode
Erik Skultety [Wed, 1 Oct 2014 12:57:32 +0000]
qemu: Disallow NUMA/network tuning for session mode

Tuning NUMA or network interface parameters requires root
privileges to manage cgroups. Thus an attempt to set some of these
parameters in session mode on a running domain should be invalid
followed by an error. An example might be memory tuning which raises
an error in such case.

The following behavior in session mode will be present after applying
this patch:

  Tuning  |      SET      |   GET  |
NUMA      | shut off only | always |
Memory    |     never     | never  |
Interface |     never     | always |


3 days agoqemu: migration: Make check for empty hook XML robust
Peter Krempa [Wed, 22 Oct 2014 09:27:36 +0000]
qemu: migration: Make check for empty hook XML robust

Also consider whitespace only strings returned from the hook as empty

3 days agoqemu: restore: Fix restoring of VM when the restore hook returns empty XML
Peter Krempa [Wed, 22 Oct 2014 09:22:08 +0000]
qemu: restore: Fix restoring of VM when the restore hook returns empty XML

The documentation for the restore hook states that returning an empty
XML is equivalent with copying the input. There was a bug in the code
checking the returned string by checking the string instead of the
contents. Use the new helper to check if the string is empty.

3 days agoutil: string: Add helper to check whether string is empty
Peter Krempa [Wed, 22 Oct 2014 08:26:42 +0000]
util: string: Add helper to check whether string is empty

The helper checks whether a string contains only whitespace or is NULL.
This will be helpful to skip cases where a user string is optional, but
may be provided empty with the same meaning.

3 days agodoc: HACKING: Regenerate after recent change
Peter Krempa [Wed, 22 Oct 2014 15:50:08 +0000]
doc: HACKING: Regenerate after recent change

3 days agoAdd support for /run/initctl
Rick Harris [Wed, 22 Oct 2014 12:09:49 +0000]
Add support for /run/initctl

Newer versions of Debian use '/run/initctl' instead of '/dev/initctl'.
This patch updates the code to search for the FIFO from a list of
well-known locations.

3 days agodocs: fix an improper git browsable address
Chen Hanxiao [Wed, 22 Oct 2014 09:38:33 +0000]
docs: fix an improper git browsable address

Signed-off-by: Chen Hanxiao <>

3 days agoFix cast errors with clang
Roman Bogorodskiy [Tue, 21 Oct 2014 14:22:36 +0000]
Fix cast errors with clang

Build with clang fails with:

CC util/libvirt_util_la-virsocketaddr.lo
util/virsocketaddr.c:904:17: error: cast from 'struct sockaddr *' to
'struct sockaddr_in *' increases required alignment from 1 to 4
        inet4 = (struct sockaddr_in*) res->ai_addr;
util/virsocketaddr.c:909:17: error: cast from 'struct sockaddr *' to
'struct sockaddr_in6 *' increases required alignment from 1 to 4
        inet6 = (struct sockaddr_in6*) res->ai_addr;
2 errors generated.

Fix that by replacing virSocketAddrParseInternal() call with
virSocketAddrParse() in the virSocketAddrIsNumericLocalhost() function.
virSocketAddrParse stores an address in virSocketAddr.
virSocketAddr uses a union to store an address, so it doesn't
need casting.

4 days agodocs: Mention repository locations in contributor guidelines
Martin Kletzander [Tue, 21 Oct 2014 10:20:56 +0000]
docs: Mention repository locations in contributor guidelines

Signed-off-by: Martin Kletzander <>

4 days agoqemu: unref cfg after TerminateMachine has been called
Martin Kletzander [Tue, 21 Oct 2014 09:44:13 +0000]
qemu: unref cfg after TerminateMachine has been called

Commit 4882618ed13b469d92fa8b2b4a158fdb17dbe9f1 added the code that
requests driver cfg, but forgot to unref it.

Signed-off-by: Martin Kletzander <>

4 days agoqemu: x86_64 is good enough for i686
Lubomir Rintel [Thu, 16 Oct 2014 19:28:00 +0000]
qemu: x86_64 is good enough for i686

virt-manager on Fedora sets up i686 hosts with "/usr/bin/qemu-kvm" emulator,
which in turn unconditionally execs qemu-system-x86_64 querying capabilities
then fails:

Error launching details: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/", line 748, in _show_vm_helper
    details = self._get_details_dialog(uri, vm.get_connkey())
  File "/usr/share/virt-manager/virtManager/", line 726, in _get_details_dialog
    obj = vmmDetails(conn.get_vm(connkey))
  File "/usr/share/virt-manager/virtManager/", line 399, in __init__
  File "/usr/share/virt-manager/virtManager/", line 784, in init_details
    domcaps = self.vm.get_domain_capabilities()
  File "/usr/share/virt-manager/virtManager/", line 518, in get_domain_capabilities
    self.get_xmlobj().os.machine, self.get_xmlobj().type)
  File "/usr/lib/python2.7/site-packages/", line 3492, in getDomainCapabilities
    if ret is None: raise libvirtError ('virConnectGetDomainCapabilities() failed', conn=self)
libvirtError: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'


Oct 16 21:08:26 goatlord.localdomain libvirtd[1530]: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'

4 days agoqemu: move setting emulatorpin ahead of monitor showing up
Zhou yimin [Thu, 16 Oct 2014 14:18:48 +0000]
qemu: move setting emulatorpin ahead of monitor showing up

If VM is configured with many devices(including passthrough devices)
and large memory, libvirtd will take seconds(in the worst case) to
wait for monitor. In this period the qemu process may run on any
PCPU though I intend to pin emulator to the specified PCPU in xml

Actually qemu process takes high cpu usage during vm startup.
So this is not the strict CPU isolation in this case.

Signed-off-by: Zhou yimin <>

5 days agodocs: apps: Update references to virt-p2v and virt-v2v.
Richard W.M. Jones [Sat, 18 Oct 2014 14:20:26 +0000]
docs: apps: Update references to virt-p2v and virt-v2v.

These tools have been rewritten upstream, so you don't need to link to
the old tools, link to the new ones and mention they are part of

Also remove the link to "Poor man's P2V".  There's no real reason to
use that technique any longer since the rewritten tools are simple,
fast and highly capable.

5 days agotests: fix incorrect caps for shmem-invalid-size, shmem-small-size
Maxime Leroy [Fri, 17 Oct 2014 16:05:38 +0000]
tests: fix incorrect caps for shmem-invalid-size, shmem-small-size

VIR_TEST_DEBUG=2 ./qemuxml2argvtest generates the following output:

409) QEMU XML-2-ARGV shmem-invalid-size
... Got expected error: unsupported configuration: ivshmem device is not \
 supported with this QEMU binary
410) QEMU XML-2-ARGV shmem-small-size
... Got expected error: unsupported configuration: ivshmem device is not \
supported with this QEMU binary

We should have:

409) QEMU XML-2-ARGV shmem-invalid-size
... Got expected error: XML error: shmem size must be a power of two
410) QEMU XML-2-ARGV shmem-small-size
... Got expected error: XML error: shmem size must be at least 1 MiB

This commit fixes the issue by providing QEMU_CAPS_DEVICE_IVSHMEM caps
for shmem-invalid-size, shmem-small-size test.

Signed-off-by: Maxime Leroy <>

5 days agoconf: tests: fix virDomainNetDefFormat for vhost-user in client mode
Maxime Leroy [Fri, 17 Oct 2014 16:45:18 +0000]
conf: tests: fix virDomainNetDefFormat for vhost-user in client mode

The mode attribute is required for the source element of vhost-user.
Thus virDomainNetDefFormat should always generate a xml with it and not
only when the mode is server.

The commit fixes the issue. And it adds a vhostuser interface in
'client' mode to qemuxml2argv-net-vhostuser.(args|xml) to test this

Signed-off-by: Maxime Leroy <>

9 days agolibxl: add missing 'break' from commit 1298daca
Jim Fehlig [Thu, 16 Oct 2014 06:48:57 +0000]
libxl: add missing 'break' from commit 1298daca

Add missing 'break's from commit 1298daca, as noted by John Ferlan

10 days agoqemu: Convert qemuDomainUpdateDeviceConfig to typecasted enum
Peter Krempa [Wed, 15 Oct 2014 10:24:02 +0000]
qemu: Convert qemuDomainUpdateDeviceConfig to typecasted enum

10 days agoqemu: Convert qemuDomainDetachDeviceConfig to typecasted enum
Peter Krempa [Wed, 15 Oct 2014 10:24:02 +0000]
qemu: Convert qemuDomainDetachDeviceConfig to typecasted enum

10 days agoqemu: Convert qemuDomainAttachDeviceConfig to typecasted enum
Peter Krempa [Wed, 15 Oct 2014 10:24:02 +0000]
qemu: Convert qemuDomainAttachDeviceConfig to typecasted enum

10 days agoqemu: Convert qemuDomainUpdateDeviceLive to typecasted enum
Peter Krempa [Wed, 15 Oct 2014 10:24:02 +0000]
qemu: Convert qemuDomainUpdateDeviceLive to typecasted enum

10 days agoqemu: Convert qemuDomainDetachDeviceLive to typecasted enum
Peter Krempa [Wed, 15 Oct 2014 10:24:02 +0000]
qemu: Convert qemuDomainDetachDeviceLive to typecasted enum

10 days agoconf: fix an memory leak in virSocketAddrIsNumericLocalhost()
Chen Fan [Wed, 15 Oct 2014 09:36:29 +0000]
conf: fix an memory leak in virSocketAddrIsNumericLocalhost()

Signed-off-by: Chen Fan <>

10 days agoconf: Move definition of virDomainParseMemory
Peter Krempa [Mon, 29 Sep 2014 15:38:18 +0000]
conf: Move definition of virDomainParseMemory

Shove it to the top of the file so that it can be reused earlier.

10 days agoImplement empty post parse callbacks for all drivers
Peter Krempa [Mon, 6 Oct 2014 15:28:46 +0000]
Implement empty post parse callbacks for all drivers

To allow easy implementation of a callback check this patch adds empty
post parse callbacks to drivers that were missing them.

10 days agoqemu: monitor: Add functions for object hot-add/remove
Peter Krempa [Tue, 23 Sep 2014 11:25:25 +0000]
qemu: monitor: Add functions for object hot-add/remove

To allow live modification of device backends in qemu libvirt needs to
be able to hot-add/remove "objects". Add monitor backend functions to
allow this.

This function will be used for hot-add/remove of RNG backends,
IOThreads, memory backing objects, etc.

10 days agoutil: json: Add option to skip adding a JSON object if it is NULL
Peter Krempa [Wed, 15 Oct 2014 07:41:49 +0000]
util: json: Add option to skip adding a JSON object if it is NULL

Add a new option specifier that will optionally add a JSON key=value pair
containing a nested object if the added object isn't NULL.

10 days agoutil: json: Improve handling and docs for adding JSON objects
Peter Krempa [Tue, 23 Sep 2014 09:48:08 +0000]
util: json: Improve handling and docs for adding JSON objects

The JSON structure constructor has an option to add JSON arrays to the
constructed object. The description is inaccurate as it can add any json
object even a dict. Change the docs to cover this option and reject
adding NULL objects.

10 days agoutil: json: Split out code to create json value objects
Peter Krempa [Mon, 22 Sep 2014 14:35:02 +0000]
util: json: Split out code to create json value objects

Our qemu monitor code has a converter from key-value pairs to a json
value object. I want to re-use the code later and having it part of the
monitor command generator is inflexible. Split it out into a separate

10 days agoqemu: hotplug: Use typecasted switch statement when plugging new devices
Peter Krempa [Mon, 22 Sep 2014 11:42:02 +0000]
qemu: hotplug: Use typecasted switch statement when plugging new devices

10 days agoconf: Add compile time check that devices were checked for ABI stability
Peter Krempa [Mon, 29 Sep 2014 16:43:34 +0000]
conf: Add compile time check that devices were checked for ABI stability

As in the device info iterator add a switch that will force the compiler
to check that new device types are added to the ABI stability checker.

10 days agoconf: shmem: Add ABI stability check
Peter Krempa [Tue, 7 Oct 2014 12:26:32 +0000]
conf: shmem: Add ABI stability check

Although the device will probably inhibit migration add checks to make
sure that the configuration change gets caught.

10 days agoconf: Improve adding of new address types
Peter Krempa [Tue, 7 Oct 2014 15:21:45 +0000]
conf: Improve adding of new address types

Use typecasted switch statement and note the type used to select the
address type in a comment.

10 days agoCleanup maintainers list
Jiri Denemark [Tue, 14 Oct 2014 21:03:13 +0000]
Cleanup maintainers list

Signed-off-by: Jiri Denemark <>

10 days agolibvirt: Document UNDEFINE_NVRAM in UndefineFlags doc
Cole Robinson [Tue, 14 Oct 2014 09:27:33 +0000]
libvirt: Document UNDEFINE_NVRAM in UndefineFlags doc

10 days agoconf: fix a wrong comment in virSocketAddrNumericFamily()
Chen Fan [Wed, 15 Oct 2014 07:50:09 +0000]
conf: fix a wrong comment in virSocketAddrNumericFamily()

Signed-off-by: Chen Fan <>

10 days agoconf: Check whether migration_address is localhost
Chen Fan [Tue, 7 Oct 2014 04:07:32 +0000]
conf: Check whether migration_address is localhost

When enabling the migration_address option, by default it is
set to "", but it's not a valid address for migration.
so we should add verification and set the default migration_address
to "".

Signed-off-by: Chen Fan <>
Signed-off-by: Ján Tomko <>

10 days agoconf: add check if migration_host is a localhost address
Chen Fan [Tue, 7 Oct 2014 04:07:31 +0000]
conf: add check if migration_host is a localhost address

Signed-off-by: Chen Fan <>

Signed-off-by: Ján Tomko <>

10 days agomigration: add migration_host support for IPv6 address without brackets
Chen Fan [Tue, 7 Oct 2014 04:07:30 +0000]
migration: add migration_host support for IPv6 address without brackets

if specifying migration_host to an Ipv6 address without brackets,
it was resolved to an incorrect address, such as:
but the correct address should be:
so we should add brackets when parsing it.

Signed-off-by: Chen Fan <>

10 days agoIntroduce virStringStripIPv6Brackets
Ján Tomko [Tue, 7 Oct 2014 15:27:40 +0000]
Introduce virStringStripIPv6Brackets

Helper function to strip the brackets from an IPv6 address.
Tested by viruritest.

11 days agovirsh: domain: Use global constant for XML file size limit
Peter Krempa [Tue, 14 Oct 2014 08:04:31 +0000]
virsh: domain: Use global constant for XML file size limit

Few places still used hardcoded limit for maximum XML size for commands
that accept XML files. The hardcoded limits ranged from 8k to 1M. Use
VSH_MAX_XML_FILE to express this limit in a unified way. This will bump
the limit for the commands that used hardcoded string lengths to 10M.


11 days agovirsh: man: Fix description of --live/--config usage
Peter Krempa [Tue, 14 Oct 2014 07:41:24 +0000]
virsh: man: Fix description of --live/--config usage

dommemstat and blkdeviotune's man page incorrectly stated the usage of
--live and --config.

12 days agoconf: improve the comments for "xmlopt"
Wang Rui [Sat, 11 Oct 2014 06:09:22 +0000]
conf: improve the comments for "xmlopt"

Signed-off-by: Wang Rui <>

13 days agoFix leftover typo '&' -> '&&'
Martin Kletzander [Thu, 9 Oct 2014 08:00:05 +0000]
Fix leftover typo '&' -> '&&'

The actual origin of this so called typo are two commits.  The first one
was commit 72f8a7f that came up with the following condition:

if ((i == 8) & (flags & VIR_QEMU_PROCESS_KILL_FORCE))

Fortunately this succeeded thanks to bool being (int)1 and
VIR_QEMU_PROCESS_KILL_FORCE having the value of 1 << 0.  The check was
then moved and altered in 8fd38231179c394f07d8a26bcbf3a0faa5eeaf24 to
current state:

if ((i == 50) & force)

that will work again (both sides of '&' being booleans), but since this
was missed so many times, it may pose a problem in the future in case it
gets copy-pasted again.

Signed-off-by: Martin Kletzander <>

2 weeks agolibxl: Implement basic video device selection
Stefan Bader [Tue, 1 Jul 2014 07:58:18 +0000]
libxl: Implement basic video device selection

This started as an investigation into an issue where libvirt (using the
libxl driver) and the Xen host, like an old couple, could not agree on
who is responsible for selecting the VNC port to use.

Things usually (and a bit surprisingly) did work because, just like that
old couple, they had the same idea on what to do by default. However it
was possible that this ended up in a big argument.

The problem is that display information exists in two different places:
in the vfbs list and in the build info. And for launching the device model,
only the latter is used. But that never gets initialized from libvirt. So
Xen allows the device model to select a default port while libvirt thinks
it has told Xen that this is done by libvirt (though the vfbs config).

While fixing that, I made a stab at actually evaluating the configuration
of the video device. So that it is now possible to at least decide between
a Cirrus or standard VGA emulation and to modify the VRAM within certain
limits using libvirt.

Signed-off-by: Stefan Bader <>
Signed-off-by: Jim Fehlig <>

2 weeks agolibxl: Add function to determine device model type
Jim Fehlig [Fri, 19 Sep 2014 16:32:43 +0000]
libxl: Add function to determine device model type

This patch introduces a function to detect whether the specified
emulator is QEMU_XEN or QEMU_XEN_TRADITIONAL.  Detection is based on the
string "Options specific to the Xen version:" in '$qemu -help' output.
AFAIK, the only qemu containing that string in help output is the
old Xen fork (aka qemu-dm).

QEMU_XEN means a qemu that contains support for Xen.

QEMU_XEN_TRADITIONAL means Xen's old forked qemu 0.10.2

Signed-off-by: Jim Fehlig <>

2 weeks agoXen: Defer setting default vram value to Xen drivers
Jim Fehlig [Fri, 19 Sep 2014 16:13:40 +0000]
Xen: Defer setting default vram value to Xen drivers

Allow the Xen drivers to determine default vram values.  Sane
default vaules depend on the device model being used, so the
drivers are in the best position to determine the defaults.

For the legacy xen driver, it is best to maintain the existing
logic for setting default vram values to ensure there are no
regressions.  The libxl driver currently does not support
configuring a video device.  Support will be added in a
subsequent patch, where the benefit of this change will be

Signed-off-by: Jim Fehlig <>

2 weeks agolibxl: Copy user-specified keymap to libxl build info struct
Jim Fehlig [Fri, 19 Sep 2014 16:38:37 +0000]
libxl: Copy user-specified keymap to libxl build info struct

Commit 4dfc34c3 missed copying the user-specified keymap to
libxl_domain_build_info struct when creating a VFB device.

Signed-off-by: Stefan Bader <>
Signed-off-by: Jim Fehlig <>

2 weeks agoqemu: save domain status after set domain's numa parameters
Shanzhi Yu [Mon, 6 Oct 2014 15:00:00 +0000]
qemu: save domain status after set domain's numa parameters

After set domain's numa parameters for running domain, save the change,
save the change into live xml is needed to survive restarting the libvirtd,
same story with bug 1146511; meanwihle add call
qemuDomainObjBeginJob/qemuDomainObjEndJob in qemuDomainSetNumaParameters

Signed-off-by: Shanzhi Yu <>

2 weeks agoqemu: call qemuDomainObjBeginJob/qemuDomainObjEndJob in qemuDomainSetInterfaceParameters
Shanzhi Yu [Mon, 6 Oct 2014 15:00:00 +0000]
qemu: call qemuDomainObjBeginJob/qemuDomainObjEndJob in qemuDomainSetInterfaceParameters

add call qemuDomainObjBeginJob/qemuDomainObjEndJob in

Signed-off-by: Shanzhi Yu <>

2 weeks agoqemu: save domain status after set the blkio parameters
Shanzhi Yu [Mon, 6 Oct 2014 15:00:00 +0000]
qemu: save domain status after set the blkio parameters

After set the blkio parameters for running domain, save the change into
live xml is needed to survive restarting the libvirtd, same story with
bug 1146511, meanwhile add call qemuDomainObjBeginJob/qemuDomainObjEndJob
in qemuDomainSetBlkioParameters

Signed-off-by: Shanzhi Yu <>

2 weeks agoFix build-time pkg-config files in VPATH
Jiri Denemark [Tue, 7 Oct 2014 13:22:52 +0000]
Fix build-time pkg-config files in VPATH

The pkg-config files in src/ make it pretty easy to build language
bindings against an uninstalled libvirt, however, they don't work with
VPATH builds. The reason is that all *-api.xml files are generated in
source rather than build directory.

Signed-off-by: Jiri Denemark <>

2 weeks agosecurity_selinux: Don't relabel /dev/net/tun
Michal Privoznik [Tue, 7 Oct 2014 14:22:17 +0000]
security_selinux: Don't relabel /dev/net/tun

The code for relabelling the TAP FD is there due to a race. When
libvirt creates a /dev/tapN device it's labeled as
'system_u:object_r:device_t:s0' by default. Later, when
udev/systemd reacts to this device, it's relabelled to the
expected label 'system_u:object_r:tun_tap_device_t:s0'. Hence, we
have a code that relabels the device, to cut the race down. For
more info see ae368ebfcc4.

But the problem is, the relabel function is called on all TUN/TAP
devices. Yes, on /dev/net/tun too. This is however a special kind
of device - other processes uses it too. We shouldn't touch it's
label then.

Ideally, there would an API in SELinux that would label just the
passed FD and not the underlying path. That way, we wouldn't need
to care as we would be not labeling /dev/net/tun but the FD
passed to the domain. Unfortunately, there's no such API so we
have to workaround until then.

Tested-by: Richard W.M. Jones <>
Signed-off-by: Michal Privoznik <>

2 weeks agoFix build with older libcurl
Ján Tomko [Wed, 8 Oct 2014 07:13:40 +0000]
Fix build with older libcurl

Add ATTRIBUTE_UNUSED marker to the unused timeout_ms option
in esxVI_MultiCURL_TimerCallback.

Introduced by commit 125007d.

2 weeks agoesx: Implement virDomainScreenshot using libcurl stream driver
Matthias Bolte [Sun, 30 Mar 2014 18:45:07 +0000]
esx: Implement virDomainScreenshot using libcurl stream driver

This implementation uses the https://esx-server/screen?id=<id> way to get
a screenshot of a running domain. Compared to the CreateScreenshot_Task
way this works since ESX 2.5 while CreateScreenshot_Task was added in
version 4.0.

The newly added libcurl stream driver is used to directly provide the
downloaded data without saving it to a temporary file first.

2 weeks agoesx: Add libcurl based stream driver
Matthias Bolte [Sun, 30 Mar 2014 18:37:00 +0000]
esx: Add libcurl based stream driver

This allows to implement libvirt functions that use streams, such as
virDoaminScreenshot, without the need to store the downloaded data in
a temporary file first. The stream driver directly interacts with
libcurl to send and receive data.

The driver uses the libcurl multi interface that allows to do a transfer
in multiple curl_multi_perform() calls. The easy interface would do the
whole transfer in a single curl_easy_perform() call. This doesn't work
with the libvirt stream API that is driven by multiple calls to the
virStreamSend() and virStreamRecv() functions.

The curl_multi_wait() function is used to do blocking operations. But it
was added in libcurl 7.28.0. For older versions it is emulated using the
socket callback of the multi interface.

The current driver only supports blocking operations. There is already
some code in place for non-blocking mode but it is not complete.

2 weeks agoqemu: change macvtap device MAC address in response to NIC_RX_FILTER_CHANGED
Laine Stump [Wed, 24 Sep 2014 08:30:04 +0000]
qemu: change macvtap device MAC address in response to NIC_RX_FILTER_CHANGED

This patch fills in the functionality of
processNicRxFilterChangedEvent().  It now checks if it is appropriate
to respond to the NIC_RX_FILTER_CHANGED event (based on device type
and configuration) and takes appropriate action. Currently it checks
if the guest interface has been configured with
trustGuestRxFilters='yes', and if the host side device is macvtap. If
so, and the MAC address on the guest has changed, the MAC address of
the macvtap device is changed to match.

The result of this is that networking from the guest will continue to
work if the mac address of a macvtap-connected network device is
changed from within the guest, as long as trustGuestRxFilters='yes'
(previously changing the MAC address in the guest would break

2 weeks agoqemu: setup infrastructure to handle NIC_RX_FILTER_CHANGED event
Laine Stump [Wed, 17 Sep 2014 17:07:50 +0000]
qemu: setup infrastructure to handle NIC_RX_FILTER_CHANGED event

NIC_RX_FILTER_CHANGED is sent by qemu any time a NIC driver in the
guest modified the NIC's RX Filter (for example, if the MAC address of
the NIC is changed by the guest).

This patch doesn't do anything useful with that event; it just sets up
all the plumbing to get news of the event into a worker thread with
all proper locking/reference counting, and provide an easy place to
add in desired functionality.

See src/qemu/EVENTHANDLERS.txt for information/instructions on adding
a libvirt-internal handler for a qemu event (using
NIC_RX_FILTER_CHANGED as an example).

2 weeks agoqemu: add short document on qemu event handlers
Laine Stump [Thu, 2 Oct 2014 15:46:30 +0000]
qemu: add short document on qemu event handlers

This text was in the commit log for the patch that added the event
handler for NIC_RX_FILTER_CHANGED, and John Ferlan expressed a desire
that the information not be "lost", so I've put it into a file in the
qemu directory, hoping that it might catch the attention of future
writers of handlers for qemu events.

2 weeks agoqemu: qemuMonitorQueryRxFilter - retrieve guest netdev rx-filter
Laine Stump [Mon, 22 Sep 2014 16:19:41 +0000]
qemu: qemuMonitorQueryRxFilter - retrieve guest netdev rx-filter

This function can be called at any time to get the current status of a
guest's network device rx-filter. In particular it is useful to call
after libvirt recieves a NIC_RX_FILTER_CHANGED event - this event only
tells you that something has changed in the rx-filter, the details are
retrieved with the query-rx-filter monitor command (only available in
the json monitor). The command sent to the qemu monitor looks like this:

  {"execute":"query-rx-filter", "arguments": {"name":"net2"} }'

and the results will look something like this:

    "return": [
            "promiscuous": false,
            "name": "net2",
            "main-mac": "52:54:00:98:2d:e3",
            "unicast": "normal",
            "vlan": "normal",
            "vlan-table": [
            "unicast-table": [

            "multicast": "normal",
            "multicast-overflow": false,
            "unicast-overflow": false,
            "multicast-table": [
            "broadcast-allowed": false
    "id": "libvirt-14"

This is all parsed from JSON into a virNetDevRxFilter object for
easier consumption. (unicast-table is usually empty, but is also an
array of mac addresses similar to multicast-table).

(NB: LIBNL_CFLAGS was added to tests/ because virnetdev.h
now includes util/virnetlink.h, which includes netlink/msg.h when
appropriate. Without LIBNL_CFLAGS, gcc can't find that file (if
libnl/netlink isn't available, LIBNL_CFLAGS will be empty and
virnetlink.h won't try to include netlink/msg.h anyway).)

2 weeks agoutil: define virNetDevRxFilter and basic utility functions
Laine Stump [Sat, 20 Sep 2014 18:39:44 +0000]
util: define virNetDevRxFilter and basic utility functions

This same structure will be used to retrieve RX filter info for
interfaces on the host via netlink messages, and RX filter info for
interfaces on the guest via the qemu "query-rx-filter" command.

2 weeks agonetwork: set interface actual trustGuestRxFilters from network/portgroup
Laine Stump [Tue, 23 Sep 2014 18:54:16 +0000]
network: set interface actual trustGuestRxFilters from network/portgroup

As is done with other items such as vlan, virtualport, and bandwidth,
set the actual trustGuestRxFilters value to be used by a domain
interface according to a merge of the same attribute in the interface,
portgroup, and network in use. the interface setting always takes
precedence (if specified), followed by portgroup, and finally the
setting in the network is used if it's not specified in the interface
or portgroup.

2 weeks agoconf: add trustGuestRxFilters attribute to network and domain interface
Laine Stump [Tue, 23 Sep 2014 18:19:08 +0000]
conf: add trustGuestRxFilters attribute to network and domain interface

This new attribute will control whether or not libvirt will pay
attention to guest notifications about changes to network device mac
addresses and receive filters. The default for this is 'no' (for
security reasons). If it is set to 'yes' *and* the specified device
model and connection support it (currently only macvtap+virtio) then
libvirt will watch for NIC_RX_FILTER_CHANGED events, and when it
receives one, it will issue a query-rx-filter command, retrieve the
result, and modify the host-side macvtap interface's mac address and
unicast/multicast filters accordingly.

The functionality behind this attribute will be in a later patch. This
patch merely adds the attribute to the top-level of a domain's
<interface> as well as to <network> and <portgroup>, and adds
documentation and schema/xml2xml tests. Rather than adding even more
test files, I've just added the net attribute in various applicable
places of existing test files.

2 weeks agoqemu: Remove possible NULL deref in debug output
John Ferlan [Wed, 24 Sep 2014 12:30:09 +0000]
qemu: Remove possible NULL deref in debug output

Check for !dev->info.alias was done after a VIR_DEBUG() statement
that already tried to print - just flip sequence

2 weeks agoqemu: Remove need for virConnectPtr in hotunplug detach host, net
John Ferlan [Wed, 24 Sep 2014 12:31:32 +0000]
qemu: Remove need for virConnectPtr in hotunplug detach host, net

Prior patch removed the need for the virConnectPtr in the unplug
detach host path which caused ripple effect to remove in multiple
callers.  The previous patch just left things as ATTRIBUTE_UNUSED -
this patch will remove the variable.

2 weeks agoqemu: Fix hot unplug of SCSI_HOST device
John Ferlan [Tue, 23 Sep 2014 22:53:25 +0000]
qemu: Fix hot unplug of SCSI_HOST device

Introduced by commit id '8f76ad99' the logic to detach a scsi_host
device (SCSI or iSCSI) fails when attempting to remove the 'drive'
because as I found in my investigation - the DelDevice takes care of
that for us.

The investigation turned up commits to adjust the logic for the
qemuMonitorDelDevice and qemuMonitorDriveDel processing for interfaces
(commit id '81f76598'), disk bus=VIRTIO,SCSI,USB (commit id '0635785b'),
and chr devices (commit id '55b21f9b'), but nothing with the host devices.

This commit uses the model for the previous set of changes and applies
it to the hostdev path. The call to qemuDomainDetachHostSCSIDevice will
return to qemuDomainDetachThisHostDevice handling either the audit of
the failure or the wait for the removal and then call into
qemuDomainRemoveHostDevice for the event, removal from the domain hostdev
list, and audit of the removal similar to other paths.

NOTE: For now the 'conn' param to +qemuDomainDetachHostSCSIDevice is left
as ATTRIBUTE_UNUSED.  Removing requires a cascade of other changes to be
left for a future patch.

2 weeks agomaint: update .mailmap
Eric Blake [Mon, 6 Oct 2014 14:23:47 +0000]
maint: update .mailmap

Consolidate several commits made by James:

Signed-off-by: Eric Blake <>

2 weeks agoInclude .libs in libdir in source tree pkg-config files
Ján Tomko [Wed, 1 Oct 2014 12:46:54 +0000]
Include .libs in libdir in source tree pkg-config files

This lets me build against an uninstalled source tree without

2 weeks agodocs: fix a typo in drvlxc
Chen Hanxiao [Mon, 6 Oct 2014 09:28:40 +0000]
docs: fix a typo in drvlxc


Signed-off-by: Chen Hanxiao <>

3 weeks agominor shmem clean-ups
Martin Kletzander [Sat, 4 Oct 2014 08:46:22 +0000]
minor shmem clean-ups

Signed-off-by: Martin Kletzander <>

3 weeks agoutil: Prepare URI formatting for libxml2 >= 2.9.2
Martin Kletzander [Fri, 3 Oct 2014 16:27:01 +0000]
util: Prepare URI formatting for libxml2 >= 2.9.2

Since commit 8eb55d782a2b9afacc7938694891cc6fad7b42a5 libxml2 removes
two slashes from the URI when there is no server part.  This is fixed
with beb7281055dbf0ed4d041022a67c6c5cfd126f25, but only if the calling
application calls xmlSaveUri() on URI that xmlURIParse() parsed.  And
that is not the case in virURIFormat().  virURIFormat() accepts
virURIPtr that can be created without parsing it and we do that when we
format network storage paths for gluster for example.  Even though
virStorageSourceParseBackingURI() uses virURIParse(), it throws that data
structure right away.

Since we want to format URIs as URIs and not absolute URIs or opaque
URIs (see RFC 3986), we can specify that with a special hack thanks to
commit beb7281055dbf0ed4d041022a67c6c5cfd126f25, by setting port to -1.

This fixes qemuxml2argvtest test where the disk-drive-network-gluster
case was failing.

Signed-off-by: Martin Kletzander <>