]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
10 years agosystemd: don't report an error if the guest is already terminated
Daniel P. Berrange [Fri, 16 Jan 2015 11:26:39 +0000 (11:26 +0000)]
systemd: don't report an error if the guest is already terminated

In many cases where we invoke virSystemdTerminateMachine the
process(es) will have already gone away on their own accord.
In these cases we log an error message that the machine does
not exist. We should catch this particular error and simply
ignore it, so we don't pollute the logs.

10 years agoqemu: report TAP device indexes to systemd
Daniel P. Berrange [Fri, 16 Jan 2015 11:25:50 +0000 (11:25 +0000)]
qemu: report TAP device indexes to systemd

Record the index of each TAP device created and report them to
systemd, so they show up in machinectl status for the VM.

10 years agoFix shadowed variable warning
Ján Tomko [Tue, 27 Jan 2015 12:36:10 +0000 (13:36 +0100)]
Fix shadowed variable warning

libvirtd.c: In function 'daemonSetupAccessManager':
libvirtd.c:730:18: error: declaration of 'driver' shadows
  a global declaration [-Werror=shadow]
     const char **driver = (const char **)config->access_drivers;
                  ^
In file included from libvirtd.c:95:0:
../src/node_device/node_device_driver.h:43:36: error: shadowed
  declaration is here [-Werror=shadow]
 extern virNodeDeviceDriverStatePtr driver;
                                    ^

10 years agostorage: add a flag to clone files on btrfs
Chen Hanxiao [Fri, 23 Jan 2015 10:22:35 +0000 (18:22 +0800)]
storage: add a flag to clone files on btrfs

When creating a RAW file, we don't take advantage
of clone of btrfs.

Add a VIR_STORAGE_VOL_CREATE_REFLINK flag to request
a reflink copy.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agostorage: introduce btrfsCloneFile() for COW copy
Chen Hanxiao [Fri, 23 Jan 2015 10:22:34 +0000 (18:22 +0800)]
storage: introduce btrfsCloneFile() for COW copy

Add a wrapper for BTRFS_IOC_CLONE ioctl.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agoRemoving probing of secondary drivers
Daniel P. Berrange [Tue, 20 Jan 2015 16:16:26 +0000 (16:16 +0000)]
Removing probing of secondary drivers

For stateless, client side drivers, it is never correct to
probe for secondary drivers. It is only ever appropriate to
use the secondary driver that is associated with the
hypervisor in question. As a result the ESX & HyperV drivers
have both been forced to do hacks where they register no-op
drivers for the ones they don't implement.

For stateful, server side drivers, we always just want to
use the same built-in shared driver. The exception is
virtualbox which is really a stateless driver and so wants
to use its own server side secondary drivers. To deal with
this virtualbox has to be built as 3 separate loadable
modules to allow registration to work in the right order.

This can all be simplified by introducing a new struct
recording the precise set of secondary drivers each
hypervisor driver wants

struct _virConnectDriver {
    virHypervisorDriverPtr hypervisorDriver;
    virInterfaceDriverPtr interfaceDriver;
    virNetworkDriverPtr networkDriver;
    virNodeDeviceDriverPtr nodeDeviceDriver;
    virNWFilterDriverPtr nwfilterDriver;
    virSecretDriverPtr secretDriver;
    virStorageDriverPtr storageDriver;
};

Instead of registering the hypervisor driver, we now
just register a virConnectDriver instead. This allows
us to remove all probing of secondary drivers. Once we
have chosen the primary driver, we immediately know the
correct secondary drivers to use.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
10 years agodon't disable state driver when libvirtd is not built
Daniel P. Berrange [Mon, 19 Jan 2015 16:56:04 +0000 (16:56 +0000)]
don't disable state driver when libvirtd is not built

A bunch of code is wrapped in #if WITH_LIBVIRTD in order to
enable the virStateDriver to be disabled when libvirtd is not
built. Disabling this code doesn't have any real functional
benefit beyond removing 1 pointer from the virConnectPtr struct,
while having a cost of many more conditionals.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
10 years agoRemove all secondary driver private data fields
Daniel P. Berrange [Fri, 14 Nov 2014 15:27:24 +0000 (15:27 +0000)]
Remove all secondary driver private data fields

Now all drivers are converted to use their global state
directly, there is no need for private data fields for
the secondary drivers in virConnectPtr

10 years agoRemove use of interfacePrivateData from udev driver
Daniel P. Berrange [Mon, 17 Nov 2014 17:09:00 +0000 (17:09 +0000)]
Remove use of interfacePrivateData from udev driver

The udev driver can be implemented using global state instead
of the connect private data.

10 years agoRemove use of nodeDevicePrivateData from nodeDev driver
Daniel P. Berrange [Mon, 17 Nov 2014 16:30:27 +0000 (16:30 +0000)]
Remove use of nodeDevicePrivateData from nodeDev driver

The node device driver can rely on its global state instead
of the connect private data.

10 years agoRemove use of storagePrivateData/networkPrivateData from vbox
Daniel P. Berrange [Fri, 14 Nov 2014 15:24:26 +0000 (15:24 +0000)]
Remove use of storagePrivateData/networkPrivateData from vbox

The vbox driver can use the main hypervisor private data and
so does not need to use the storage/network private data fields.

10 years agoRemove use of nwfilterPrivateData from nwfilter driver
Daniel P. Berrange [Fri, 7 Nov 2014 10:37:37 +0000 (11:37 +0100)]
Remove use of nwfilterPrivateData from nwfilter driver

The nwfilter driver can rely on its global state instead
of the connect private data.

10 years agoRemove use of secretPrivateData from secret driver
Daniel P. Berrange [Fri, 7 Nov 2014 10:28:58 +0000 (11:28 +0100)]
Remove use of secretPrivateData from secret driver

The secret driver can rely on its global state instead
of the connect private data.

10 years agoqemu: Fix job handling in qemuDomainSetMetadata
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainSetMetadata

The code modifies the domain configuration but doesn't take a MODIFY
type job to do so.

10 years agoqemu: Fix job type in qemuDomainGetBlockIoTune
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job type in qemuDomainGetBlockIoTune

The function just queries status so there's no need for a MODIFY type
job.

10 years agoqemu: Fix job handling in qemuDomainSetSchedulerParametersFlags
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainSetSchedulerParametersFlags

The code modifies the domain configuration but doesn't take a MODIFY
type job to do so.

10 years agoqemu: Fix job handling in qemuDomainSetMemoryParameters
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainSetMemoryParameters

The code modifies the domain configuration but doesn't take a MODIFY
type job to do so.

10 years agoqemu: Fix job handling in qemuDomainSetAutostart
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainSetAutostart

The code modifies the domain configuration but doesn't take a MODIFY
type job to do so.

This patch also fixes a few very long lines of code around the touched
parts.

10 years agoqemu: Fix job handling in qemuDomainPinEmulator
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainPinEmulator

The code modifies the domain configuration but doesn't take a MODIFY
type job to do so.

10 years agoqemu: Fix job handling in qemuDomainPinVcpuFlags
Peter Krempa [Thu, 22 Jan 2015 08:56:38 +0000 (09:56 +0100)]
qemu: Fix job handling in qemuDomainPinVcpuFlags

The domain modifies the domain configuration but doesn't take a MODIFY
type job to do it.

10 years agoPost-release version bump for new dev cycle
Peter Krempa [Tue, 27 Jan 2015 08:28:15 +0000 (09:28 +0100)]
Post-release version bump for new dev cycle

10 years agoRelease of libvirt-1.2.12
Daniel Veillard [Tue, 27 Jan 2015 08:01:12 +0000 (16:01 +0800)]
Release of libvirt-1.2.12

* docs/news.html.in libvirt.spec.in: updated for the release
* po/*.po*: regenerated the po

10 years agotests: Check for virQEMUDriverConfigNew return value
Michal Privoznik [Mon, 26 Jan 2015 16:09:36 +0000 (17:09 +0100)]
tests: Check for virQEMUDriverConfigNew return value

The function may return NULL if something went wrong. In some places
in the tests we are not checking the return value rather than
accessing the pointer directly resulting in SIGSEGV.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoFix a memory leak in virCgroupGetPercpuStats
Ján Tomko [Mon, 26 Jan 2015 09:20:22 +0000 (10:20 +0100)]
Fix a memory leak in virCgroupGetPercpuStats

Coverity reports that my commit af1c98e introduced
two memory leaks:
the cpumap if ncpus == 0 in virCgroupGetPercpuStats
and the params array in the test of the function.

10 years agoUse correct location for qcow1 encryption header
Ján Tomko [Fri, 23 Jan 2015 12:29:48 +0000 (13:29 +0100)]
Use correct location for qcow1 encryption header

After the 8-byte size header, there are two one-byte headers
and two bytes of padding before the crypt_header field.

Our QCOW1_HDR_CRYPT constant did not skip the padding.
http://git.qemu.org/?p=qemu.git;a=blob;f=block/qcow.c;h=ece22697#l41

https://bugzilla.redhat.com/show_bug.cgi?id=1185165

10 years agosystemd: avoid string comparisons on dbus error messages
Daniel P. Berrange [Thu, 22 Jan 2015 16:50:33 +0000 (16:50 +0000)]
systemd: avoid string comparisons on dbus error messages

Add a virDBusErrorIsUnknownMethod helper so that callers
don't need todo string comparisons themselves to detect
standard error names.

10 years agosystemd: fix build without dbus
Daniel P. Berrange [Mon, 19 Jan 2015 12:30:24 +0000 (12:30 +0000)]
systemd: fix build without dbus

The virDBusMethodCall method has a DBusError as one of its
parameters. If the caller wants to pass a non-NULL value
for this, it immediately makes the calling code require
DBus at build time. This has led to breakage of non-DBus
builds several times. It is desirable that only the virdbus.c
file should need WITH_DBUS conditionals, so we must ideally
remove the DBusError parameter from the method.

We can't simply raise a libvirt error, since the whole point
of this parameter is to give the callers a way to check if
the error is one they want to ignore, without having the logs
polluted with an error message. So, we add a virErrorPtr
parameter which the caller can then either ignore or raise
using the new virReportErrorObject method.

This new method is distinct from virSetError in that it
ensures the logging hooks are run.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
10 years agoaarch64: Support versioned machine types.
Richard W.M. Jones [Fri, 23 Jan 2015 14:48:25 +0000 (09:48 -0500)]
aarch64: Support versioned machine types.

For distros that want to add versioned machine types, they will add
(downstream) machine types like "virt-foo-1.2.3".  Detect these as
MMIO too.

Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
10 years agoqemu: Add check for PCI bridge placement if there are too many PCI devices
Erik Skultety [Fri, 23 Jan 2015 12:17:43 +0000 (13:17 +0100)]
qemu: Add check for PCI bridge placement if there are too many PCI devices

Previous patch of this series fixed the issue with adding a new PCI bridge
when all the slots were reserved by devices with user specified addresses.
In case there are still some PCI devices waiting to get a slot reserved
by qemuAssignDevicePCISlots, this means a new bus needs to be
created along with a corresponding bridge controller. By adding an
additional check, this scenario now results in a reasonable error
instead of generating wrong qemu command line.

10 years agoqemu: Fix auto-adding PCI bridge when all slots are reserved
Erik Skultety [Fri, 23 Jan 2015 12:17:42 +0000 (13:17 +0100)]
qemu: Fix auto-adding PCI bridge when all slots are reserved

Commit 93c8ca tried to fix the issue with auto-adding of a PCI bridge
controller, but didn't work properly in all scenarios.

This patch provides a better fix of the issue when all slots on a PCI bus
are reserved by devices with user specified addresses and no additional
bridges need to be created.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1132900

10 years agoqemu: move PCI slot assignment for PIIX3, Q35 into a separate function
Erik Skultety [Fri, 23 Jan 2015 12:17:41 +0000 (13:17 +0100)]
qemu: move PCI slot assignment for PIIX3, Q35 into a separate function

In order to be able to test for fully reserved PCI buses, assignment of
PCI slots for integrated devices needs to be moved to a separate function.
This also might be a good preparation if we decide to add support for
other chipsets as well.

10 years agoqemu: reorder PCI slot assignment functions
Erik Skultety [Fri, 23 Jan 2015 12:17:40 +0000 (13:17 +0100)]
qemu: reorder PCI slot assignment functions

Move qemuDomainAssignPCIAddresses after the definition
of the static function qemuDomainValidateDevicePCISlotsQ35.

This lets us define a new static function using
qemuDomainValidateDevicePCISlots* and use it in
qemuDomainAssignPCIAddresses without a forward declaration.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agoschemas: Move definition of 'hexuint' to basictypes
Peter Krempa [Thu, 11 Dec 2014 13:50:11 +0000 (14:50 +0100)]
schemas: Move definition of 'hexuint' to basictypes

Allow reuse of the type.

10 years agoutil: json: Make argument of virJSONValueArraySize const
Peter Krempa [Thu, 15 Jan 2015 13:40:48 +0000 (14:40 +0100)]
util: json: Make argument of virJSONValueArraySize const

The function doesn't allow to modify the array in any way, thus the
argument can be const.

10 years agoqemu: command: Honor const-correctnes in qemuBuildNumaArgStr
Peter Krempa [Fri, 9 Jan 2015 14:47:10 +0000 (15:47 +0100)]
qemu: command: Honor const-correctnes in qemuBuildNumaArgStr

@def is modified in the function indirectly although it's marked as
const.

10 years agoconf: Fix comment mentioning actual type of @multi member of virDevicePCIAddress
Peter Krempa [Tue, 20 Jan 2015 18:38:00 +0000 (19:38 +0100)]
conf: Fix comment mentioning actual type of @multi member of virDevicePCIAddress

After refactor to use the virTristateSwitch enum the comment in the
struct was not adjusted.

10 years agoGrant access to helpers
Mike Latimer [Tue, 20 Jan 2015 01:25:41 +0000 (18:25 -0700)]
Grant access to helpers

Apparmor must not prevent access to required helper programs. The following
helpers should be allowed to run in unconfined execution mode:

 - libvirt_parthelper
 - libvirt_iohelper

10 years agoFix apparmor issues for tck
Mike Latimer [Tue, 20 Jan 2015 01:25:42 +0000 (18:25 -0700)]
Fix apparmor issues for tck

The network and nwfilter tests contained in the libvirt-TCK testkit can fail
unless access to raw network packets is granted. Without this access, the
following apparmor error can be seen while running the tests:

  apparmor="DENIED" operation="create" parent=1 profile="/usr/sbin/libvirtd"
  pid=94731 comm="libvirtd" family="packet" sock_type="raw" protocol=768

10 years agoFix apparmor issues for Xen
Mike Latimer [Tue, 20 Jan 2015 01:25:40 +0000 (18:25 -0700)]
Fix apparmor issues for Xen

In order for apparmor to work properly in Xen environments, the following
access rights need to be allowed:

 - Allow CAP_SYS_PACCT, which is required when resetting some multi-port
   Broadcom cards by writting to the PCI config space

 - Allow CAP_IPC_LOCK, which is required to lock/unlock memory. Without
   this setting, an error 'Resource temporarily unavailable' can be seen
   while attempting to mmap memory. At the same time, the following
   apparmor message is seen:

   apparmor="DENIED" operation="capable" parent=1 profile="/usr/sbin/libvirtd"
   pid=2097 comm="libvirtd" pid=2097 comm="libvirtd" capability=14
   capname="ipc_lock"

 - Allow access to distribution specific directories:
     /usr/{lib,lib64}/xen/bin

10 years agoconf: virDomainDefMaybeAddController tweak return code
Erik Skultety [Wed, 21 Jan 2015 16:49:51 +0000 (17:49 +0100)]
conf: virDomainDefMaybeAddController tweak return code

Previously the function returned either -1 in case of an error or 0 on
success. However, we should also distinguish between a case we
successfully added a controller and a case there wasn't a need to add any
controller

10 years agoqemu: Remove dead code in qemuDomainAssignPCIAddresses revert patch
Erik Skultety [Wed, 21 Jan 2015 16:49:24 +0000 (17:49 +0100)]
qemu: Remove dead code in qemuDomainAssignPCIAddresses revert patch

As it turned out, fix of dead code 419a22 changed the affected condition
from "never true" to "always true", so better fix would be to change the
return code of virDomainMaybeAddController from 0 to 1 if
a new bridge has been added, thus distinguishing case when we didn't need to
add any controller and case we successfully added one.

The return code is changed in the next commit

10 years agoFix build with older gcc
Ján Tomko [Fri, 23 Jan 2015 09:30:01 +0000 (10:30 +0100)]
Fix build with older gcc

My commit af1c98e4 broke the build on RHEL-6:
vircgrouptest.c: In function 'testCgroupGetPercpuStats':
vircgrouptest.c:566: error: nested extern declaration of
'_gl_verify_function2' [-Wnested-externs]

The only thing that needs checking is that the array size
is at least EXPECTED_NCPUS, to prevent access beyond the array.

We can ensure the minimum size also by specifying the array
size upfront.

10 years agoesx_vi: fix possible segfault
Pavel Hrdina [Wed, 21 Jan 2015 10:17:52 +0000 (11:17 +0100)]
esx_vi: fix possible segfault

Clang found possible dereference of NULL pointer which is right.
Function 'esxVI_LookupTaskInfoByTask' should find a task info. The issue
is that we could return 0 and leave 'taksInfo' pointer NULL because if
there is no match we simply end the search loop end set 'result' to 0.
Every caller count on the fact that if the return value is 0 than it's
safe to dereference 'taskInfo'. We should return 0 only in case we found
something and the '*taskInfo' is not NULL.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoxenapi_driver: fix copy-paste typo
Pavel Hrdina [Wed, 21 Jan 2015 10:13:31 +0000 (11:13 +0100)]
xenapi_driver: fix copy-paste typo

Clang found that we are passing variable with wrong enum type to
'xenapiCrashExitEnum2virDomainLifecycle' function. This is probably
copy-paste typo as the correct variable exists in the code, but it isn't
used.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoFix virCgroupGetPercpuStats with non-continuous present CPUs
Ján Tomko [Thu, 22 Jan 2015 10:54:50 +0000 (11:54 +0100)]
Fix virCgroupGetPercpuStats with non-continuous present CPUs

Per-cpu stats are only shown for present CPUs in the cgroups,
but we were only parsing the largest CPU number from
/sys/devices/system/cpu/present and looking for stats even for
non-present CPUs.
This resulted in:
internal error: cpuacct parse error

10 years agoCVE-2015-0236: qemu: Check ACLs when dumping security info from snapshots
Peter Krempa [Tue, 20 Jan 2015 16:01:01 +0000 (17:01 +0100)]
CVE-2015-0236: qemu: Check ACLs when dumping security info from snapshots

The ACL check didn't check the VIR_DOMAIN_XML_SECURE flag and the
appropriate permission for it. Found via code inspection while fixing
permissions for save images.

10 years agoCVE-2015-0236: qemu: Check ACLs when dumping security info from save image
Peter Krempa [Tue, 20 Jan 2015 16:01:01 +0000 (17:01 +0100)]
CVE-2015-0236: qemu: Check ACLs when dumping security info from save image

The ACL check didn't check the VIR_DOMAIN_XML_SECURE flag and the
appropriate permission for it.

10 years agoqemu: output error when try to hotplug unsupported console type
Luyao Huang [Thu, 22 Jan 2015 02:28:18 +0000 (10:28 +0800)]
qemu: output error when try to hotplug unsupported console type

https://bugzilla.redhat.com/show_bug.cgi?id=1164627

When using 'virsh attach-device' to hotplug an unsupported console type
into a qemu guest the attachment would succeed as the command line
formatter didn't report error in such case.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agoqemu: format server interface without a listen address
Ján Tomko [Tue, 20 Jan 2015 12:34:10 +0000 (13:34 +0100)]
qemu: format server interface without a listen address

https://bugzilla.redhat.com/show_bug.cgi?id=1130390

The listen address is not mandatory for <interface type='server'>
but when it's not specified, we've been formatting it as:
-netdev socket,listen=(null):5558,id=hostnet0
which failed with:
Device 'socket' could not be initialized

Omit the address completely and only format the port in the listen
attribute.

Also fix the schema to allow specifying a model.

10 years agotests: fix xlconfigtest build failure
Jim Fehlig [Tue, 20 Jan 2015 23:45:09 +0000 (16:45 -0700)]
tests: fix xlconfigtest build failure

When libvirt is configured --without-xen, building the xlconfigtest
fails with

  CCLD   xlconfigtest
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o
  In function `_start': (.text+0x20): undefined reference to `main'
  collect2: error: ld returned 1 exit status

Introduced in commit 4ed5fb91 by too much copy and paste from
xmconfigtest.

10 years agoFix virCgroupNewMachine prototype on non-Linux
Ján Tomko [Tue, 20 Jan 2015 09:00:59 +0000 (10:00 +0100)]
Fix virCgroupNewMachine prototype on non-Linux

Commit 318df5a changed the prototype of virCgroupNewMachine
without adjusting the stub function for platforms without
cgroups.

10 years agonetwork: Let domains be restricted to local DNS
Josh Stone [Thu, 4 Dec 2014 00:01:33 +0000 (16:01 -0800)]
network: Let domains be restricted to local DNS

This adds a new "localOnly" attribute on the domain element of the
network xml.  With this set to "yes", DNS requests under that domain
will only be resolved by libvirt's dnsmasq, never forwarded upstream.

This was how it worked before commit f69a6b987d616, and I found that
functionality useful.  For example, I have my host's NetworkManager
dnsmasq configured to forward that domain to libvirt's dnsmasq, so I can
easily resolve guest names from outside.  But if libvirt's dnsmasq
doesn't know a name and forwards it to the host, I'd get an endless
forwarding loop.  Now I can set localOnly="yes" to prevent the loop.

Signed-off-by: Josh Stone <jistone@redhat.com>
10 years agoMake ZFS storage pool XML tests optional
Gary R Hook [Fri, 16 Jan 2015 17:38:32 +0000 (17:38 +0000)]
Make ZFS storage pool XML tests optional

Do not run ZFS tests when ZFS is unsupported in the environment.

The recent patch b4af40226d09adeaf9e33a1d6594c4e8ce7f771d adds tests
to storagepoolxml2xmltest for the optional ZFS feature. When ZFS is
not included in the configuration these tests should not / cannot be
run. Modify the test source file to check for use of the feature and
compile in the tests accordingly.

Signed-off-by: Gary R Hook <gary.hook@nimboxx.com>
10 years agodocs: Fix docs about python bindings package
Martin Kletzander [Mon, 19 Jan 2015 10:03:55 +0000 (11:03 +0100)]
docs: Fix docs about python bindings package

Since the day we removed python bindings from the core repository, the
documentation was missing that information.

Reported-by: Lingyu Zhu <lynuszhu@gmail.com>
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoqemu_conf: check for duplicate security drivers
Ján Tomko [Mon, 19 Jan 2015 11:46:37 +0000 (12:46 +0100)]
qemu_conf: check for duplicate security drivers

Using the same driver multiple times is pointless and
it can result in confusing errors:

$ virsh start test
error: Failed to start domain test
error: internal error: security label already defined for VM

https://bugzilla.redhat.com/show_bug.cgi?id=1153891

10 years agoAlways check return value of qemuDomainObjExitMonitor
Ján Tomko [Tue, 16 Dec 2014 09:40:58 +0000 (10:40 +0100)]
Always check return value of qemuDomainObjExitMonitor

Depending on the context, either error out if the domain
has disappeared in the meantime, or just ignore the value
to allow marking the function as ATTRIBUTE_RETURN_CHECK.

10 years agoFix vmdef usage after domain crash in monitor on device attach
Ján Tomko [Wed, 7 Jan 2015 12:12:18 +0000 (13:12 +0100)]
Fix vmdef usage after domain crash in monitor on device attach

https://bugzilla.redhat.com/show_bug.cgi?id=1161024

If the domain crashed while we were in monitor,
we cannot rely on the REALLOC done on live definition,
since vm->def now points to the persistent definition.
Skip adding the attached devices to domain definition
if the domain crashed.

In AttachChrDevice, the chardev was already added to the
live definition and freed by qemuProcessStop in the case
of a crash. Skip the device removal in that case.

Also skip audit if the domain crashed in the meantime.

10 years agoFix vmdef usage after domain crash in monitor on device detach
Ján Tomko [Tue, 16 Dec 2014 14:50:20 +0000 (15:50 +0100)]
Fix vmdef usage after domain crash in monitor on device detach

https://bugzilla.redhat.com/show_bug.cgi?id=1161024

In the device type-specific functions, exit early
if the domain has disappeared, because the cleanup
should have been done by qemuProcessStop.

Check the return value in processDeviceDeletedEvent
and qemuProcessUpdateDevices.

Skip audit and removing the device from live def because
it has already been cleaned up.

10 years agoSimplify condition for formatting CPU features
Ján Tomko [Thu, 15 Jan 2015 11:49:13 +0000 (12:49 +0100)]
Simplify condition for formatting CPU features

Commit adff345 added support for features to MODE_HOSTPASSTHROUGH
as well. Since we support all modes now, the condition can be
eliminated.

10 years agoAdd an XML test for host-model CPU with features
Ján Tomko [Thu, 15 Jan 2015 10:55:44 +0000 (11:55 +0100)]
Add an XML test for host-model CPU with features

This was broken in a dowstream build due to a missing backport:
https://bugzilla.redhat.com/show_bug.cgi?id=1182448

10 years agolibxl: Set path to console on domain startup.
Anthony PERARD [Thu, 15 Jan 2015 16:40:19 +0000 (16:40 +0000)]
libxl: Set path to console on domain startup.

The path to the pty of a Xen PV console is set only in
virDomainOpenConsole. But this is done too late. A call to
virDomainGetXMLDesc done before OpenConsole will not have the path to
the pty, but a call after OpenConsole will.

e.g. of the current issue.
Starting a domain with '<console type="pty"/>'
Then:
virDomainGetXMLDesc():
  <devices>
    <console type='pty'>
      <target type='xen' port='0'/>
    </console>
  </devices>
virDomainOpenConsole()
virDomainGetXMLDesc():
  <devices>
    <console type='pty' tty='/dev/pts/30'>
      <source path='/dev/pts/30'/>
      <target type='xen' port='0'/>
    </console>
  </devices>

The patch intend to have the TTY path on the first call of GetXMLDesc.
This is done by setting up the path at domain start up instead of in
OpenConsole.

https://bugzilla.redhat.com/show_bug.cgi?id=1170743

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
10 years agoConditionalize use of -Wno-suggest-attribute=format pragma
Daniel P. Berrange [Fri, 16 Jan 2015 14:45:08 +0000 (14:45 +0000)]
Conditionalize use of -Wno-suggest-attribute=format pragma

Many GCC versions don't understand -Wno-suggest-attribute=format
so the pragma must only be used when supported

10 years agoCoverity fix: properly check for 0 ipv6 address.
Cédric Bosdonnat [Fri, 16 Jan 2015 13:24:37 +0000 (14:24 +0100)]
Coverity fix: properly check for 0 ipv6 address.

10 years agoparallels: create container from existing image
Dmitry Guryanov [Tue, 13 Jan 2015 11:27:40 +0000 (14:27 +0300)]
parallels: create container from existing image

It's possible to create a container with existing
disk image as root filesystem. You need to remove
existing disks from PCS VM config and then add a new
one, pointing to your image. And then call PrlVm_RegEx
with PRNVM_PRESERVE_DISK flag.

With this patch you can create such container with
something like this for new domain XML config:

    <filesystem type='file' accessmode='passthrough'>
      <driver type='ploop' format='ploop'/>
      <source file='/path-to-image'/>
      <target dir='/'/>
    </filesystem>

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels: allow to add filesystems to container
Dmitry Guryanov [Tue, 13 Jan 2015 11:27:39 +0000 (14:27 +0300)]
parallels: allow to add filesystems to container

Handle information about filesystems in domain config
and add corresponding devices to container via
parallels sdk.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: commit with PVCF_DETACH_HDD_BUNDLE flag
Dmitry Guryanov [Tue, 13 Jan 2015 11:27:38 +0000 (14:27 +0300)]
parallels: commit with PVCF_DETACH_HDD_BUNDLE flag

PCS removes disk image from filesystem, if you remove it
from config. There is a special flag PVCF_DETACH_HDD_BUNDLE
which allow to remove disk only from VM/CT config.

If you call virDomainDefine and remove some disk from
config it should be preserved, so call PrlVm_CommitEx
always with flag PVCF_DETACH_HDD_BUNDLE.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: dump info about container filesystems
Dmitry Guryanov [Tue, 13 Jan 2015 11:27:37 +0000 (14:27 +0300)]
parallels: dump info about container filesystems

Obtain information about container's filesystems and
store it in virDomainDef structure.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoadd ploop fs driver type
Dmitry Guryanov [Tue, 13 Jan 2015 11:27:36 +0000 (14:27 +0300)]
add ploop fs driver type

Ploop is a pseudo device which makeit possible to access
to an image in a file as a block device. Like loop devices,
but with additional features, like snapshots, write tracker
and without double-caching.

It used in PCS for containers and in OpenVZ. You can manage
ploop devices and images with ploop utility
(http://git.openvz.org/?p=ploop).

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoqemu: Add support for enabling/disabling PMU
Martin Kletzander [Mon, 5 Jan 2015 15:52:18 +0000 (16:52 +0100)]
qemu: Add support for enabling/disabling PMU

This is used as a boolean parameter for the '-cpu' option.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1178853

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agodocs, schema, conf: Add support for PMU feature
Martin Kletzander [Mon, 5 Jan 2015 15:21:51 +0000 (16:21 +0100)]
docs, schema, conf: Add support for PMU feature

Just a new feature that can be turned on/off.

https://bugzilla.redhat.com/show_bug.cgi?id=1178853

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agonetwork: Resolve Coverity FORWARD_NULL
John Ferlan [Fri, 16 Jan 2015 11:40:15 +0000 (06:40 -0500)]
network: Resolve Coverity FORWARD_NULL

Commit id 'ca481a6f' added virNetworkRouteDefFree which may be called
in an error path from lxcAddNetworkRouteDefinition with 'route = NULL'.
So just add the (!def) at the top to resolve.

10 years agovirsh: add support for domain XML validation
Daniel P. Berrange [Thu, 8 Jan 2015 15:26:50 +0000 (15:26 +0000)]
virsh: add support for domain XML validation

The 'virsh edit' command gets XML validation enabled by default,
with a --skip-validate option to disable it. The 'virsh define'
and 'virsh create' commands get a --validate option to enable
it, to avoid regressions for existing scripts.

The quality of error reporting from libxml2 varies depending
on the type of XML error made. Sometimes it is quite clear
and useful, other times it is obscure & inaccurate. At least
the user will see an error now, rather than having their
XML modification silently disappear.

10 years agoAdd XML test for too many PCI devices on default PCI bus
Erik Skultety [Thu, 15 Jan 2015 13:14:19 +0000 (14:14 +0100)]
Add XML test for too many PCI devices on default PCI bus

10 years agoRemove dead code in qemuDomainAssignPCIAddresses
Erik Skultety [Thu, 15 Jan 2015 13:14:18 +0000 (14:14 +0100)]
Remove dead code in qemuDomainAssignPCIAddresses

We tested for positive return value from virDomainMaybeAddController,
but it returns 0 or -1 only resulting in a dead code.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: Tweak auto adding PCI bridge controller when extending default PCI bus
Erik Skultety [Thu, 15 Jan 2015 13:14:17 +0000 (14:14 +0100)]
qemu: Tweak auto adding PCI bridge controller when extending default PCI bus

In case we find out, there are more PCI devices to be connected
than there are available slots on the default PCI bus, we automatically add a
new bus and a related PCI bridge controller as well. As there are no free slots
left on the default PCI bus, PCI bridge controller gets a free slot on a
newly created PCI bus which causes qemu to refuse to start the guest.
This fix introduces a new function qemuDomainPCIBusFullyReserved which
is checked right before we possibly try to reserve a slot for PCI bridge
controller.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1132900

10 years agodomain_conf: Check errors from virSocketAddrFormat
John Ferlan [Fri, 9 Jan 2015 16:02:05 +0000 (11:02 -0500)]
domain_conf: Check errors from virSocketAddrFormat

Commit id 'aa2cc721' added calls to virSocketAddrFormat but did not
check for a NULL (error) return which could lead to bad output
in the XML file.  Need to check for NULL return and cause failure.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agodomain_conf: Resolve Coverity RESOURCE_LEAK
John Ferlan [Fri, 9 Jan 2015 16:02:04 +0000 (11:02 -0500)]
domain_conf: Resolve Coverity RESOURCE_LEAK

Commit id 'aa2cc721' added call to virSocketAddrFormat
and did not VIR_FREE() the returned memory.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agovirSocketAddrGetIpPrefix 0.0.0.0 and :: special cases
Cédric Bosdonnat [Thu, 15 Jan 2015 08:13:09 +0000 (09:13 +0100)]
virSocketAddrGetIpPrefix 0.0.0.0 and :: special cases

If 0.0.0.0  or :: address is provided, then the returned prefix should
be 0, for the default address.

10 years agoUse the network route definitions for domains
Cédric Bosdonnat [Wed, 14 Jan 2015 15:15:57 +0000 (16:15 +0100)]
Use the network route definitions for domains

10 years agoMove code related to network routes to networkcommon_conf.[ch]
Cédric Bosdonnat [Wed, 14 Jan 2015 13:21:10 +0000 (14:21 +0100)]
Move code related to network routes to networkcommon_conf.[ch]

Moving code for parsing and formatting network routes to
networkcommon_conf helps reusing those routes for domains. The route
definition has been hidden to help reducing the number of unnecessary
checks in the format function.

10 years agoMove network route definition to networkcommon.rng
Cédric Bosdonnat [Wed, 14 Jan 2015 09:51:52 +0000 (10:51 +0100)]
Move network route definition to networkcommon.rng

Moving network route to the network common schema will allow reusing it.

10 years agoFix ipv6 regex in RNG schemas to match '::'
Cédric Bosdonnat [Wed, 14 Jan 2015 09:42:19 +0000 (10:42 +0100)]
Fix ipv6 regex in RNG schemas to match '::'

10 years agovirNetworkDefUpdateIPDHCPHost: Don't crash when updating network
Michal Privoznik [Thu, 15 Jan 2015 14:42:04 +0000 (15:42 +0100)]
virNetworkDefUpdateIPDHCPHost: Don't crash when updating network

https://bugzilla.redhat.com/show_bug.cgi?id=1182486

When updating a network and adding new ip-dhcp-host entry, the deamon
may crash. The problem is, we iterate over existing <host/> entries
trying to compare MAC addresses to see if there's already an existing
rule. However, not all entries are required to have MAC address. For
instance, the following is perfectly valid entry:

<host id='00:04:58:fd:e4:15:1b:09:4c:0e:09:af:e4:d3:8c:b8:ca:1e'
name='redhatipv6.redhat.com' ip='2001:db8:ca2:2::119'/>

When the checking loop iterates over this, the entry's MAC address is
accessed directly. Well, the fix is obvious - check if the address is
defined before trying to compare it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoAdd support for schema validation when passing in XML
Daniel P. Berrange [Tue, 18 Nov 2014 17:34:42 +0000 (17:34 +0000)]
Add support for schema validation when passing in XML

The virDomainDefineXMLFlags and virDomainCreateXML APIs both
gain new flags allowing them to be told to validate XML.
This updates all the drivers to turn on validation in the
XML parser when the flags are set

10 years agoAdd virXMLValidateAgainstSchema helper method
Daniel P. Berrange [Tue, 18 Nov 2014 14:50:05 +0000 (14:50 +0000)]
Add virXMLValidateAgainstSchema helper method

Add a helper method that can validate an XML document against
an RNG schema

10 years agoChange int to size_t in size var for tap/vhost FDs
Daniel P. Berrange [Wed, 12 Nov 2014 15:42:02 +0000 (15:42 +0000)]
Change int to size_t in size var for tap/vhost FDs

A number of methods take an int for a parameter that indicates
the size of an array. The correct type for array sizes is
size_t

10 years agoLog dtrace/systemd probes at INFO level instead of DEBUG
Daniel P. Berrange [Tue, 11 Nov 2014 18:40:16 +0000 (18:40 +0000)]
Log dtrace/systemd probes at INFO level instead of DEBUG

Every dtrace/systemd probe also include a libvirt log message.
These are logged at level DEBUG currently, which means if you
want to see all probes they are drowned by the rest of the
DEBUG messages. Since we don't really use the INFO log level
for much, it seems reasonable to suggest we log all probes at
level INFO.

10 years agoAdd systemd/dtrace probes for DBus APIs
Daniel P. Berrange [Tue, 11 Nov 2014 18:39:19 +0000 (18:39 +0000)]
Add systemd/dtrace probes for DBus APIs

When debugging libvirt it is helpful to set probes around RPC
calls. We already have probes for libvirt's native RPC layer,
so it makes sense to add them for the DBus RPC layer too.

10 years agoAdd support for systemd-machined CreateMachineWithNetwork
Daniel P. Berrange [Tue, 11 Nov 2014 17:38:43 +0000 (17:38 +0000)]
Add support for systemd-machined CreateMachineWithNetwork

systemd-machined introduced a new method CreateMachineWithNetwork
that obsoletes CreateMachine. It expects to be given a list of
VETH/TAP device indexes for the host side device(s) associated
with a container/machine.

This falls back to the old CreateMachine method when the new
one is not supported.

10 years agoqemu: free priv->origname when qemuMigrationPrepareAny fails
Luyao Huang [Tue, 13 Jan 2015 02:15:52 +0000 (10:15 +0800)]
qemu: free priv->origname when qemuMigrationPrepareAny fails

https://bugzilla.redhat.com/show_bug.cgi?id=1181182

When we meet error in qemuMigrationPrepareAny and goto
cleanup with rc < 0, we forget clear the priv->origname and this
will make this vm migrate fail next time because leave a wrong
origname in  priv, and will Generate a wrong cookie when do
migrate next time.

This patch will make priv->origname is NULL when migrate fail
in target host.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
10 years agoFix vmdef usage while in monitor in qemu process
Ján Tomko [Wed, 7 Jan 2015 13:50:34 +0000 (14:50 +0100)]
Fix vmdef usage while in monitor in qemu process

Make local copy of the disk alias in qemuProcessInitPasswords,
instead of referencing the one in domain definition, which
might get freed if the domain crashes while we're in monitor.

Also copy the memballoon period value.

10 years agoFix vmdef usage while in monitor in BlockStat* APIs
Ján Tomko [Wed, 7 Jan 2015 13:35:49 +0000 (14:35 +0100)]
Fix vmdef usage while in monitor in BlockStat* APIs

Make a local copy of the disk alias instead of pointing
to the domain definition, which might get freed if
the domain dies while we're in monitor.

Also exit early if that happens.

10 years agoFix vmdef usage while in monitor in qemuDomainHotplugVcpus
Ján Tomko [Tue, 16 Dec 2014 08:30:49 +0000 (09:30 +0100)]
Fix vmdef usage while in monitor in qemuDomainHotplugVcpus

Exit the monitor right after we've done with it to get
the virDomainObjPtr lock back, otherwise we might be accessing
vm->def while it's being cleaned up by qemuProcessStop.

If the domain crashed while we were in the monitor, exit
early instead of changing vm->def which is now the persistent
definition.

10 years agoMark the domain as active in qemuhotplugtest
Ján Tomko [Tue, 16 Dec 2014 07:46:44 +0000 (08:46 +0100)]
Mark the domain as active in qemuhotplugtest

This will allow us to call qemuDomainObjIsActive() in
the tested functions to check if the domain has crashed.

10 years agoCheck for domain liveness in qemuDomainObjExitMonitor
Ján Tomko [Fri, 12 Dec 2014 15:57:21 +0000 (16:57 +0100)]
Check for domain liveness in qemuDomainObjExitMonitor

The domain might disappear during the time in monitor when
the virDomainObjPtr is unlocked, so the caller needs to check
if it's still alive.

Since most of the callers are going to need it, put the
check inside qemuDomainObjExitMonitor and return -1 if
the domain died in the meantime.

10 years agocheck IOMMU group devices usage when preparing device for vfio passthrough
Shivaprasad G Bhat [Wed, 14 Jan 2015 11:03:28 +0000 (06:03 -0500)]
check IOMMU group devices usage when preparing device for vfio passthrough

The virsh start <domain> fails with qemu error when the hostdevices of the
same iommu group are used actively by other vms. It is not clear which
hostdev from the same iommu group is used by any of the running guests.
User has to go through every guest xml to figure out who is using the
hostdev of same iommu group.

Solution:
Iterate the iommu group of the hostdev and error our neatly in case a
device in the same iommu group is busy. Reattach code also does the same
kind of check, remove duplicate code as well.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirpci: Implement virPCIDeviceGetAddress function
Shivaprasad G Bhat [Wed, 14 Jan 2015 11:02:40 +0000 (06:02 -0500)]
virpci: Implement virPCIDeviceGetAddress function

Basically a getter function which is implemented for accessing the
address fields in virPCIDevice.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agolibxl: Add support for parsing/formating Xen XL config
Kiarie Kahurani [Tue, 16 Dec 2014 04:30:06 +0000 (21:30 -0700)]
libxl: Add support for parsing/formating Xen XL config

Now that xenconfig supports parsing and formatting Xen's
XL config format, integrate it into the libxl driver's
connectDomainXML{From,To}Native functions.

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agotests: Tests for the xen-xl parser
Kiarie Kahurani [Tue, 16 Dec 2014 04:30:05 +0000 (21:30 -0700)]
tests: Tests for the xen-xl parser

Add disk and spice config tests for the xen_xl config parser

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoIntroduce support for parsing/formatting Xen xl config format
Jim Fehlig [Sat, 10 Jan 2015 00:12:52 +0000 (17:12 -0700)]
Introduce support for parsing/formatting Xen xl config format

Introduce a parser/formatter for the xl config format.  Since the
deprecation of xm/xend, the VM config file format has diverged as
new features are added to libxl.  This patch adds support for parsing
and formating the xl config format.  It supports the existing xm config
format, plus adds support for spice graphics and xl disk config syntax.

Disk config is specified a bit differently in xl as compared to xm.  In
xl, disk config consists of comma-separated positional parameters and
keyword/value pairs separated by commas. Positional parameters are
specified as follows

   target, format, vdev, access

Supported keys for key=value options are

  devtype, backendtype

The positional paramters can also be specified in key/value form.  For
example the following xl disk config are equivalent

    /dev/vg/guest-volume,,hda
    /dev/vg/guest-volume,raw,hda,rw
    format=raw, vdev=hda, access=rw, target=/dev/vg/guest-volume

See $xen_sources/docs/misc/xl-disk-configuration.txt for more details.

xl disk config is parsed with the help of xlu_disk_parse() from
libxlutil, libxl's utility library.  Although the library exists
in all Xen versions supported by the libxl virt driver, only
recently has the corresponding header file been included.  A check
for the header is done in configure.ac.  If not found, xlu_disk_parse()
is declared externally.

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>