]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
10 years agoqemu: always call qemuInterfaceStartDevices() when starting CPUs
Laine Stump [Thu, 11 Dec 2014 19:49:13 +0000 (14:49 -0500)]
qemu: always call qemuInterfaceStartDevices() when starting CPUs

The patch that added qemuInterfaceStartDevices() (upstream commit
82977058f5b1d143a355079900029e9cbfee2fe4) had an extra conditional to
prevent calling it if the reason for starting the CPUs was
VIR_DOMAIN_RUNNING_UNPAUSED or VIR_DOMAIN_RUNNING_SAVE_CANCELED.  This
was put in by the author as the result of a reviewer asking if it was
necessary to ifup the interfaces in *all* occasions (because these
were the two cases where the CPU would have already been started (and
stopped) once, so the interface would already be ifup'ed).

It turns out that, as long as there is no corresponding
qemuInterfaceStopDevices() to ifdown the interfaces anytime the CPUs
are stopped, neglecting to ifup when reason is RUNNING_UNPAUSED or
RUNNING_SAVE_CANCELED doesn't cause any problems (because it just
happens that the interface will have already been ifup'ed by a prior
call when the CPU was previously started for some other reason).

However, it also doesn't *help*, and there will soon be a
qemuInterfaceStopDevices() function which *will* ifdown these
interfaces when the guest CPUs are stopped, and once that is done, the
interfaces will be left down in some cases when they should be up (for
example, if a domain is paused and then unpaused).

So, this patch is removing the condition in favor of always calling
qemuInterfaeStartDevices() when the guest CPUs are started.

This patch (and the aforementioned patch) resolve:

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

10 years agoqemu: avoid rare race when undefining domain
Martin Kletzander [Thu, 11 Dec 2014 10:14:08 +0000 (11:14 +0100)]
qemu: avoid rare race when undefining domain

When one domain is being undefined and at the same time started, for
example, there is a possibility of a rare problem occuring.

 - Thread 1 does virDomainUndefine(), has the lock, checks that the
   domain is active and because it's not, calls
   virDomainObjListRemove().

 - Thread 2 does virDomainCreate() and tries to lock the domain.

 - Thread 1 needs to lock domain list in order to remove the domain from
   it, but must unlock domain first (proper order is to lock domain list
   first and the domain itself second).

 - Thread 2 grabs the lock, starts the domain and releases the lock.

 - Thread 1 grabs the lock and removes the domain from list.

With this patch:

 - The undefining domain gets marked as "to undefine" before it is
    unlocked.

 - If domain is found in any of the search APIs, it's returned only if
   it is not marked as "to undefine".  The check is done while the
   domain is locked.

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoconf: Ignore device address for model=none usb controller and memballon
Luyao Huang [Fri, 12 Dec 2014 02:32:53 +0000 (10:32 +0800)]
conf: Ignore device address for model=none usb controller and memballon

It make no sense at all to have it there.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agoPost-release version bump for new dev cycle
Martin Kletzander [Sat, 13 Dec 2014 09:01:05 +0000 (10:01 +0100)]
Post-release version bump for new dev cycle

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoRelease of libvirt-1.2.11
Daniel Veillard [Sat, 13 Dec 2014 02:43:56 +0000 (10:43 +0800)]
Release of libvirt-1.2.11

- docs/news.html.in libvirt.spec.in: update for release
- po/*.po*: updated localization and regenerated

10 years agoAvoid getting '-1:-1' in devices cgroup list
Cédric Bosdonnat [Wed, 10 Dec 2014 13:32:10 +0000 (14:32 +0100)]
Avoid getting '-1:-1' in devices cgroup list

When calling virCgroupAllowAllDevices we get these invalid entries
in the device cgroup config.
    b -1:-1 rw
    c -1:-1 rw
Check for positive values before outputting the major and minor to
avoid that.

10 years agoconf: goto error when value of max_sectors is too large
Luyao Huang [Fri, 12 Dec 2014 02:32:54 +0000 (10:32 +0800)]
conf: goto error when value of max_sectors is too large

Output error when we try to set a too large max_sectors.
Just like queues and cmd_per_lun here.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agoIgnore CPU features without a model for host-passthrough
Ján Tomko [Fri, 5 Dec 2014 13:03:58 +0000 (14:03 +0100)]
Ignore CPU features without a model for host-passthrough

This fixes reverting to snapshots created by older libvirt
and allows libvirt not to lose track of a domain that
has this in its live status XML (such as a domain
restored from managedsave)

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

10 years agoDo not format CPU features without a model
Ján Tomko [Fri, 5 Dec 2014 11:32:18 +0000 (12:32 +0100)]
Do not format CPU features without a model

For host-passthrough CPU we don't honor the CPU
features specified in the XML, but we allow
outputting them via the UPDATE_CPU flag for dumpxml,
this gives user a rough idea of what features the CPU
might have.

After restoring a managedsave'd domain, the features
might end up in the live status XML (in /var/run) without
the model. This XML cannot be parsed by the daemon after
restart and the domain might disappear.

This fix skips formatting the features for HOST_PASSTHROUGH
when UPDATE_CPU is not specified, so the newly restored domains
and newly created snapshots won't be affected.

Note: this doesn't fix existing snapshots or already restored
running domains.

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

10 years agoFix build on mingw
Ján Tomko [Thu, 11 Dec 2014 10:13:43 +0000 (11:13 +0100)]
Fix build on mingw

Add missing ATTRIBUTE_UNUSED markers.

10 years agoqemu: bulk stats: Fix logic in monitor handling
Francesco Romani [Thu, 11 Dec 2014 07:44:09 +0000 (08:44 +0100)]
qemu: bulk stats: Fix logic in monitor handling

A logic bug in qemuConnectGetAllDomainStats makes the code mark the
monitor as available when qemuDomainObjBeginJob fails, instead of when
it succeeds, as the correct flow requires.

This patch fixes the check and updates the code documentation
accordingly.

Broken by commit 57023c0a3af4af1c547189c1f6712ed5edeb0c0b.

Signed-off-by: Francesco Romani <fromani@redhat.com>
10 years agodac: Add a new func to get DAC label of a running process
Luyao Huang [Tue, 9 Dec 2014 08:33:57 +0000 (16:33 +0800)]
dac: Add a new func to get DAC label of a running process

When using qemuProcessAttach to attach a qemu process,
the DAC label is not filled correctly.

Introduce a new function to get the uid:gid from the system
and fill the label.

This fixes the daemon crash when 'virsh screenshot' is called:
https://bugzilla.redhat.com/show_bug.cgi?id=1161831

It also fixes qemu-attach after the prerequisite of this patch
(commit f8c1fb3) was pushed out of order.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agonetwork: Bring netdevs online later
Matthew Rosato [Tue, 16 Sep 2014 20:50:53 +0000 (16:50 -0400)]
network: Bring netdevs online later

Currently, MAC registration occurs during device creation, which is
early enough that, during live migration, you end up with duplicate
MAC addresses on still-running source and target devices, even though
the target device isn't actually being used yet.
This patch proposes to defer MAC registration until right before
the guest can actually use the device -- In other words, right
before starting guest CPUs.

Signed-off-by: Matthew Rosato <mjrosato@linux.vnet.ibm.com>
Signed-off-by: Laine Stump <laine@laine.org>
10 years agovirsh.pod: Fix typo
John Ferlan [Wed, 10 Dec 2014 13:17:10 +0000 (08:17 -0500)]
virsh.pod: Fix typo

Commit id 'c9ffd3ea9e' updated the descriptions, but pointed at the
wrong place for the pool-define-as (it should have been pool-create-as)

10 years agolxc: give RW access to /proc/sys/net/ipv[46] to containers
Cédric Bosdonnat [Wed, 10 Dec 2014 09:22:28 +0000 (10:22 +0100)]
lxc: give RW access to /proc/sys/net/ipv[46] to containers

Some programs want to change some values for the network interfaces
configuration in /proc/sys/net/ipv[46] folders. Giving RW access on them
allows wicked to work on openSUSE 13.2+.

Reusing the lxcNeedNetworkNamespace function to tell
lxcContainerMountBasicFS if the netns is disabled. When no netns is
set up, then we don't mount the /proc/sys/net/ipv[46] folder RW as
these would provide full access to the host NICs config.

10 years agoviriscsi: Need to sendtargets on Initiator IQN
John Ferlan [Tue, 9 Dec 2014 23:34:32 +0000 (18:34 -0500)]
viriscsi: Need to sendtargets on Initiator IQN

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

The refactoring done as part of commit id '59446096' caused a regression
for the multi initiator IQN commit '6aabcb5b' because the sendtargets was
not done on/for the initiator IQN prior to login (or trying to disable
autologin)

Prior to that commit, the paths were essentially

virStorageBackendISCSIStartPool
    virStorageBackendISCSILogin
        virStorageBackendISCSIConnection
            if initiatoriqn
                virStorageBackendCreateIfaceIQN
                Issue sendtargets
                Perform --login
            else
                Issue sendtargets
                Perform --login

After that commit:

virStorageBackendISCSIStartPool
    Issue sendtargets
    Call virStorageBackendISCSIConnection
        If initiatoriqn
            virStorageBackendCreateIfaceIQN
            Perform --login
        else
            Perform --login

So for non initiator IQN paths, nothing changed. For the initiator path,
the --login fails as does any attempts to change autologin via "--op update
--name node.startup --value manual".

10 years agodocs: Fix typo in path for storage pool
John Ferlan [Wed, 10 Dec 2014 11:56:35 +0000 (06:56 -0500)]
docs: Fix typo in path for storage pool

10 years agoconf: Ignore device address for guestfwd channel
Martin Kletzander [Wed, 10 Dec 2014 09:56:09 +0000 (10:56 +0100)]
conf: Ignore device address for guestfwd channel

It make no sense at all to have it there.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agomaint: clean up the unused variable 'caps' in src/qemu/qemu_*.c
Wang Rui [Wed, 10 Dec 2014 09:45:33 +0000 (17:45 +0800)]
maint: clean up the unused variable 'caps' in src/qemu/qemu_*.c

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>
10 years agodocs: Fix missing curly braces
Hao Liu [Wed, 10 Dec 2014 07:25:08 +0000 (15:25 +0800)]
docs: Fix missing curly braces

Signed-off-by: Hao Liu <hliu@redhat.com>
10 years agostorage: Check stderr when matching parted output
Hao Liu [Wed, 10 Dec 2014 07:14:26 +0000 (15:14 +0800)]
storage: Check stderr when matching parted output

In old version of parted like parted-2.1-25, error message is shown in
stdout when printing a disk info without disk label.

    Error: /dev/sda: unrecognised disk label

This line has been moved to stderr in newer version of parted. So we
should check both stdout and stderr when locating this message.

This should fix bug:
    https://bugzilla.redhat.com/show_bug.cgi?id=1172468

Signed-off-by: Hao Liu <hliu@redhat.com>
10 years agoCVE-2014-8131: Fix possible deadlock and segfault in qemuConnectGetAllDomainStats()
Martin Kletzander [Thu, 27 Nov 2014 14:47:52 +0000 (15:47 +0100)]
CVE-2014-8131: Fix possible deadlock and segfault in qemuConnectGetAllDomainStats()

When user doesn't have read access on one of the domains he requested,
the for loop could exit abruptly or continue and override pointer which
pointed to locked object.

This patch fixed two issues at once.  One is that domflags might have
had QEMU_DOMAIN_STATS_HAVE_JOB even when there was no job started (this
is fixed by doing domflags |= QEMU_DOMAIN_STATS_HAVE_JOB only when the
job was acquired and cleaning domflags on every start of the loop.
Second one is that the domain is kept locked when
virConnectGetAllDomainStatsCheckACL() fails and continues the loop when
it didn't end.  Adding a simple virObjectUnlock() and clearing the
pointer ought to do.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoparallels: report proper error in Create/Destroy/Suspend e.t.c.
Dmitry Guryanov [Mon, 1 Dec 2014 15:39:01 +0000 (18:39 +0300)]
parallels: report proper error in Create/Destroy/Suspend e.t.c.

If we want to perform some operation and domain state is not suitable
for that operation, we should report error VIR_ERR_OPERATION_INVALID.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: fix getJobResultHelper
Dmitry Guryanov [Mon, 1 Dec 2014 15:39:00 +0000 (18:39 +0300)]
parallels: fix getJobResultHelper

When PrlJob_GetRetCode sets second argument to
error value it means sdk function failed and we
must return error from getJobResultHelper.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: return PRL_RESULT from waitJob and getJobResult
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:59 +0000 (18:38 +0300)]
parallels: return PRL_RESULT from waitJob and getJobResult

Return error code, returned by parallels SDK from
waitJob and getJobResult, so that caller can handle
different errors.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: implement domainUndefine and domainUndefineFlags
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:58 +0000 (18:38 +0300)]
parallels: implement domainUndefine and domainUndefineFlags

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: add cdroms support
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:57 +0000 (18:38 +0300)]
parallels: add cdroms support

Get cdrom devices list from parallels server in
prlsdkLoadDomains and add ability to define a domain
with cdroms.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: Add domainCreateWithFlags() function.
Alexander Burluka [Mon, 1 Dec 2014 15:38:56 +0000 (18:38 +0300)]
parallels: Add domainCreateWithFlags() function.

domainCreateWithFlags function is used by OpenStack/Nova to boot
an instance.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: added function virDomainIsActive()
Alexander Burluka [Mon, 1 Dec 2014 15:38:55 +0000 (18:38 +0300)]
parallels: added function virDomainIsActive()

That function is necessary for proper domain removal
in openstack/nova.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: refactor parallelsDomainDefineXML
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:54 +0000 (18:38 +0300)]
parallels: refactor parallelsDomainDefineXML

First, we don't need to call prlsdkApplyConfig after
creating new VM or containers, because it's done in
functions prlsdkCreateVm and prlsdkCreateCt.

No need to check, if domain exists in the list after
prlsdkAddDomain.

Also organize code, so that we can call virObjectUnlock
in one place.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: create VMs and containers with sdk
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:53 +0000 (18:38 +0300)]
parallels: create VMs and containers with sdk

This patch replaces code, which creates domains by
running prlctl command.

prlsdkCreateVm/Ct will do prlsdkApplyConfig, because
we send request to the server only once in this case.

But prlsdkApplyConfig will be called also from
parallelsDomainDefineXML function. There is no problem with
it, parallelsDomainDefineXML will be refactored later.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: rewrite parallelsApplyConfig with SDK
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:52 +0000 (18:38 +0300)]
parallels: rewrite parallelsApplyConfig with SDK

Rewrite code, which applies domain configuration given
to virDomainDefineXML function to the VM of container
registered in PCS.

This code first check if there are unsupported parameters
in domain XML and if yes - reports error. Some of such
parameters are not supported by PCS, for some - it's not
obvious, how to convert them into PCS's corresponding params,
so let's put off it, and implement only basic params in
this patch.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: reimplement functions, which change domain state
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:51 +0000 (18:38 +0300)]
parallels: reimplement functions, which change domain state

Change domain state using parallels SDK functions instead of
prlctl command.

We don't need to send events from these functions now, becase
events handler will send them. But we still need to update
virDomainObj in privconn->domains.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: handle events from parallels server
Alexander Burluka [Mon, 1 Dec 2014 15:38:50 +0000 (18:38 +0300)]
parallels: handle events from parallels server

Subscribe to events from parallels server. It's
needed for 2 things: to update cached domains list
and to send corresponding libvirt events.

Parallels server sends a lot of different events, in
this patch we handle only some of them. In the future
we can handle for example, changes in a host network
configuration or devices states.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: move parallelsDomNotFoundError to parallels_utils.h
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:49 +0000 (18:38 +0300)]
parallels: move parallelsDomNotFoundError to parallels_utils.h

Move macro parallelsDomNotFoundError to file parallels_utils.h, because
it will be used in parallels_sdk.c.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: get domain info with SDK
Alexander Burluka [Mon, 1 Dec 2014 15:38:48 +0000 (18:38 +0300)]
parallels: get domain info with SDK

Obtain information about domains using parallels sdk instead of prlctl.
prlsdkLoadDomains functions behaves as former parallelsLoadDomains with
NULL as second parameter (name) - it fills parallelsConn.domains list.

prlsdkLoadDomain is now able to update specified domain by given
virDomainObjPtr.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agoparallels: move IS_CT macro to parallels_utils.h
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:47 +0000 (18:38 +0300)]
parallels: move IS_CT macro to parallels_utils.h

This macro will be used in paralles_sdk.c so move it to common header.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agodefine NTF_{SELF,MASTER} if undefined
Guido Günther [Tue, 9 Dec 2014 06:36:23 +0000 (07:36 +0100)]
define NTF_{SELF,MASTER} if undefined

Older kernel headers lack this definition (e.g. Debian Wheezy's 3.2)

10 years agosecurity: Manage SELinux labels on shared/readonly hostdev's
John Ferlan [Wed, 26 Nov 2014 17:35:46 +0000 (12:35 -0500)]
security: Manage SELinux labels on shared/readonly hostdev's

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

Support for shared hostdev's was added in a number of commits, initially
starting with 'f2c1d9a80' and most recently commit id 'fd243fc4' to fix
issues with the initial implementation.  Missed in all those changes was
the need to mimic the virSELinux{Set|Restore}SecurityDiskLabel code to
handle the "shared" (or shareable) and readonly options when Setting
or Restoring the SELinux labels.

This patch will adjust the virSecuritySELinuxSetSecuritySCSILabel to not
use the virSecuritySELinuxSetSecurityHostdevLabelHelper in order to set
the label. Rather follow what the Disk code does by setting the label
differently based on whether shareable/readonly is set.  This patch will
also modify the virSecuritySELinuxRestoreSecuritySCSILabel to follow
the same logic as virSecuritySELinuxRestoreSecurityImageLabelInt and not
restore the label if shared/readonly

10 years agotests: Fix sharable typo
John Ferlan [Tue, 25 Nov 2014 15:38:37 +0000 (10:38 -0500)]
tests: Fix sharable typo

10 years agoconf: forbid negative number in address(like controller, bus, slot...)
Luyao Huang [Mon, 8 Dec 2014 08:27:26 +0000 (16:27 +0800)]
conf: forbid negative number in address(like controller, bus, slot...)

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

When we edit a negative controller address number to a device,
some of them will auto generate a controller with invalid index
number. This will make guest disappear after restart libvirtd.
Instead of allowing negative number for controller index, we
should forbid negative number in these place (we did this before,
but after f18c02ec, virStrToLong_ui changed to allow negative
number). Therefore switch to virStrToLong_uip in these places.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: migration: Unlock vm on failed ACL check in protocol v2 APIs
Peter Krempa [Mon, 8 Dec 2014 18:25:21 +0000 (19:25 +0100)]
qemu: migration: Unlock vm on failed ACL check in protocol v2 APIs

Avoid leaving the domain locked on a failed ACL check in
qemuDomainMigratePerform() and qemuDomainMigrateFinish2().

Introduced in commit abf75aea247e (Add ACL checks into the QEMU driver).

10 years agodocs: Fix simple typo s/ a API/ an API/
Martin Kletzander [Sat, 29 Nov 2014 17:02:32 +0000 (18:02 +0100)]
docs: Fix simple typo s/ a API/ an API/

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agobuild: Move check for XML::XPath into bootstrap
Martin Kletzander [Mon, 8 Dec 2014 10:51:33 +0000 (11:51 +0100)]
build: Move check for XML::XPath into bootstrap

The module XML::XPath is needed when building from git only (no need to
have it when building from tarball), so this patch moves the check from
specfile into bootstrap.conf.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agomaint: update to latest gnulib
Eric Blake [Mon, 8 Dec 2014 21:23:36 +0000 (14:23 -0700)]
maint: update to latest gnulib

Several portability changes, but the one we are most interested in
is the improvement to bootstrap to detect perl modules.

This patch doesn't actually change our bootstrap requirements
(that will be a separate patch), but sets the stage for it.

* .gnulib: Update to latest.
* bootstrap: Regenerate from upstream.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agobuild: fix mingw printing of pid
Eric Blake [Mon, 8 Dec 2014 21:56:31 +0000 (14:56 -0700)]
build: fix mingw printing of pid

Commit c75425734 introduced a compilation failure:

../../src/access/viraccessdriverpolkit.c: In function 'virAccessDriverPolkitCheck':
../../src/access/viraccessdriverpolkit.c:137:5: error: format '%d' expects argument of type 'int', but argument 9 has type 'pid_t' [-Werror=format=]
     VIR_DEBUG("Check action '%s' for process '%d' time %lld uid %d",
     ^

Since mingw pid_t is 64 bits, it's easier to just follow what we've
done elsewhere and cast to a large enough type when printing pids.

* src/access/viraccessdriverpolkit.c (virAccessDriverPolkitCheck):
Add cast.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agobuild: fix unused variable in mingw
Eric Blake [Mon, 8 Dec 2014 21:47:24 +0000 (14:47 -0700)]
build: fix unused variable in mingw

Bug introduced in commit 100b7a72a:

util/virnetdevbridge.c: In function 'virNetDevBridgePortSetLearning':
util/virnetdevbridge.c:359:38: error: unused parameter 'enable' [-Werror=unused-parameter]
                                bool enable)
                                      ^

* src/util/virnetdevbridge.c (virNetDevBridgePortSetLearning): Mark
unused variable.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonetwork: don't allow multiple dhcp sections
Kyle DeFrancia [Thu, 4 Dec 2014 21:07:36 +0000 (13:07 -0800)]
network: don't allow multiple dhcp sections

This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=907779

A <dhcp> element can exist in only one IPv4 address and one IPv6
address per network.  This patch enforces that in virNetworkUpdate.

10 years agolxc: always use virDomainNetGetActualBridgeName to get interface's bridge
Laine Stump [Fri, 21 Nov 2014 20:08:50 +0000 (15:08 -0500)]
lxc: always use virDomainNetGetActualBridgeName to get interface's bridge

lxcProcessSetupInterfaces() used to have a special case for
actualType='network' (a network with forward mode of route, nat, or
isolated) to call the libvirt public API to retrieve the bridge being
used by a network. That is no longer necessary - since all network
types that use a bridge and tap device now get the bridge name stored
in the ActualNetDef, we can just always use
virDomainNetGetActualBridgeName() instead.

10 years agoqemu: always use virDomainNetGetActualBridgeName to get interface's bridge
Laine Stump [Fri, 21 Nov 2014 17:51:13 +0000 (12:51 -0500)]
qemu: always use virDomainNetGetActualBridgeName to get interface's bridge

qemuNetworkIfaceConnect() used to have a special case for
actualType='network' (a network with forward mode of route, nat, or
isolated) to call the libvirt public API to retrieve the bridge being
used by a network. That is no longer necessary - since all network
types that use a bridge and tap device now get the bridge name stored
in the ActualNetDef, we can just always use
virDomainNetGetActualBridgeName() instead.

(an audit of the two callers to qemuNetworkIfaceConnect() confirms
that it is never called for any other type of network, so the dead
code in the else statement (logging an internal error if it is called
for any other type of network) is eliminated in the process.)

10 years agoqemu: setup tap devices for macTableManager='libvirt'
Laine Stump [Fri, 21 Nov 2014 22:03:14 +0000 (17:03 -0500)]
qemu: setup tap devices for macTableManager='libvirt'

When libvirt is managing the MAC table of a Linux host bridge, it must
turn off learning and unicast_flood for each tap device attached to
that bridge, then add a Forwarding Database (fdb) entry for the tap
device using the MAC address from the domain interface config.

Once we have disabled learning and flooding, any packet that has a
destination MAC address not present in the fdb will be dropped by the
bridge. This, along with the opportunistic disabling of promiscuous
mode[*], can result in enhanced network performance. and a potential
slight security improvement.

[*] If there is only one device on the bridge with learning/unicast_flood
enabled, then that device will automatically have promiscuous mode
disabled. If there are *no* devices with learning/unicast_flood
enabled (e.g. for a libvirt "route", "nat", or isolated network that
has no physical device attached), then all non-tap devices will have
promiscuous mode disabled (tap devices always have promiscuous mode
enabled, which may be a bug in the kernel, but in practice has 0
effect).

None of this has any effect for kernels prior to 3.15 (upstream kernel
commit 2796d0c648c940b4796f84384fbcfb0a2399db84 "bridge: Automatically
manage port promiscuous mode"). Even after that, until kernel 3.17
(upstream commit 5be5a2df40f005ea7fb7e280e87bbbcfcf1c2fc0 "bridge: Add
filtering support for default_pvid") traffic will not be properly
forwarded without manually adding vlan table entries. Unfortunately,
although the presence of the first patch is signalled by existence of
the "learning" and "unicast_flood" options in sysfs, there is no
reliable way to query whether or not the system's kernel has the
second of those patches installed, the only thing that can be done is
to try the setting and see if traffic continues to pass.

10 years agonetwork: setup bridge devices for macTableManager='libvirt'
Laine Stump [Thu, 20 Nov 2014 20:44:19 +0000 (15:44 -0500)]
network: setup bridge devices for macTableManager='libvirt'

When the bridge device for a network has macTableManager='libvirt' the
intent is that all kernel management of the bridge's MAC table
(Forwarding Database, or fdb, in the case of a Linux Host Bridge) be
disabled, with libvirt handling updates to the table instead. The
setup required for the bridge itself is:

1) set the "vlan_filtering" property of the bridge device to 1.

2) If the bridge has a "Dummy" tap device used to set a fixed MAC
address on the bridge (which is always the case for a bridge created
by libvirt, and never the case for a bridge created by the host system
network config), turn off learning and unicast_flood on this tap (this
is needed even though this tap is never IFF_UP, because the kernel
ignores the IFF_UP flag of devices when using their settings to
automatically decide whether or not to turn off promiscuous mode for
any attached device).

(1) is done both for libvirt-created/managed bridges, and for bridges
that are created by the host system config, while (2) is done only for
bridges created by libvirt (i.e. for forward modes of nat, routed, and
isolated bridges)

There is no attempt to turn vlan_filtering off when destroying the
network because in the case of a libvirt-created bridge, the bridge is
about to be destroyed anyway, and in the case of a system bridge, if
the other devices attached to the bridge could operate properly before
destroying libvirt's network object, they will continue to operate
properly (this is similar to the way that libvirt will enable
ip_forwarding whenever a routed/natted network is started, but will
never attempt to disable it if they are stopped).

10 years agonetwork: store network macTableManager setting in NetDef actual object
Laine Stump [Fri, 21 Nov 2014 17:35:15 +0000 (12:35 -0500)]
network: store network macTableManager setting in NetDef actual object

At the time that the network driver allocates a connection to a
network, the tap device that will be used hasn't yet been created -
that will be done later by qemu (or lxc or whoever) - but if the
network has macTableManager='libvirt', then when we do get around to
creating the tap device, we will need to add an entry for it to the
network bridge's fdb (forwarding database) *and* turn off learning and
unicast_flood for that tap device in the bridge's sysfs settings. This
means that qemu needs to know both the bridge name as well as the
setting of macTableManager, so we either need to create a new API to
retrieve that info, or just pass it back in the ActualNetDef that is
created during networkAllocateActualDevice. We choose the latter
method, since it's already done for the bridge device, and it has the
side effect of making the information available in domain status.

(NB: in the future, I think that the tap device should actually be
created by networkAllocateActualDevice(), as that will solve several
other problems, but that is a battle for another day, and this
information will still be useful outside the network driver)

10 years agonetwork: save bridge name in ActualNetDef when actualType==network too
Laine Stump [Fri, 21 Nov 2014 17:20:37 +0000 (12:20 -0500)]
network: save bridge name in ActualNetDef when actualType==network too

When the actualType of a virDomainNetDef is "network", it means that
we are connecting to a libvirt-managed network (routed, natted, or
isolated) which does use a bridge device (created by libvirt). In the
past we have required drivers such as qemu to call the public API to
retrieve the bridge name in this case (even though it is available in
the NetDef's ActualNetDef if the actualType is "bridge" (i.e., an
externally-created bridge that isn't managed by libvirt). There is no
real reason for this difference, and as a matter of fact it
complicates things for qemu. Also, there is another bridge-related
attribute (macTableManager) that will need to be available in both
cases, so this makes things consistent.

In order to avoid problems when restarting libvirtd after an update
from an older version that *doesn't* store the network's bridgename in
the ActualNetDef, we also need to put it in place during
networkNotifyActualDevice() (this function is run for each interface
of each domain whenever libvirtd is restarted).

Along with making the bridge name available in the internal object, it
is also now reported in the <source> element of the <interface> state
XML (or the <actual> subelement in the internally-stored format).

The one oddity about this change is that usually there is a separate
union for every different "type" in a higher level object (e.g. in the
case of a virDomainNetDef there are separate "network" and "bridge"
members of the union that pivots on the type), but in this case
network and bridge types both have exactly the same attributes, so the
"bridge" member is used for both type==network and type==bridge.

10 years agoconf: new network bridge device attribute macTableManager
Laine Stump [Thu, 20 Nov 2014 17:40:33 +0000 (12:40 -0500)]
conf: new network bridge device attribute macTableManager

The macTableManager attribute of a network's bridge subelement tells
libvirt how the bridge's MAC address table (used to determine the
egress port for packets) is managed. In the default mode, "kernel",
management is left to the kernel, which usually determines entries in
part by turning on promiscuous mode on all ports of the bridge,
flooding packets to all ports when the correct destination is unknown,
and adding/removing entries to the fdb as it sees incoming traffic
from particular MAC addresses.  In "libvirt" mode, libvirt turns off
learning and flooding on all the bridge ports connected to guest
domain interfaces, and adds/removes entries according to the MAC
addresses in the domain interface configurations. A side effect of
turning off learning and unicast_flood on the ports of a bridge is
that (with Linux kernel 3.17 and newer), the kernel can automatically
turn off promiscuous mode on one or more of the bridge's ports
(usually only the one interface that is used to connect the bridge to
the physical network). The result is better performance (because
packets aren't being flooded to all ports, and can be dropped earlier
when they are of no interest) and slightly better security (a guest
can still send out packets with a spoofed source MAC address, but will
only receive traffic intended for the guest interface's configured MAC
address).

The attribute looks like this in the configuration:

  <network>
    <name>test</name>
    <bridge name='br0' macTableManager='libvirt'/>
    ...

This patch only adds the config knob, documentation, and test
cases. The functionality behind this knob is added in later patches.

10 years agoutil: functions to manage bridge fdb (forwarding database)
Laine Stump [Thu, 20 Nov 2014 16:55:50 +0000 (11:55 -0500)]
util: functions to manage bridge fdb (forwarding database)

These two functions use netlink RTM_NEWNEIGH and RTM_DELNEIGH messages
to add and delete entries from a bridge's fdb. The bridge itself is
not referenced in the arguments to the functions, only the name of the
device that is attached to the bridge (since a device can only be
attached to one bridge at a time, and must be attached for this
function to make sense, the kernel easily infers which bridge's fdb is
being modified by looking at the device name/index).

10 years agoutil: new functions for setting bridge and bridge port attributes
Laine Stump [Wed, 19 Nov 2014 18:28:57 +0000 (13:28 -0500)]
util: new functions for setting bridge and bridge port attributes

These functions all set/get items in the sysfs for a bridge device.

10 years agogetstats: add block.n.path stat
Eric Blake [Tue, 25 Nov 2014 00:12:30 +0000 (17:12 -0700)]
getstats: add block.n.path stat

I'm about to make block stats optionally more complex to cover
backing chains, where block.count will no longer equal the number
of <disks> for a domain.  For these reasons, it is nicer if the
statistics output includes the source path (for local files).
This patch doesn't add anything for network disks, although we
may decide to add that later.

With this patch, I now see the following for the same domain as
in the previous patch (one qcow2 file, and an empty cdrom drive):
$ virsh domstats --block foo
Domain: 'foo'
  block.count=2
  block.0.name=hda
  block.0.path=/var/lib/libvirt/images/foo.qcow2
  block.1.name=hdc

* src/libvirt-domain.c (virConnectGetAllDomainStats): Document
new field.
* tools/virsh.pod (domstats): Document new field.
* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Return the new
stat for local files/block devices.
(QEMU_ADD_NAME_PARAM): Add parameter.
(qemuDomainGetStatsInterface): Update caller.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agogetstats: start giving offline block stats
Eric Blake [Tue, 25 Nov 2014 00:12:30 +0000 (17:12 -0700)]
getstats: start giving offline block stats

I noticed that for an offline domain, 'virsh domstats --block $dom'
was producing just the domain name, with no stats.  But the older
'virsh domblkinfo' works just fine on offline domains.  This patch
starts to get us closer, by at least reporting the disk names for
an offline domain.

With this patch, I now see the following for an offline domain
with one qcow2 disk and an empty cdrom drive:
$ virsh domstats --block foo
Domain: 'foo'
  block.count=2
  block.0.name=hda
  block.1.name=hdc

* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Don't short-circuit
output of block name.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agogetstats: improve documentation
Eric Blake [Fri, 5 Dec 2014 04:39:55 +0000 (21:39 -0700)]
getstats: improve documentation

At least with 'virsh domstats --block' on an offline domain, we
currently output no stats even though we recognize the stat
category.  Although a later patch will improve this situation,
it is better to document that this is expected behavior.

Also, while the current implementation rejects filtering flags
for virDomainListGetStats, this limitation may be lifted in the
future and we do not enforce it at the API level.

* src/libvirt-domain.c (virConnectGetAllDomainStats): Document
that recognized stats might not be reported.
(virDomainListGetStats): Likewise, and tweak filtering documentation.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agogetstats: avoid memory leak on OOM
Eric Blake [Fri, 5 Dec 2014 23:06:52 +0000 (16:06 -0700)]
getstats: avoid memory leak on OOM

qemuDomainGetStatsBlock() could leak a stats hash table if it
encountered OOM while populating the virTypedParameters.
Oddly, the fix doesn't even touch qemuDomainGetStatsBlock :)

* src/qemu/qemu_driver.c (QEMU_ADD_COUNT_PARAM)
(QEMU_ADD_NAME_PARAM): Don't return early.
(qemuDomainGetStatsInterface): Adjust caller.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agodocs: Use gender-neutral pronoun in hacking.html.in
Christophe Fergeau [Mon, 8 Dec 2014 13:13:00 +0000 (14:13 +0100)]
docs: Use gender-neutral pronoun in hacking.html.in

Use 'they' instead of 'he'.

10 years agorpc: Report proper close reason
Martin Kletzander [Sun, 30 Nov 2014 19:09:08 +0000 (20:09 +0100)]
rpc: Report proper close reason

Whenever client socket was marked as closed for some reason, it could've
been changed when really closing the connection.  With this patch the
proper reason is kept since the first time it's marked as closed.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agovirsh: Don't reconnect after the command when disconnected
Martin Kletzander [Mon, 1 Dec 2014 10:46:14 +0000 (11:46 +0100)]
virsh: Don't reconnect after the command when disconnected

Each command that needs a connection causes a new connection to be
made.  Reconnecting after a command failed is pointless, mainly when
there is no other command to run.  Removeing three lines of code takes
care of that and keeps virsh working as it should.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agostorage: Fix printing/casting of uid_t/gid_t
Peter Krempa [Fri, 5 Dec 2014 08:51:23 +0000 (09:51 +0100)]
storage: Fix printing/casting of uid_t/gid_t

Other parts of libvirt use "%u" for formatting uid/gid and typecast to
unsigned int. Storage driver used the signed variant.

10 years agodocs: network: fix some trivial typos in docs/formatnetwork.html
Chen Fan [Fri, 5 Dec 2014 09:38:46 +0000 (17:38 +0800)]
docs: network: fix some trivial typos in docs/formatnetwork.html

this patch fix some weird typos:
   1. < hostdev>     => <hostdev>
   2. < type>        => <type>
   3. <virtualport > => <virtualport>
   4. redundant comma
   5. missing right-half bracket

Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
10 years agovirsh: Add adapter options for pool-{create|define}-as
John Ferlan [Thu, 4 Dec 2014 14:22:30 +0000 (09:22 -0500)]
virsh: Add adapter options for pool-{create|define}-as

Add the optional adapter options for pool create/define.  Results in
either:

<adapter type='scsi_host' name='scsi_host2'/>

or (on one line)

<adapter type='fc_host' parent='scsi_host5'
         wwnn='20000000c9831b4b' wwpn='10000000c9831b4b'/>

being generated.

10 years agovirsh: Add auth options for pool-{create|define}-as
John Ferlan [Wed, 3 Dec 2014 23:45:50 +0000 (18:45 -0500)]
virsh: Add auth options for pool-{create|define}-as

Add 3 new optional options for the pool-create-as and pool-define-as
command in order to define the 3 elements required in order to add
an auth element, such as:

<auth type='chap' username='myuser'>
  <secret usage='libvirtiscsi'/>
</auth>

10 years agovirsh.pod: Fix the pool-define-as and pool-create-as description
John Ferlan [Thu, 4 Dec 2014 00:46:54 +0000 (19:46 -0500)]
virsh.pod: Fix the pool-define-as and pool-create-as description

Properly format the options and provide meaningful descriptions for
the various options.

10 years agodocs: Fix a couple of typos on the storage pool html
John Ferlan [Thu, 4 Dec 2014 00:09:20 +0000 (19:09 -0500)]
docs: Fix a couple of typos on the storage pool html

Fix format of the secret XML in the example. The XML had an extraneous
"type='iscsi'" (which is used by the <disk> definitions)

The world wide node name had a typo in the acronym (wwwn).

10 years agoutil: check for an illegal character in a XML namespace prefix
Erik Skultety [Thu, 4 Dec 2014 13:37:09 +0000 (14:37 +0100)]
util: check for an illegal character in a XML namespace prefix

When user tries to insert element metadata providing a namespace
declaration as well, currently we insert the element without any validation
check for XML prefix (if provided). The next VM start would then
fail with parse error. This patch fixes this issue by adding a call to
xmlValidateNCName function to check for illegal characters in the
prefix.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1143921

10 years agoReport original error when QMP probing fails with new QEMU
Daniel P. Berrange [Thu, 4 Dec 2014 15:26:41 +0000 (15:26 +0000)]
Report original error when QMP probing fails with new QEMU

If probing capabilities via QMP fails, we now have a check
that prevents us falling back to -help parsing. Unfortunately
the error message

  "Failed to probe capabilities for /usr/bin/qemu-kvm:
   unsupported configuration: QEMU 2.1.2 is too new for help parsing"

is proving rather unhelpful to the user. We need to be telling
them why QMP failed (the root cause), rather than they can't
use -help (the side effect).

To do this we should capture stderr during QMP probing, and
if -help parsing then sees a new QEMU version, we know that
QMP should have worked, and so we can show the messages from
stderr. The message thus becomes

  "Failed to probe capabilities for /usr/bin/qemu-kvm:
   internal error: QEMU / QMP failed: Could not access
   KVM kernel module: No such file or directory
   failed to initialize KVM: No such file or directory"

10 years agoqemu: snapshot: Forbid internal snapshot with passthrough devices
Shanzhi Yu [Wed, 3 Dec 2014 11:12:35 +0000 (19:12 +0800)]
qemu: snapshot: Forbid internal snapshot with passthrough devices

When attempting to create internal system checkpoint with a passthrough
device qemu will report the following error:

error: operation failed: Error -22 while writing VM

This patch calls the function to check if migration is possible with
given VM and thus improves the error to:

error: Requested operation is not valid: domain has assigned non-USB host devices

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=874418#c19
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
10 years agostorage: backend: Log uid/gid when initializing storage file backend
Peter Krempa [Tue, 14 Oct 2014 13:55:09 +0000 (15:55 +0200)]
storage: backend: Log uid/gid when initializing storage file backend

To ease debugging permission problems add uid/gid values to the debug
message when initializing a storage file backend.

10 years agonetworkValidate: Disallow bandwidth in portgroups too
Michal Privoznik [Wed, 3 Dec 2014 17:15:40 +0000 (18:15 +0100)]
networkValidate: Disallow bandwidth in portgroups too

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

In one of the previous commits (eafb53fe) we disallowed
network-wide bandwidth to some network types. However, we
forgot about <portgroups/> which can have <bandwidth/> too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agodocs: storage: fix rbd pool indentation
Cole Robinson [Thu, 4 Dec 2014 15:34:05 +0000 (10:34 -0500)]
docs: storage: fix rbd pool indentation

10 years agoqemu: process: Avoid uninitialized use two vars when reconnecting to vm
Peter Krempa [Thu, 4 Dec 2014 15:13:31 +0000 (16:13 +0100)]
qemu: process: Avoid uninitialized use two vars when reconnecting to vm

3ecebf07110ca8d3413072557f29137943e848e3 breaks the build as it adds a
way to jump to cleanup before the 'cfg' object is retrieved and 'priv'
is initialized.

10 years agoFix handling of whitespae in preprocessor macros for API generator
Daniel P. Berrange [Thu, 4 Dec 2014 12:06:32 +0000 (12:06 +0000)]
Fix handling of whitespae in preprocessor macros for API generator

The apibuild.py script did not handle whitespace in preprocessor
macros, so it failed to detect constants declared with '# define'
instead of '#define'. Since we now correctly indent our public
header files, we have silently lost all constants from
libvirt-api.xml. This also caused us to not detect formatting
errors in constant docs

10 years agoqemu: process: Refactor reconnecting to qemu processes
Peter Krempa [Wed, 3 Dec 2014 13:22:05 +0000 (14:22 +0100)]
qemu: process: Refactor reconnecting to qemu processes

Move entering the job into the thread to simplify the program flow. Also
as the code holds a separate reference to the domain object some
conditions can be simplified.

After this patch qemuDomainObjTransferJob is no longer needed so this
patch removes it.

10 years agodocs: Create html documentation even if XHTML1 DTD is not available to validate
Ian Campbell [Fri, 28 Nov 2014 14:36:18 +0000 (14:36 +0000)]
docs: Create html documentation even if XHTML1 DTD is not available to validate

On a Debian system lacking the w3c-dtd-xhtml package the build fails
with:

        $ make -C docs/ formatcaps.html
        make: Entering directory '/local/scratch/ianc/devel/libvirt.git/docs'
        Generating formatcaps.html.tmp
        I/O error : Attempt to load network entity http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
        formatcaps.html.in:2: warning: failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
        C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
                                                                                       ^
        I/O error : Attempt to load network entity http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
        ../docs/sitemap.html.in:2: warning: failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
        C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
                                                                                       ^
        missing XHTML1 DTD
        rm formatcaps.html.tmp
        make: Leaving directory '/local/scratch/ianc/devel/libvirt.git/docs'
        $ ls docs/formatcaps*
        docs/formatcaps.html.in

https://www.redhat.com/archives/libvir-list/2009-November/msg00413.html
suggests that the XHTML1 DTD should not be a hard requirement and the
docs should be generated but not validated if it is not available.

Therefore when the DTD is not available arrange for the .html.tmp file
to be propagated to the .html output.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Daniel Veillard <veillard@redhat.com>
10 years agotests: Fix misplaced parenthesis in qemumonitorjsontest
Martin Kletzander [Wed, 3 Dec 2014 13:42:27 +0000 (14:42 +0100)]
tests: Fix misplaced parenthesis in qemumonitorjsontest

When trying clang, it found out that we were comparing sizeof with 0
even though we wanted to check the return value of memcmp.  That showed
us that the test was wrong and it needs a fix as well.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agodrvbhyve: Automatically tear down guest domains on shutdown
Conrad Meyer [Fri, 14 Nov 2014 16:03:30 +0000 (11:03 -0500)]
drvbhyve: Automatically tear down guest domains on shutdown

Reboot requires more sophistication and is left as a future work item --
but at least part of the plumbing is in place.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: Fix virsh freeze when blockcopy storage file is removed
Erik Skultety [Wed, 3 Dec 2014 12:56:47 +0000 (13:56 +0100)]
qemu: Fix virsh freeze when blockcopy storage file is removed

If someone removes blockcopy storage file when still in mirroring phase
and then requesting blockjob abort using pivot, virsh cmd freezes. This
is not an issue with older qemu versions which did not support
asynchronous jobs (which we prefer by default).
As we have reached the mirroring phase successfully, polling monitor for
blockjob info always returns 1 and the loop never ends.
This fix introduces a check for qemuDomainBlockPivot return code, possibly
skipping the asynchronous waiting completely, if an error occurred and
asynchronous waiting was the preferred method.

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

10 years agodocs: More html/docs changes from libvirt.h.in split
John Ferlan [Wed, 3 Dec 2014 21:15:14 +0000 (16:15 -0500)]
docs: More html/docs changes from libvirt.h.in split

This changes the display from:

libvirt-storage: APIs for management of storages

to

libvirt-storage: APIs for management of storage pools and volumes

In making that change I expected my build tree html output to be
regenerated; however, it wasn't because the dependency for the separated
libvirt-storage.h wasn't there.  It was only present for libvirt.h.in

So I added each in the order displayed on the docs/html/index.html page

10 years agocpu: fix possible crash in getModels
Pavel Hrdina [Wed, 3 Dec 2014 17:50:16 +0000 (18:50 +0100)]
cpu: fix possible crash in getModels

Commit 86a15a25 introduced a new cpu driver API 'getModels'. Public API
allow you to pass NULL for models to get only number of existing models.
However the new code will crash with segfault so we have to count with
the possibility that the user wants only the number.

There is also difference in order of the models gathered by this new API
as the old approach was inserting the elements to the end of the array
so we should use 'VIR_APPEND_ELEMENT'.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoqemu: driver: Reload snapshots and managedsaves prior to reconnecting
Peter Krempa [Wed, 3 Dec 2014 10:18:53 +0000 (11:18 +0100)]
qemu: driver: Reload snapshots and managedsaves prior to reconnecting

Reconnect to the VM is a possibly long-running job spawned in a separate
thread. We should reload the snapshot defs and managedsave state prior
to spawning the thread to avoid blocking of the daemon startup which
would serialize on the VM lock.

Also the reloading code would violate the domain job held while
reconnecting as the loader functions don't create jobs.

10 years agoleaseshelper: Fix incorrect alignment of a switch case
Peter Krempa [Wed, 3 Dec 2014 17:27:03 +0000 (18:27 +0100)]
leaseshelper: Fix incorrect alignment of a switch case

Introduced in ca6dbdd047d1ed691ccbae72556d85722a5f7a36

10 years agoleaseshelper: Skip entries missing expiry time on INIT action
Peter Krempa [Wed, 3 Dec 2014 17:24:38 +0000 (18:24 +0100)]
leaseshelper: Skip entries missing expiry time on INIT action

Coverity pointed out that in other places we always check the return
value from virJSONValueObjectGetNumberLong() but not in the new addition
in leaseshelper. To solve the issue and also be more robust in case
somebody would corrupt the file, skip outputting of the lease entry in
case the expiry time is missing.

10 years agostorage: fix crash caused by no check return before set close
Luyao Huang [Wed, 3 Dec 2014 15:01:32 +0000 (23:01 +0800)]
storage: fix crash caused by no check return before set close

https://bugzilla.redhat.com/show_bug.cgi?id=1087104#c5

When trying to use an invalid offset to virStorageVolUpload(), libvirt
fails in virFDStreamOpenFileInternal(), although it seems libvirt does
not check the return in storageVolUpload(), and calls
virFDStreamSetInternalCloseCb() right after.  But stream doesn't have a
privateData (is NULL) yet, and the daemon crashes then.

0  0x00007f09429a9c10 in pthread_mutex_lock () from /lib64/libpthread.so.0
1  0x00007f094514dbf5 in virMutexLock (m=<optimized out>) at util/virthread.c:88
2  0x00007f09451cb211 in virFDStreamSetInternalCloseCb at fdstream.c:795
3  0x00007f092ff2c9eb in storageVolUpload at storage/storage_driver.c:2098
4  0x00007f09451f46e0 in virStorageVolUpload at libvirt.c:14000
5  0x00007f0945c78fa1 in remoteDispatchStorageVolUpload at remote_dispatch.h:14339
6  remoteDispatchStorageVolUploadHelper at remote_dispatch.h:14309
7  0x00007f094524a192 in virNetServerProgramDispatchCall at rpc/virnetserverprogram.c:437

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agovirsh: vol-upload disallow negative offset
Shanzhi Yu [Wed, 3 Dec 2014 07:53:38 +0000 (15:53 +0800)]
virsh: vol-upload disallow negative offset

Commit 570d0f63 describes disabling negative offset usage for
vol-upload/download (e.g. cmdVolDownload and cmdVolUpload; however,
the change was only made to cmdVolDownload. There was no change to
cmdVolUpload.  This patch adds the same checks for vol-upload.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1087104
Signed-off-by: Shanzhi Yu <shyu@redhat.com>
10 years agonetwork: dnsmasq: Don't format lease file path
Peter Krempa [Thu, 20 Nov 2014 12:56:39 +0000 (13:56 +0100)]
network: dnsmasq: Don't format lease file path

Now that we don't use the leases file at all for leases just don't
format it into the config and use the leaseshelper to do all the
lifting.

10 years agoleaseshelper: Refactor control flow
Peter Krempa [Thu, 20 Nov 2014 13:49:31 +0000 (14:49 +0100)]
leaseshelper: Refactor control flow

Untangle a few conditions into a case statement and improve reporting of
invaid commands.

10 years agoleaseshelper: improvements to support all events
Nehal J Wani [Tue, 18 Nov 2014 17:16:25 +0000 (22:46 +0530)]
leaseshelper: improvements to support all events

This patch enables the helper program to detect event(s) triggered when
there is a change in lease length or expiry and client-id. This
transfers complete control of leases database to libvirt and obsoletes
use of the lease database file (<network-name>.leases). That file will
not be created, read, or written.  This is achieved by adding the option
--leasefile-ro to dnsmasq and passing a custom env var to leaseshelper,
which helps us map events related to leases with their corresponding
network bridges, no matter what the event be.

Also, this requires the addition of a new non-lease entry in our custom
lease database: "server-duid". It is required to identify a DHCPv6
server.

Now that dnsmasq doesn't maintain its own leases database, it relies on
our helper program to tell it about previous leases and server duid.
Thus, this patch makes our leases program honor an extra action: "init",
in which it sends the known info in a particular format to dnsmasq
by printing it to stdout.

The drawback of this change is that upgrade to this new approach does
not transfer the existing leases for the network if the leaseshelper
wasn't already used.

10 years agocpu-driver: Fix the cross driver function call
Daniel Hansel [Thu, 20 Nov 2014 10:08:21 +0000 (11:08 +0100)]
cpu-driver: Fix the cross driver function call

For Intel and PowerPC the implementation is calling a cpu driver
function across driver layers (i.e. from qemu driver directly to cpu
driver).
The correct behavior is to use libvirt API functionality to perform such
a inter-driver call.

This patch introduces a new cpu driver API function getModels() to
retrieve the cpu models. The currect implementation to process the
cpu_map XML content is transferred to the INTEL and PowerPC cpu driver
specific API functions.
Additionally processing the cpu_map XML file is not safe due to the fact
that the cpu map does not exist for all architectures. Therefore it is
better to encapsulate the processing in the architecture specific cpu
drivers.

Signed-off-by: Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Reviewed-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
10 years agoqemu_migration: Precreate missing storage
Michal Privoznik [Tue, 25 Nov 2014 13:19:07 +0000 (14:19 +0100)]
qemu_migration: Precreate missing storage

Based on previous commit, we can now precreate missing volumes. While
digging out the functionality from storage driver would be nicer, if
you've seen the code it's nearly impossible. So I'm going from the
other end:

1) For given disk target, disk path is looked up.
2) For the disk path, storage pool is looked up, a volume XML is
constructed and then passed to virStorageVolCreateXML() which has all
the knowledge how to create raw images, (encrypted) qcow(2) images,
etc.

One of the advantages of this approach is, we don't have to care about
image conversion - qemu does that for us. So for instance, users can
transform qcow2 into raw on migration (if the correct XML is passed to
the migration API).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu_migration: Send disk sizes to the other side
Michal Privoznik [Mon, 24 Nov 2014 14:55:36 +0000 (15:55 +0100)]
qemu_migration: Send disk sizes to the other side

Up 'til now, users need to precreate non-shared storage on migration
themselves. This is not very friendly requirement and we should do
something about it. In this patch, the migration cookie is extended,
so that <nbd/> section does not only contain NBD port, but info on
disks being migrated. This patch sends a list of pairs of:

    <disk target; disk size>

to the destination. The actual storage allocation is left for next
commit.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemuMonitorJSONBlockStatsUpdateCapacity: Don't skip disks
Michal Privoznik [Mon, 1 Dec 2014 14:31:51 +0000 (15:31 +0100)]
qemuMonitorJSONBlockStatsUpdateCapacity: Don't skip disks

The function queries the block devices visible to qemu
('query-block') and parses the qemu's output. The info is
returned in a hash table which is expected to be pre-filled by
qemuMonitorJSONGetAllBlockStatsInfo(). However, in the next patch
we are not going to call the latter function at all, so we should
make the former function add devices into the hash table if not
found there.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agostorage: Introduce storagePoolLookupByTargetPath
Michal Privoznik [Wed, 26 Nov 2014 16:13:00 +0000 (17:13 +0100)]
storage: Introduce storagePoolLookupByTargetPath

While this could be exposed as a public API, it's not done yet as
there's no demand for that yet. Anyway, this is just preparing
the environment for easier volume creation on the destination.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoReplace virDomainSnapshotFree with virObjectUnref
John Ferlan [Mon, 1 Dec 2014 12:30:16 +0000 (07:30 -0500)]
Replace virDomainSnapshotFree with virObjectUnref

Since virDomainSnapshotFree will call virObjectUnref anyway, let's just use
that directly so as to avoid the possibility that we inadvertently clear out
a pending error message when using the public API.

10 years agoReplace virInterfaceFree with virObjectUnref
John Ferlan [Sun, 30 Nov 2014 17:07:19 +0000 (12:07 -0500)]
Replace virInterfaceFree with virObjectUnref

Since virInterfaceFree will call virObjectUnref anyway, let's just use that
directly so as to avoid the possibility that we inadvertently clear out
a pending error message when using the public API.