7 hours agovbox: Register per partes master v1.2.8-rc1
Michal Privoznik [Fri, 22 Aug 2014 09:37:52 +0000]
vbox: Register per partes

Since times when vbox moved to the daemon (due to some licensing
issue) the subdrivers that vbox implements were registered, but not
opened since our generic subdrivers took priority. I've tried to fix
this in 65b7d553f39ff9 but it was not correct. Apparently moving
vbox driver registration upfront changes the default connection URI
which makes some users sad. So, this commit breaks vbox into pieces
and register vbox's network and storage drivers first, and vbox driver
then at the end. This way, the vbox driver is registered in the order
it always was, but its subdrivers are registered prior the generic

Signed-off-by: Michal Privoznik <>
Signed-off-by: Martin Kletzander <>

7 hours agovirDriverLoadModule: Honor libvirt func name tranlsation
Michal Privoznik [Fri, 22 Aug 2014 09:37:51 +0000]
virDriverLoadModule: Honor libvirt func name tranlsation

There's this unwritten rule in libvirt that vir_function is translated
into virFunction when needed (e.g. in remote protocol definition,
python, ...). Up till now we ignored such translation in driver module
loading and did fine. Well, we didn't have any module with an
underscore in its name. But this will change in next commit. The
problem is, once an a module is dlopen()-ed, we derive register
function name from its name. So instead of "driver_subdriverRegister"
do some magic to turn that into "driverSubdriverRegister".

Signed-off-by: Michal Privoznik <>

7 hours agovirdrivermoduletest: Test all the modules
Michal Privoznik [Fri, 22 Aug 2014 09:37:50 +0000]
virdrivermoduletest: Test all the modules

Even though we kept adding new and new modules (e.g. vbox or bhyve)
the test wasn't updated. Do that now. Moreover, while it's not
crucial, it's nice to reorder test cases to match the order in which
the daemon loads the modules.

Signed-off-by: Michal Privoznik <>

8 hours agodomain_conf: fix internal flag verification
Eric Blake [Mon, 25 Aug 2014 18:58:49 +0000]
domain_conf: fix internal flag verification

While working on virDomainBlockCopy, I noticed we had a verify()
concerning internal XML flags that was incomplete after several
recent flag additions; move that up higher in the code to make it
harder to forget to modify on the next flag addition.  Adjust
some formatting while at it.

* src/conf/domain_conf.c (verify): Move closer to internal flag
definitions.  Cover missing flags ALLOW_ROM and ALLOW_BOOT.

Signed-off-by: Eric Blake <>

8 hours agovirsh: drop unused variable
Eric Blake [Wed, 27 Aug 2014 04:17:07 +0000]
virsh: drop unused variable

While prepping for virDomainBlockJob patches, I found some dead code.

* tools/virsh-domain.c (blockJobImpl): Kill unused 'name'.

Signed-off-by: Eric Blake <>

9 hours agoqemu: call endjob in RevertToSnapshot
Jincheng Miao [Wed, 27 Aug 2014 02:10:33 +0000]
qemu: call endjob in RevertToSnapshot

In qemuDomainRevertToSnapshot(), it will check snap->def->state.
But when the state is PMSUSPENDED/NOSTATE/BLOCKED, it forgets to
call qemuDomainObjEndJob.
Bug introduced in commit 1e833899.

Signed-off-by: Jincheng Miao <>
Signed-off-by: Eric Blake <>

14 hours agoAPI: Tweak virDomainOpenGraphics to return fd directly
Eric Blake [Tue, 26 Aug 2014 22:04:37 +0000]
API: Tweak virDomainOpenGraphics to return fd directly

Let's fix this before we bake in a painful API.  Since we know
that we have exactly one non-negative fd on success, we might
as well return the fd directly instead of forcing the user to
pass in a pointer.  Furthermore, I found some memory and fd
leaks while reviewing the code - the idea is that on success,
libvirtd will have handed two fds in two different directions:
one to qemu, and one to the RPC client.

* include/libvirt/ (virDomainOpenGraphicsFD): Drop
unneeded parameter.
* src/driver.h (virDrvDomainOpenGraphicsFD): Likewise.
* src/libvirt.c (virDomainOpenGraphicsFD): Adjust interface to
return fd directly.
* daemon/remote.c (remoteDispatchDomainOpenGraphicsFd): Adjust
* src/qemu/qemu_driver.c (qemuDomainOpenGraphicsFD): Likewise,
and plug fd leak.
* src/remote/remote_driver.c (remoteDomainOpenGraphicsFD):
Likewise, and plug memory and fd leak.

Signed-off-by: Eric Blake <>

15 hours agoblockcopy: virDomainBlockCopy with XML destination, typed params
Eric Blake [Tue, 26 Aug 2014 21:16:48 +0000]
blockcopy: virDomainBlockCopy with XML destination, typed params

This commit (finally) adds the virDomainBlockCopy API, with the
intent that it will provide more power to the existing 'virsh
blockcopy' command.

'virsh blockcopy' was first added in Apr 2012 (v0.9.12), which
corresponds to the upstream qemu 1.2 timeframe.  It was done as
a hack on top of the existing virDomainBlockRebase() API call,
for two reasons: 1) it was targetting a feature that landed first
in downstream RHEL qemu, but had not stabilized in upstream qemu
at the time (and indeed, 'drive-mirror' only landed upstream in
qemu 1.3 with slight differences to the first RHEL attempt,
and later gained further parameters like granularity and buf-size
that are also worth exposing), and 2) extending an existing API
allowed it to be backported without worrying about bumping .so
versions.  A virDomainBlockCopy() API was proposed at that time
[1], but we decided not to accept it into libvirt until after
upstream qemu stabilized, and it ended up getting scrapped.
Whether or not RHEL should have attempted adding a new feature
without getting it upstream first is a debate that can be held
another day; but enough time has now elapsed that we are ready to
do the interface cleanly.


Delaying the creation of a clean API until now has also had a
benefit: we've only recently learned of a few shortcomings in the
original design: 1) it is unable to target a network destination
(such as a gluster volume) because it hard-coded the assumption
that the destination is a local file name.  Because of all the
refactoring we've done to add virStorageSourcePtr, we are in a
better position to declare an API that parses XML describing a
host storage source as the copy destination, which was not
possible had we implemented virDomainBlockCopy as it had been
originally envisioned (although a network target will have to wait
until a later libvirt release compared to the API addition to
actually be implemented).  2) the design of using MiB/sec as the
bandwidth throttle is rather coarse; qemu is actually tuned to
bytes/second, and libvirt is preventing access to that level of
detail.  A later patch will add flags to existing block job API
that can request bytes/second instead of back-compat MiB/s, but as
this is a new API, we can get it right to begin with.

At least I had the foresight to create 'virsh blockcopy' as a
separate command at the UI level (commit 1f06c00) rather than
leaking the underlying API overload of virDomainBlockRebase onto
shell users.

A further note on the bandwidth option: virTypedParameters
intentionally lacks unsigned long (since variable-width
interaction between mixed 32- vs. 64-bit client/server setups is
nasty), but we have to deal with the fact that we are interacting
with existing older code that mistakenly chose unsigned long
bandwidth at a point before we decided to prohibit it in all new
API.  The typed parameter is therefore unsigned long long, but
the implementation (in a later patch) will have to do overflow
detection on 32-bit platforms, as well as capping the value to
match the LLONG_MAX>>20 cap of the existing MiB/s interfaces.

* include/libvirt/ (virDomainBlockCopy): New API.
(virDomainBlockJobType, virConnectDomainEventBlockJobStatus):
Update related documentation.
* src/libvirt.c (virDomainBlockCopy): Implement it.
* src/libvirt_public.syms (LIBVIRT_1.2.8): Export it.
* src/driver.h (_virDriver): New driver callback.

Signed-off-by: Eric Blake <>

16 hours agovirsh: domain: Split out code to lookup domain from string
Peter Krempa [Tue, 26 Aug 2014 12:16:01 +0000]
virsh: domain: Split out code to lookup domain from string

Split out guts of the function to reuse it to get domain objects from

16 hours agolib: Introduce API for retrieving bulk domain stats
Peter Krempa [Tue, 26 Aug 2014 19:11:42 +0000]
lib: Introduce API for retrieving bulk domain stats

The motivation for this API is that management layers that use libvirt
usually poll for statistics using various split up APIs we currently
provide. To get all the necessary stuff, the app needs to issue a lot of
calls and aggregate the results.

The APIs I'm introducing here:
1) Returns data in a format that we can expand in the future and is
(pseudo) hierarchical. The data is returned as typed parameters where
the fields are constructed as dot-separated strings containing names and
other stuff in a list of typed params.

2) Stats for multiple (all) domains can be queried at once and are
returned in one call. This will decrease the overhead necessary to issue
multiple calls per domain multiplied by the count of domains.

3) Selectable (bit mask) fields in the returned format. This will allow
to retrieve only specific stats according to the app's need.

The stats groups will be enabled using a bit field @stats passed as the
function argument. A few sample stats groups that this API will support:


(Note that this is only an example, the initial implementation supports
 only VIR_DOMAIN_STATS_STATE while others will be added later.)

the returned typed params will use the following scheme

state.state = VIR_DOMAIN_RUNNING
state.reason = VIR_DOMAIN_RUNNING_BOOTED (the actual values according to
                                          the enum)
cpu.count = 8
cpu.0.state = running
cpu.0.time = 1234

19 hours agoWire up virDomainOpenGraphicsFD in QEMU driver
Ján Tomko [Mon, 25 Aug 2014 15:32:12 +0000]
Wire up virDomainOpenGraphicsFD in QEMU driver

Should fix

19 hours agoAdd RPC implementation for virDomainOpenGraphicsFd
Ján Tomko [Mon, 25 Aug 2014 16:55:20 +0000]
Add RPC implementation for virDomainOpenGraphicsFd

20 hours agoIntroduce virDomainOpenGraphicsFD API
Ján Tomko [Mon, 25 Aug 2014 15:28:14 +0000]
Introduce virDomainOpenGraphicsFD API

Define the public API implementation and declare internal
driver prototype.

21 hours agoblkdeviotune: check for overflow when parsing XML
Erik Skultety [Tue, 26 Aug 2014 11:29:10 +0000]
blkdeviotune: check for overflow when parsing XML

According to docs/schemas/domaincommon.rng and _virDomainBlockIoTuneInfo
all the iotune values are interpreted as unsigned long long, however
according to qemu_monitor_json.c, qemu silently truncates numbers
larger than LLONG_MAX. There's really not much of a usage for such
large numbers anyway yet. This patch provides the same overflow
check during a domain start as it does during setting
a blkdeviotune element in qemu_driver.c and thus reports an error when
a larger number than LLONG_MAX is detected.

25 hours agovirsh: Initialize vshData in cmdMigrate
Ján Tomko [Tue, 26 Aug 2014 11:18:43 +0000]
virsh: Initialize vshData in cmdMigrate

If the virConnect did not succeeed, we called
virConnectClose on uninitialized data.

Introduced by commit 7eabd55.

28 hours agostorage: remove unused 'canonPath' in virStorageFileGetMetadata
Chen Fan [Tue, 26 Aug 2014 06:11:16 +0000]
storage: remove unused 'canonPath' in virStorageFileGetMetadata

Introduced by commit 395171f.

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

28 hours agoAdd new 'kvm' domain feature and ability to hide KVM signature
Alex Williamson [Thu, 21 Aug 2014 17:04:45 +0000]
Add new 'kvm' domain feature and ability to hide KVM signature

QEMU 2.1 added support for the kvm=off option to the -cpu command,
allowing the KVM hypervisor signature to be hidden from the guest.
This enables disabling of some paravirualization features in the
guest as well as allowing certain drivers which test for the
hypervisor to load.  Domain XML syntax is as follows:

<domain type='kvm>
      <hidden state='on'/>

Signed-off-by: Alex Williamson <>

37 hours agolibxl: fix memory corruption introduced by commit b55cc5f4e
Jim Fehlig [Mon, 25 Aug 2014 22:46:00 +0000]
libxl: fix memory corruption introduced by commit b55cc5f4e

Commit b55cc5f4e did a shallow copy of libxl_{sdl,vnc}_info from the
domain config to the build info, which resulted in double-freeing
strings contained in the structures during cleanup, which later
resulted in a libvirtd crash.  Fix by performing a deep copy of the
structure, VIR_STRDUP'ing embedded strings instead of simply copying
their pointers.

Fixes the following issue reported on the libvirt dev list

37 hours agomaint: drop spurious semicolons
Eric Blake [Mon, 25 Aug 2014 22:26:56 +0000]
maint: drop spurious semicolons

I noticed a line 'int nparams = 0;;' in remote_dispatch.h, and
tracked down where it was generated.  While at it, I found a
couple of other double semicolons.  Additionally, I noticed that
commit df0b57a95 left a stale reference to the file name

* src/conf/numatune_conf.c (virDomainNumatuneNodeParseXML): Drop
empty statement.
* tests/virdbustest.c (testMessageStruct, testMessageSimple):
* src/rpc/ (remote_dispatch_bodies.h): Likewise, and
update stale comments.

Signed-off-by: Eric Blake <>

41 hours agospec: drop anything older than Fedora 13
Eric Blake [Tue, 15 Jul 2014 22:36:00 +0000]
spec: drop anything older than Fedora 13

RHEL 5 is based on libvirt 0.8.2, as was Fedora 13.  RHEL 5 also
happens to be the oldest box that we actively support with a
buildbot, so it is time to clean up some crufty conditionals in
the spec file that no longer are necessary for modern Fedora.

Although it is probably okay to make further simplifications to
a newer minimum Fedora version, that can be done as a later patch.
This patch just focuses on cleaning any comparison of %{?fedora}
that will always be true or false once we assume a minimum of F13.

* Make with_audit default to on. Move other
conditionals to a single RHEL-5 block. Simplify any fedora
comparison older than 13.  Document our assumptions.

Signed-off-by: Eric Blake <>

44 hours agodocs: fix bootmenu timeout description
Martin Kletzander [Mon, 25 Aug 2014 16:18:51 +0000]
docs: fix bootmenu timeout description

Signed-off-by: Martin Kletzander <>

46 hours agodaemon: Fix option -v missing info priority log
Zhou Yimin [Mon, 25 Aug 2014 12:18:01 +0000]
daemon: Fix option -v missing info priority log

Introduce by 63fbcc692.

When start libvirtd with commandline "/usr/sbin/libvirtd -d -l -v",
we expect verbose(info level) log if neither environment variable
nor config file about logging controls is set. But in fact we can't
get any info priority log in the default output file.

The log priority of default output is VIR_LOG_DEFAULT(VIR_LOG_WARN),
so the info log is filtered out.
To record info priority log we must parse option -v before setting the
default output.

After this patch, we get all verbose log in the default output file.

Signed-off-by: Zhou Yimin <>

46 hours agoiotune: setting an invalid value now reports error
Erik Skultety [Mon, 25 Aug 2014 08:50:12 +0000]
iotune: setting an invalid value now reports error

When trying to set an invalid value into iotune element, standard
behavior was to not report any error, rather to reset all affected
subelements of the iotune element back to 0 which results in ignoring
those particular subelements by XML generator. Patch further
examines the return code of the virXPathULongLong function
and in case of an invalid non-integer value raises an error.
Fixed to preserve consistency with invalid value checking
of other elements.


2 days agoqemu: add support for splash-timeout
Martin Kletzander [Fri, 22 Aug 2014 12:13:37 +0000]
qemu: add support for splash-timeout


Signed-off-by: Martin Kletzander <>

2 days agoqemu: add capability probing for splash-timeout
Martin Kletzander [Fri, 22 Aug 2014 11:42:46 +0000]
qemu: add capability probing for splash-timeout

Signed-off-by: Martin Kletzander <>

2 days agodocs, conf: add support for bootmenu timeout
Martin Kletzander [Fri, 22 Aug 2014 11:39:26 +0000]
docs, conf: add support for bootmenu timeout

Signed-off-by: Martin Kletzander <>

2 days agofix mingw build
Pavel Hrdina [Mon, 25 Aug 2014 07:44:32 +0000]
fix mingw build

The commit "f5b4c141" introduced new "force" parameter
for "virFDStreamOpenFileInternal" but forget to update
one call of that function.

Signed-off-by: Pavel Hrdina <>

2 days agostorage: zfs: implement download and upload
Roman Bogorodskiy [Fri, 15 Aug 2014 08:18:27 +0000]
storage: zfs: implement download and upload

Add an implementation of uploadVol and downloadVol using
virStorageBackendVolUploadLocal and virStorageBackendVolDownloadLocal

2 days agofdstream: introduce virFDStreamOpenBlockDevice
Roman Bogorodskiy [Fri, 15 Aug 2014 08:11:35 +0000]
fdstream: introduce virFDStreamOpenBlockDevice

virStorageBackendVolDownloadLocal and virStorageBackendVolUploadLocal
use virFDStreamOpenFile function to work with the volume fd.

virFDStreamOpenFile calls virFDStreamOpenFileInternal that implements
handling of the non-blocking I/O. If a file is not a character device and
not a fifo, it uses libvirt_iohelper.

On FreeBSD, it doesn't work as expected because disk devices (including
ZFS volumes) are exposed as character devices, and ZFS volumes do not
support open(2) with O_NONBLOCK.

To overcome this, introduce a forceIOHelper flag to
virFDStreamOpenFileInternal that forces using libvirt_iohelper. And
introduce virFDStreamOpenBlockDevice that calls
virFDStreamOpenFileInternal with the forceIOHelper set to true.

2 days agofdstream: report error if virSetNonBlock fails
Roman Bogorodskiy [Fri, 15 Aug 2014 04:55:15 +0000]
fdstream: report error if virSetNonBlock fails

virFDStreamOpenInternal terminates if virSetNonBlock fails. As
virSetNonBlock uses gnulib's set_nonblocking_flag that sets errno,
call virReportSystemError() to let user know the reason of fail.

3 days agomaint: fix comment typo
Eric Blake [Sat, 23 Aug 2014 19:57:44 +0000]
maint: fix comment typo

* src/util/virbuffer.h: s/occured/occurred/

Signed-off-by: Eric Blake <>

4 days agoqemu: check for active domain after agent interaction
Eric Blake [Wed, 20 Aug 2014 21:29:44 +0000]
qemu: check for active domain after agent interaction

Commit b606bbb41 reminded me that any time we drop locks to run
back-to-back guest interaction commands, we have to check that
the guest didn't disappear in between the two commands.  A quick
audit found a couple of spots that were missing this check.

* src/qemu/qemu_driver.c (qemuDomainShutdownFlags)
(qemuDomainSetVcpusFlags): Check that domain is still up.

Signed-off-by: Eric Blake <>

4 days agoxenconfig: Resolve Coverity RESOURCE_LEAK
John Ferlan [Fri, 22 Aug 2014 15:06:49 +0000]
xenconfig: Resolve Coverity RESOURCE_LEAK

Since '337a13628' - Coverity complains that 'net' is VIR_ALLOC()'d, but
on various 'cleanup' exit paths from the code there is no corresponding

4 days agovirnetsocket: Resolve Coverity RESOURCE_LEAK
John Ferlan [Fri, 22 Aug 2014 15:01:04 +0000]
virnetsocket: Resolve Coverity RESOURCE_LEAK

Since '1b807f92d' - Coverity complains that in the error paths of
both virFork() and virProcessWait() that the 'passfd' will not be closed.
Added the VIR_FORCE_CLOSE(passfd) and initialized it to -1.

Also noted that variable 'buf' was never really used - so I removed it

4 days agocommandtest: Resolve Coverity RESOURCE_LEAK
John Ferlan [Fri, 22 Aug 2014 14:30:44 +0000]
commandtest: Resolve Coverity RESOURCE_LEAK

Since '62f263a73' - Coverity complains if the !pidfile path is taken,
then newfd1 would be leaked.

4 days agonumatune: setting --mode does not work well
Erik Skultety [Fri, 22 Aug 2014 14:05:37 +0000]
numatune: setting --mode does not work well

When trying to set numatune mode directly using virsh numatune command,
correct error is raised, however numatune structure was not deallocated,
thus resulting in creating an empty numatune element in the guest XML,
if none was present before. Running the same command aftewards results
in a successful change with broken XML structure. Patch fixes the
deallocation problem as well as checking for invalid attribute
combination VIR_DOMAIN_NUMATUNE_PLACEMENT_AUTO + a nonempty nodeset.


4 days agoqemu: min_guarantee: Parameter 'min_guarantee' not supported
Erik Skultety [Wed, 13 Aug 2014 08:07:46 +0000]
qemu: min_guarantee: Parameter 'min_guarantee' not supported

The 'min_guarantee' is used by VMware ESX and OpenVZ drivers,
with qemu however, libvirt should report error when starting a domain,
because this element is not used.

4 days agoformatdomain: Reformat vCPU description
John Ferlan [Thu, 21 Aug 2014 21:10:35 +0000]
formatdomain: Reformat vCPU description

Reformat the vCPU description to use list elements rather than one long
run-on paragraph

Signed-off-by: John Ferlan <>

5 days agoFix spacing around commas
Michal Privoznik [Fri, 22 Aug 2014 12:59:28 +0000]
Fix spacing around commas

On some places in the libvirt code we have:


instead of

  f(a, z)

This trivial patch fixes couple of such occurrences.

Signed-off-by: Michal Privoznik <>

5 days agoParallels: Change config report errors code.
Alexander Burluka [Fri, 22 Aug 2014 11:04:45 +0000]
Parallels: Change config report errors code.

Wrong error code in config errors reporting was used. Fixed it.

5 days agoParallels: fix error with video card RAM dimension
Alexander Burluka [Fri, 22 Aug 2014 11:04:44 +0000]
Parallels: fix error with video card RAM dimension

Libvirt measures vram in Kbytes, not in bytes, so calculation
of Mbytes was incorrect. PCS server can take vram argument
with units, so I added K postfix to make params a little bit clearer.

5 days agoParallels: add virNodeGetCPUMap().
Alexander Burluka [Fri, 22 Aug 2014 11:04:43 +0000]
Parallels: add virNodeGetCPUMap().

That function caused errors in libvirtd logs when OpenStack Nova
starts VM instance.

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

5 days agoutil: compare floor attribute in virNetDevBandwidthEqual
Martin Kletzander [Fri, 22 Aug 2014 10:02:12 +0000]
util: compare floor attribute in virNetDevBandwidthEqual


Signed-off-by: Martin Kletzander <>

5 days agovirsh: Fix help info for freepages
Li Yang [Thu, 21 Aug 2014 03:19:53 +0000]
virsh: Fix help info for freepages

Signed-off-by: Li Yang <>

5 days agobuild: fix mingw build with virCommandReorderFDs
Martin Kletzander [Fri, 22 Aug 2014 08:28:17 +0000]
build: fix mingw build with virCommandReorderFDs

Signed-off-by: Martin Kletzander <>

5 days agodaemon: use socket activation with systemd
Martin Kletzander [Wed, 23 Jul 2014 08:58:00 +0000]
daemon: use socket activation with systemd

Signed-off-by: Martin Kletzander <>

5 days agorpc: pass listen FD to the daemon being started
Martin Kletzander [Wed, 16 Jul 2014 06:00:19 +0000]
rpc: pass listen FD to the daemon being started

This eliminates the need for active waiting.


Signed-off-by: Martin Kletzander <>

5 days agoutil: add virCommandPassListenFDs() function
Martin Kletzander [Tue, 15 Jul 2014 15:07:02 +0000]
util: add virCommandPassListenFDs() function

That sets a new flag, but that flag does mean the child will get
LISTEN_FDS and LISTEN_PID environment variables properly set and
passed FDs reordered so that it corresponds with LISTEN_FDS (they must
start right after STDERR_FILENO).

Signed-off-by: Martin Kletzander <>

5 days agotests: support dynamic prefixes in commandtest
Martin Kletzander [Wed, 16 Jul 2014 14:19:28 +0000]
tests: support dynamic prefixes in commandtest

Signed-off-by: Martin Kletzander <>

5 days allow integers to be assigned a value computed with i|j|k
Martin Kletzander [Wed, 16 Jul 2014 05:56:50 +0000] allow integers to be assigned a value computed with i|j|k

Even line like this:

int asdf = i - somevar;

was matched by the regex, so this patch adds '=' to the list of
characters that break the regexp.

Signed-off-by: Martin Kletzander <>

5 days agodaemon: support passing FDs from the calling process
Martin Kletzander [Tue, 15 Jul 2014 13:28:53 +0000]
daemon: support passing FDs from the calling process

First FD is the RW unix socket to listen on, second one (if
applicable) is the RO unix socket.

Signed-off-by: Martin Kletzander <>

5 days agorpc: set listen backlog on FDs as well as on other sockets
Martin Kletzander [Wed, 16 Jul 2014 17:26:16 +0000]
rpc: set listen backlog on FDs as well as on other sockets

Signed-off-by: Martin Kletzander <>

5 days agoremote: create virNetServerServiceNewFDOrUNIX() wrapper
Martin Kletzander [Tue, 15 Jul 2014 12:37:14 +0000]
remote: create virNetServerServiceNewFDOrUNIX() wrapper

It's just a wrapper around NewFD and NewUNIX that selects the right
option and increments the number of used FDs.

Signed-off-by: Martin Kletzander <>

5 days agoutil: abstract parsing of passed FDs into virGetListenFDs()
Martin Kletzander [Tue, 15 Jul 2014 12:34:13 +0000]
util: abstract parsing of passed FDs into virGetListenFDs()

Since not only systemd can do this (we'll be doing it as well few
patches later), change 'systemd' to 'caller' and fix LISTEN_FDS to
LISTEN_PID where applicable.

Signed-off-by: Martin Kletzander <>

5 days agoconf: net: Correctly switch how to format address fields
Peter Krempa [Thu, 21 Aug 2014 09:06:37 +0000]
conf: net: Correctly switch how to format address fields

When formatting the forward mode addresses or interfaces the switch was
done based on the type of the network rather than of the type of the
individual <interface>/<address> element. In case a user would specify
an incorrect network type ("passhtrough") with <address> elements,
libvirtd would crash as it would attempt to format an <interface>.

Use the type of the individual element to format the XML.


5 days agovirsh: man: Add LXC format info for domxml-from/to-native
Li Yang [Thu, 21 Aug 2014 06:12:45 +0000]
virsh: man: Add LXC format info for domxml-from/to-native

Signed-off-by: Li Yang <>

6 days agoPerform disk config validity checking for attach-device config
John Ferlan [Tue, 29 Jul 2014 13:21:05 +0000]
Perform disk config validity checking for attach-device config

Using 'virsh attach-device --config' (or --persistent) to attach a
file backed lun device will succeed; however, subsequent domain restarts
will result in failure because the configuration of a file backed lun
is not supported.

Although allowing 'illegal configurations' is something that can be
allowed, it may not be practical in this case. Generally, when attaching
a device to a domain means the domain must be running. A way around
this is using the --config (or --persistent) option. When an attach
is done to a running domain, a temporary configuration is modified
first followed by the live update. The live update will make a number
of disk validity checks when building the qemu command to attach the
disk. If any fail, then change is rejected.

Rather than allow a potentially illegal combination, adjust the code
in the configuration path to make the same checks as the running path
will make with respect to disk validity checks. This way we avoid
having the potential for some subsequent start/reboot to fail because
an illegal combination was allowed.

NB: The live path still checks the configuration since it is possible
to just do --live guest modification...

6 days agovirsh: Don't print extra '-'s in error message for -k and -K options
Peter Krempa [Thu, 21 Aug 2014 07:58:34 +0000]
virsh: Don't print extra '-'s in error message for -k and -K options

The error message contains one extra dash.

6 days agohvsupport: Adapt to vbox driver rewrite
Michal Privoznik [Wed, 20 Aug 2014 16:17:07 +0000]
hvsupport: Adapt to vbox driver rewrite

Since vbox driver rewrite the virDriver structure init moved from
vbox_tmpl.c into vbox_common.c. However, our script
doesn't count with that. It still parses vbox_tmp.c and looks for
virDriver structure which is not found there anymore. As a result,
at hvsupport page is seems like vbox driver doesn't support

Signed-off-by: Michal Privoznik <>

6 days agonodeCapsInitNUMA: Avoid @cpumap leak
Michal Privoznik [Wed, 20 Aug 2014 13:59:25 +0000]
nodeCapsInitNUMA: Avoid @cpumap leak

In case the host has 2 or more NUMA nodes, we fetch CPU map for each
node. However, we need to free the CPU map in between loops:

==29513== 96 (72 direct, 24 indirect) bytes in 3 blocks are definitely lost in loss record 951 of 1,264
==29513==    at 0x4C2A700: calloc (in /usr/lib64/valgrind/
==29513==    by 0x52AD24B: virAlloc (viralloc.c:144)
==29513==    by 0x52AF0E6: virBitmapNew (virbitmap.c:78)
==29513==    by 0x52FB720: virNumaGetNodeCPUs (virnuma.c:294)
==29513==    by 0x53C700B: nodeCapsInitNUMA (nodeinfo.c:1886)
==29513==    by 0x11759708: vboxCapsInit (vbox_common.c:398)
==29513==    by 0x11759CC4: vboxConnectOpen (vbox_common.c:514)
==29513==    by 0x53C965F: do_open (libvirt.c:1147)
==29513==    by 0x53C9EBC: virConnectOpen (libvirt.c:1317)
==29513==    by 0x142905: remoteDispatchConnectOpen (remote.c:1215)
==29513==    by 0x126ADF: remoteDispatchConnectOpenHelper (remote_dispatch.h:2346)
==29513==    by 0x5453D21: virNetServerProgramDispatchCall (virnetserverprogram.c:437)

Signed-off-by: Michal Privoznik <>

6 days agoexamples: test: Kill unsupported maxMemory element
Peter Krempa [Mon, 11 Aug 2014 15:28:34 +0000]
examples: test: Kill unsupported maxMemory element

The "maxMemory" element was never supported by libvirt. Remove it from
the test XMLs. (Found while actually trying to add support for a
identically named element).

7 days agocleanup spaces between parentheses and braces
Martin Kletzander [Wed, 20 Aug 2014 11:00:30 +0000]
cleanup spaces between parentheses and braces

And add a syntax-check for '){$'.  It's not perfect, but better than

Signed-off-by: Martin Kletzander <>

7 days agoqemu: Issue rtc-reset-reinjection command after guest-set-time
Michal Privoznik [Wed, 13 Aug 2014 12:28:24 +0000]
qemu: Issue rtc-reset-reinjection command after guest-set-time

An advice appeared there on the qemu-devel list [1]. When a domain is
suspended and then resumed guest kernel is not aware of this. So we've
introduced virDomainSetTime API that resets the time within guest
using qemu-ga. On the other hand, qemu itself is trying to make RTC
beat faster to catch the difference. But if we don't tell qemu that
guest's time was reset via the other method, both mechanisms are
applied resulting in again wrong guest time. In order to avoid summing
both corrections we need to tell qemu that it should not use the RTC
injection if the guest time is set via guest agent.


Signed-off-by: Michal Privoznik <>

7 days agoqemu: forbid negative blkio values
Martin Kletzander [Tue, 19 Aug 2014 12:54:30 +0000]
qemu: forbid negative blkio values

Partially resolves:

Signed-off-by: Martin Kletzander <>

7 days agolxc: forbid negative blkio values
Martin Kletzander [Tue, 19 Aug 2014 12:54:24 +0000]
lxc: forbid negative blkio values

Partially resolves:

Signed-off-by: Martin Kletzander <>

7 days agoqemu: Fix build error introduced in 653137eb957a278b556c6226424aad5395a
Peter Krempa [Wed, 20 Aug 2014 09:52:33 +0000]
qemu: Fix build error introduced in 653137eb957a278b556c6226424aad5395a

The build failure is caused by a false positive of some static analysys
steps done by gcc (that don't happen on -O0).

7 days agoqemu: blkiotune: Avoid accessing non-existing disk configuration
Peter Krempa [Wed, 20 Aug 2014 08:49:49 +0000]
qemu: blkiotune: Avoid accessing non-existing disk configuration

When a user would try changing the persistent IO tuning settings for a
disk that was hotplugged to a vm in a transient way, the
qemuDomainSetBlockIoTune API would use the same index for both the
live and config disk array. The disk was missing from the config array
though causing a crash of libvirtd.

To fix the issue, determine the indexes separately.


7 days agoqemu: Label all TAP FDs
Michal Privoznik [Wed, 13 Aug 2014 14:08:03 +0000]
qemu: Label all TAP FDs

When starting up the domain the domain's NICs are allocated. As of
1f24f682 (v1.0.6) we are able to use multiqueue feature on virtio
NICs. It breaks network processing into multiple queues which can be
processed in parallel by different host CPUs. The queues are, however,
created by opening /dev/net/tun several times. Unfortunately, only the
first FD in the row is labelled so when turning the multiqueue feature
on in the guest, qemu will get AVC denial. Make sure we label all the
FDs needed.

Moreover, the default label of /dev/net/tun doesn't allow
attaching a queue:

    type=AVC msg=audit(1399622478.790:893): avc:  denied  { attach_queue }
    for  pid=7585 comm="qemu-kvm"

And as suggested by SELinux maintainers, the tun FD should be labeled
as svirt_t. Therefore, we don't need to adjust any range (as done
previously by Guannan in ae368ebf) rather set the seclabel of the
domain directly.

Signed-off-by: Michal Privoznik <>

7 days agoqemu: hotplug: Sanitize shared device removal on media change
Peter Krempa [Fri, 8 Aug 2014 08:55:30 +0000]
qemu: hotplug: Sanitize shared device removal on media change

Instead of tediously copying of the disk source to remove it later
ensure that the media change function removes the old device after it

7 days agoqemu: conf: Split out code to retrieve hostdev key and reuse it
Peter Krempa [Thu, 7 Aug 2014 16:16:38 +0000]
qemu: conf: Split out code to retrieve hostdev key and reuse it

Both addition and removal of a shared hostdev share the code to generate
the hostdev key. Split it out into a separate function and refactor

7 days agoqemu: conf: Split up qemuRemoveSharedDevice into per-device-type functions
Peter Krempa [Thu, 7 Aug 2014 13:20:40 +0000]
qemu: conf: Split up qemuRemoveSharedDevice into per-device-type functions

Removing a shared device needs special steps for disks and hostdevs.
Instead of having one function dealing this split the code into two
separate functions that can be used with better granularity.

7 days agoqemu: conf: Split up qemuAddSharedDevice into per-device-type functions
Peter Krempa [Thu, 7 Aug 2014 13:20:40 +0000]
qemu: conf: Split up qemuAddSharedDevice into per-device-type functions

Adding a shared device needs special steps for disks and hostdevs.
Instead of having one function dealing this split the code into two
separate functions that can be used with better granularity.

7 days agoqemu: conf: rename qemuCheckSharedDevice to qemuCheckSharedDisk
Peter Krempa [Thu, 7 Aug 2014 12:56:30 +0000]
qemu: conf: rename qemuCheckSharedDevice to qemuCheckSharedDisk

The qemuCheckSharedDevice function is operating only on disk devices.
Rename it and change the arguments to reflect that and refactor some
logic for more readability.

7 days agoqemu: shared: Split out shared device list remove code
Peter Krempa [Thu, 7 Aug 2014 15:55:12 +0000]
qemu: shared: Split out shared device list remove code

Split it out into a separate function and simplify the code. There's no
need to copy the entry to update it as the hash returns pointer to the
existing item.

Also remove the now unused qemuSharedDeviceEntryCopy function.

7 days agoqemu: shared: Split out insertion code to the shared device list
Peter Krempa [Wed, 6 Aug 2014 11:57:42 +0000]
qemu: shared: Split out insertion code to the shared device list

To allow reuse split the code into a separate function and refactor it.
To update an existing entry there's no need to copy it first, just
update it inplace.

7 days agoqemu: hotplug: Format proper source string for cdrom media change
Peter Krempa [Fri, 8 Aug 2014 08:16:32 +0000]
qemu: hotplug: Format proper source string for cdrom media change

Use the qemu source string formatter to format the source string
correctly for remote and other storage instead of passing source->path

7 days agoqemu: hotplug: Change arguments for qemuDomainChangeEjectableMedia
Peter Krempa [Tue, 5 Aug 2014 11:43:57 +0000]
qemu: hotplug: Change arguments for qemuDomainChangeEjectableMedia

Pass the source of the changed media instead of a complete disk

Note that the @disk argument now contains what @olddisk would contain.
The new source is passed as a virStorageSource struct.

7 days agoqemu: hotplug: Add helper to initialize/teardown new disks for VMs
Peter Krempa [Tue, 5 Aug 2014 12:53:01 +0000]
qemu: hotplug: Add helper to initialize/teardown new disks for VMs

When we are changing media (or doing other hotplug operations) we need
to setup cgroups, locking and seclabels on the new disk. This is a
multi-step process where every piece can fail. To simplify dealing with
this introduce qemuDomainPrepareDisk that similarly to
qemuDomainPrepareDiskChainElement initializes/tears down  a whole new
disk to be used with the domain.

Additionally the function supports passing a different source struct for
media changes of cdroms that will be refactored later.

7 days agoqemu: hotplug: Untangle cleanup paths in qemuDomainChangeEjectableMedia
Peter Krempa [Tue, 5 Aug 2014 12:09:44 +0000]
qemu: hotplug: Untangle cleanup paths in qemuDomainChangeEjectableMedia

Avoid the "audit" label to simplify control flow.

7 days agoconf: Pass virStorageSource into virDomainDiskSourceIsBlockType
Peter Krempa [Fri, 1 Aug 2014 12:00:51 +0000]
conf: Pass virStorageSource into virDomainDiskSourceIsBlockType

All checks are based on the storage source, thus there's no need to pass
the complete disk def.

7 days agoqemu: Explicitly state that hotplugging cdroms and floppies doesn't work
Peter Krempa [Fri, 1 Aug 2014 09:22:16 +0000]
qemu: Explicitly state that hotplugging cdroms and floppies doesn't work

7 days agoconf: fix comment
Giuseppe Scrivano [Mon, 11 Aug 2014 12:52:49 +0000]
conf: fix comment

Signed-off-by: Giuseppe Scrivano <>

7 days agoqemu_command: fix block indentation
Giuseppe Scrivano [Thu, 7 Aug 2014 11:45:34 +0000]
qemu_command: fix block indentation

Signed-off-by: Giuseppe Scrivano <>

7 days agoconf, virDomainFSDefPtr: rename "path" argument to "target"
Giuseppe Scrivano [Thu, 7 Aug 2014 13:01:16 +0000]
conf, virDomainFSDefPtr: rename "path" argument to "target"

Signed-off-by: Giuseppe Scrivano <>

7 days agobhyve: add volumes support
Roman Bogorodskiy [Thu, 14 Aug 2014 16:15:57 +0000]
bhyve: add volumes support

Update bhyveBuildDiskArgStr to support volumes:

 - Make virBhyveProcessBuildBhyveCmd and
   virBhyveProcessBuildLoadCmd take virConnectPtr as the
   first argument instead of bhyveConnPtr as virConnectPtr is
   needed for virStorageTranslateDiskSourcePool,
 - Add virStorageTranslateDiskSourcePool call to
   virBhyveProcessBuildBhyveCmd and
 - Allow disks of type VIR_STORAGE_TYPE_VOLUME

7 days agostorage: make disk source pool translation generic
Roman Bogorodskiy [Thu, 14 Aug 2014 16:05:48 +0000]
storage: make disk source pool translation generic

Currently, qemu driver uses qemuTranslateDiskSourcePool()
to translate disk volume information. This function is
general enough and could be used for other drivers as well,
so move it to conf/domain_conf.c along with its helpers.

 - qemuTranslateDiskSourcePool: move to storage/storage_driver.c
   and rename to virStorageTranslateDiskSourcePool,
 - qemuAddISCSIPoolSourceHost: move to storage/storage_driver.c
   and rename to virStorageAddISCSIPoolSourceHost,
 - qemuTranslateDiskSourcePoolAuth: move to storage/storage_driver.c
   and rename to virStorageTranslateDiskSourcePoolAuth,
 - Update users of qemuTranslateDiskSourcePool to use a
   new name.

7 days agovirsh: Fix comment for net-undefine
Li Yang [Tue, 19 Aug 2014 02:59:51 +0000]
virsh: Fix comment for net-undefine

net-undefine doesn't only undefine an inactive network,
but also an active network(persistent), it just cannot
undefine a transient network.

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

7 days agodriver: Move virDrvNetworkGetDHCPLeases to the appropriate section
Peter Krempa [Mon, 18 Aug 2014 15:14:54 +0000]
driver: Move virDrvNetworkGetDHCPLeases to the appropriate section

The prototype was along with domain API prototypes instead of network
API ones.

8 days agoman: virsh: add missing auto-converge option for 'migrate'
Pradipta Kr. Banerjee [Tue, 19 Aug 2014 12:56:11 +0000]
man: virsh: add missing auto-converge option for 'migrate'

  * tools/virsh.pod (migrate): Add --auto-converge flag

Signed-off-by: Pradipta Kr. Banerjee <>
Signed-off-by: Ján Tomko <>

8 days agoqemu: allow device block I/O tuning in session mode
Martin Kletzander [Fri, 15 Aug 2014 12:35:53 +0000]
qemu: allow device block I/O tuning in session mode

In commit 45ad1adb I added a nicer message for tunings that need
cgroups when unavailable (unprivileged), but I added this check for
I/O tuning of block devices, which doesn't need cgroups, because it is
done by QEMU, so let's fix that.

Signed-off-by: Martin Kletzander <>

8 days agodocs: nwfilter: add missing dscp attribute
Jianwei Hu [Thu, 7 Aug 2014 04:27:32 +0000]
docs: nwfilter: add missing dscp attribute

Added attribute dscp to below supported protocols table in nwfilter docs.
IPV4 (ip)
TCP/UDP/SCTP (tcp/udp/sctp)
ICMP (icmp)
IGMP,ESP,AH,UDPLITE,'ALL' (igmp,esp,ah,udplite,all)
TCP/UDP/SCTP over IPV6 (tcp-ipv6,udp-ipv6,sctp-ipv6)
ICMPV6 (icmpv6)
IGMP,ESP,AH,UDPLITE,'ALL' over IPv6 (igmp-ipv6,esp-ipv6,ah-ipv6,udplite-ipv6,all-ipv6)

Here is a simple example:
[root@localhost ~]# virsh nwfilter-dumpxml myself
<filter name='myself' chain='root'>
  <rule action='accept' direction='in' priority='500'>
    <ip dscp='1'/>
  <rule action='accept' direction='in' priority='500'>
    <tcp dscp='1'/>
  <rule action='accept' direction='in' priority='500'>
    <tcp-ipv6 dscp='2'/>
  <rule action='accept' direction='in' priority='500'>
    <icmp dscp='55'/>
  <rule action='accept' direction='in' priority='500'>
    <icmpv6 dscp='55'/>
  <rule action='accept' direction='in' priority='500'>
    <udp dscp='3'/>
  <rule action='accept' direction='in' priority='500'>
    <udp-ipv6 dscp='4'/>
  <rule action='accept' direction='in' priority='500'>
    <udplite dscp='5'/>
  <rule action='accept' direction='in' priority='500'>
    <udplite-ipv6 dscp='6'/>
  <rule action='accept' direction='in' priority='500'>
    <esp dscp='7'/>
  <rule action='accept' direction='in' priority='500'>
    <esp-ipv6 dscp='8'/>
  <rule action='accept' direction='in' priority='500'>
    <ah dscp='9'/>
  <rule action='accept' direction='in' priority='500'>
    <ah-ipv6 dscp='10'/>
  <rule action='accept' direction='in' priority='500'>
    <sctp dscp='11'/>
  <rule action='accept' direction='in' priority='500'>
    <sctp-ipv6 dscp='55'/>
  <rule action='accept' direction='in' priority='500'>
    <igmp dscp='55'/>
  <rule action='accept' direction='in' priority='500'>
    <all-ipv6 dscp='55'/>
  <rule action='accept' direction='in' priority='500'>
    <all dscp='55'/>

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

8 days agocmdMigrate: move vshConnect before vshWatchJob
Chunyan Liu [Fri, 8 Aug 2014 08:44:36 +0000]
cmdMigrate: move vshConnect before vshWatchJob

A possible fix to issue:

While doing migration on KVM host, found problem sometimes:
VM is already running on the target host and disappears from source
host, but 'virsh migrate' command line hangs, cannot exit normally.
If pressing "ENTER" key, it will exit.

The code hangs at tools/virsh-domain.c: cmdMigrate
poll() is trying to select pipe_fd, which is used to receive message
from doMigrate thread. In debugging, found that doMigrate finishes
and at the end it does call safewrite() to write the retval ('0' or
'1') to pipe_fd, and the write is completed. But cmdMigrate poll()
cannot get the event. If pressing "ENTER" key, poll() can get the
event and select pipe_fd, then command line can exit.

In current code, authentication thread which is called by vshConnect
will use stdin, and at the same time, in cmdMigrate main process,
poll() is listening to stdin, that probably affect poll() to get
pipe_fd event. Better to move authentication before vshWatchJob. With
this change, above problem does not exist.

Signed-off-by: Chunyan Liu <>

8 days agosrc/xenconfig: move common parsing/formatting to xen_common
Jim Fehlig [Sat, 16 Aug 2014 02:52:15 +0000]
src/xenconfig: move common parsing/formatting to xen_common

XM and XL config are very similar.  Disks are specified differently
in XL, but the old XM disk config is still supported by XL.  XL also
supports new config like spice that was never supported by XM.

This patch moves all the common parsing and formatting functions to
the new file xen_common.c and adapts the XM parser/formatter accordingly.
This restructuring paves way for introducing an XL parser/formatter in
the future.

While moving the code, fixup whitespace, comments, and style issues.

Signed-off-by: Jim Fehlig <>

8 days agosrc/xenconfig: wrap common formatting code
Kiarie Kahurani [Mon, 11 Aug 2014 21:21:35 +0000]
src/xenconfig: wrap common formatting code

Wrap formatting code common to xm and xl in xenFormatConfigCommon
and export it.

Signed-off-by: Kiarie Kahurani <>
Signed-off-by: Jim Fehlig <>

8 days agosrc/xenconfig: wrap common parsing code
Kiarie Kahurani [Mon, 11 Aug 2014 21:21:24 +0000]
src/xenconfig: wrap common parsing code

Wrap parsing code common to xm and xl in xenParseConfigCommon
and export it.

Signed-off-by: Kiarie Kahurani <>
Signed-off-by: Jim Fehlig <>

8 days agoxen: rename xenxs to xenconfig
Jim Fehlig [Thu, 14 Aug 2014 18:43:32 +0000]
xen: rename xenxs to xenconfig

src/xenxs contains parsing/formating functions for the various xen
config formats, and is better named src/xenconfig.

Signed-off-by: Jim Fehlig <>

8 days agoqemu: process: Pin on per-vcpu basis instead of per-vcpupin element
Peter Krempa [Fri, 15 Aug 2014 14:41:47 +0000]
qemu: process: Pin on per-vcpu basis instead of per-vcpupin element

Pin existing vcpus rather than existing vcpu pinning infos. This
increases the complexity of the lookup, but avoids pinning cpus that are
not enabled actually.

8 days agoqemu: cpu: unplug: Remove vcpu pinning on cold cpu unplug
Peter Krempa [Fri, 15 Aug 2014 14:28:58 +0000]
qemu: cpu: unplug: Remove vcpu pinning on cold cpu unplug

Remove the pinning info when removing to CPU, otherwise when the VM will
be started our code will try to pin non-existing vcpus as the definition
wasn't updated.


8 days agoconf: Refactor virDomainVcpuPinDefParseXML
Peter Krempa [Thu, 14 Aug 2014 12:38:06 +0000]
conf: Refactor virDomainVcpuPinDefParseXML

Tidy up control flow, change boolean argument to use 'bool', improve
error message in case the function is used to parse emulator pinning
info and avoid a few temp variables that made no sense.

Also when the function is called to parse emulator pinning info, there's
no need to check the processor ID in that case.

8 days agoconf: cpupin: Remove useless checking of vcpupin element count
Peter Krempa [Thu, 14 Aug 2014 12:20:37 +0000]
conf: cpupin: Remove useless checking of vcpupin element count

The check doesn't make much sense as right below it the entries are
either checked for duplicity or ignored in some cases. Having this check
doesn't actually forbid passing invalid values.