]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
9 years agoqemu_monitor_json: Follow our coding style
Michal Privoznik [Tue, 3 May 2016 09:29:11 +0000 (11:29 +0200)]
qemu_monitor_json: Follow our coding style

In majority of our functions we have this variable @ret that is
overwritten a lot. In other areas of the code we use 'goto
cleanup;' just so that this wouldn't happen. But here.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agomaint: Don't ignore libvirtd.pod any longer
Andrea Bolognani [Tue, 3 May 2016 13:10:27 +0000 (15:10 +0200)]
maint: Don't ignore libvirtd.pod any longer

Starting from commit 5b479f3b5b82, libvirtd.pod is a source file
rather than a generated file. Update ignore patterns accordingly.

9 years agogitignore: ignore virt(log|lock)d.(service|socket)
Cole Robinson [Tue, 3 May 2016 12:48:33 +0000 (08:48 -0400)]
gitignore: ignore virt(log|lock)d.(service|socket)

9 years agodaemon: add option to read host uuid from /etc/machine-id
Nikolay Shirokovskiy [Tue, 3 May 2016 09:12:41 +0000 (12:12 +0300)]
daemon: add option to read host uuid from /etc/machine-id

Daemon config parameter switch between reading host uuid
either from smbios or machine-id:

host_uuid_source = "smbios|machine-id"

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
9 years agoutil: factor out reading file into preallocated buffer
Nikolay Shirokovskiy [Tue, 3 May 2016 09:12:40 +0000 (12:12 +0300)]
util: factor out reading file into preallocated buffer

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
9 years agoqemu: support configuring usb3 controller port count
Cole Robinson [Sat, 23 Apr 2016 23:52:56 +0000 (19:52 -0400)]
qemu: support configuring usb3 controller port count

This adds a ports= attribute to usb controller XML, like

  <controller type='usb' model='nec-xhci' ports='8'/>

This maps to:

  qemu -device nec-usb-xhci,p2=8,p3=8

Meaning, 8 ports that support both usb2 and usb3 devices. Gerd
suggested to just expose them as one knob.

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

9 years agoqemu: caps: introduce QEMU_CAPS_NEC_USB_XHCI_PORTS
Cole Robinson [Sun, 24 Apr 2016 14:52:38 +0000 (10:52 -0400)]
qemu: caps: introduce QEMU_CAPS_NEC_USB_XHCI_PORTS

Reports whether we support -device nec-usb-xhci,p3=XXX value,
which has been available since qemu 1.3.0

9 years agoqemu: parse: Use virControllerDefNew
Cole Robinson [Sun, 24 Apr 2016 15:05:31 +0000 (11:05 -0400)]
qemu: parse: Use virControllerDefNew

Rather than reimplement it. This will be needed in upcoming patches

9 years agoqemu_monitor_json: Drop redundant checks
Michal Privoznik [Tue, 3 May 2016 08:55:41 +0000 (10:55 +0200)]
qemu_monitor_json: Drop redundant checks

In these functions I'm fixing here, we do call
qemuMonitorJSONCheckError() followed by another check if qemu
reply contains 'return' object. If it wouldn't, the former
CheckError() function would error out and the flow would not even
get to the latter.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agoqemuMonitorJSONQueryRxFilter: Validate qemu reply prior parsing it
Michal Privoznik [Tue, 3 May 2016 08:44:13 +0000 (10:44 +0200)]
qemuMonitorJSONQueryRxFilter: Validate qemu reply prior parsing it

Usually, the flow in this area of the code is as follows:

qemuMonitorJSONMakeCommand()
qemuMonitorJSONCommand()
qemuMonitorJSONCheckError()
parseReply()

But in this function, for some reasons, the last two steps were
swapped. This makes no sense.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agoRemove useless os.machine NULL check
Ján Tomko [Tue, 3 May 2016 10:29:26 +0000 (12:29 +0200)]
Remove useless os.machine NULL check

In qemuDomainDefAddDefaultDevices we check for a non-NULL
def->os.machine for x86 archs, but not the others.

Moreover, the only caller - qemuDomainDefPostParse
already checks for it and even then it can happen only
if /etc/libvirt contains an XML without a machine type.

9 years agoIntroduce qemuDomainMachineIsVirt
Ján Tomko [Tue, 3 May 2016 08:49:40 +0000 (10:49 +0200)]
Introduce qemuDomainMachineIsVirt

Use it everywhere except for virQEMUCapsFillDomainFeatureGICCaps.

9 years agoRewrite the condition in qemuDomainAssignARMVirtioMMIOAddresses
Ján Tomko [Tue, 3 May 2016 08:54:55 +0000 (10:54 +0200)]
Rewrite the condition in qemuDomainAssignARMVirtioMMIOAddresses

It was not indented correctly.

9 years agoRemove useless variable in qemuDomainAssignAddresses
Ján Tomko [Thu, 28 Apr 2016 13:35:41 +0000 (15:35 +0200)]
Remove useless variable in qemuDomainAssignAddresses

We do not need to propagate the exact return values
and the only possible ones are 0 and -1 anyway.

Remove the temporary variable and use the usual pattern:

if (f() < 0)
    return -1;

9 years agoReturn void in qemuDomainAssignARMVirtioMMIOAddresses
Ján Tomko [Thu, 28 Apr 2016 13:31:52 +0000 (15:31 +0200)]
Return void in qemuDomainAssignARMVirtioMMIOAddresses

This function does not fail and it does not need to return anything.

9 years agoInvert condition in qemuDomainDefAddDefaultDevices
Ján Tomko [Tue, 3 May 2016 10:05:27 +0000 (12:05 +0200)]
Invert condition in qemuDomainDefAddDefaultDevices

For all the other machine types, we use a positive condition.

Be more positive and use it for i440fx too.

9 years agoUse qemuDomainMachineIs helpers when adding default devices
Ján Tomko [Tue, 3 May 2016 08:33:56 +0000 (10:33 +0200)]
Use qemuDomainMachineIs helpers when adding default devices

Do not duplicate the string comparisons by writing them twice.

9 years agoqemu: Refresh RTC adjustment on qemuProcessReconnect
Michal Privoznik [Fri, 29 Apr 2016 16:01:39 +0000 (18:01 +0200)]
qemu: Refresh RTC adjustment on qemuProcessReconnect

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

Thing is, for some reasons you can have your domain's RTC to be
in something different than UTC. More weirdly, it's not only time
zone what you can shift it of, but an arbitrary value. So, if
domain is configured that way, libvirt will correctly put it onto
qemu cmd line and moreover track it as this offset changes during
domain's life time (e.g. because guest OS decides the best thing
to do is set new time to RTC). Anyway, they way in which this
tracking is implemented is events. But we've got a problem if
change in guest's RTC occurs and the daemon is not running. The
event is lost and we end up reporting invalid value in domain
XML. Therefore, when the daemon is starting up again and it is
reconnecting to all running domains, re-fetch their RTC so the
correct offset value can be computed.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agoqemu: Introduce qemuMonitorGetRTCTime
Michal Privoznik [Fri, 29 Apr 2016 14:01:47 +0000 (16:01 +0200)]
qemu: Introduce qemuMonitorGetRTCTime

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 years agovirt-admin: Introduce srv-clients-list command
Erik Skultety [Sat, 16 Apr 2016 07:13:21 +0000 (09:13 +0200)]
virt-admin: Introduce srv-clients-list command

Wire-up the public client listing API. Along with this change, a private time
simple conversion method to interpret client's timestamp obtained from server
has been added as well. Format used to for time output is as follows:
YYYY-mm-DD HH:MM:SS+ZZZZ.

Although libvirt exposes methods time-related methods through virtime.h
internally, it utilizes millisecond precision which we don't need in this case,
especially when connection timestamps use precision to seconds only.
This is just a convenience int to string conversion method.

To reflect the new API, man page has been adjusted accordingly.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agoadmin: Introduce listing clients
Erik Skultety [Thu, 14 Apr 2016 22:20:11 +0000 (00:20 +0200)]
admin: Introduce listing clients

Finally add public method to retrieve the list of currently connected clients
to a given server.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agorpc: virnetserverclient: Implement client connection transport retrieval
Erik Skultety [Thu, 14 Apr 2016 22:25:04 +0000 (00:25 +0200)]
rpc: virnetserverclient: Implement client connection transport retrieval

Although we document 6 types of transport that we support, internally we can
only differentiate between TCP, TLS, and UNIX transports only, since both SSH
and libssh2 transports, due to using netcat, behave in the exactly the same
way as a UNIX socket.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agoinclude: admin: export connection transport constants
Erik Skultety [Thu, 14 Apr 2016 22:24:35 +0000 (00:24 +0200)]
include: admin: export connection transport constants

We have to expose some constants, in order for the client object transport
field to make sense.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
9 years agorpc: virnetserver: Support retrieval of a list of clients
Erik Skultety [Thu, 14 Apr 2016 22:21:05 +0000 (00:21 +0200)]
rpc: virnetserver: Support retrieval of a list of clients

For now, the list copy is done simply by locking the whole server, walking the
original and increasing the refcount on each object. We may want to change
the list to a lockable object (like list of domains) later in the future if
we discover some performance issues related to locking the whole server in
order to walk the whole list of clients, possibly issuing some 'ForEach'
callback.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
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>