]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
9 years agorpc: gendispatch: Tune it to support client structure
Erik Skultety [Thu, 14 Apr 2016 22:22:59 +0000 (00:22 +0200)]
rpc: gendispatch: Tune it to support client structure

Now that libvirt-admin supports another client-side object and provided that
we want to generate as many both client-side and server-side RPC dispatchers,
support for this needs to be added to gendispatch.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agoadmin: Introduce virAdmClient client-side object
Erik Skultety [Wed, 13 Apr 2016 08:35:26 +0000 (10:35 +0200)]
admin: Introduce virAdmClient client-side object

Besides ID, the object also stores static data like connection transport and
connection timestamp, since once obtained a list of all clients connected to a
server, from user's perspective, it would be nice to know whether a given
client is remote or local only and when did it connect to the daemon.
Along with the object introduction, all necessary client-side methods necessary
to work with the object are added as well.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agorpc: virnetserverclient: Introduce new attribute conn_time to client
Erik Skultety [Tue, 12 Apr 2016 17:21:43 +0000 (19:21 +0200)]
rpc: virnetserverclient: Introduce new attribute conn_time to client

Besides ID, libvirt should provide several parameters to help the user
distinguish two clients from each other. One of them is the connection
timestamp. This patch also adds a testcase for proper JSON formatting of the
new attribute too (proper formatting of older clients that did not support
this attribute yet is included in the existing tests) - in order to
testGenerateJSON to work, a mock of time_t time(time_t *timer) needed to be
created.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agorpc: virnetserverclient: Identify clients by an integer ID
Erik Skultety [Wed, 13 Apr 2016 18:54:40 +0000 (20:54 +0200)]
rpc: virnetserverclient: Identify clients by an integer ID

Admin API needs a way of addressing specific clients. Unlike servers, which we
are happy to address by names both because its name reflects its purpose (to
some extent) and we only have two of them (so far), naming clients doesn't make
any sense, since a) each client is an anonymous, i.e. not recognized after a
disconnect followed by a reconnect, b) we can't predict what kind of requests
it's going to send to daemon, and c) the are loads of them comming and going,
so the only viable option is to use an ID which is of a reasonably wide data
type.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agoconfigure: Introduce LIBVIRT_{CHECK,RESULT}_INIT_SCRIPT
Andrea Bolognani [Mon, 2 May 2016 11:27:47 +0000 (13:27 +0200)]
configure: Introduce LIBVIRT_{CHECK,RESULT}_INIT_SCRIPT

Move the code dealing with init scripts to a separate file
so configure.ac itself can be a little bit smaller.

9 years agoconfigure: Add systemd detection to --with-init-script=check
Andrea Bolognani [Thu, 28 Apr 2016 15:19:29 +0000 (17:19 +0200)]
configure: Add systemd detection to --with-init-script=check

Most distributions, including RHEL, have switched to systemd,
so we should detect it and act accordingly. This also means
that 'systemd+redhat' should be preferred to legacy 'redhat'.

Our witness for the check is the availability of the systemctl
command on the host.

9 years agoconfigure: Improve --with-init-script=check
Andrea Bolognani [Thu, 28 Apr 2016 14:57:35 +0000 (16:57 +0200)]
configure: Improve --with-init-script=check

If we didn't find a match, either because we're cross compiling
or because we're not building on RHEL, we won't install any
init script.

Make sure this is reported correctly in the configure summary.

9 years agotests: add tests for panic device model s390
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:43 +0000 (15:23 +0200)]
tests: add tests for panic device model s390

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
9 years agoqemu: add default panic device to S390 guests
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:42 +0000 (15:23 +0200)]
qemu: add default panic device to S390 guests

This patch adds by default a panic device with model s390 to S390 guests.

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
9 years agoqemu: add panic device support for S390
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:41 +0000 (15:23 +0200)]
qemu: add panic device support for S390

If a panic device is being defined without a model in a domain
the default value is always overwritten with model ISA. An ISA
bus does not exist on S390 and therefore specifying a panic device
results in an unsupported configuration.
Since the S390 architecture inherently provides a crash detection
capability the panic device should be defined in the domain xml.

This patch adds an s390 panic device model and prevents setting a
device address on it.

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
9 years agoqemu: merge S390 and S390X default device creation
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:45 +0000 (15:23 +0200)]
qemu: merge S390 and S390X default device creation

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
9 years agoqemu: fix error message for default panic device
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:46 +0000 (15:23 +0200)]
qemu: fix error message for default panic device

Adding the default bus type ISA to the message.

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
9 years agodocs: align spelling of S390
Boris Fiuczynski [Fri, 29 Apr 2016 13:23:44 +0000 (15:23 +0200)]
docs: align spelling of S390

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
9 years agofdstream: don't raise error on SIGPIPE if abort requested
Cole Robinson [Mon, 25 Apr 2016 18:00:58 +0000 (14:00 -0400)]
fdstream: don't raise error on SIGPIPE if abort requested

The iohelper dies on SIGPIPE if the stream is closed before all data
is processed. IMO this should be an error condition for virStreamFinish
according to docs like:

  * This method is a synchronization point for all asynchronous
  * errors, so if this returns a success code the application can
  * be sure that all data has been successfully processed.

However for virStreamAbort, not so much:

  * Request that the in progress data transfer be cancelled
  * abnormally before the end of the stream has been reached.
  * For output streams this can be used to inform the driver
  * that the stream is being terminated early. For input
  * streams this can be used to inform the driver that it
  * should stop sending data.

Without this, virStreamAbort will realistically always error for
active streams like domain console. So, treat the SIGPIPE case
as non-fatal if abort is requested.

Note, this will only affect an explicit user requested abort. An
abnormal abort, like from a server error, always raises an error
in the daemon.

9 years agodaemon: stream: Don't force error when client aborts
Cole Robinson [Sun, 24 Apr 2016 20:28:18 +0000 (16:28 -0400)]
daemon: stream: Don't force error when client aborts

Every time a client aborts a stream via the virStreamAbort API,
the daemon always logs an error like:

  error : daemonStreamHandleAbort:617 : stream aborted at client request

and that same error is returned to the client. Meaning virStreamAbort
always returns -1, which seems strange.

This reworks the error handling to only raise an error on virStreamAbort
if the actual server side abort call raises an error. This is similar
to how virStreamFinish works.

If the abort code path is triggered by an unexpected message type
then we continue to raise an unconditional error. Also drop a redundant
VIR_WARN call there, since virReportError will raise a VIR_ERROR anyways

9 years agorpc: protocol: Clarify VIR_NET_ERROR usage with streams
Cole Robinson [Sun, 24 Apr 2016 20:27:19 +0000 (16:27 -0400)]
rpc: protocol: Clarify VIR_NET_ERROR usage with streams

The described protocol semantics really only apply to server initiated
stream messages. Document the semantics for client messages.

9 years agodaemon: stream: set stream->closed on removal
Cole Robinson [Mon, 25 Apr 2016 18:16:07 +0000 (14:16 -0400)]
daemon: stream: set stream->closed on removal

These are the only places where we don't set stream->closed when
aborting the stream. This leads to spurious errors when the client
hangs up unexpectedly:

error : virFDStreamUpdateCallback:127 : internal error: stream is not open

9 years agodaemon: stream: don't update events if stream->closed
Cole Robinson [Mon, 25 Apr 2016 17:18:26 +0000 (13:18 -0400)]
daemon: stream: don't update events if stream->closed

Calling virStreamFinish prematurely seems to trigger this code path
even after the stream is closed, which ends up hitting this error
message later:

error : virFDStreamUpdateCallback:127 : internal error: stream is not open

Skip this function if stream->closed, which is used in many other places
like read/write handlers

9 years agodaemon: stream: Close stream on send failure
Cole Robinson [Mon, 25 Apr 2016 17:15:48 +0000 (13:15 -0400)]
daemon: stream: Close stream on send failure

This is the only place in daemon/stream.c that sets
'stream->closed = true' but neglects to actually abort the stream
and remove the callback, which seems wrong.

9 years agofdstream: Raise explicit error when iohelper gets SIGPIPE
Cole Robinson [Mon, 25 Apr 2016 16:43:44 +0000 (12:43 -0400)]
fdstream: Raise explicit error when iohelper gets SIGPIPE

This happens when virStreamFinish/Abort are called, but iohelper
still has data to process.

9 years agofdstream: Report error with virProcessTranslateStatus
Cole Robinson [Mon, 25 Apr 2016 16:34:14 +0000 (12:34 -0400)]
fdstream: Report error with virProcessTranslateStatus

Rather than poorly duplicate it

9 years agofdstream: separate out virCommandPtr cleanup
Cole Robinson [Mon, 25 Apr 2016 16:31:00 +0000 (12:31 -0400)]
fdstream: separate out virCommandPtr cleanup

Let's us de-nest some of the logic, and will simplify upcoming
patches

9 years agonwfilter: Save config to disk if we generated a UUID
Cole Robinson [Sun, 24 Apr 2016 23:04:10 +0000 (19:04 -0400)]
nwfilter: Save config to disk if we generated a UUID

libvirt-daemon-config-nwfilter will put a bunch of xml configs
into /etc/libvirt/nwfilter. These configs don't hardcode a UUID
and depends on libvirt to generate one. However the generated UUID
is never saved to disk, unless the user manually calls Define.

This makes daemon reload quite noisy with many errors like:

error : virNWFilterObjAssignDef:3101 : operation failed: filter 'allow-incoming-ipv4' already exists with uuid 50def3b5-48d6-46a3-b005-cc22df4e5c5c

Because a new UUID is generated every time the config is read from
disk, so libvirt constantly thinks it's finding a new nwfilter.

Detect if we generated a UUID when the config file is loaded; if so,
resave the new contents to disk to ensure the UUID is persisteny.

This is similar to what was done in commit a47ae7c0 with virtual
networks and generated MAC addresses

9 years agonwfilter: Push configFile building into LoadConfig
Cole Robinson [Sun, 24 Apr 2016 22:56:06 +0000 (18:56 -0400)]
nwfilter: Push configFile building into LoadConfig

This matches the pattern used for network object APIs, and we want
configDir in LoadConfig for upcoming patches

9 years agonwfilter: Fix potential locking problems on ObjLoad failure
Cole Robinson [Sun, 24 Apr 2016 22:49:02 +0000 (18:49 -0400)]
nwfilter: Fix potential locking problems on ObjLoad failure

In virNWFilterObjLoad we can still fail after virNWFilterObjAssignDef,
but we don't unlock and free the created virNWFilterObjPtr in the
cleanup path.

The bit we are trying to do after AssignDef is just STRDUP in the
configFile path. However caching the configFile in the NWFilterObj
is largely redundant and doesn't follow the same pattern we use
for domain and network objects.

So just remove all the configFile caching which fixes the latent
bug as a side effect.

9 years agonetwork: Fix segfault on daemon reload
Cole Robinson [Sun, 24 Apr 2016 21:37:13 +0000 (17:37 -0400)]
network: Fix segfault on daemon reload

We will segfault of a daemon reload picks up a new network config
that needs to be autostarted. We shouldn't be passing NULL for
network_driver here. This seems like it was missed in the larger
rework in commit 1009a61e

9 years agosend default USB controller in xml to destination during migration
Shivaprasad G Bhat [Fri, 29 Apr 2016 14:01:51 +0000 (19:31 +0530)]
send default USB controller in xml to destination during migration

The default USB controller is not sent to destination as the older versions
of libvirt(0.9.4 or earlier as I see in commit log of 409b5f54) didn't
support them. For some archs where the support started much later can
safely send the USB controllers without this worry. So, send the controller
to destination for all archs except x86. Moreover this is not very applicable
to x86 as the USB controller has model ich9_ehci1 on q35 and for pc-i440fx,
there cant be any slots before USB as it is fixed on slot 1.

The patch fixes a bug that, if the USB controller happens to occupy
a slot after disks/interfaces and one of them is hot-unplugged, then
the default USB controller added on destination takes the smallest slot
number and that would lead to savestate mismatch and migration
failure. Seen and verified on PPC64.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
9 years agoconf: format runtime DAC seclabel, unless MIGRATABLE
Cole Robinson [Sat, 23 Apr 2016 17:46:25 +0000 (13:46 -0400)]
conf: format runtime DAC seclabel, unless MIGRATABLE

We historically format runtime seclabel selinux/apparmor values,
however we skip formatting runtime DAC values. This was added in

commit 990e46c4542349f838e001d30638872576c389e9
Author: Marcelo Cerri <mhcerri@linux.vnet.ibm.com>
Date:   Fri Aug 31 13:40:41 2012 +0200

    conf: Avoid formatting auto-generated DAC labels

to maintain migration compatibility with libvirt < 0.10.0.

However the formatting was skipped unconditionally. Instead only
skip formatting in the VIR_DOMAIN_DEF_FORMAT_MIGRATABLE case.

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

9 years agoconf: storage: pool: reject name containing '/'
Cole Robinson [Tue, 26 Apr 2016 18:51:33 +0000 (14:51 -0400)]
conf: storage: pool: reject name containing '/'

Trying to define a pool name containing an embedded '/'
will immediately fail when trying to write the XML to disk.
This patch explicitly rejects names containing a '/'

Besides our stateful driver, there are two other storage impls:
esx and phyp. esx doesn't support pool creation, so this should
doesn't apply.

phyp does support pool creation, and the name is passed to the
'mksp' tool, which google doesn't reveal whether it accepts '/'
or not. IMO the likeliness of this impacting any users is near zero

9 years agoconf: network: reject name containing '/'
Cole Robinson [Tue, 26 Apr 2016 16:47:42 +0000 (12:47 -0400)]
conf: network: reject name containing '/'

Trying to define a network name containing an embedded '/'
will immediately fail when trying to write the XML to disk.
This patch explicitly rejects names containing a '/'

Besides the network bridge driver, the only other network
implementation is a very thin one for virtualbox, which seems to
use the network name as a host interface name, which won't
accept '/' anyways, so I think this is fine to do unconitionally.

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

9 years agoconf: domain: reject name containing '/'
Cole Robinson [Tue, 26 Apr 2016 15:23:12 +0000 (11:23 -0400)]
conf: domain: reject name containing '/'

Trying to define a domain name containing an embedded '/'
will immediately fail when trying to write the XML to disk for
our stateful drivers. This patch explicitly rejects names
containing a '/', and provides an xmlopt feature for drivers
to avoid this validation check, which is enabled in every
non-stateful driver that already has xmlopt handling wired up.

(Technically this could reject a previously accepted vmname like
 '/foo', however at least for the qemu driver that falls over
 later when starting qemu)

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

9 years agoconf: Parse more of our nodedev XML
Martin Kletzander [Sun, 3 Apr 2016 19:01:06 +0000 (21:01 +0200)]
conf: Parse more of our nodedev XML

We were lacking tests that are checking for the completeness of our
nodedev XMLs and also whether we output properly formatted ones.  This
patch adds parsing for the capability elements inside the <capability
type='pci'> element.  Also bunch of tests are added to show everything
works properly.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoschemas: Update nodedev schema to match reality
Martin Kletzander [Sun, 3 Apr 2016 18:57:58 +0000 (20:57 +0200)]
schemas: Update nodedev schema to match reality

There were few things done in the nodedev code but we were lacking tests
for it.  And because of that we missed that the schema was not updated
either.  Fix the schema and add various test files to show the schema
is correct.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoMove capability formatting together
Martin Kletzander [Sun, 3 Apr 2016 18:36:40 +0000 (20:36 +0200)]
Move capability formatting together

All sub-PCI capabilities should be next to each other for clarity.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoChange virDevicePCIAddress to virPCIDeviceAddress
Martin Kletzander [Sun, 3 Apr 2016 18:16:51 +0000 (20:16 +0200)]
Change virDevicePCIAddress to virPCIDeviceAddress

We had both and the only difference was that the latter also included
information about multifunction setting.  The problem with that was that
we couldn't use functions made for only one of the structs (e.g.
parsing).  To consolidate those two structs, use the one in virpci.h,
include that in domain_conf.h and add the multifunction member in it.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoqemu: hotplug: Fix possible memory leak of props
John Ferlan [Mon, 11 Apr 2016 14:00:32 +0000 (10:00 -0400)]
qemu: hotplug: Fix possible memory leak of props

If we failed to build the aliases or attach the chardev, then the props
would be leaked - fix that.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: hotplug: Adjust error path for attach hostdev scsi disk
John Ferlan [Mon, 11 Apr 2016 17:32:12 +0000 (13:32 -0400)]
qemu: hotplug: Adjust error path for attach hostdev scsi disk

Adjust error path logic to make it clearer how to undo the failed add.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: hotplug: Adjust error path for attach virtio disk
John Ferlan [Mon, 11 Apr 2016 13:16:54 +0000 (09:16 -0400)]
qemu: hotplug: Adjust error path for attach virtio disk

Adjust error path logic to make it clearer how to undo the failed add.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: hotplug: Adjust error path for attach scsi disk
John Ferlan [Mon, 11 Apr 2016 13:42:54 +0000 (09:42 -0400)]
qemu: hotplug: Adjust error path for attach scsi disk

Adjust error path logic to make it clearer how to undo the failed add.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: Use qemuDomainSecretInfoPtr in qemuBuildNetworkDriveURI
John Ferlan [Thu, 7 Apr 2016 18:53:14 +0000 (14:53 -0400)]
qemu: Use qemuDomainSecretInfoPtr in qemuBuildNetworkDriveURI

Rather than take username and password as parameters, now take
a qemuDomainSecretInfoPtr and decode within the function.

NB: Having secinfo implies having the username for a plain type
    from a successful virSecretGetSecretString

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: Introduce qemuDomainSecretHostdevPrepare and Destroy
John Ferlan [Wed, 6 Apr 2016 14:41:33 +0000 (10:41 -0400)]
qemu: Introduce qemuDomainSecretHostdevPrepare and Destroy

Similar to the qemuDomainSecretDiskPrepare, generate the secret
for the Hostdev's prior to call qemuProcessLaunch which calls
qemuBuildCommandLine. Additionally, since the secret is not longer
added as part of building the command, the hotplug code will need
to make the call to add the secret in the hostdevPriv.

Since this then is the last requirement to pass a virConnectPtr
to qemuBuildCommandLine, we now can remove that as part of these
changes. That removal has cascading effects through various callers.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: Introduce qemuDomainHostdevPrivatePtr
John Ferlan [Wed, 6 Apr 2016 13:46:49 +0000 (09:46 -0400)]
qemu: Introduce qemuDomainHostdevPrivatePtr

Modeled after the qemuDomainDiskPrivatePtr logic, create a privateData
pointer in the _virDomainHostdevDef to allow storage of private data
for a hypervisor in order to at least temporarily store auth/secrets
data for usage during qemuBuildCommandLine.

NB: Since the qemu_parse_command (qemuParseCommandLine) code is not
expecting to restore the auth/secret data, there's no need to add
code to handle this new structure there.

Updated copyrights for modules touched. Some didn't have updates in a
couple years even though changes have been made.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: Introduce qemuDomainSecretPrepare and Destroy
John Ferlan [Wed, 6 Apr 2016 19:00:59 +0000 (15:00 -0400)]
qemu: Introduce qemuDomainSecretPrepare and Destroy

Rather than needing to pass the conn parameter to various command
line building API's, add qemuDomainSecretPrepare just prior to the
qemuProcessLaunch which calls qemuBuilCommandLine. The function
must be called after qemuProcessPrepareHost since it's expected
to eventually need the domain masterKey generated during the prepare
host call. Additionally, future patches may require device aliases
(assigned during the prepare domain call) in order to associate
the secret objects.

The qemuDomainSecretDestroy is called after the qemuProcessLaunch
finishes in order to clear and free memory used by the secrets
that were recently prepared, so they are not kept around in memory
too long.

Placing the setup here is beneficial for future patches which will
need the domain masterKey in order to generate an encrypted secret
along with an initialization vector to be saved and passed (since
the masterKey shouldn't be passed around).

Finally, since the secret is not added during command line build,
the hotplug code will need to get the secret into the private disk data.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoqemu: Introduce qemuDomainSecretInfo
John Ferlan [Wed, 6 Apr 2016 12:56:52 +0000 (08:56 -0400)]
qemu: Introduce qemuDomainSecretInfo

Introduce a new private structure to hold qemu domain auth/secret data.
This will be stored in the qemuDomainDiskPrivate as a means to store the
auth and fetched secret data rather than generating during building of
the command line.

The initial changes will handle the current username and secret values
for rbd and iscsi disks (in their various forms). The rbd secret is
stored as a base64 encoded value, while the iscsi secret is stored as
a plain text value. Future changes will store encoded/encrypted secret
data as well as an initialization vector needed to be given to qemu
in order to decrypt the encoded password along with the domain masterKey.
The inital assumption will be that VIR_DOMAIN_SECRET_INFO_PLAIN is
being used.

Although it's expected that the cleanup of the secret data will be
done immediately after command line generation, reintroduce the object
dispose function qemuDomainDiskPrivateDispose to handle removing
memory associated with the structure for "normal" cleanup paths.

Signed-off-by: John Ferlan <jferlan@redhat.com>
9 years agoAdapt augeas profile to handle negative int values.
Cédric Bosdonnat [Fri, 15 Apr 2016 15:01:02 +0000 (17:01 +0200)]
Adapt augeas profile to handle negative int values.

Introducing keepalive_interval = -1 breaks to augeas lens. Fix the lens
by allowing signed ints in the regular expression.

9 years agoqemu: monitor: Kill legacy PCI hotplug code
Peter Krempa [Tue, 26 Apr 2016 13:23:40 +0000 (15:23 +0200)]
qemu: monitor: Kill legacy PCI hotplug code

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachControllerDevice
Peter Krempa [Tue, 26 Apr 2016 13:15:03 +0000 (15:15 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachControllerDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachNetDevice
Peter Krempa [Tue, 26 Apr 2016 13:09:49 +0000 (15:09 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachNetDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachHostPCIDevice
Peter Krempa [Tue, 26 Apr 2016 13:06:07 +0000 (15:06 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachHostPCIDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachControllerDevice
Peter Krempa [Tue, 26 Apr 2016 13:03:01 +0000 (15:03 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachControllerDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachVirtioDiskDevice
Peter Krempa [Tue, 26 Apr 2016 12:53:46 +0000 (14:53 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainDetachVirtioDiskDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostPCIDevice
Peter Krempa [Tue, 26 Apr 2016 12:23:12 +0000 (14:23 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostPCIDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachNetDevice
Peter Krempa [Tue, 26 Apr 2016 12:04:49 +0000 (14:04 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachNetDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachVirtioDiskDevice
Peter Krempa [Tue, 26 Apr 2016 11:51:41 +0000 (13:51 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachVirtioDiskDevice

After killing one of the conditionals it's now guaranteed to have
@drivealias populated when calling the monitor, so the code attempting
to cleanup can be simplified.

9 years agoqemu: monitor: Kill legacy USB monitor code
Peter Krempa [Tue, 26 Apr 2016 11:45:15 +0000 (13:45 +0200)]
qemu: monitor: Kill legacy USB monitor code

Code was obsoleted by using -device.

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostUSBDevice
Peter Krempa [Tue, 26 Apr 2016 11:40:34 +0000 (13:40 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachHostUSBDevice

9 years agoqemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachUSBMassStorageDevice
Peter Krempa [Tue, 26 Apr 2016 11:35:37 +0000 (13:35 +0200)]
qemu: hotplug: Assume QEMU_CAPS_DEVICE in qemuDomainAttachUSBMassStorageDevice

9 years agoqemu: remove default case from few typecasted enums
Peter Krempa [Tue, 26 Apr 2016 12:18:04 +0000 (14:18 +0200)]
qemu: remove default case from few typecasted enums

Commit 98c5c53d69b partially reverted the effort to use typecasted enums
for compiler notification. Turn it back.

9 years agoqemu: process: Don't needlesly clear the perf events in qemuDomainPerfRestart
Peter Krempa [Wed, 27 Apr 2016 13:22:33 +0000 (15:22 +0200)]
qemu: process: Don't needlesly clear the perf events in qemuDomainPerfRestart

At that point the perf events struct should not be allocated so there's
no use in clearing it.

9 years agoqemu: process: Fix failure semantics for perf events
Peter Krempa [Wed, 27 Apr 2016 12:58:32 +0000 (14:58 +0200)]
qemu: process: Fix failure semantics for perf events

For strange reasons if a perf event type was not supported or failed to
be enabled at VM start libvirt would ignore the failure.

On the other hand on restart if the event could not be re-enabled
libvirt would fail to reconnect to the VM and kill it.

Both don't make really sense. Fix it by failing to start the VM if the
event is not supported and change the event to disabled if it can't be
reconnected (unlikely).

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

9 years agoutil: perf: Adhere to coding style of error checks in qemuDomainSetPerfEvents
Peter Krempa [Wed, 27 Apr 2016 12:57:28 +0000 (14:57 +0200)]
util: perf: Adhere to coding style of error checks in qemuDomainSetPerfEvents

9 years agoutil: perf: Adhere to coding style of error checks in virPerfEventEnable
Peter Krempa [Wed, 27 Apr 2016 12:57:28 +0000 (14:57 +0200)]
util: perf: Adhere to coding style of error checks in virPerfEventEnable

9 years agoutil: perf: Use 'error' label in virPerfCmtEnable
Peter Krempa [Wed, 27 Apr 2016 12:55:12 +0000 (14:55 +0200)]
util: perf: Use 'error' label in virPerfCmtEnable

The label is used only for the error path, thus rename cleanup.

9 years agoqemu: perf: Don't ignore perf setup if allocation fails
Peter Krempa [Wed, 27 Apr 2016 12:40:23 +0000 (14:40 +0200)]
qemu: perf: Don't ignore perf setup if allocation fails

Reject the VM startup if the perf event structure can't be allocated.

9 years agoqemu: hotplug: Allow update of disk default snapshot location
Peter Krempa [Thu, 28 Apr 2016 15:57:33 +0000 (17:57 +0200)]
qemu: hotplug: Allow update of disk default snapshot location

Since the field is internal to libvirt we can allow the users to modify
it.

9 years agoqemu: domain: Check few more fields for when changing disk source
Peter Krempa [Thu, 28 Apr 2016 14:45:02 +0000 (16:45 +0200)]
qemu: domain: Check few more fields for when changing disk source

Both disk->src->shared and disk->src->readonly can't be modified when
changing disk source for floppy and cdrom drives since both arguments
are passed as arguments of the disk rather than the image in qemu.

Historically these fields have only two possible values since they are
represented as XML thus we need to ignore if user did not provide them
and thus we are treating them as false.

9 years agoqemu: domain: Fix error message in qemuDomainDiskChangeSupported
Peter Krempa [Thu, 28 Apr 2016 15:50:40 +0000 (17:50 +0200)]
qemu: domain: Fix error message in qemuDomainDiskChangeSupported

disk->dst represents the <target> element in the XML.

9 years agoqemu: hotplug: Skip waiting for tray opening if qemu doesn't notify us
Peter Krempa [Fri, 29 Apr 2016 11:49:13 +0000 (13:49 +0200)]
qemu: hotplug: Skip waiting for tray opening if qemu doesn't notify us

If qemu doesn't support DEVICE_TRAY_MOVED event the code that attempts
to change media would attempt to re-eject the tray even if it wouldn't
be notified when the tray opened. Add a capability bit and skip retrying
for old qemus.

9 years agoqemu: process: Refresh ejectable media tray state on VM start
Peter Krempa [Fri, 29 Apr 2016 11:38:51 +0000 (13:38 +0200)]
qemu: process: Refresh ejectable media tray state on VM start

Empty floppy drives start with tray in "open" state and libvirt did not
refresh it after startup. The code that inserts media into the tray then
waited until the tray was open before inserting the media and thus
floppies could not be inserted.

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

9 years agovirStream{Recv,Send}All: Increase client buffer
Michal Privoznik [Wed, 13 Apr 2016 08:03:50 +0000 (10:03 +0200)]
virStream{Recv,Send}All: Increase client buffer

These are wrappers over virStreamRecv and virStreamSend so that
users have to care about nothing but writing data into / reading
data from a sink (typically a file). Note, that these wrappers
are used exclusively on client side as the daemon has slightly
different approach. Anyway, the wrappers allocate this buffer and
use it for intermediate data storage until the data is passed to
stream to send, or to the client application. So far, we are
using 64KB buffer. This is enough, but suboptimal because server
can send messages up to VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX bytes
big (262120B, roughly 256KB). So if we make the buffer this big,
a single message containing the data is sent instead of four,
which is current situation. This means lower overhead, because
each message contains a header which needs to be processed, each
message is processed roughly same amount of time regardless of
its size, less bytes need to be sent through the wire, and so on.
Note that since server will never sent us a stream message bigger
than VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX there's no point in
sizing up the client buffer past this threshold.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agovirnetclientstream: Process stream messages later
Michal Privoznik [Sat, 9 Apr 2016 07:24:51 +0000 (09:24 +0200)]
virnetclientstream: Process stream messages later

There are two functions on the client that handle incoming stream
data.  The first one virNetClientStreamQueuePacket() is a low
level function that just processes the incoming stream data from
the socket and stores it into an internal structure. This happens
in the client event loop therefore the shorter the callbacks are,
the better. The second function virNetClientStreamRecvPacket()
then handles copying data from internal structure into a client
provided buffer.
Change introduced in this commit makes just that: new queue for
incoming stream packets is introduced. Then instead of copying
data into intermediate internal buffer and then copying them into
user buffer, incoming stream messages are queue into the queue
and data is copied just once - in the upper layer function
virNetClientStreamRecvPacket(). In the end, there's just one
copying of data and therefore shorter event loop callback. This
should boost the performance which has proven to be the case in
my testing.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agoRevert "rpc: Fix slow volume download (virsh vol-download)"
Michal Privoznik [Sat, 9 Apr 2016 06:55:25 +0000 (08:55 +0200)]
Revert "rpc: Fix slow volume download (virsh vol-download)"

This reverts commit d9c9e138f22c48626f719f880920e04c639e0177.

Unfortunately, things are going to be handled differently so this
commit must go.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agotools: Fix connect command
Martin Kletzander [Thu, 21 Apr 2016 12:06:10 +0000 (14:06 +0200)]
tools: Fix connect command

The man page says: "(Re)-Connect to the hypervisor. When the shell is
first started, this is automatically run with the URI parameter
requested by the "-c" option on the command line."  However, if you run:

  virsh -c 'test://default' 'connect; uri'

the output will not be 'test://default'.  That's because the 'connect'
command does not care about any virsh-only related settings and if it is
run without parameters, it connects with @uri == NULL.  Not only that
doesn't comply to what the man page describes, but it also doesn't make
sense.  It also means you aren't able to reconnect to whatever you are
connected currently.

So let's fix that in both virsh and virt-admin add a test case for it.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoPost-release version bump to 1.3.5
John Ferlan [Sun, 1 May 2016 12:28:34 +0000 (08:28 -0400)]
Post-release version bump to 1.3.5

9 years agoRelease of libvirt-1.3.4
Daniel Veillard [Sun, 1 May 2016 01:50:21 +0000 (09:50 +0800)]
Release of libvirt-1.3.4

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

9 years agoFix minor typos in messages
Yuri Chornoivan [Fri, 29 Apr 2016 18:22:36 +0000 (21:22 +0300)]
Fix minor typos in messages

Signed-off-by: Yuri Chornoivan <yurchor@ukr.net>
9 years agoRevert "qemu domain allow to set ip address, peer address and route"
Laine Stump [Fri, 29 Apr 2016 15:32:09 +0000 (11:32 -0400)]
Revert "qemu domain allow to set ip address, peer address and route"

This reverts commit 6e244c659fb004503fd2a94319dae8fa6fecf045, which
added support to qemu for the "peer" attribute in domain interface <ip>
elements.

It's being removed temporarily for the release of libvirt 1.3.4
because the feature doesn't work, and there are concerns that it may
need to be modified in an externally visible manner which could create
backward compatibility problems.

 Conflicts:
   tests/qemuxml2argvmock.c - a mock of virNetDevSetOnline() was added
   which may be assumed by other tests added since the original commit,
   so it isn't being reverted.

9 years agoRevert "lxc domain allow to set peer address"
Laine Stump [Fri, 29 Apr 2016 15:35:08 +0000 (11:35 -0400)]
Revert "lxc domain allow to set peer address"

This reverts commit afee47d07c521b4bb10a12e253a29363d16ab8f0, which
added support to lxc for the "peer" attribute in domain interface <ip>
elements.

It's being removed temporarily for the release of libvirt 1.3.4
because the feature doesn't work, and there are concerns that it may
need to be modified in an externally visible manner which could create
backward compatibility problems.

9 years agoRevert "libvirt domain xml allow to set peer address"
Laine Stump [Fri, 29 Apr 2016 15:36:38 +0000 (11:36 -0400)]
Revert "libvirt domain xml allow to set peer address"

This reverts commit 690969af9ccdf9b2012b97af0462bae8e312c9c9, which
added the domain config parts to support a "peer" attribute in domain
interface <ip> elements.

It's being removed temporarily for the release of libvirt 1.3.4
because the feature doesn't work, and there are concerns that it may
need to be modified in an externally visible manner which could create
backward compatibility problems.

9 years agorpc: Don't leak fd via CreateXMLWithFiles
Ben Gray [Sat, 23 Apr 2016 22:38:21 +0000 (18:38 -0400)]
rpc: Don't leak fd via CreateXMLWithFiles

FD passing APIs like CreateXMLWithFiles or OpenGraphicsFD will leak
file descriptors. The user passes in an fd, which is dup()'d in
virNetClientProgramCall. The new fd is what is transfered to the
server virNetClientIOWriteMessage.

Once all the fds have been written though, the parent msg->fds list
is immediately free'd, so the individual fds are never closed.

This closes each FD as its send to the server, so all fds have been
closed by the time msg->fds is free'd.

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

9 years agovz: fix disk enumeration
Mikhail Feoktistov [Wed, 27 Apr 2016 15:37:27 +0000 (11:37 -0400)]
vz: fix disk enumeration

If we want to delete all disks for container or vm
we should make a loop from 0 to NumberOfDisks and always
use zero index in PrlVmCfg_GetHardDisk to get disk handle.
When we delete first disk after that numbers of other disks
will be changed, start from 0 to NumberOfDisks-1.
That's why we should always use zero index.

9 years agovirsh: Fix support for 64 migration options
Nikolay Shirokovskiy [Wed, 20 Apr 2016 13:51:43 +0000 (16:51 +0300)]
virsh: Fix support for 64 migration options

Add ULL suffix to all related operands of << or shift will give
all zeros instead of correct mask.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
9 years agoqemu: Regenerate VNC socket paths
Martin Kletzander [Tue, 26 Apr 2016 12:27:16 +0000 (14:27 +0200)]
qemu: Regenerate VNC socket paths

Similarly to what commit 714080791778 did with some internal paths,
clear vnc socket paths that were generated by us.  Having such path in
the definition can cause trouble when restoring the domain.  The path is
generated to the per-domain directory that contains the domain ID.
However, that ID will be different upon restoration, so qemu won't be
able to create that socket because the directory will not be prepared.

To be able to migrate to older libvirt, skip formatting the socket path
in migratable XML if it was autogenerated.  And mark it as autogenerated
if it already exists and we're parsing live XML.

Best viewed with '-C'.

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoqemu: Error out if setting vcpu count would lead to invalid config
Peter Krempa [Wed, 27 Apr 2016 14:39:41 +0000 (16:39 +0200)]
qemu: Error out if setting vcpu count would lead to invalid config

When the domain definition describes a machine with NUMA, setting the
maximum vCPU count via the API might lead to an invalid config.

Add a check that will forbid this until we add more advanced cpu config
capabilities.

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

9 years agoqemu: conf: Set default logging approach in virQEMUDriverConfigNew
Peter Krempa [Wed, 27 Apr 2016 10:58:13 +0000 (12:58 +0200)]
qemu: conf: Set default logging approach in virQEMUDriverConfigNew

Instead of setting the default qemu stdio logging approach in
virQEMUDriverConfigLoadFile set it in virQEMUDriverConfigNew so that
it's properly set even when the config is not present.

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

9 years agoShorten domain name for automatic coredump
Martin Kletzander [Tue, 26 Apr 2016 07:44:18 +0000 (09:44 +0200)]
Shorten domain name for automatic coredump

If the domain name is long enough, the timestamp can prolong the
filename for automatic coredump to more than the filesystem's limit.
Simply shorten it like we do in other places.  The timestamp helps with
the unification, but having the ID in the name won't hurt.

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoUnify domain name shortening
Martin Kletzander [Tue, 26 Apr 2016 06:43:40 +0000 (08:43 +0200)]
Unify domain name shortening

Add virDomainObjGetShortName() and use it.  For now that's used in one
place, but we should expose it so that future patches can use it.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoqemu: Unref cfg in qemuDomainDefPostParse
Martin Kletzander [Tue, 26 Apr 2016 12:38:14 +0000 (14:38 +0200)]
qemu: Unref cfg in qemuDomainDefPostParse

Introduced by commit 15ad2ecf114d.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
9 years agoconf: Drop restrictions on rng backend path
Cole Robinson [Wed, 13 Apr 2016 19:09:30 +0000 (15:09 -0400)]
conf: Drop restrictions on rng backend path

Currently we only allow /dev/random and /dev/hwrng as host input
for <rng><backend model='random'/> device. This was added after
various upstream discussions in commit 4932ef45

However this restriction has generated quite a few complaints over
the years, so a new discussion was initiated:

http://www.redhat.com/archives/libvir-list/2016-April/msg00987.html

Several people suggested removing the restriction, and nobody really
spoke up to defend it. So this patch drops the path restriction
entirely

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

9 years agoremote: Don't reject remote polkit if client lacks support
Cole Robinson [Thu, 14 Apr 2016 18:58:40 +0000 (14:58 -0400)]
remote: Don't reject remote polkit if client lacks support

If you compile a client --without-polkit, and connect to a URI that needs
polkit auth, the connection will fail with:

$ ./tools/virsh --connect qemu+ssh://crobinso@machine/system
error: failed to connect to the hypervisor
error: authentication failed: unsupported authentication type 2

This is because the client side portion of the polkit handling is
compiled out. However, nothing polkit specific is actually required
of the client.

Fix that error by unconditionally compiling the basic polkit client
handling.

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

9 years agospec: Use proper indentation
Andrea Bolognani [Tue, 26 Apr 2016 15:37:16 +0000 (17:37 +0200)]
spec: Use proper indentation

Commit 1d4400082a02 added some code that was not indented properly
and broke syntax-check. Fix it.

9 years agospec: If installing default network, restart libvirtd
Cole Robinson [Thu, 16 Apr 2015 19:42:05 +0000 (15:42 -0400)]
spec: If installing default network, restart libvirtd

If libvirt-daemon-config-network is installed while libvirtd is already
running, the daemon doesn't notice the network. Users then have to
manually restart libvirtd (or reboot) to pick up the network.

Instead let's trigger a daemon restart when the package is first installed.
Then the default network is available immediately if libvirtd was already
running.

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

9 years agoschema: Allow space character in disk vendor/product
Cole Robinson [Fri, 15 Apr 2016 17:21:27 +0000 (13:21 -0400)]
schema: Allow space character in disk vendor/product

The hex range already tried to allow for it, but it wasn't using
the correct XML hex syntax. Fix it, and test it

9 years agomaint: Ignore all intermediate and generated man pages
Andrea Bolognani [Mon, 25 Apr 2016 15:45:14 +0000 (17:45 +0200)]
maint: Ignore all intermediate and generated man pages

Since commit 9b77ce63f1d7 we create a .in file while building all
man pages, including those in the tools/ directory; update the
ignore patterns to take this change into account.

The new ignore patterns are generic enough that we can get rid of
a few existing ones as well.

9 years agoapibuild: Fix method call
Andrea Bolognani [Mon, 25 Apr 2016 12:30:14 +0000 (14:30 +0200)]
apibuild: Fix method call

9 years agoapibuild: Introduce app class
Andrea Bolognani [Mon, 25 Apr 2016 12:26:50 +0000 (14:26 +0200)]
apibuild: Introduce app class

All top-level functions have been moved to this class.

On top of that, the app.warning() method has been defined,
so that calls to it - already present in rebuild() - can
actually succeed.

9 years agoapibuild: Add index.warning() method
Andrea Bolognani [Mon, 25 Apr 2016 12:23:04 +0000 (14:23 +0200)]
apibuild: Add index.warning() method

This method is used in eg. index.merge(), but is not defined
anywhere. The implementation has been copied from docBuilder.

9 years agodocs: Pass relative paths to apibuild.py
Andrea Bolognani [Mon, 25 Apr 2016 11:40:04 +0000 (13:40 +0200)]
docs: Pass relative paths to apibuild.py

Since commit d195cffa2e1b, both $(srcdir) and $(abs_builddir)
are passed to the apibuild.py script; however, since the
former is a relative path and the latter an absolute one, the
script might not be able to detect whether they point to the
same location.

Pass both as relative paths to avoid the issue.

9 years agosecret: Change virSecretDef variable names
John Ferlan [Tue, 8 Mar 2016 16:34:56 +0000 (11:34 -0500)]
secret: Change virSecretDef variable names

Change 'ephemeral' to 'isephemeral' and 'private' to 'isprivate' since
both are bools.

9 years agosecret: Introduce virSecretObjGetValue and virSecretObjGetValueSize
John Ferlan [Tue, 8 Mar 2016 00:40:58 +0000 (19:40 -0500)]
secret: Introduce virSecretObjGetValue and virSecretObjGetValueSize

Introduce the final accessor's to _virSecretObject data and move the
structure from virsecretobj.h to virsecretobj.c

The virSecretObjSetValue logic will handle setting both the secret
value and the value_size. Some slight adjustments to the error path
over what was in secretSetValue were made.

Additionally, a slight logic change in secretGetValue where we'll
check for the internalFlags and error out before checking for
and erroring out for a NULL secret->value. That way, it won't be
obvious to anyone that the secret value wasn't set rather they'll
just know they cannot get the secret value since it's private.