1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-09-24 21:44:59 +03:00

Compare commits

..

7 Commits

Author SHA1 Message Date
Ján Tomko
890965e894 api: disallow virConnect*HypervisorCPU on read-only connections
These APIs can be used to execute arbitrary emulators.
Forbid them on read-only connections.

Fixes: CVE-2019-10168
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit bf6c2830b6)
Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 09:56:08 +02:00
Ján Tomko
93edb0ea63 api: disallow virConnectGetDomainCapabilities on read-only connections
This API can be used to execute arbitrary emulators.
Forbid it on read-only connections.

Fixes: CVE-2019-10167
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 8afa68bac0)
Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 09:56:07 +02:00
Ján Tomko
00e673c93f api: disallow virDomainManagedSaveDefineXML on read-only connections
The virDomainManagedSaveDefineXML can be used to alter the domain's
config used for managedsave or even execute arbitrary emulator binaries.
Forbid it on read-only connections.

Fixes: CVE-2019-10166
Reported-by: Matthias Gerstner <mgerstner@suse.de>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit db0b78457f)
Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 09:56:07 +02:00
Ján Tomko
a27659643b api: disallow virDomainSaveImageGetXMLDesc on read-only connections
The virDomainSaveImageGetXMLDesc API is taking a path parameter,
which can point to any path on the system. This file will then be
read and parsed by libvirtd running with root privileges.

Forbid it on read-only connections.

Fixes: CVE-2019-10161
Reported-by: Matthias Gerstner <mgerstner@suse.de>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit aed6a032ce)
Signed-off-by: Ján Tomko <jtomko@redhat.com>

Conflicts:
  src/libvirt-domain.c
  src/remote/remote_protocol.x

Upstream commit 12a51f372 which introduced the VIR_DOMAIN_SAVE_IMAGE_XML_SECURE
alias for VIR_DOMAIN_XML_SECURE is not backported.
Just skip the commit since we now disallow the whole API on read-only
connections, regardless of the flag.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 09:56:07 +02:00
Daniel P. Berrangé
0a9c2082e6 logging: restrict sockets to mode 0600
The virtlogd daemon's only intended client is the libvirtd daemon. As
such it should never allow clients from other user accounts to connect.
The code already enforces this and drops clients from other UIDs, but
we can get earlier (and thus stronger) protection against DoS by setting
the socket permissions to 0600

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit e37bd65f99)
2019-05-21 13:29:48 +01:00
Daniel P. Berrangé
223167124c locking: restrict sockets to mode 0600
The virtlockd daemon's only intended client is the libvirtd daemon. As
such it should never allow clients from other user accounts to connect.
The code already enforces this and drops clients from other UIDs, but
we can get earlier (and thus stronger) protection against DoS by setting
the socket permissions to 0600

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit f111e09468)
2019-05-21 13:29:47 +01:00
Daniel P. Berrangé
99decb0a65 admin: reject clients unless their UID matches the current UID
The admin protocol RPC messages are only intended for use by the user
running the daemon. As such they should not be allowed for any client
UID that does not match the server UID.

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 96f41cd765)
2019-05-21 13:29:47 +01:00
2375 changed files with 32306 additions and 141899 deletions

1
.ctags
View File

@@ -3,4 +3,3 @@
--exclude=*.html
--exclude=*.html.in
--langmap=c:+.h.in
--c-kinds=+p

View File

@@ -46,7 +46,7 @@ script:
-e VIR_TEST_DEBUG="$VIR_TEST_DEBUG"
-e MINGW="$MINGW"
-e DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS"
"quay.io/libvirt/buildenv-$IMAGE:master"
"libvirt/buildenv-$IMAGE"
/bin/sh -xc "$DOCKER_CMD"
git:

View File

@@ -126,7 +126,6 @@ vc-list-files
vsnprintf
waitpid
warnings
wcwidth
'
SKIP_PO=true

View File

@@ -45,6 +45,9 @@ foreach my $file (@ARGV) {
# Kill any quoted strings
$data =~ s,"(?:[^\\\"]|\\.)*","XXX",g;
# Kill any C++ style comments
$data =~ s,//.*$,//,;
next if $data =~ /^#/;
# Kill contents of multi-line comments

5
cfg.mk
View File

@@ -472,7 +472,6 @@ sc_prohibit_canonicalize_file_name:
# Insist on correct types for [pug]id.
sc_correct_id_types:
@prohibit='\<(int|long) *[pug]id\>' \
exclude='exempt from syntax-check' \
halt='use pid_t for pid, uid_t for uid, gid_t for gid' \
$(_sc_search_regexp)
@@ -1064,7 +1063,7 @@ sc_prohibit_backslash_alignment:
# Rule to ensure that varibales declared using a cleanup macro are
# always initialized.
sc_require_attribute_cleanup_initialization:
@prohibit='VIR_AUTO((FREE|PTR)\(.+\)|CLOSE) *[^=]+;' \
@prohibit='VIR_AUTO(FREE|PTR)\(.+\) *[^=]+;' \
in_vc_files='\.[chx]$$' \
halt='variable declared with a cleanup macro must be initialized' \
$(_sc_search_regexp)
@@ -1228,7 +1227,7 @@ exclude_file_name_regexp--sc_prohibit_select = \
^cfg\.mk$$
exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
^(cfg\.mk|tests/virfilemock\.c)$$
^cfg\.mk$$
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c)$$

View File

@@ -36,6 +36,7 @@
# undef WITH_DEVMAPPER
# undef WITH_DTRACE_PROBES
# undef WITH_GNUTLS
# undef WITH_JANSSON
# undef WITH_LIBSSH
# undef WITH_MACVTAP
# undef WITH_NUMACTL
@@ -43,8 +44,6 @@
# undef WITH_SSH2
# undef WITH_SYSTEMD_DAEMON
# undef WITH_VIRTUALPORT
# undef WITH_YAJL
# undef WITH_YAJL2
#endif
/*

View File

@@ -16,7 +16,7 @@ dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
AC_INIT([libvirt], [4.10.0], [libvir-list@redhat.com], [], [https://libvirt.org])
AC_INIT([libvirt], [4.6.0], [libvir-list@redhat.com], [], [https://libvirt.org])
AC_CONFIG_SRCDIR([src/libvirt.c])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
@@ -250,7 +250,7 @@ LIBVIRT_ARG_FIREWALLD
LIBVIRT_ARG_FUSE
LIBVIRT_ARG_GLUSTER
LIBVIRT_ARG_HAL
LIBVIRT_ARG_LIBISCSI
LIBVIRT_ARG_JANSSON
LIBVIRT_ARG_LIBPCAP
LIBVIRT_ARG_LIBSSH
LIBVIRT_ARG_LIBXML
@@ -291,7 +291,7 @@ LIBVIRT_CHECK_FUSE
LIBVIRT_CHECK_GLUSTER
LIBVIRT_CHECK_GNUTLS
LIBVIRT_CHECK_HAL
LIBVIRT_CHECK_LIBISCSI
LIBVIRT_CHECK_JANSSON
LIBVIRT_CHECK_LIBNL
LIBVIRT_CHECK_LIBPARTED
LIBVIRT_CHECK_LIBPCAP
@@ -322,49 +322,17 @@ AC_CHECK_SIZEOF([long])
dnl Availability of various common functions (non-fatal if missing),
dnl and various less common threadsafe functions
AC_CHECK_FUNCS_ONCE([\
cfmakeraw \
fallocate \
geteuid \
getgid \
getifaddrs \
getmntent_r \
getpwuid_r \
getrlimit \
getuid \
if_indextoname \
mmap \
newlocale \
posix_fallocate \
posix_memalign \
prlimit \
sched_getaffinity \
sched_setscheduler \
setgroups \
setns \
setrlimit \
symlink \
sysctlbyname \
unshare \
])
AC_CHECK_FUNCS_ONCE([cfmakeraw fallocate geteuid getgid getgrnam_r \
getmntent_r getpwuid_r getrlimit getuid if_indextoname kill mmap \
newlocale posix_fallocate posix_memalign prlimit regexec \
sched_getaffinity setgroups setns setrlimit symlink sysctlbyname \
getifaddrs sched_setscheduler unshare])
dnl Availability of various common headers (non-fatal if missing).
AC_CHECK_HEADERS([\
ifaddrs.h \
libtasn1.h \
linux/magic.h \
mntent.h \
net/ethernet.h \
netinet/tcp.h \
pwd.h \
stdarg.h \
syslog.h \
sys/mount.h \
sys/syscall.h \
sys/sysctl.h \
sys/ucred.h \
sys/un.h \
])
AC_CHECK_HEADERS([pwd.h regex.h sys/un.h \
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
sys/un.h sys/syscall.h sys/sysctl.h netinet/tcp.h ifaddrs.h \
libtasn1.h sys/ucred.h sys/mount.h stdarg.h])
dnl Check whether endian provides handy macros.
AC_CHECK_DECLS([htole64], [], [], [[#include <endian.h>]])
AC_CHECK_FUNCS([stat stat64 __xstat __xstat64 lstat lstat64 __lxstat __lxstat64])
@@ -596,7 +564,6 @@ LIBVIRT_STORAGE_ARG_DIR
LIBVIRT_STORAGE_ARG_FS
LIBVIRT_STORAGE_ARG_LVM
LIBVIRT_STORAGE_ARG_ISCSI
LIBVIRT_STORAGE_ARG_ISCSI_DIRECT
LIBVIRT_STORAGE_ARG_SCSI
LIBVIRT_STORAGE_ARG_MPATH
LIBVIRT_STORAGE_ARG_DISK
@@ -611,7 +578,6 @@ if test "$with_libvirtd" = "no"; then
with_storage_fs=no
with_storage_lvm=no
with_storage_iscsi=no
with_storage_iscsi_direct=no
with_storage_scsi=no
with_storage_mpath=no
with_storage_disk=no
@@ -632,7 +598,6 @@ LIBVIRT_STORAGE_CHECK_DIR
LIBVIRT_STORAGE_CHECK_FS
LIBVIRT_STORAGE_CHECK_LVM
LIBVIRT_STORAGE_CHECK_ISCSI
LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT
LIBVIRT_STORAGE_CHECK_SCSI
LIBVIRT_STORAGE_CHECK_MPATH
LIBVIRT_STORAGE_CHECK_DISK
@@ -643,7 +608,7 @@ LIBVIRT_STORAGE_CHECK_ZFS
LIBVIRT_STORAGE_CHECK_VSTORAGE
with_storage=no
for backend in dir fs lvm iscsi iscsi_direct scsi mpath rbd disk; do
for backend in dir fs lvm iscsi scsi mpath rbd disk; do
if eval test \$with_storage_$backend = yes; then
with_storage=yes
break
@@ -971,7 +936,6 @@ LIBVIRT_STORAGE_RESULT_DIR
LIBVIRT_STORAGE_RESULT_FS
LIBVIRT_STORAGE_RESULT_LVM
LIBVIRT_STORAGE_RESULT_ISCSI
LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT
LIBVIRT_STORAGE_RESULT_SCSI
LIBVIRT_STORAGE_RESULT_MPATH
LIBVIRT_STORAGE_RESULT_DISK
@@ -1008,7 +972,7 @@ LIBVIRT_RESULT_FUSE
LIBVIRT_RESULT_GLUSTER
LIBVIRT_RESULT_GNUTLS
LIBVIRT_RESULT_HAL
LIBVIRT_RESULT_LIBISCSI
LIBVIRT_RESULT_JANSSON
LIBVIRT_RESULT_LIBNL
LIBVIRT_RESULT_LIBPCAP
LIBVIRT_RESULT_LIBSSH

View File

@@ -132,6 +132,8 @@ dot_php_in = $(notdir $(wildcard $(srcdir)/*.php.in))
dot_php_code_in = $(dot_php_in:%.php.in=%.php.code.in)
dot_php = $(dot_php_in:%.php.in=%.php)
patches = $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/api_extension/*.patch))
xml = \
libvirt-api.xml \
libvirt-refs.xml
@@ -175,7 +177,7 @@ EXTRA_DIST= \
$(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \
$(devhelphtml) $(devhelppng) $(devhelpcss) $(devhelpxsl) \
$(xml) $(qemu_xml) $(lxc_xml) $(admin_xml) $(fig) $(png) $(css) \
$(logofiles) $(dot_php_in) $(dot_php_code_in) $(dot_php)\
$(logofiles) $(patches) $(dot_php_in) $(dot_php_code_in) $(dot_php)\
$(internals_html_in) $(internals_html) $(fonts) \
aclperms.htmlinc \
hvsupport.pl \

View File

@@ -287,123 +287,6 @@
</tbody>
</table>
<h2><a id="connect_driver">Hypervisor Driver connect_driver</a></h2>
<p>
The <code>connect_driver</code> parameter describes the
client's <a href="remote.html">remote Connection Driver</a>
name based on the <a href="uri.html">URI</a> used for the
connection.
</p>
<p>
<span class="since">Since 4.1.0</span>, when calling an API
outside the scope of the primary connection driver, the
primary driver will attempt to open a secondary connection
to the specific API driver in order to process the API. For
example, when hypervisor domain processing needs to make an
API call within the storage driver or the network filter driver
an attempt to open a connection to the "storage" or "nwfilter"
driver will be made. Similarly, a "storage" primary connection
may need to create a connection to the "secret" driver in order
to process secrets for the API. If successful, then calls to
those API's will occur in the <code>connect_driver</code> context
of the secondary connection driver rather than in the context of
the primary driver. This affects the <code>connect_driver</code>
returned from rule generation from the <code>action.loookup</code>
function. The following table provides a list of the various
connection drivers and the <code>connect_driver</code> name
used by each regardless of primary or secondary connection.
The access denied error message from libvirt will list the
connection driver by name that denied the access.
</p>
<h3><a id="object_connect_driver">Connection Driver Name</a></h3>
<table class="acl">
<thead>
<tr>
<th>Connection Driver</th>
<th><code>connect_driver</code> name</th>
</tr>
</thead>
<tbody>
<tr>
<td>bhyve</td>
<td>bhyve</td>
</tr>
<tr>
<td>esx</td>
<td>ESX</td>
</tr>
<tr>
<td>hyperv</td>
<td>Hyper-V</td>
</tr>
<tr>
<td>interface</td>
<td>interface</td>
</tr>
<tr>
<td>libxl</td>
<td>xenlight</td>
</tr>
<tr>
<td>lxc</td>
<td>LXC</td>
</tr>
<tr>
<td>network</td>
<td>network</td>
</tr>
<tr>
<td>nodedev</td>
<td>nodedev</td>
</tr>
<tr>
<td>nwfilter</td>
<td>NWFilter</td>
</tr>
<tr>
<td>openvz</td>
<td>OPENVZ</td>
</tr>
<tr>
<td>phyp</td>
<td>PHYP</td>
</tr>
<tr>
<td>qemu</td>
<td>QEMU</td>
</tr>
<tr>
<td>secret</td>
<td>secret</td>
</tr>
<tr>
<td>storage</td>
<td>storage</td>
</tr>
<tr>
<td>uml</td>
<td>UML</td>
</tr>
<tr>
<td>vbox</td>
<td>VBOX</td>
</tr>
<tr>
<td>vmware</td>
<td>VMWARE</td>
</tr>
<tr>
<td>vz</td>
<td>vz</td>
</tr>
<tr>
<td>xenapi</td>
<td>XenAPI</td>
</tr>
</tbody>
</table>
<h2><a id="user">User identity attributes</a></h2>

View File

@@ -8,9 +8,14 @@
<p>
This document walks you through the process of implementing a new
API in libvirt. Remember that new API consists of any new public
functions, as well as the addition of flags or extensions of XML used by
existing functions.
API in libvirt. It uses as an example the addition of an API for
separating maximum from current vcpu usage of a domain, over
the course of a fifteen-patch series.
Remember that new API consists of any new public functions, as
well as the addition of flags or extensions of XML used by
existing functions. The example in this document adds both new
functions and an XML extension. Not all libvirt API additions
require quite as many patches.
</p>
<p>
@@ -22,7 +27,12 @@
added to libvirt. Someone may already be working on the feature you
want. Also, recognize that everything you write is likely to undergo
significant rework as you discuss it with the other developers, so
don't wait too long before getting feedback.
don't wait too long before getting feedback. In the vcpu example
below, list feedback was first requested
<a href="https://www.redhat.com/archives/libvir-list/2010-September/msg00423.html">here</a>
and resulted in several rounds of improvements before coding
began. In turn, this example is slightly rearranged from the actual
order of the commits.
</p>
<p>
@@ -71,12 +81,14 @@
</p>
<p>
Submit new code in the form of one patch per step. That's not to say
submit patches before you have working functionality--get the whole thing
working and make sure you're happy with it. Then use git to break the
changes into pieces so you don't drop a big blob of code on the
mailing list in one go. Also, you should follow the upstream tree, and
rebase your series to adapt your patches to work with any other changes
Submit new code in the form shown in the example code: one patch
per step. That's not to say submit patches before you have working
functionality--get the whole thing working and make sure you're happy
with it. Then use git or some other version control system that lets
you rewrite your commit history and break patches into pieces so you
don't drop a big blob of code on the mailing list in one go.
Also, you should follow the upstream tree, and rebase your
series to adapt your patches to work with any other changes
that were accepted upstream during your development.
</p>
@@ -89,6 +101,8 @@
separately.
</p>
<p>With that said, let's begin.</p>
<h2><a name='publicapi'>Defining the public API</a></h2>
<p>The first task is to define the public API. If the new API
@@ -96,7 +110,7 @@
schema and document the new elements or attributes:</p>
<p><code>
docs/schemas/domaincommon.rng<br/>
docs/schemas/domain.rng<br/>
docs/formatdomain.html.in
</code></p>
@@ -106,7 +120,7 @@
libvirt library and call the new function:</p>
<p><code>
include/libvirt/libvirt-$MODULE.h.in
include/libvirt/libvirt.h.in
src/libvirt_public.syms
</code></p>
@@ -119,6 +133,10 @@
rework it as you go through the process of implementing it.
</p>
<p class="example">See <a href="api_extension/0001-add-to-xml.patch">0001-add-to-xml.patch</a>
and <a href="api_extension/0002-add-new-public-API.patch">0002-add-new-public-API.patch</a>
for example code.</p>
<h2><a name='internalapi'>Defining the internal API</a></h2>
<p>
@@ -137,7 +155,7 @@
<p>The driver structs are defined in:</p>
<p><code>src/driver-$MODULE.h</code></p>
<p><code>src/driver.h</code></p>
<p>
To define the internal API, first typedef the driver function
@@ -146,6 +164,8 @@
provide a <code>NULL</code> stub for the new function.
</p>
<p class="example">See <a href="api_extension/0003-define-internal-driver-API.patch">0003-define-internal-driver-API.patch</a></p>
<h2><a name='implpublic'>Implementing the public API</a></h2>
<p>
@@ -177,16 +197,22 @@
<p>The public API calls are implemented in:</p>
<p><code>src/libvirt-$MODULE.c</code></p>
<p><code>src/libvirt.c</code></p>
<p class="example">See <a href="api_extension/0004-implement-the-public-APIs.patch">0004-implement-the-public-APIs.patch</a></p>
<h2><a name='remoteproto'>Implementing the remote protocol</a></h2>
<p>
Implementing the remote protocol is essentially a
straightforward exercise which is probably most easily
understood by referring to the existing code.
understood by referring to the existing code and the example
patch. It involves several related changes, including the
regeneration of derived files, with further details below.
</p>
<p class="example">See <a href="api_extension/0005-implement-the-remote-protocol.patch">0005-implement-the-remote-protocol.patch</a></p>
<h3><a name='wireproto'>Defining the wire protocol format</a></h3>
<p>
@@ -219,9 +245,9 @@
</p>
<p><code>
src/remote/remote_daemon_dispatch_stubs.h
src/remote/remote_daemon_dispatch.h
src/remote/remote_daemon_dispatch.c
daemon/remote_dispatch_args.h
daemon/remote_dispatch_prototypes.h
daemon/remote_dispatch_table.h
src/remote/remote_protocol.c
src/remote/remote_protocol.h
</code></p>
@@ -233,7 +259,7 @@
method calls go in:
</p>
<p><code>src/remote/remote_driver.c</code></p>
<p><code>src/remote/remote_internal.c</code></p>
<p>Each remote method invocation does the following:</p>
@@ -256,7 +282,7 @@
The server side dispatchers are implemented in:
</p>
<p><code>src/remote/daemon_dispatch.c</code></p>
<p><code>daemon/remote.c</code></p>
<p>Again, this step uses the .h files generated by make rpcgen.</p>
@@ -272,6 +298,8 @@
existing lines probably imply a backwards-incompatible API change.
</p>
<p class="example">See <a href="api_extension/0005-implement-the-remote-protocol.patch">0005-implement-the-remote-protocol.patch</a></p>
<h2><a id="internaluseapi">Use the new API internally</a></h2>
<p>
@@ -284,6 +312,8 @@
not necessary if the new API has no relation to existing API.
</p>
<p class="example">See <a href="api_extension/0006-make-old-API-trivially-wrap-to-new-API.patch">0006-make-old-API-trivially-wrap-to-new-API.patch</a></p>
<h2><a id="virshuseapi">Expose the new API in virsh</a></h2>
<p>
@@ -309,10 +339,12 @@
</p>
<p><code>
tools/virsh-$MODULE.c<br/>
tools/virsh.c<br/>
tools/virsh.pod
</code></p>
<p class="example">See <a href="api_extension/0007-add-virsh-support.patch">0007-add-virsh-support.patch</a></p>
<h2><a id="driverimpl">Implement the driver methods</a></h2>
<p>
@@ -339,6 +371,8 @@
the same way as the older API wrappers.
</p>
<p class="example">See <a href="api_extension/0008-support-new-xml.patch">0008-support-new-xml.patch</a></p>
<h3><a id="drivercode">Implement driver handling</a></h3>
<p>
@@ -350,14 +384,41 @@
</p>
<p>
It is always a good idea to patch the test driver in addition to the
target driver, to prove that the API can be used for more than one
driver.
In the example patches, three separate drivers are supported:
test, qemu, and xen. It is always a good idea to patch the test
driver in addition to the target driver, to prove that the API
can be used for more than one driver. The example updates the
test driver in one patch:
</p>
<p class="example">See <a href="api_extension/0009-support-all-flags-in-test-driver.patch">0009-support-all-flags-in-test-driver.patch</a></p>
<p>
Any cleanups resulting from the changes should be added as separate
patches at the end of the series.
The qemu changes were easier to split into two phases, one for
updating the mapping between the new XML and the hypervisor
command line arguments, and one for supporting all possible
flags of the new API:
</p>
<p class="example">See <a href="api_extension/0010-improve-vcpu-support-in-qemu-command-line.patch">0010-improve-vcpu-support-in-qemu-command-line.patch</a>
and <a href="api_extension/0011-complete-vcpu-support-in-qemu-driver.patch">0011-complete-vcpu-support-in-qemu-driver.patch</a></p>
<p>
Finally, the example breaks the xen driver changes across four
patches. One maps the XML changes to the hypervisor command,
the next two are independently implementing the getter and
setter APIs, and the last one provides cleanup of code that was
rendered dead by the new API.
</p>
<p class="example">See <a href="api_extension/0012-improve-vcpu-support-in-xen-command-line.patch">0012-improve-vcpu-support-in-xen-command-line.patch</a>,
<a href="api_extension/0013-improve-getting-xen-vcpu-counts.patch">0013-improve-getting-xen-vcpu-counts.patch</a>,
<a href="api_extension/0014-improve-setting-xen-vcpu-counts.patch">0014-improve-setting-xen-vcpu-counts.patch</a>,
and <a href="api_extension/0015-remove-dead-xen-code.patch">0015-remove-dead-xen-code.patch</a></p>
<p>
The exact details of the example code are probably uninteresting
unless you're concerned with virtual cpu management.
</p>
<p>

View File

@@ -0,0 +1,145 @@
From a74f4e44649906dcd82151f7ef837f66d7fa2ab1 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 27 Sep 2010 17:36:06 -0600
Subject: [PATCH 01/15] vcpu: add current attribute to <vcpu> element
Syntax agreed on in
https://www.redhat.com/archives/libvir-list/2010-September/msg00476.html
<domain ...>
<vcpu current='x'>y</vcpu>
...
can now be used to specify 1 <= x <= y current vcpus, in relation
to the boot-time max of y vcpus. If current is omitted, then
current and max are assumed to be the same value.
* docs/schemas/domain.rng: Add new attribute.
* docs/formatdomain.html.in: Document it.
* tests/qemuxml2argvdata/qemuxml2argv-smp.xml: Add to
domainschematest.
* tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml: Likewise.
---
docs/formatdomain.html.in | 9 +++++--
docs/schemas/domain.rng | 5 ++++
tests/qemuxml2argvdata/qemuxml2argv-smp.xml | 28 +++++++++++++++++++++++++++
tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml | 22 +++++++++++++++++++++
4 files changed, 61 insertions(+), 3 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-smp.xml
create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index a8a1fac..96de121 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -200,7 +200,7 @@
&lt;swap_hard_limit&gt;2097152&lt;/swap_hard_limit&gt;
&lt;min_guarantee&gt;65536&lt;/min_guarantee&gt;
&lt;/memtune&gt;
- &lt;vcpu cpuset="1-4,^3,6"&gt;2&lt;/vcpu&gt;
+ &lt;vcpu cpuset="1-4,^3,6" current="1"&gt;2&lt;/vcpu&gt;
...</pre>
<dl>
@@ -238,7 +238,7 @@
minimum memory allocation for the guest. The units for this value are
kilobytes (i.e. blocks of 1024 bytes)</dd>
<dt><code>vcpu</code></dt>
- <dd>The content of this element defines the number of virtual
+ <dd>The content of this element defines the maximum number of virtual
CPUs allocated for the guest OS, which must be between 1 and
the maximum supported by the hypervisor. <span class="since">Since
0.4.4</span>, this element can contain an optional
@@ -246,7 +246,10 @@
list of physical CPU numbers that virtual CPUs can be pinned
to. Each element in that list is either a single CPU number,
a range of CPU numbers, or a caret followed by a CPU number to
- be excluded from a previous range.
+ be excluded from a previous range. <span class="since">Since
+ 0.8.5</span>, the optional attribute <code>current</code> can
+ be used to specify whether fewer than the maximum number of
+ virtual CPUs should be enabled.
</dd>
</dl>
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index f230263..a934a77 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -337,6 +337,11 @@
<ref name="cpuset"/>
</attribute>
</optional>
+ <optional>
+ <attribute name="current">
+ <ref name="countCPU"/>
+ </attribute>
+ </optional>
<ref name="countCPU"/>
</element>
</optional>
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smp.xml b/tests/qemuxml2argvdata/qemuxml2argv-smp.xml
new file mode 100644
index 0000000..975f873
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-smp.xml
@@ -0,0 +1,28 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219200</memory>
+ <currentMemory>219200</currentMemory>
+ <vcpu current='1'>2</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <cpu>
+ <topology sockets='2' cores='1' threads='1'/>
+ </cpu>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' unit='0'/>
+ </disk>
+ <controller type='ide' index='0'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
new file mode 100644
index 0000000..d061e11
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
@@ -0,0 +1,22 @@
+<domain type='xen' id='15'>
+ <name>pvtest</name>
+ <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+ <os>
+ <type>linux</type>
+ <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+ <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+ <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline>
+ </os>
+ <memory>430080</memory>
+ <vcpu current='2'>4</vcpu>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>destroy</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='/root/some.img'/>
+ <target dev='xvda'/>
+ </disk>
+ <console tty='/dev/pts/4'/>
+ </devices>
+</domain>
--
1.7.2.3

View File

@@ -0,0 +1,62 @@
From ea3f5c68093429c6ad507b45689cdf209c2c257b Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Fri, 24 Sep 2010 16:48:45 -0600
Subject: [PATCH 02/15] vcpu: add new public API
API agreed on in
https://www.redhat.com/archives/libvir-list/2010-September/msg00456.html,
but modified for enum names to be consistent with virDomainDeviceModifyFlags.
* include/libvirt/libvirt.h.in (virDomainVcpuFlags)
(virDomainSetVcpusFlags, virDomainGetVcpusFlags): New
declarations.
* src/libvirt_public.syms: Export new symbols.
---
include/libvirt/libvirt.h.in | 15 +++++++++++++++
src/libvirt_public.syms | 2 ++
2 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 2eba61e..d0cc4c0 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -915,8 +915,23 @@ struct _virVcpuInfo {
};
typedef virVcpuInfo *virVcpuInfoPtr;
+/* Flags for controlling virtual CPU hot-plugging. */
+typedef enum {
+ /* Must choose at least one of these two bits; SetVcpus can choose both */
+ VIR_DOMAIN_VCPU_LIVE = (1 << 0), /* Affect active domain */
+ VIR_DOMAIN_VCPU_CONFIG = (1 << 1), /* Affect next boot */
+
+ /* Additional flags to be bit-wise OR'd in */
+ VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */
+} virDomainVcpuFlags;
+
int virDomainSetVcpus (virDomainPtr domain,
unsigned int nvcpus);
+int virDomainSetVcpusFlags (virDomainPtr domain,
+ unsigned int nvcpus,
+ unsigned int flags);
+int virDomainGetVcpusFlags (virDomainPtr domain,
+ unsigned int flags);
int virDomainPinVcpu (virDomainPtr domain,
unsigned int vcpu,
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index fceb516..a8091b1 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -409,6 +409,8 @@ LIBVIRT_0.8.5 {
global:
virDomainSetMemoryParameters;
virDomainGetMemoryParameters;
+ virDomainGetVcpusFlags;
+ virDomainSetVcpusFlags;
} LIBVIRT_0.8.2;
# .... define new API here using predicted next version number ....
--
1.7.2.3

View File

@@ -0,0 +1,222 @@
From dd255d64053e9960cd375994ce8f056522e12acc Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 27 Sep 2010 09:18:22 -0600
Subject: [PATCH 03/15] vcpu: define internal driver API
* src/driver.h (virDrvDomainSetVcpusFlags)
(virDrvDomainGetVcpusFlags): New typedefs.
(_virDriver): New callback members.
* src/esx/esx_driver.c (esxDriver): Add stub for driver.
* src/lxc/lxc_driver.c (lxcDriver): Likewise.
* src/opennebula/one_driver.c (oneDriver): Likewise.
* src/openvz/openvz_driver.c (openvzDriver): Likewise.
* src/phyp/phyp_driver.c (phypDriver): Likewise.
* src/qemu/qemu_driver.c (qemuDriver): Likewise.
* src/remote/remote_driver.c (remote_driver): Likewise.
* src/test/test_driver.c (testDriver): Likewise.
* src/uml/uml_driver.c (umlDriver): Likewise.
* src/vbox/vbox_tmpl.c (Driver): Likewise.
* src/xen/xen_driver.c (xenUnifiedDriver): Likewise.
* src/xenapi/xenapi_driver.c (xenapiDriver): Likewise.
---
src/driver.h | 9 +++++++++
src/esx/esx_driver.c | 2 ++
src/lxc/lxc_driver.c | 2 ++
src/opennebula/one_driver.c | 2 ++
src/openvz/openvz_driver.c | 2 ++
src/phyp/phyp_driver.c | 2 ++
src/qemu/qemu_driver.c | 2 ++
src/remote/remote_driver.c | 2 ++
src/test/test_driver.c | 2 ++
src/uml/uml_driver.c | 2 ++
src/vbox/vbox_tmpl.c | 2 ++
src/xen/xen_driver.c | 2 ++
src/xenapi/xenapi_driver.c | 2 ++
13 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/src/driver.h b/src/driver.h
index 32aeb04..79a96c1 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -185,6 +185,13 @@ typedef int
(*virDrvDomainSetVcpus) (virDomainPtr domain,
unsigned int nvcpus);
typedef int
+ (*virDrvDomainSetVcpusFlags) (virDomainPtr domain,
+ unsigned int nvcpus,
+ unsigned int flags);
+typedef int
+ (*virDrvDomainGetVcpusFlags) (virDomainPtr domain,
+ unsigned int flags);
+typedef int
(*virDrvDomainPinVcpu) (virDomainPtr domain,
unsigned int vcpu,
unsigned char *cpumap,
@@ -520,6 +527,8 @@ struct _virDriver {
virDrvDomainRestore domainRestore;
virDrvDomainCoreDump domainCoreDump;
virDrvDomainSetVcpus domainSetVcpus;
+ virDrvDomainSetVcpusFlags domainSetVcpusFlags;
+ virDrvDomainGetVcpusFlags domainGetVcpusFlags;
virDrvDomainPinVcpu domainPinVcpu;
virDrvDomainGetVcpus domainGetVcpus;
virDrvDomainGetMaxVcpus domainGetMaxVcpus;
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 1b4ee29..2a32374 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -4160,6 +4160,8 @@ static virDriver esxDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
esxDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
esxDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index df814da..7563a8c 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -2768,6 +2768,8 @@ static virDriver lxcDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
NULL, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
NULL, /* domainGetMaxVcpus */
diff --git a/src/opennebula/one_driver.c b/src/opennebula/one_driver.c
index ced9a38..199fca3 100644
--- a/src/opennebula/one_driver.c
+++ b/src/opennebula/one_driver.c
@@ -751,6 +751,8 @@ static virDriver oneDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
NULL, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
NULL, /* domainGetMaxVcpus */
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 92cf4a1..9d19aeb 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -1590,6 +1590,8 @@ static virDriver openvzDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
openvzDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index e63d8d9..6e0a5e9 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -3941,6 +3941,8 @@ static virDriver phypDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
phypDomainSetCPU, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
phypGetLparCPUMAX, /* domainGetMaxVcpus */
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index abd8e9d..3d17e04 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12938,6 +12938,8 @@ static virDriver qemuDriver = {
qemudDomainRestore, /* domainRestore */
qemudDomainCoreDump, /* domainCoreDump */
qemudDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
qemudDomainPinVcpu, /* domainPinVcpu */
qemudDomainGetVcpus, /* domainGetVcpus */
qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 0b10406..1a687ad 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -10468,6 +10468,8 @@ static virDriver remote_driver = {
remoteDomainRestore, /* domainRestore */
remoteDomainCoreDump, /* domainCoreDump */
remoteDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
remoteDomainPinVcpu, /* domainPinVcpu */
remoteDomainGetVcpus, /* domainGetVcpus */
remoteDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 7d4d119..6a00558 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -5260,6 +5260,8 @@ static virDriver testDriver = {
testDomainRestore, /* domainRestore */
testDomainCoreDump, /* domainCoreDump */
testSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
testDomainPinVcpu, /* domainPinVcpu */
testDomainGetVcpus, /* domainGetVcpus */
testDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index 3dcd321..5161012 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -2129,6 +2129,8 @@ static virDriver umlDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
NULL, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
NULL, /* domainGetMaxVcpus */
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 7e7d8e4..cb9193a 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -8267,6 +8267,8 @@ virDriver NAME(Driver) = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
vboxDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index c2a4de3..7d67ced 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -1951,6 +1951,8 @@ static virDriver xenUnifiedDriver = {
xenUnifiedDomainRestore, /* domainRestore */
xenUnifiedDomainCoreDump, /* domainCoreDump */
xenUnifiedDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
xenUnifiedDomainPinVcpu, /* domainPinVcpu */
xenUnifiedDomainGetVcpus, /* domainGetVcpus */
xenUnifiedDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index e62a139..753169c 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -1754,6 +1754,8 @@ static virDriver xenapiDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
xenapiDomainSetVcpus, /* domainSetVcpus */
+ NULL, /* domainSetVcpusFlags */
+ NULL, /* domainGetVcpusFlags */
xenapiDomainPinVcpu, /* domainPinVcpu */
xenapiDomainGetVcpus, /* domainGetVcpus */
xenapiDomainGetMaxVcpus, /* domainGetMaxVcpus */
--
1.7.2.3

View File

@@ -0,0 +1,188 @@
From 9d2c60799271d605f82dfd4bfa6ed7d14ad87e26 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 27 Sep 2010 09:37:22 -0600
Subject: [PATCH 04/15] vcpu: implement the public APIs
Factors common checks (such as nonzero vcpu count) up front, but
drivers will still need to do additional flag checks.
* src/libvirt.c (virDomainSetVcpusFlags, virDomainGetVcpusFlags):
New functions.
(virDomainSetVcpus, virDomainGetMaxVcpus): Refer to new API.
---
src/libvirt.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 134 insertions(+), 6 deletions(-)
diff --git a/src/libvirt.c b/src/libvirt.c
index 629d97b..1b39210 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -5192,7 +5192,9 @@ error:
* This function requires privileged access to the hypervisor.
*
* This command only changes the runtime configuration of the domain,
- * so can only be called on an active domain.
+ * so can only be called on an active domain. It is hypervisor-dependent
+ * whether it also affects persistent configuration; for more control,
+ * use virDomainSetVcpusFlags().
*
* Returns 0 in case of success, -1 in case of failure.
*/
@@ -5237,13 +5239,139 @@ error:
}
/**
+ * virDomainSetVcpusFlags:
+ * @domain: pointer to domain object, or NULL for Domain0
+ * @nvcpus: the new number of virtual CPUs for this domain, must be at least 1
+ * @flags: an OR'ed set of virDomainVcpuFlags
+ *
+ * Dynamically change the number of virtual CPUs used by the domain.
+ * Note that this call may fail if the underlying virtualization hypervisor
+ * does not support it or if growing the number is arbitrary limited.
+ * This function requires privileged access to the hypervisor.
+ *
+ * @flags must include VIR_DOMAIN_VCPU_LIVE to affect a running
+ * domain (which may fail if domain is not active), or
+ * VIR_DOMAIN_VCPU_CONFIG to affect the next boot via the XML
+ * description of the domain. Both flags may be set.
+ *
+ * If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then
+ * VIR_DOMAIN_VCPU_LIVE must be clear, and only the maximum virtual
+ * CPU limit is altered; generally, this value must be less than or
+ * equal to virConnectGetMaxVcpus(). Otherwise, this call affects the
+ * current virtual CPU limit, which must be less than or equal to the
+ * maximum limit.
+ *
+ * Returns 0 in case of success, -1 in case of failure.
+ */
+
+int
+virDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("domain=%p, nvcpus=%u, flags=%u", domain, nvcpus, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+ virDispatchError(NULL);
+ return (-1);
+ }
+ if (domain->conn->flags & VIR_CONNECT_RO) {
+ virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ goto error;
+ }
+
+ /* Perform some argument validation common to all implementations. */
+ if (nvcpus < 1 || (unsigned short) nvcpus != nvcpus ||
+ (flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0) {
+ virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+ conn = domain->conn;
+
+ if (conn->driver->domainSetVcpusFlags) {
+ int ret;
+ ret = conn->driver->domainSetVcpusFlags (domain, nvcpus, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ virDispatchError(domain->conn);
+ return -1;
+}
+
+/**
+ * virDomainGetVcpusFlags:
+ * @domain: pointer to domain object, or NULL for Domain0
+ * @flags: an OR'ed set of virDomainVcpuFlags
+ *
+ * Query the number of virtual CPUs used by the domain. Note that
+ * this call may fail if the underlying virtualization hypervisor does
+ * not support it. This function requires privileged access to the
+ * hypervisor.
+ *
+ * @flags must include either VIR_DOMAIN_VCPU_ACTIVE to query a
+ * running domain (which will fail if domain is not active), or
+ * VIR_DOMAIN_VCPU_PERSISTENT to query the XML description of the
+ * domain. It is an error to set both flags.
+ *
+ * If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then the maximum
+ * virtual CPU limit is queried. Otherwise, this call queries the
+ * current virtual CPU limit.
+ *
+ * Returns 0 in case of success, -1 in case of failure.
+ */
+
+int
+virDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("domain=%p, flags=%u", domain, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+ virDispatchError(NULL);
+ return (-1);
+ }
+
+ /* Exactly one of these two flags should be set. */
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
+ virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+ conn = domain->conn;
+
+ if (conn->driver->domainGetVcpusFlags) {
+ int ret;
+ ret = conn->driver->domainGetVcpusFlags (domain, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ virDispatchError(domain->conn);
+ return -1;
+}
+
+/**
* virDomainPinVcpu:
* @domain: pointer to domain object, or NULL for Domain0
* @vcpu: virtual CPU number
* @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN)
- * Each bit set to 1 means that corresponding CPU is usable.
- * Bytes are stored in little-endian order: CPU0-7, 8-15...
- * In each byte, lowest CPU number is least significant bit.
+ * Each bit set to 1 means that corresponding CPU is usable.
+ * Bytes are stored in little-endian order: CPU0-7, 8-15...
+ * In each byte, lowest CPU number is least significant bit.
* @maplen: number of bytes in cpumap, from 1 up to size of CPU map in
* underlying virtualization system (Xen...).
* If maplen < size, missing bytes are set to zero.
@@ -5371,9 +5499,9 @@ error:
*
* Provides the maximum number of virtual CPUs supported for
* the guest VM. If the guest is inactive, this is basically
- * the same as virConnectGetMaxVcpus. If the guest is running
+ * the same as virConnectGetMaxVcpus(). If the guest is running
* this will reflect the maximum number of virtual CPUs the
- * guest was booted with.
+ * guest was booted with. For more details, see virDomainGetVcpusFlags().
*
* Returns the maximum of virtual CPU or -1 in case of error.
*/
--
1.7.2.3

View File

@@ -0,0 +1,421 @@
From eb826444f90c2563dadf148630b0cd6a9b41ba1e Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 27 Sep 2010 10:10:06 -0600
Subject: [PATCH 05/15] vcpu: implement the remote protocol
Done by editing the first three files, then running
'make -C src rpcgen', then editing src/remote_protocol-structs
to match.
* daemon/remote.c (remoteDispatchDomainSetVcpusFlags)
(remoteDispatchDomainGetVcpusFlags): New functions.
* src/remote/remote_driver.c (remoteDomainSetVcpusFlags)
(remoteDomainGetVcpusFlags, remote_driver): Client side
serialization.
* src/remote/remote_protocol.x
(remote_domain_set_vcpus_flags_args)
(remote_domain_get_vcpus_flags_args)
(remote_domain_get_vcpus_flags_ret)
(REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS)
(REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS): Define wire format.
* daemon/remote_dispatch_args.h: Regenerate.
* daemon/remote_dispatch_prototypes.h: Likewise.
* daemon/remote_dispatch_table.h: Likewise.
* src/remote/remote_protocol.c: Likewise.
* src/remote/remote_protocol.h: Likewise.
* src/remote_protocol-structs: Likewise.
---
daemon/remote.c | 53 ++++++++++++++++++++++++++++++++
daemon/remote_dispatch_args.h | 2 +
daemon/remote_dispatch_prototypes.h | 16 ++++++++++
daemon/remote_dispatch_ret.h | 1 +
daemon/remote_dispatch_table.h | 10 ++++++
src/remote/remote_driver.c | 57 +++++++++++++++++++++++++++++++++-
src/remote/remote_protocol.c | 33 ++++++++++++++++++++
src/remote/remote_protocol.h | 26 ++++++++++++++++
src/remote/remote_protocol.x | 19 +++++++++++-
src/remote_protocol-structs | 12 +++++++
10 files changed, 226 insertions(+), 3 deletions(-)
diff --git a/daemon/remote.c b/daemon/remote.c
index 7a96e29..323f00c 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -1751,6 +1751,33 @@ oom:
}
static int
+remoteDispatchDomainGetVcpusFlags (struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_vcpus_flags_args *args,
+ remote_domain_get_vcpus_flags_ret *ret)
+{
+ virDomainPtr dom;
+
+ dom = get_nonnull_domain (conn, args->dom);
+ if (dom == NULL) {
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+
+ ret->num = virDomainGetVcpusFlags (dom, args->flags);
+ if (ret->num == -1) {
+ virDomainFree(dom);
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+ virDomainFree(dom);
+ return 0;
+}
+
+static int
remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED,
struct qemud_client *client ATTRIBUTE_UNUSED,
virConnectPtr conn,
@@ -2568,6 +2595,32 @@ remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
}
static int
+remoteDispatchDomainSetVcpusFlags (struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_vcpus_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ virDomainPtr dom;
+
+ dom = get_nonnull_domain (conn, args->dom);
+ if (dom == NULL) {
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+
+ if (virDomainSetVcpusFlags (dom, args->nvcpus, args->flags) == -1) {
+ virDomainFree(dom);
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+ virDomainFree(dom);
+ return 0;
+}
+
+static int
remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED,
struct qemud_client *client ATTRIBUTE_UNUSED,
virConnectPtr conn,
diff --git a/daemon/remote_dispatch_args.h b/daemon/remote_dispatch_args.h
index d8528b6..9583e9c 100644
--- a/daemon/remote_dispatch_args.h
+++ b/daemon/remote_dispatch_args.h
@@ -167,3 +167,5 @@
remote_domain_create_with_flags_args val_remote_domain_create_with_flags_args;
remote_domain_set_memory_parameters_args val_remote_domain_set_memory_parameters_args;
remote_domain_get_memory_parameters_args val_remote_domain_get_memory_parameters_args;
+ remote_domain_set_vcpus_flags_args val_remote_domain_set_vcpus_flags_args;
+ remote_domain_get_vcpus_flags_args val_remote_domain_get_vcpus_flags_args;
diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h
index b674bb4..6b35851 100644
--- a/daemon/remote_dispatch_prototypes.h
+++ b/daemon/remote_dispatch_prototypes.h
@@ -306,6 +306,14 @@ static int remoteDispatchDomainGetVcpus(
remote_error *err,
remote_domain_get_vcpus_args *args,
remote_domain_get_vcpus_ret *ret);
+static int remoteDispatchDomainGetVcpusFlags(
+ struct qemud_server *server,
+ struct qemud_client *client,
+ virConnectPtr conn,
+ remote_message_header *hdr,
+ remote_error *err,
+ remote_domain_get_vcpus_flags_args *args,
+ remote_domain_get_vcpus_flags_ret *ret);
static int remoteDispatchDomainHasCurrentSnapshot(
struct qemud_server *server,
struct qemud_client *client,
@@ -554,6 +562,14 @@ static int remoteDispatchDomainSetVcpus(
remote_error *err,
remote_domain_set_vcpus_args *args,
void *ret);
+static int remoteDispatchDomainSetVcpusFlags(
+ struct qemud_server *server,
+ struct qemud_client *client,
+ virConnectPtr conn,
+ remote_message_header *hdr,
+ remote_error *err,
+ remote_domain_set_vcpus_flags_args *args,
+ void *ret);
static int remoteDispatchDomainShutdown(
struct qemud_server *server,
struct qemud_client *client,
diff --git a/daemon/remote_dispatch_ret.h b/daemon/remote_dispatch_ret.h
index 17c9bca..3723b00 100644
--- a/daemon/remote_dispatch_ret.h
+++ b/daemon/remote_dispatch_ret.h
@@ -136,3 +136,4 @@
remote_domain_get_block_info_ret val_remote_domain_get_block_info_ret;
remote_domain_create_with_flags_ret val_remote_domain_create_with_flags_ret;
remote_domain_get_memory_parameters_ret val_remote_domain_get_memory_parameters_ret;
+ remote_domain_get_vcpus_flags_ret val_remote_domain_get_vcpus_flags_ret;
diff --git a/daemon/remote_dispatch_table.h b/daemon/remote_dispatch_table.h
index 47d95eb..dd2adc7 100644
--- a/daemon/remote_dispatch_table.h
+++ b/daemon/remote_dispatch_table.h
@@ -997,3 +997,13 @@
.args_filter = (xdrproc_t) xdr_remote_domain_get_memory_parameters_args,
.ret_filter = (xdrproc_t) xdr_remote_domain_get_memory_parameters_ret,
},
+{ /* DomainSetVcpusFlags => 199 */
+ .fn = (dispatch_fn) remoteDispatchDomainSetVcpusFlags,
+ .args_filter = (xdrproc_t) xdr_remote_domain_set_vcpus_flags_args,
+ .ret_filter = (xdrproc_t) xdr_void,
+},
+{ /* DomainGetVcpusFlags => 200 */
+ .fn = (dispatch_fn) remoteDispatchDomainGetVcpusFlags,
+ .args_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_flags_args,
+ .ret_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_flags_ret,
+},
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 1a687ad..37c37ef 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -2580,6 +2580,59 @@ done:
}
static int
+remoteDomainSetVcpusFlags (virDomainPtr domain, unsigned int nvcpus,
+ unsigned int flags)
+{
+ int rv = -1;
+ remote_domain_set_vcpus_flags_args args;
+ struct private_data *priv = domain->conn->privateData;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain (&args.dom, domain);
+ args.nvcpus = nvcpus;
+ args.flags = flags;
+
+ if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS,
+ (xdrproc_t) xdr_remote_domain_set_vcpus_flags_args,
+ (char *) &args,
+ (xdrproc_t) xdr_void, (char *) NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainGetVcpusFlags (virDomainPtr domain, unsigned int flags)
+{
+ int rv = -1;
+ remote_domain_get_vcpus_flags_args args;
+ remote_domain_get_vcpus_flags_ret ret;
+ struct private_data *priv = domain->conn->privateData;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain (&args.dom, domain);
+ args.flags = flags;
+
+ memset (&ret, 0, sizeof ret);
+ if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS,
+ (xdrproc_t) xdr_remote_domain_get_vcpus_flags_args, (char *) &args,
+ (xdrproc_t) xdr_remote_domain_get_vcpus_flags_ret, (char *) &ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
remoteDomainPinVcpu (virDomainPtr domain,
unsigned int vcpu,
unsigned char *cpumap,
@@ -10468,8 +10521,8 @@ static virDriver remote_driver = {
remoteDomainRestore, /* domainRestore */
remoteDomainCoreDump, /* domainCoreDump */
remoteDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ remoteDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ remoteDomainGetVcpusFlags, /* domainGetVcpusFlags */
remoteDomainPinVcpu, /* domainPinVcpu */
remoteDomainGetVcpus, /* domainGetVcpus */
remoteDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/remote/remote_protocol.c b/src/remote/remote_protocol.c
index 5c55713..38ea050 100644
--- a/src/remote/remote_protocol.c
+++ b/src/remote/remote_protocol.c
@@ -1355,6 +1355,39 @@ xdr_remote_domain_set_vcpus_args (XDR *xdrs, remote_domain_set_vcpus_args *objp)
}
bool_t
+xdr_remote_domain_set_vcpus_flags_args (XDR *xdrs, remote_domain_set_vcpus_flags_args *objp)
+{
+
+ if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->nvcpus))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->flags))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_remote_domain_get_vcpus_flags_args (XDR *xdrs, remote_domain_get_vcpus_flags_args *objp)
+{
+
+ if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->flags))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_remote_domain_get_vcpus_flags_ret (XDR *xdrs, remote_domain_get_vcpus_flags_ret *objp)
+{
+
+ if (!xdr_int (xdrs, &objp->num))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
xdr_remote_domain_pin_vcpu_args (XDR *xdrs, remote_domain_pin_vcpu_args *objp)
{
char **objp_cpp0 = (char **) (void *) &objp->cpumap.cpumap_val;
diff --git a/src/remote/remote_protocol.h b/src/remote/remote_protocol.h
index 756da11..d75e76c 100644
--- a/src/remote/remote_protocol.h
+++ b/src/remote/remote_protocol.h
@@ -750,6 +750,24 @@ struct remote_domain_set_vcpus_args {
};
typedef struct remote_domain_set_vcpus_args remote_domain_set_vcpus_args;
+struct remote_domain_set_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ u_int nvcpus;
+ u_int flags;
+};
+typedef struct remote_domain_set_vcpus_flags_args remote_domain_set_vcpus_flags_args;
+
+struct remote_domain_get_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ u_int flags;
+};
+typedef struct remote_domain_get_vcpus_flags_args remote_domain_get_vcpus_flags_args;
+
+struct remote_domain_get_vcpus_flags_ret {
+ int num;
+};
+typedef struct remote_domain_get_vcpus_flags_ret remote_domain_get_vcpus_flags_ret;
+
struct remote_domain_pin_vcpu_args {
remote_nonnull_domain dom;
int vcpu;
@@ -2281,6 +2299,8 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196,
REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS = 197,
REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198,
+ REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
+ REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
};
typedef enum remote_procedure remote_procedure;
@@ -2422,6 +2442,9 @@ extern bool_t xdr_remote_domain_define_xml_args (XDR *, remote_domain_define_xm
extern bool_t xdr_remote_domain_define_xml_ret (XDR *, remote_domain_define_xml_ret*);
extern bool_t xdr_remote_domain_undefine_args (XDR *, remote_domain_undefine_args*);
extern bool_t xdr_remote_domain_set_vcpus_args (XDR *, remote_domain_set_vcpus_args*);
+extern bool_t xdr_remote_domain_set_vcpus_flags_args (XDR *, remote_domain_set_vcpus_flags_args*);
+extern bool_t xdr_remote_domain_get_vcpus_flags_args (XDR *, remote_domain_get_vcpus_flags_args*);
+extern bool_t xdr_remote_domain_get_vcpus_flags_ret (XDR *, remote_domain_get_vcpus_flags_ret*);
extern bool_t xdr_remote_domain_pin_vcpu_args (XDR *, remote_domain_pin_vcpu_args*);
extern bool_t xdr_remote_domain_get_vcpus_args (XDR *, remote_domain_get_vcpus_args*);
extern bool_t xdr_remote_domain_get_vcpus_ret (XDR *, remote_domain_get_vcpus_ret*);
@@ -2762,6 +2785,9 @@ extern bool_t xdr_remote_domain_define_xml_args ();
extern bool_t xdr_remote_domain_define_xml_ret ();
extern bool_t xdr_remote_domain_undefine_args ();
extern bool_t xdr_remote_domain_set_vcpus_args ();
+extern bool_t xdr_remote_domain_set_vcpus_flags_args ();
+extern bool_t xdr_remote_domain_get_vcpus_flags_args ();
+extern bool_t xdr_remote_domain_get_vcpus_flags_ret ();
extern bool_t xdr_remote_domain_pin_vcpu_args ();
extern bool_t xdr_remote_domain_get_vcpus_args ();
extern bool_t xdr_remote_domain_get_vcpus_ret ();
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index e80fb5f..d57e6d0 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -768,6 +768,21 @@ struct remote_domain_set_vcpus_args {
int nvcpus;
};
+struct remote_domain_set_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ unsigned int nvcpus;
+ unsigned int flags;
+};
+
+struct remote_domain_get_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ unsigned int flags;
+};
+
+struct remote_domain_get_vcpus_flags_ret {
+ int num;
+};
+
struct remote_domain_pin_vcpu_args {
remote_nonnull_domain dom;
int vcpu;
@@ -2062,7 +2077,9 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_EVENT_IO_ERROR_REASON = 195,
REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196,
REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS = 197,
- REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198
+ REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198,
+ REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
+ REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200
/*
* Notice how the entries are grouped in sets of 10 ?
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index 838423e..d505886 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -461,6 +461,18 @@ struct remote_domain_set_vcpus_args {
remote_nonnull_domain dom;
int nvcpus;
};
+struct remote_domain_set_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ u_int nvcpus;
+ u_int flags;
+};
+struct remote_domain_get_vcpus_flags_args {
+ remote_nonnull_domain dom;
+ u_int flags;
+};
+struct remote_domain_get_vcpus_flags_ret {
+ int num;
+};
struct remote_domain_pin_vcpu_args {
remote_nonnull_domain dom;
int vcpu;
--
1.7.2.3

View File

@@ -0,0 +1,735 @@
From 50c51f13e2af04afac46e181c4ed62581545a488 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 27 Sep 2010 16:37:53 -0600
Subject: [PATCH 06/15] vcpu: make old API trivially wrap to new API
Note - this wrapping is completely mechanical; the old API will
function identically, since the new API validates that the exact
same flags are provided by the old API. On a per-driver basis,
it may make sense to have the old API pass a different set of flags,
but that should be done in the per-driver patch that implements
the full range of flag support in the new API.
* src/esx/esx_driver.c (esxDomainSetVcpus, escDomainGetMaxVpcus):
Move guts...
(esxDomainSetVcpusFlags, esxDomainGetVcpusFlags): ...to new
functions.
(esxDriver): Trivially support the new API.
* src/openvz/openvz_driver.c (openvzDomainSetVcpus)
(openvzDomainSetVcpusFlags, openvzDomainGetMaxVcpus)
(openvzDomainGetVcpusFlags, openvzDriver): Likewise.
* src/phyp/phyp_driver.c (phypDomainSetCPU)
(phypDomainSetVcpusFlags, phypGetLparCPUMAX)
(phypDomainGetVcpusFlags, phypDriver): Likewise.
* src/qemu/qemu_driver.c (qemudDomainSetVcpus)
(qemudDomainSetVcpusFlags, qemudDomainGetMaxVcpus)
(qemudDomainGetVcpusFlags, qemuDriver): Likewise.
* src/test/test_driver.c (testSetVcpus, testDomainSetVcpusFlags)
(testDomainGetMaxVcpus, testDomainGetVcpusFlags, testDriver):
Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainSetVcpus)
(vboxDomainSetVcpusFlags, virDomainGetMaxVcpus)
(virDomainGetVcpusFlags, virDriver): Likewise.
* src/xen/xen_driver.c (xenUnifiedDomainSetVcpus)
(xenUnifiedDomainSetVcpusFlags, xenUnifiedDomainGetMaxVcpus)
(xenUnifiedDomainGetVcpusFlags, xenUnifiedDriver): Likewise.
* src/xenapi/xenapi_driver.c (xenapiDomainSetVcpus)
(xenapiDomainSetVcpusFlags, xenapiDomainGetMaxVcpus)
(xenapiDomainGetVcpusFlags, xenapiDriver): Likewise.
(xenapiError): New helper macro.
---
src/esx/esx_driver.c | 32 +++++++++++++++++++---
src/openvz/openvz_driver.c | 34 +++++++++++++++++++++---
src/phyp/phyp_driver.c | 32 ++++++++++++++++++++---
src/qemu/qemu_driver.c | 38 +++++++++++++++++++++++++---
src/test/test_driver.c | 36 ++++++++++++++++++++++---
src/vbox/vbox_tmpl.c | 36 +++++++++++++++++++++++---
src/xen/xen_driver.c | 34 ++++++++++++++++++++++---
src/xenapi/xenapi_driver.c | 60 ++++++++++++++++++++++++++++++++++++++------
8 files changed, 263 insertions(+), 39 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 2a32374..b3e1284 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -2384,7 +2384,8 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
static int
-esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
+esxDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus,
+ unsigned int flags)
{
int result = -1;
esxPrivate *priv = domain->conn->privateData;
@@ -2394,6 +2395,11 @@ esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
esxVI_ManagedObjectReference *task = NULL;
esxVI_TaskInfoState taskInfoState;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ ESX_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
if (nvcpus < 1) {
ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
_("Requested number of virtual CPUs must at least be 1"));
@@ -2453,15 +2459,26 @@ esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
}
+static int
+esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
+{
+ return esxDomainSetVcpusFlags(domain, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
static int
-esxDomainGetMaxVcpus(virDomainPtr domain)
+esxDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
{
esxPrivate *priv = domain->conn->privateData;
esxVI_String *propertyNameList = NULL;
esxVI_ObjectContent *hostSystem = NULL;
esxVI_DynamicProperty *dynamicProperty = NULL;
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ ESX_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
if (priv->maxVcpus > 0) {
return priv->maxVcpus;
}
@@ -2507,7 +2524,12 @@ esxDomainGetMaxVcpus(virDomainPtr domain)
return priv->maxVcpus;
}
-
+static int
+esxDomainGetMaxVcpus(virDomainPtr domain)
+{
+ return esxDomainGetVcpusFlags(domain, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
static char *
esxDomainDumpXML(virDomainPtr domain, int flags)
@@ -4160,8 +4182,8 @@ static virDriver esxDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
esxDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ esxDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ esxDomainGetVcpusFlags, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
esxDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 9d19aeb..0f3cfdf 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -67,7 +67,6 @@
static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid);
static int openvzGetMaxVCPUs(virConnectPtr conn, const char *type);
static int openvzDomainGetMaxVcpus(virDomainPtr dom);
-static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus);
static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
unsigned int nvcpus);
static int openvzDomainSetMemoryInternal(virDomainObjPtr vm,
@@ -1211,11 +1210,24 @@ static int openvzGetMaxVCPUs(virConnectPtr conn ATTRIBUTE_UNUSED,
return -1;
}
+static int
+openvzDomainGetVcpusFlags(virDomainPtr dom ATTRIBUTE_UNUSED,
+ unsigned int flags)
+{
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ openvzError(VIR_ERR_INVALID_ARG, _("unsupported flags (0x%x)"), flags);
+ return -1;
+ }
-static int openvzDomainGetMaxVcpus(virDomainPtr dom ATTRIBUTE_UNUSED) {
return openvzGetMaxVCPUs(NULL, "openvz");
}
+static int openvzDomainGetMaxVcpus(virDomainPtr dom)
+{
+ return openvzDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
unsigned int nvcpus)
{
@@ -1241,12 +1253,18 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
return 0;
}
-static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
+static int openvzDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
{
virDomainObjPtr vm;
struct openvz_driver *driver = dom->conn->privateData;
int ret = -1;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ openvzError(VIR_ERR_INVALID_ARG, _("unsupported flags (0x%x)"), flags);
+ return -1;
+ }
+
openvzDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
openvzDriverUnlock(driver);
@@ -1272,6 +1290,12 @@ cleanup:
return ret;
}
+static int
+openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
+{
+ return openvzDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
static virDrvOpenStatus openvzOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
int flags ATTRIBUTE_UNUSED)
@@ -1590,8 +1614,8 @@ static virDriver openvzDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
openvzDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ openvzDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ openvzDomainGetVcpusFlags, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 6e0a5e9..e284ae0 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -1497,15 +1497,27 @@ phypGetLparCPU(virConnectPtr conn, const char *managed_system, int lpar_id)
}
static int
-phypGetLparCPUMAX(virDomainPtr dom)
+phypDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
{
phyp_driverPtr phyp_driver = dom->conn->privateData;
char *managed_system = phyp_driver->managed_system;
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ PHYP_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
return phypGetLparCPUGeneric(dom->conn, managed_system, dom->id, 1);
}
static int
+phypGetLparCPUMAX(virDomainPtr dom)
+{
+ return phypDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
+static int
phypGetRemoteSlot(virConnectPtr conn, const char *managed_system,
const char *lpar_name)
{
@@ -3831,7 +3843,8 @@ phypConnectGetCapabilities(virConnectPtr conn)
}
static int
-phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
+phypDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
{
ConnectionData *connection_data = dom->conn->networkPrivateData;
phyp_driverPtr phyp_driver = dom->conn->privateData;
@@ -3846,6 +3859,11 @@ phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
unsigned int amount = 0;
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ PHYP_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
if ((ncpus = phypGetLparCPU(dom->conn, managed_system, dom->id)) == 0)
return 0;
@@ -3891,6 +3909,12 @@ phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
}
+static int
+phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
+{
+ return phypDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
static virDrvOpenStatus
phypVIOSDriverOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
@@ -3941,8 +3965,8 @@ static virDriver phypDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
phypDomainSetCPU, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ phypDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ phypDomainGetVcpusFlags, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
phypGetLparCPUMAX, /* domainGetMaxVcpus */
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3d17e04..7a2ea8f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5934,13 +5934,22 @@ unsupported:
}
-static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
+static int
+qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
+{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
const char * type;
int max;
int ret = -1;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
qemuDriverUnlock(driver);
@@ -5994,6 +6003,12 @@ cleanup:
return ret;
}
+static int
+qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
+{
+ return qemudDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
static int
qemudDomainPinVcpu(virDomainPtr dom,
@@ -6150,12 +6165,20 @@ cleanup:
}
-static int qemudDomainGetMaxVcpus(virDomainPtr dom) {
+static int
+qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
+{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
const char *type;
int ret = -1;
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
qemuDriverUnlock(driver);
@@ -6183,6 +6206,13 @@ cleanup:
return ret;
}
+static int
+qemudDomainGetMaxVcpus(virDomainPtr dom)
+{
+ return qemudDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
static int qemudDomainGetSecurityLabel(virDomainPtr dom, virSecurityLabelPtr seclabel)
{
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
@@ -12938,8 +12968,8 @@ static virDriver qemuDriver = {
qemudDomainRestore, /* domainRestore */
qemudDomainCoreDump, /* domainCoreDump */
qemudDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ qemudDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ qemudDomainGetVcpusFlags, /* domainGetVcpusFlags */
qemudDomainPinVcpu, /* domainPinVcpu */
qemudDomainGetVcpus, /* domainGetVcpus */
qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 6a00558..b70c80d 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2029,17 +2029,37 @@ cleanup:
return ret;
}
-static int testDomainGetMaxVcpus(virDomainPtr domain)
+static int
+testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
{
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
return testGetMaxVCPUs(domain->conn, "test");
}
-static int testSetVcpus(virDomainPtr domain,
- unsigned int nrCpus) {
+static int
+testDomainGetMaxVcpus(virDomainPtr domain)
+{
+ return testDomainGetVcpusFlags(domain, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
+static int
+testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
+ unsigned int flags)
+{
testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom = NULL;
int ret = -1, maxvcpus;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
/* Do this first before locking */
maxvcpus = testDomainGetMaxVcpus(domain);
if (maxvcpus < 0)
@@ -2082,6 +2102,12 @@ cleanup:
return ret;
}
+static int
+testSetVcpus(virDomainPtr domain, unsigned int nrCpus)
+{
+ return testDomainSetVcpusFlags(domain, nrCpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
static int testDomainGetVcpus(virDomainPtr domain,
virVcpuInfoPtr info,
int maxinfo,
@@ -5260,8 +5286,8 @@ static virDriver testDriver = {
testDomainRestore, /* domainRestore */
testDomainCoreDump, /* domainCoreDump */
testSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ testDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ testDomainGetVcpusFlags, /* domainGetVcpusFlags */
testDomainPinVcpu, /* domainPinVcpu */
testDomainGetVcpus, /* domainGetVcpus */
testDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index cb9193a..0cbe8b3 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -1839,13 +1839,21 @@ cleanup:
return ret;
}
-static int vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
+static int
+vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
+{
VBOX_OBJECT_CHECK(dom->conn, int, -1);
IMachine *machine = NULL;
vboxIID *iid = NULL;
PRUint32 CPUCount = nvcpus;
nsresult rc;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ vboxError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
#if VBOX_API_VERSION == 2002
if (VIR_ALLOC(iid) < 0) {
virReportOOMError();
@@ -1887,11 +1895,24 @@ cleanup:
return ret;
}
-static int vboxDomainGetMaxVcpus(virDomainPtr dom) {
+static int
+vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
+{
+ return vboxDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
+static int
+vboxDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
+{
VBOX_OBJECT_CHECK(dom->conn, int, -1);
ISystemProperties *systemProperties = NULL;
PRUint32 maxCPUCount = 0;
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ vboxError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ return -1;
+ }
+
/* Currently every domain supports the same number of max cpus
* as that supported by vbox and thus take it directly from
* the systemproperties.
@@ -1909,6 +1930,13 @@ static int vboxDomainGetMaxVcpus(virDomainPtr dom) {
return ret;
}
+static int
+vboxDomainGetMaxVcpus(virDomainPtr dom)
+{
+ return vboxDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
VBOX_OBJECT_CHECK(dom->conn, char *, NULL);
virDomainDefPtr def = NULL;
@@ -8267,8 +8295,8 @@ virDriver NAME(Driver) = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
vboxDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ vboxDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ vboxDomainGetVcpusFlags, /* domainGetVcpusFlags */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 7d67ced..d6c9c57 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -1069,11 +1069,18 @@ xenUnifiedDomainCoreDump (virDomainPtr dom, const char *to, int flags)
}
static int
-xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
+xenUnifiedDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i;
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
@@ -1093,6 +1100,12 @@ xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
}
static int
+xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
+{
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
+static int
xenUnifiedDomainPinVcpu (virDomainPtr dom, unsigned int vcpu,
unsigned char *cpumap, int maplen)
{
@@ -1126,11 +1139,17 @@ xenUnifiedDomainGetVcpus (virDomainPtr dom,
}
static int
-xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
+xenUnifiedDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i, ret;
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (priv->opened[i] && drivers[i]->domainGetMaxVcpus) {
ret = drivers[i]->domainGetMaxVcpus (dom);
@@ -1140,6 +1159,13 @@ xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
return -1;
}
+static int
+xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
+{
+ return xenUnifiedDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
static char *
xenUnifiedDomainDumpXML (virDomainPtr dom, int flags)
{
@@ -1951,8 +1977,8 @@ static virDriver xenUnifiedDriver = {
xenUnifiedDomainRestore, /* domainRestore */
xenUnifiedDomainCoreDump, /* domainCoreDump */
xenUnifiedDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ xenUnifiedDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ xenUnifiedDomainGetVcpusFlags, /* domainGetVcpusFlags */
xenUnifiedDomainPinVcpu, /* domainPinVcpu */
xenUnifiedDomainGetVcpus, /* domainGetVcpus */
xenUnifiedDomainGetMaxVcpus, /* domainGetMaxVcpus */
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index 753169c..7d4ab8d 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -40,6 +40,11 @@
#include "xenapi_driver_private.h"
#include "xenapi_utils.h"
+#define VIR_FROM_THIS VIR_FROM_XENAPI
+
+#define xenapiError(code, ...) \
+ virReportErrorHelper(NULL, VIR_FROM_THIS, code, __FILE__, \
+ __FUNCTION__, __LINE__, __VA_ARGS__)
/*
* getCapsObject
@@ -987,19 +992,26 @@ xenapiDomainGetInfo (virDomainPtr dom, virDomainInfoPtr info)
/*
- * xenapiDomainSetVcpus
+ * xenapiDomainSetVcpusFlags
*
* Sets the VCPUs on the domain
* Return 0 on success or -1 in case of error
*/
static int
-xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
+xenapiDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
+ unsigned int flags)
{
-
/* vm.set_vcpus_max */
xen_vm vm;
xen_vm_set *vms;
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
+
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
+ xenapiError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
if (vms->size != 1) {
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
@@ -1019,6 +1031,18 @@ xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
}
/*
+ * xenapiDomainSetVcpus
+ *
+ * Sets the VCPUs on the domain
+ * Return 0 on success or -1 in case of error
+ */
+static int
+xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
+{
+ return xenapiDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+}
+
+/*
* xenapiDomainPinVcpu
*
* Dynamically change the real CPUs which can be allocated to a virtual CPU
@@ -1140,19 +1164,26 @@ xenapiDomainGetVcpus (virDomainPtr dom,
}
/*
- * xenapiDomainGetMaxVcpus
+ * xenapiDomainGetVcpusFlags
*
*
- * Returns maximum number of Vcpus on success or -1 in case of error
+ * Returns Vcpus count on success or -1 in case of error
*/
static int
-xenapiDomainGetMaxVcpus (virDomainPtr dom)
+xenapiDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
{
xen_vm vm;
xen_vm_set *vms;
int64_t maxvcpu = 0;
enum xen_vm_power_state state;
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
+
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
+ xenapiError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
+ flags);
+ return -1;
+ }
+
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
if (vms->size != 1) {
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
@@ -1176,6 +1207,19 @@ xenapiDomainGetMaxVcpus (virDomainPtr dom)
}
/*
+ * xenapiDomainGetMaxVcpus
+ *
+ *
+ * Returns maximum number of Vcpus on success or -1 in case of error
+ */
+static int
+xenapiDomainGetMaxVcpus (virDomainPtr dom)
+{
+ return xenapiDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_MAXIMUM));
+}
+
+/*
* xenapiDomainDumpXML
*
*
@@ -1754,8 +1798,8 @@ static virDriver xenapiDriver = {
NULL, /* domainRestore */
NULL, /* domainCoreDump */
xenapiDomainSetVcpus, /* domainSetVcpus */
- NULL, /* domainSetVcpusFlags */
- NULL, /* domainGetVcpusFlags */
+ xenapiDomainSetVcpusFlags, /* domainSetVcpusFlags */
+ xenapiDomainGetVcpusFlags, /* domainGetVcpusFlags */
xenapiDomainPinVcpu, /* domainPinVcpu */
xenapiDomainGetVcpus, /* domainGetVcpus */
xenapiDomainGetMaxVcpus, /* domainGetMaxVcpus */
--
1.7.2.3

View File

@@ -0,0 +1,388 @@
From bf945ee97b72d3b0c4fc2da04530f5294f529d66 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 29 Sep 2010 15:20:23 -0600
Subject: [PATCH 08/15] vcpu: add virsh support
* tools/virsh.c (cmdSetvcpus): Add new flags. Let invalid
commands through to driver, to ease testing of hypervisor argument
validation.
(cmdMaxvcpus, cmdVcpucount): New commands.
(commands): Add new commands.
* tools/virsh.pod (setvcpus, vcpucount, maxvcpus): Document new
behavior.
---
tools/virsh.c | 247 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
tools/virsh.pod | 38 ++++++++-
2 files changed, 262 insertions(+), 23 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 4f8c495..7fb7fbd 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -2281,10 +2281,216 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
}
/*
+ * "maxvcpus" command
+ */
+static const vshCmdInfo info_maxvcpus[] = {
+ {"help", N_("connection vcpu maximum")},
+ {"desc", N_("Show maximum number of virtual CPUs for guests on this connection.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_maxvcpus[] = {
+ {"type", VSH_OT_STRING, 0, N_("domain type")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdMaxvcpus(vshControl *ctl, const vshCmd *cmd)
+{
+ char *type;
+ int vcpus;
+
+ type = vshCommandOptString(cmd, "type", NULL);
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return FALSE;
+
+ vcpus = virConnectGetMaxVcpus(ctl->conn, type);
+ if (vcpus < 0)
+ return FALSE;
+ vshPrint(ctl, "%d\n", vcpus);
+
+ return TRUE;
+}
+
+/*
+ * "vcpucount" command
+ */
+static const vshCmdInfo info_vcpucount[] = {
+ {"help", N_("domain vcpu counts")},
+ {"desc", N_("Returns the number of virtual CPUs used by the domain.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_vcpucount[] = {
+ {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
+ {"maximum", VSH_OT_BOOL, 0, N_("get maximum cap on vcpus")},
+ {"current", VSH_OT_BOOL, 0, N_("get current vcpu usage")},
+ {"config", VSH_OT_BOOL, 0, N_("get value to be used on next boot")},
+ {"live", VSH_OT_BOOL, 0, N_("get value from running domain")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdVcpucount(vshControl *ctl, const vshCmd *cmd)
+{
+ virDomainPtr dom;
+ int ret = TRUE;
+ int maximum = vshCommandOptBool(cmd, "maximum");
+ int current = vshCommandOptBool(cmd, "current");
+ int config = vshCommandOptBool(cmd, "config");
+ int live = vshCommandOptBool(cmd, "live");
+ bool all = maximum + current + config + live == 0;
+ int count;
+
+ if (maximum && current) {
+ vshError(ctl, "%s",
+ _("--maximum and --current cannot both be specified"));
+ return FALSE;
+ }
+ if (config && live) {
+ vshError(ctl, "%s",
+ _("--config and --live cannot both be specified"));
+ return FALSE;
+ }
+ /* We want one of each pair of mutually exclusive options; that
+ * is, use of flags requires exactly two options. */
+ if (maximum + current + config + live == 1) {
+ vshError(ctl,
+ _("when using --%s, either --%s or --%s must be specified"),
+ (maximum ? "maximum" : current ? "current"
+ : config ? "config" : "live"),
+ maximum + current ? "config" : "maximum",
+ maximum + current ? "live" : "current");
+ return FALSE;
+ }
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return FALSE;
+
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
+ return FALSE;
+
+ /* In all cases, try the new API first; if it fails because we are
+ * talking to an older client, try a fallback API before giving
+ * up. */
+ if (all || (maximum && config)) {
+ count = virDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_MAXIMUM |
+ VIR_DOMAIN_VCPU_CONFIG));
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
+ char *tmp;
+ char *xml = virDomainGetXMLDesc(dom, VIR_DOMAIN_XML_INACTIVE);
+ if (xml && (tmp = strstr(xml, "<vcpu"))) {
+ tmp = strchr(tmp, '>');
+ if (!tmp || virStrToLong_i(tmp + 1, &tmp, 10, &count) < 0)
+ count = -1;
+ }
+ VIR_FREE(xml);
+ }
+
+ if (count < 0) {
+ virshReportError(ctl);
+ ret = FALSE;
+ } else if (all) {
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("maximum"), _("config"),
+ count);
+ } else {
+ vshPrint(ctl, "%d\n", count);
+ }
+ virFreeError(last_error);
+ last_error = NULL;
+ }
+
+ if (all || (maximum && live)) {
+ count = virDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_MAXIMUM |
+ VIR_DOMAIN_VCPU_LIVE));
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
+ count = virDomainGetMaxVcpus(dom);
+ }
+
+ if (count < 0) {
+ virshReportError(ctl);
+ ret = FALSE;
+ } else if (all) {
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("maximum"), _("live"),
+ count);
+ } else {
+ vshPrint(ctl, "%d\n", count);
+ }
+ virFreeError(last_error);
+ last_error = NULL;
+ }
+
+ if (all || (current && config)) {
+ count = virDomainGetVcpusFlags(dom, VIR_DOMAIN_VCPU_CONFIG);
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
+ char *tmp, *end;
+ char *xml = virDomainGetXMLDesc(dom, VIR_DOMAIN_XML_INACTIVE);
+ if (xml && (tmp = strstr(xml, "<vcpu"))) {
+ end = strchr(tmp, '>');
+ if (end) {
+ *end = '\0';
+ tmp = strstr(tmp, "current=");
+ if (!tmp)
+ tmp = end + 1;
+ else {
+ tmp += strlen("current=");
+ tmp += *tmp == '\'' || *tmp == '"';
+ }
+ }
+ if (!tmp || virStrToLong_i(tmp, &tmp, 10, &count) < 0)
+ count = -1;
+ }
+ VIR_FREE(xml);
+ }
+
+ if (count < 0) {
+ virshReportError(ctl);
+ ret = FALSE;
+ } else if (all) {
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("current"), _("config"),
+ count);
+ } else {
+ vshPrint(ctl, "%d\n", count);
+ }
+ virFreeError(last_error);
+ last_error = NULL;
+ }
+
+ if (all || (current && live)) {
+ count = virDomainGetVcpusFlags(dom, VIR_DOMAIN_VCPU_LIVE);
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
+ virDomainInfo info;
+ if (virDomainGetInfo(dom, &info) == 0)
+ count = info.nrVirtCpu;
+ }
+
+ if (count < 0) {
+ virshReportError(ctl);
+ ret = FALSE;
+ } else if (all) {
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("current"), _("live"),
+ count);
+ } else {
+ vshPrint(ctl, "%d\n", count);
+ }
+ virFreeError(last_error);
+ last_error = NULL;
+ }
+
+ virDomainFree(dom);
+ return ret;
+}
+
+/*
* "vcpuinfo" command
*/
static const vshCmdInfo info_vcpuinfo[] = {
- {"help", N_("domain vcpu information")},
+ {"help", N_("detailed domain vcpu information")},
{"desc", N_("Returns basic information about the domain virtual CPUs.")},
{NULL, NULL}
};
@@ -2514,6 +2720,9 @@ static const vshCmdInfo info_setvcpus[] = {
static const vshCmdOptDef opts_setvcpus[] = {
{"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
{"count", VSH_OT_DATA, VSH_OFLAG_REQ, N_("number of virtual CPUs")},
+ {"maximum", VSH_OT_BOOL, 0, N_("set maximum limit on next boot")},
+ {"config", VSH_OT_BOOL, 0, N_("affect next boot")},
+ {"live", VSH_OT_BOOL, 0, N_("affect running domain")},
{NULL, 0, 0, NULL}
};
@@ -2522,8 +2731,13 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
int count;
- int maxcpu;
int ret = TRUE;
+ int maximum = vshCommandOptBool(cmd, "maximum");
+ int config = vshCommandOptBool(cmd, "config");
+ int live = vshCommandOptBool(cmd, "live");
+ int flags = ((maximum ? VIR_DOMAIN_VCPU_MAXIMUM : 0) |
+ (config ? VIR_DOMAIN_VCPU_CONFIG : 0) |
+ (live ? VIR_DOMAIN_VCPU_LIVE : 0));
if (!vshConnectionUsability(ctl, ctl->conn))
return FALSE;
@@ -2532,26 +2746,15 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
return FALSE;
count = vshCommandOptInt(cmd, "count", &count);
- if (count <= 0) {
- vshError(ctl, "%s", _("Invalid number of virtual CPUs."));
- virDomainFree(dom);
- return FALSE;
- }
-
- maxcpu = virDomainGetMaxVcpus(dom);
- if (maxcpu <= 0) {
- virDomainFree(dom);
- return FALSE;
- }
-
- if (count > maxcpu) {
- vshError(ctl, "%s", _("Too many virtual CPUs."));
- virDomainFree(dom);
- return FALSE;
- }
- if (virDomainSetVcpus(dom, count) != 0) {
- ret = FALSE;
+ if (!flags) {
+ if (virDomainSetVcpus(dom, count) != 0) {
+ ret = FALSE;
+ }
+ } else {
+ if (virDomainSetVcpusFlags(dom, count, flags) < 0) {
+ ret = FALSE;
+ }
}
virDomainFree(dom);
@@ -9642,6 +9845,7 @@ static const vshCmdDef commands[] = {
{"freecell", cmdFreecell, opts_freecell, info_freecell},
{"hostname", cmdHostname, NULL, info_hostname},
{"list", cmdList, opts_list, info_list},
+ {"maxvcpus", cmdMaxvcpus, opts_maxvcpus, info_maxvcpus},
{"migrate", cmdMigrate, opts_migrate, info_migrate},
{"migrate-setmaxdowntime", cmdMigrateSetMaxDowntime, opts_migrate_setmaxdowntime, info_migrate_setmaxdowntime},
@@ -9748,6 +9952,7 @@ static const vshCmdDef commands[] = {
{"vol-name", cmdVolName, opts_vol_name, info_vol_name},
{"vol-key", cmdVolKey, opts_vol_key, info_vol_key},
+ {"vcpucount", cmdVcpucount, opts_vcpucount, info_vcpucount},
{"vcpuinfo", cmdVcpuinfo, opts_vcpuinfo, info_vcpuinfo},
{"vcpupin", cmdVcpupin, opts_vcpupin, info_vcpupin},
{"version", cmdVersion, NULL, info_version},
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 943a563..dbcc680 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -443,7 +443,14 @@ Remove the managed save file for a domain if it exists. The next time the
domain is started it will not restore to its previous state but instead will
do a full boot.
-=item B<migrate> optional I<--live> I<--suspend> I<domain-id> I<desturi> I<migrateuri>
+=item B<maxvcpus> optional I<type>
+
+Provide the maximum number of virtual CPUs supported for a guest VM on
+this connection. If provided, the I<type> parameter must be a valid
+type attribute for the <domain> element of XML.
+
+=item B<migrate> optional I<--live> I<--suspend> I<domain-id> I<desturi>
+I<migrateuri>
Migrate domain to another host. Add --live for live migration; --suspend
leaves the domain paused on the destination host. The I<desturi> is the
@@ -521,7 +528,8 @@ Displays the domain memory parameters.
Allows you to set the domain memory parameters. LXC and QEMU/KVM supports these parameters.
-=item B<setvcpus> I<domain-id> I<count>
+=item B<setvcpus> I<domain-id> I<count> optional I<--maximum> I<--config>
+I<--live>
Change the number of virtual CPUs active in the guest domain. Note that
I<count> may be limited by host, hypervisor or limit coming from the
@@ -530,6 +538,17 @@ original description of domain.
For Xen, you can only adjust the virtual CPUs of a running domain if
the domain is paravirtualized.
+If I<--config> is specified, the change will only affect the next
+boot of a domain. If I<--live> is specified, the domain must be
+running, and the change takes place immediately. Both flags may be
+specified, if supported by the hypervisor. If neither flag is given,
+then I<--live> is implied and it is up to the hypervisor whether
+I<--config> is also implied.
+
+If I<--maximum> is specified, then you must use I<--config> and
+avoid I<--live>; this flag controls the maximum limit of vcpus that
+can be hot-plugged the next time the domain is booted.
+
=item B<shutdown> I<domain-id>
Gracefully shuts down a domain. This coordinates with the domain OS
@@ -568,6 +587,21 @@ is not available the processes will provide an exit code of 1.
Undefine the configuration for an inactive domain. Since it's not running
the domain name or UUID must be used as the I<domain-id>.
+=item B<vcpucount> I<domain-id> optional I<--maximum> I<--current>
+I<--config> I<--live>
+
+Print information about the virtual cpu counts of the given
+I<domain-id>. If no flags are specified, all possible counts are
+listed in a table; otherwise, the output is limited to just the
+numeric value requested.
+
+I<--maximum> requests information on the maximum cap of vcpus that a
+domain can add via B<setvcpus>, while I<--current> shows the current
+usage; these two flags cannot both be specified. I<--config>
+requests information regarding the next time the domain will be
+booted, while I<--live> requires a running domain and lists current
+values; these two flags cannot both be specified.
+
=item B<vcpuinfo> I<domain-id>
Returns basic information about the domain virtual CPUs, like the number of
--
1.7.2.3

View File

@@ -0,0 +1,519 @@
From 4617eedfaeee2b187a1f14691d25746ba3ff31b6 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 29 Sep 2010 10:20:07 -0600
Subject: [PATCH 07/15] vcpu: support maxvcpu in domain_conf
Although this patch adds a distinction between maximum vcpus and
current vcpus in the XML, the values should be identical for all
drivers at this point. Only in subsequent per-driver patches will
a distinction be made.
In general, virDomainGetInfo should prefer the current vcpus.
* src/conf/domain_conf.h (_virDomainDef): Adjust vcpus to unsigned
short, to match virDomainGetInfo limit. Add maxvcpus member.
* src/conf/domain_conf.c (virDomainDefParseXML)
(virDomainDefFormat): parse and print out vcpu details.
* src/xen/xend_internal.c (xenDaemonParseSxpr)
(xenDaemonFormatSxpr): Manage both vcpu numbers, and require them
to be equal for now.
* src/xen/xm_internal.c (xenXMDomainConfigParse)
(xenXMDomainConfigFormat): Likewise.
* src/phyp/phyp_driver.c (phypDomainDumpXML): Likewise.
* src/openvz/openvz_conf.c (openvzLoadDomains): Likewise.
* src/openvz/openvz_driver.c (openvzDomainDefineXML)
(openvzDomainCreateXML, openvzDomainSetVcpusInternal): Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainDumpXML, vboxDomainDefineXML):
Likewise.
* src/xenapi/xenapi_driver.c (xenapiDomainDumpXML): Likewise.
* src/xenapi/xenapi_utils.c (createVMRecordFromXml): Likewise.
* src/esx/esx_vmx.c (esxVMX_ParseConfig, esxVMX_FormatConfig):
Likewise.
* src/qemu/qemu_conf.c (qemuBuildSmpArgStr)
(qemuParseCommandLineSmp, qemuParseCommandLine): Likewise.
* src/qemu/qemu_driver.c (qemudDomainHotplugVcpus): Likewise.
* src/opennebula/one_conf.c (xmlOneTemplate): Likewise.
---
src/conf/domain_conf.c | 45 +++++++++++++++++++++++++++++++++++++------
src/conf/domain_conf.h | 3 +-
src/esx/esx_vmx.c | 24 ++++++++++++++--------
src/opennebula/one_conf.c | 9 +++++--
src/openvz/openvz_conf.c | 7 +++--
src/openvz/openvz_driver.c | 15 +++++++++----
src/phyp/phyp_driver.c | 2 +-
src/qemu/qemu_conf.c | 14 +++++++++++-
src/qemu/qemu_driver.c | 5 ++-
src/vbox/vbox_tmpl.c | 12 +++++++---
src/xen/xend_internal.c | 9 ++++---
src/xen/xm_internal.c | 11 ++++++---
src/xenapi/xenapi_driver.c | 2 +-
src/xenapi/xenapi_utils.c | 4 +-
14 files changed, 114 insertions(+), 48 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 78d7a6a..a997e06 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4203,6 +4203,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
int i, n;
long id = -1;
virDomainDefPtr def;
+ unsigned long count;
if (VIR_ALLOC(def) < 0) {
virReportOOMError();
@@ -4287,8 +4288,37 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
&def->mem.swap_hard_limit) < 0)
def->mem.swap_hard_limit = 0;
- if (virXPathULong("string(./vcpu[1])", ctxt, &def->vcpus) < 0)
- def->vcpus = 1;
+ n = virXPathULong("string(./vcpu[1])", ctxt, &count);
+ if (n == -2) {
+ virDomainReportError(VIR_ERR_XML_ERROR, "%s",
+ _("maximum vcpus must be an integer"));
+ goto error;
+ } else if (n < 0) {
+ def->maxvcpus = 1;
+ } else {
+ def->maxvcpus = count;
+ if (def->maxvcpus != count || count == 0) {
+ virDomainReportError(VIR_ERR_XML_ERROR,
+ _("invalid maxvcpus %lu"), count);
+ goto error;
+ }
+ }
+
+ n = virXPathULong("string(./vcpu[1]/@current)", ctxt, &count);
+ if (n == -2) {
+ virDomainReportError(VIR_ERR_XML_ERROR, "%s",
+ _("current vcpus must be an integer"));
+ goto error;
+ } else if (n < 0) {
+ def->vcpus = def->maxvcpus;
+ } else {
+ def->vcpus = count;
+ if (def->vcpus != count || count == 0 || def->maxvcpus < count) {
+ virDomainReportError(VIR_ERR_XML_ERROR,
+ _("invalid current vcpus %lu"), count);
+ goto error;
+ }
+ }
tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt);
if (tmp) {
@@ -6462,17 +6492,18 @@ char *virDomainDefFormat(virDomainDefPtr def,
if (def->cpumask[n] != 1)
allones = 0;
- if (allones) {
- virBufferAsprintf(&buf, " <vcpu>%lu</vcpu>\n", def->vcpus);
- } else {
+ virBufferAddLit(&buf, " <vcpu");
+ if (!allones) {
char *cpumask = NULL;
if ((cpumask =
virDomainCpuSetFormat(def->cpumask, def->cpumasklen)) == NULL)
goto cleanup;
- virBufferAsprintf(&buf, " <vcpu cpuset='%s'>%lu</vcpu>\n",
- cpumask, def->vcpus);
+ virBufferAsprintf(&buf, " cpuset='%s'", cpumask);
VIR_FREE(cpumask);
}
+ if (def->vcpus != def->maxvcpus)
+ virBufferAsprintf(&buf, " current='%u'", def->vcpus);
+ virBufferAsprintf(&buf, ">%u</vcpu>\n", def->maxvcpus);
if (def->os.bootloader) {
virBufferEscapeString(&buf, " <bootloader>%s</bootloader>\n",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index db09c23..5499f28 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -885,7 +885,8 @@ struct _virDomainDef {
unsigned long min_guarantee;
unsigned long swap_hard_limit;
} mem;
- unsigned long vcpus;
+ unsigned short vcpus;
+ unsigned short maxvcpus;
int cpumasklen;
char *cpumask;
diff --git a/src/esx/esx_vmx.c b/src/esx/esx_vmx.c
index 7ec8c0e..0a26614 100644
--- a/src/esx/esx_vmx.c
+++ b/src/esx/esx_vmx.c
@@ -50,7 +50,7 @@ def->uuid = <value> <=> uuid.bios = "<value>"
def->name = <value> <=> displayName = "<value>"
def->mem.max_balloon = <value kilobyte> <=> memsize = "<value megabyte>" # must be a multiple of 4, defaults to 32
def->mem.cur_balloon = <value kilobyte> <=> sched.mem.max = "<value megabyte>" # defaults to "unlimited" -> def->mem.cur_balloon = def->mem.max_balloon
-def->vcpus = <value> <=> numvcpus = "<value>" # must be 1 or a multiple of 2, defaults to 1
+def->maxvcpus = <value> <=> numvcpus = "<value>" # must be 1 or a multiple of 2, defaults to 1
def->cpumask = <uint list> <=> sched.cpu.affinity = "<uint list>"
@@ -1075,7 +1075,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
goto cleanup;
}
- def->vcpus = numvcpus;
+ def->maxvcpus = def->vcpus = numvcpus;
/* vmx:sched.cpu.affinity -> def:cpumask */
// VirtualMachine:config.cpuAffinity.affinitySet
@@ -2609,16 +2609,22 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
(int)(def->mem.cur_balloon / 1024));
}
- /* def:vcpus -> vmx:numvcpus */
- if (def->vcpus <= 0 || (def->vcpus % 2 != 0 && def->vcpus != 1)) {
+ /* def:maxvcpus -> vmx:numvcpus */
+ if (def->vcpus != def->maxvcpus) {
+ ESX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("No support for domain XML entry 'vcpu' attribute "
+ "'current'"));
+ goto cleanup;
+ }
+ if (def->maxvcpus <= 0 || (def->maxvcpus % 2 != 0 && def->maxvcpus != 1)) {
ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'vcpu' to be an unsigned "
"integer (1 or a multiple of 2) but found %d"),
- (int)def->vcpus);
+ def->maxvcpus);
goto cleanup;
}
- virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", (int)def->vcpus);
+ virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", def->maxvcpus);
/* def:cpumask -> vmx:sched.cpu.affinity */
if (def->cpumasklen > 0) {
@@ -2632,11 +2638,11 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
}
}
- if (sched_cpu_affinity_length < def->vcpus) {
+ if (sched_cpu_affinity_length < def->maxvcpus) {
ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML attribute 'cpuset' of entry "
- "'vcpu' to contains at least %d CPU(s)"),
- (int)def->vcpus);
+ "'vcpu' to contain at least %d CPU(s)"),
+ def->maxvcpus);
goto cleanup;
}
diff --git a/src/opennebula/one_conf.c b/src/opennebula/one_conf.c
index 44e28dc..2079c51 100644
--- a/src/opennebula/one_conf.c
+++ b/src/opennebula/one_conf.c
@@ -1,5 +1,7 @@
/*----------------------------------------------------------------------------------*/
-/* Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
+/*
+ * Copyright (C) 2010 Red Hat, Inc.
+ * Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
* Complutense de Madrid (dsa-research.org)
*
* This library is free software; you can redistribute it and/or
@@ -169,9 +171,10 @@ char* xmlOneTemplate(virDomainDefPtr def)
{
int i;
virBuffer buf= VIR_BUFFER_INITIALIZER;
- virBufferAsprintf(&buf,"#OpenNebula Template automatically generated by libvirt\nNAME = %s\nCPU = %ld\nMEMORY = %ld\n",
+ virBufferAsprintf(&buf,"#OpenNebula Template automatically generated "
+ "by libvirt\nNAME = %s\nCPU = %d\nMEMORY = %ld\n",
def->name,
- def->vcpus,
+ def->maxvcpus,
(def->mem.max_balloon)/1024);
/*Optional Booting OpenNebula Information:*/
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index ec11bbc..c84a6f3 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -507,11 +507,12 @@ int openvzLoadDomains(struct openvz_driver *driver) {
veid);
goto cleanup;
} else if (ret > 0) {
- dom->def->vcpus = strtoI(temp);
+ dom->def->maxvcpus = strtoI(temp);
}
- if (ret == 0 || dom->def->vcpus == 0)
- dom->def->vcpus = openvzGetNodeCPUs();
+ if (ret == 0 || dom->def->maxvcpus == 0)
+ dom->def->maxvcpus = openvzGetNodeCPUs();
+ dom->def->vcpus = dom->def->maxvcpus;
/* XXX load rest of VM config data .... */
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 0f3cfdf..b7c2754 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -925,8 +925,13 @@ openvzDomainDefineXML(virConnectPtr conn, const char *xml)
if (openvzDomainSetNetworkConfig(conn, vm->def) < 0)
goto cleanup;
- if (vm->def->vcpus > 0) {
- if (openvzDomainSetVcpusInternal(vm, vm->def->vcpus) < 0) {
+ if (vm->def->vcpus != vm->def->maxvcpus) {
+ openvzError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("current vcpu count must equal maximum"));
+ goto cleanup;
+ }
+ if (vm->def->maxvcpus > 0) {
+ if (openvzDomainSetVcpusInternal(vm, vm->def->maxvcpus) < 0) {
openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not set number of virtual cpu"));
goto cleanup;
@@ -1019,8 +1024,8 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
vm->def->id = vm->pid;
vm->state = VIR_DOMAIN_RUNNING;
- if (vm->def->vcpus > 0) {
- if (openvzDomainSetVcpusInternal(vm, vm->def->vcpus) < 0) {
+ if (vm->def->maxvcpus > 0) {
+ if (openvzDomainSetVcpusInternal(vm, vm->def->maxvcpus) < 0) {
openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not set number of virtual cpu"));
goto cleanup;
@@ -1249,7 +1254,7 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
return -1;
}
- vm->def->vcpus = nvcpus;
+ vm->def->maxvcpus = vm->def->vcpus = nvcpus;
return 0;
}
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index e284ae0..3d0ed11 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -3540,7 +3540,7 @@ phypDomainDumpXML(virDomainPtr dom, int flags)
goto err;
}
- if ((def.vcpus =
+ if ((def.maxvcpus = def.vcpus =
phypGetLparCPU(dom->conn, managed_system, dom->id)) == 0) {
VIR_ERROR0(_("Unable to determine domain's CPU."));
goto err;
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 83c0f83..38c8351 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -3711,7 +3711,7 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- virBufferAsprintf(&buf, "%lu", def->vcpus);
+ virBufferAsprintf(&buf, "%u", def->vcpus);
if ((qemuCmdFlags & QEMUD_CMD_FLAG_SMP_TOPOLOGY)) {
/* sockets, cores, and threads are either all zero
@@ -3722,11 +3722,18 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads);
}
else {
- virBufferAsprintf(&buf, ",sockets=%lu", def->vcpus);
+ virBufferAsprintf(&buf, ",sockets=%u", def->maxvcpus);
virBufferAsprintf(&buf, ",cores=%u", 1);
virBufferAsprintf(&buf, ",threads=%u", 1);
}
}
+ if (def->vcpus != def->maxvcpus) {
+ virBufferFreeAndReset(&buf);
+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("setting current vcpu count less than maximum is "
+ "not supported yet"));
+ return NULL;
+ }
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
@@ -6178,6 +6185,8 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
}
}
+ dom->maxvcpus = dom->vcpus;
+
if (sockets && cores && threads) {
virCPUDefPtr cpu;
@@ -6247,6 +6256,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
def->id = -1;
def->mem.cur_balloon = def->mem.max_balloon = 64 * 1024;
+ def->maxvcpus = 1;
def->vcpus = 1;
def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC;
def->features = (1 << VIR_DOMAIN_FEATURE_ACPI)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 7a2ea8f..c66dc04 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2425,8 +2425,9 @@ qemuDetectVcpuPIDs(struct qemud_driver *driver,
if (ncpupids != vm->def->vcpus) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
- _("got wrong number of vCPU pids from QEMU monitor. got %d, wanted %d"),
- ncpupids, (int)vm->def->vcpus);
+ _("got wrong number of vCPU pids from QEMU monitor. "
+ "got %d, wanted %d"),
+ ncpupids, vm->def->vcpus);
VIR_FREE(cpupids);
return -1;
}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 0cbe8b3..5a859a4 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -2028,7 +2028,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
def->mem.max_balloon = memorySize * 1024;
machine->vtbl->GetCPUCount(machine, &CPUCount);
- def->vcpus = CPUCount;
+ def->maxvcpus = def->vcpus = CPUCount;
/* Skip cpumasklen, cpumask, onReboot, onPoweroff, onCrash */
@@ -4598,11 +4598,15 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
def->mem.cur_balloon, (unsigned)rc);
}
- rc = machine->vtbl->SetCPUCount(machine, def->vcpus);
+ if (def->vcpus != def->maxvcpus) {
+ vboxError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("current vcpu count must equal maximum"));
+ }
+ rc = machine->vtbl->SetCPUCount(machine, def->maxvcpus);
if (NS_FAILED(rc)) {
vboxError(VIR_ERR_INTERNAL_ERROR,
- _("could not set the number of virtual CPUs to: %lu, rc=%08x"),
- def->vcpus, (unsigned)rc);
+ _("could not set the number of virtual CPUs to: %u, rc=%08x"),
+ def->maxvcpus, (unsigned)rc);
}
#if VBOX_API_VERSION < 3001
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 5ffc3c8..456b477 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -2190,7 +2190,8 @@ xenDaemonParseSxpr(virConnectPtr conn,
}
}
- def->vcpus = sexpr_int(root, "domain/vcpus");
+ def->maxvcpus = sexpr_int(root, "domain/vcpus");
+ def->vcpus = def->maxvcpus;
tmp = sexpr_node(root, "domain/on_poweroff");
if (tmp != NULL) {
@@ -5649,7 +5650,7 @@ xenDaemonFormatSxprInput(virDomainInputDefPtr input,
*
* Generate an SEXPR representing the domain configuration.
*
- * Returns the 0 terminatedi S-Expr string or NULL in case of error.
+ * Returns the 0 terminated S-Expr string or NULL in case of error.
* the caller must free() the returned value.
*/
char *
@@ -5666,7 +5667,7 @@ xenDaemonFormatSxpr(virConnectPtr conn,
virBufferAsprintf(&buf, "(name '%s')", def->name);
virBufferAsprintf(&buf, "(memory %lu)(maxmem %lu)",
def->mem.cur_balloon/1024, def->mem.max_balloon/1024);
- virBufferAsprintf(&buf, "(vcpus %lu)", def->vcpus);
+ virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
if (def->cpumask) {
char *ranges = virDomainCpuSetFormat(def->cpumask, def->cpumasklen);
@@ -5761,7 +5762,7 @@ xenDaemonFormatSxpr(virConnectPtr conn,
else
virBufferAsprintf(&buf, "(kernel '%s')", def->os.loader);
- virBufferAsprintf(&buf, "(vcpus %lu)", def->vcpus);
+ virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
for (i = 0 ; i < def->os.nBootDevs ; i++) {
switch (def->os.bootDevs[i]) {
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index 8e42a1c..bf20a64 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -678,6 +678,7 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
int i;
const char *defaultArch, *defaultMachine;
int vmlocaltime = 0;
+ unsigned long count;
if (VIR_ALLOC(def) < 0) {
virReportOOMError();
@@ -770,9 +771,11 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
def->mem.cur_balloon *= 1024;
def->mem.max_balloon *= 1024;
-
- if (xenXMConfigGetULong(conf, "vcpus", &def->vcpus, 1) < 0)
+ if (xenXMConfigGetULong(conf, "vcpus", &count, 1) < 0 ||
+ (unsigned short) count != count)
goto cleanup;
+ def->maxvcpus = count;
+ def->vcpus = def->maxvcpus;
if (xenXMConfigGetString(conf, "cpus", &str, NULL) < 0)
goto cleanup;
@@ -1650,7 +1653,7 @@ int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus) {
if (!(entry = virHashLookup(priv->configCache, filename)))
goto cleanup;
- entry->def->vcpus = vcpus;
+ entry->def->maxvcpus = entry->def->vcpus = vcpus;
/* If this fails, should we try to undo our changes to the
* in-memory representation of the config file. I say not!
@@ -2241,7 +2244,7 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn,
if (xenXMConfigSetInt(conf, "memory", def->mem.cur_balloon / 1024) < 0)
goto no_memory;
- if (xenXMConfigSetInt(conf, "vcpus", def->vcpus) < 0)
+ if (xenXMConfigSetInt(conf, "vcpus", def->maxvcpus) < 0)
goto no_memory;
if ((def->cpumask != NULL) &&
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index 7d4ab8d..5ccdede 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -1335,7 +1335,7 @@ xenapiDomainDumpXML (virDomainPtr dom, int flags ATTRIBUTE_UNUSED)
} else {
defPtr->mem.cur_balloon = memory;
}
- defPtr->vcpus = xenapiDomainGetMaxVcpus(dom);
+ defPtr->maxvcpus = defPtr->vcpus = xenapiDomainGetMaxVcpus(dom);
enum xen_on_normal_exit action;
if (xen_vm_get_actions_after_shutdown(session, &action, vm)) {
defPtr->onPoweroff = xenapiNormalExitEnum2virDomainLifecycle(action);
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
index be55491..a7e2a4b 100644
--- a/src/xenapi/xenapi_utils.c
+++ b/src/xenapi/xenapi_utils.c
@@ -510,8 +510,8 @@ createVMRecordFromXml (virConnectPtr conn, virDomainDefPtr def,
else
(*record)->memory_dynamic_max = (*record)->memory_static_max;
- if (def->vcpus) {
- (*record)->vcpus_max = (int64_t) def->vcpus;
+ if (def->maxvcpus) {
+ (*record)->vcpus_max = (int64_t) def->maxvcpus;
(*record)->vcpus_at_startup = (int64_t) def->vcpus;
}
if (def->onPoweroff)
--
1.7.2.3

View File

@@ -0,0 +1,197 @@
From 6c9e6b956453d0f0c4ff542ef8a184d663a39266 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Mon, 4 Oct 2010 17:01:12 -0600
Subject: [PATCH 09/15] vcpu: support all flags in test driver
* src/test/test_driver.c (testDomainGetVcpusFlags)
(testDomainSetVcpusFlags): Support all flags.
(testDomainUpdateVCPUs): Update cpu count here.
---
src/test/test_driver.c | 128 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 109 insertions(+), 19 deletions(-)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index b70c80d..a9d3d89 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -450,6 +450,7 @@ testDomainUpdateVCPUs(virConnectPtr conn,
goto cleanup;
}
+ dom->def->vcpus = nvcpus;
ret = 0;
cleanup:
return ret;
@@ -2032,12 +2033,51 @@ cleanup:
static int
testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
{
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
- testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ testConnPtr privconn = domain->conn->privateData;
+ virDomainObjPtr vm;
+ virDomainDefPtr def;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
+ /* Exactly one of LIVE or CONFIG must be set. */
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
+ testError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
return -1;
}
- return testGetMaxVCPUs(domain->conn, "test");
+ testDriverLock(privconn);
+ vm = virDomainFindByUUID(&privconn->domains, domain->uuid);
+ testDriverUnlock(privconn);
+
+ if (!vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(domain->uuid, uuidstr);
+ testError(VIR_ERR_NO_DOMAIN,
+ _("no domain with matching uuid '%s'"), uuidstr);
+ goto cleanup;
+ }
+
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
+ if (!virDomainObjIsActive(vm)) {
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain not active"));
+ goto cleanup;
+ }
+ def = vm->def;
+ } else {
+ def = vm->newDef ? vm->newDef : vm->def;
+ }
+
+ ret = (flags & VIR_DOMAIN_VCPU_MAXIMUM) ? def->maxvcpus : def->vcpus;
+
+cleanup:
+ if (vm)
+ virDomainObjUnlock(vm);
+ return ret;
}
static int
@@ -2053,21 +2093,30 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
{
testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom = NULL;
+ virDomainDefPtr def;
int ret = -1, maxvcpus;
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
- testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
+ * mixed with LIVE. */
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
+ testError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
+ return -1;
+ }
+ if (!nrCpus || (maxvcpus = testGetMaxVCPUs(domain->conn, NULL)) < nrCpus) {
+ testError(VIR_ERR_INVALID_ARG,
+ _("argument out of range: %d"), nrCpus);
return -1;
}
-
- /* Do this first before locking */
- maxvcpus = testDomainGetMaxVcpus(domain);
- if (maxvcpus < 0)
- goto cleanup;
testDriverLock(privconn);
- privdom = virDomainFindByName(&privconn->domains,
- domain->name);
+ privdom = virDomainFindByUUID(&privconn->domains, domain->uuid);
testDriverUnlock(privconn);
if (privdom == NULL) {
@@ -2075,13 +2124,17 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
goto cleanup;
}
- if (!virDomainObjIsActive(privdom)) {
+ if (!virDomainObjIsActive(privdom) && (flags & VIR_DOMAIN_VCPU_LIVE)) {
testError(VIR_ERR_OPERATION_INVALID,
"%s", _("cannot hotplug vcpus for an inactive domain"));
goto cleanup;
}
- /* We allow more cpus in guest than host */
+ /* We allow more cpus in guest than host, but not more than the
+ * domain's starting limit. */
+ if ((flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
+ VIR_DOMAIN_VCPU_LIVE && privdom->def->maxvcpus < maxvcpus)
+ maxvcpus = privdom->def->maxvcpus;
if (nrCpus > maxvcpus) {
testError(VIR_ERR_INVALID_ARG,
"requested cpu amount exceeds maximum (%d > %d)",
@@ -2089,12 +2142,49 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
goto cleanup;
}
- /* Update VCPU state for the running domain */
- if (testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0) < 0)
- goto cleanup;
+ switch (flags) {
+ case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG:
+ def = privdom->def;
+ if (virDomainObjIsActive(privdom)) {
+ if (privdom->newDef)
+ def = privdom->newDef;
+ else {
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("no persistent state"));
+ goto cleanup;
+ }
+ }
+ def->maxvcpus = nrCpus;
+ if (nrCpus < def->vcpus)
+ def->vcpus = nrCpus;
+ ret = 0;
+ break;
- privdom->def->vcpus = nrCpus;
- ret = 0;
+ case VIR_DOMAIN_VCPU_CONFIG:
+ def = privdom->def;
+ if (virDomainObjIsActive(privdom)) {
+ if (privdom->newDef)
+ def = privdom->newDef;
+ else {
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("no persistent state"));
+ goto cleanup;
+ }
+ }
+ def->vcpus = nrCpus;
+ ret = 0;
+ break;
+
+ case VIR_DOMAIN_VCPU_LIVE:
+ ret = testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0);
+ break;
+
+ case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
+ ret = testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0);
+ if (ret == 0 && privdom->newDef)
+ privdom->newDef->vcpus = nrCpus;
+ break;
+ }
cleanup:
if (privdom)
--
1.7.2.3

View File

@@ -0,0 +1,122 @@
From d67c189e80e6aef7adf13e5763365555cfc1a02a Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 29 Sep 2010 15:58:47 -0600
Subject: [PATCH 10/15] vcpu: improve vcpu support in qemu command line
* src/qemu/qemu_conf.c (qemuParseCommandLineSmp): Distinguish
between vcpus and maxvcpus, for new enough qemu.
* tests/qemuargv2xmltest.c (mymain): Add new test.
* tests/qemuxml2argvtest.c (mymain): Likewise.
* tests/qemuxml2xmltest.c (mymain): Likewise.
* tests/qemuxml2argvdata/qemuxml2argv-smp.args: New file.
---
src/qemu/qemu_conf.c | 13 +++++++++----
tests/qemuargv2xmltest.c | 2 ++
tests/qemuxml2argvdata/qemuxml2argv-smp.args | 1 +
tests/qemuxml2argvtest.c | 2 ++
tests/qemuxml2xmltest.c | 2 ++
5 files changed, 16 insertions(+), 4 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-smp.args
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 38c8351..ffe184b 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -3714,6 +3714,8 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
virBufferAsprintf(&buf, "%u", def->vcpus);
if ((qemuCmdFlags & QEMUD_CMD_FLAG_SMP_TOPOLOGY)) {
+ if (def->vcpus != def->maxvcpus)
+ virBufferAsprintf(&buf, ",maxcpus=%u", def->maxvcpus);
/* sockets, cores, and threads are either all zero
* or all non-zero, thus checking one of them is enough */
if (def->cpu && def->cpu->sockets) {
@@ -3726,12 +3728,12 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
virBufferAsprintf(&buf, ",cores=%u", 1);
virBufferAsprintf(&buf, ",threads=%u", 1);
}
- }
- if (def->vcpus != def->maxvcpus) {
+ } else if (def->vcpus != def->maxvcpus) {
virBufferFreeAndReset(&buf);
+ /* FIXME - consider hot-unplugging cpus after boot for older qemu */
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("setting current vcpu count less than maximum is "
- "not supported yet"));
+ "not supported with this QEMU binary"));
return NULL;
}
@@ -6153,6 +6155,7 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
unsigned int sockets = 0;
unsigned int cores = 0;
unsigned int threads = 0;
+ unsigned int maxcpus = 0;
int i;
int nkws;
char **kws;
@@ -6180,12 +6183,14 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
cores = n;
else if (STREQ(kws[i], "threads"))
threads = n;
+ else if (STREQ(kws[i], "maxcpus"))
+ maxcpus = n;
else
goto syntax;
}
}
- dom->maxvcpus = dom->vcpus;
+ dom->maxvcpus = maxcpus ? maxcpus : dom->vcpus;
if (sockets && cores && threads) {
virCPUDefPtr cpu;
diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
index 4f9ec84..d941b0b 100644
--- a/tests/qemuargv2xmltest.c
+++ b/tests/qemuargv2xmltest.c
@@ -221,6 +221,8 @@ mymain(int argc, char **argv)
DO_TEST("hostdev-pci-address");
+ DO_TEST("smp");
+
DO_TEST_FULL("restore-v1", 0, "stdio");
DO_TEST_FULL("restore-v2", 0, "stdio");
DO_TEST_FULL("restore-v2", 0, "exec:cat");
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smp.args b/tests/qemuxml2argvdata/qemuxml2argv-smp.args
new file mode 100644
index 0000000..3ec8f15
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-smp.args
@@ -0,0 +1 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1,maxcpus=2,sockets=2,cores=1,threads=1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 92d5b18..551d6c4 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -385,6 +385,8 @@ mymain(int argc, char **argv)
DO_TEST("qemu-ns", 0);
+ DO_TEST("smp", QEMUD_CMD_FLAG_SMP_TOPOLOGY);
+
free(driver.stateDir);
virCapabilitiesFree(driver.caps);
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index a33d435..cdc4390 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -180,6 +180,8 @@ mymain(int argc, char **argv)
DO_TEST("encrypted-disk");
DO_TEST("memtune");
+ DO_TEST("smp");
+
/* These tests generate different XML */
DO_TEST_DIFFERENT("balloon-device-auto");
DO_TEST_DIFFERENT("channel-virtio-auto");
--
1.7.2.3

View File

@@ -0,0 +1,169 @@
From 28a3605906385cba43df77051dc26e865f237b09 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 29 Sep 2010 17:40:45 -0600
Subject: [PATCH 11/15] vcpu: complete vcpu support in qemu driver
* src/qemu/qemu_driver.c (qemudDomainSetVcpusFlags)
(qemudDomainGetVcpusFlags): Support all feasible flag
combinations.
---
src/qemu/qemu_driver.c | 100 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 85 insertions(+), 15 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index c66dc04..a9e057f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5941,13 +5941,27 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
+ virDomainDefPtr def;
const char * type;
int max;
int ret = -1;
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
- qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
- flags);
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
+ * mixed with LIVE. */
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
+ qemuReportError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
+ return -1;
+ }
+ if (!nvcpus || (unsigned short) nvcpus != nvcpus) {
+ qemuReportError(VIR_ERR_INVALID_ARG,
+ _("argument out of range: %d"), nvcpus);
return -1;
}
@@ -5966,7 +5980,7 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
if (qemuDomainObjBeginJob(vm) < 0)
goto cleanup;
- if (!virDomainObjIsActive(vm)) {
+ if (!virDomainObjIsActive(vm) && (flags & VIR_DOMAIN_VCPU_LIVE)) {
qemuReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto endjob;
@@ -5985,6 +5999,11 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
goto endjob;
}
+ if ((flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
+ VIR_DOMAIN_VCPU_LIVE && vm->def->maxvcpus < max) {
+ max = vm->def->maxvcpus;
+ }
+
if (nvcpus > max) {
qemuReportError(VIR_ERR_INVALID_ARG,
_("requested vcpus is greater than max allowable"
@@ -5992,7 +6011,49 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
goto endjob;
}
- ret = qemudDomainHotplugVcpus(vm, nvcpus);
+ switch (flags) {
+ case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG:
+ def = vm->def;
+ if (virDomainObjIsActive(vm)) {
+ if (vm->newDef)
+ def = vm->newDef;
+ else{
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("no persistent state"));
+ goto endjob;
+ }
+ }
+ def->maxvcpus = nvcpus;
+ if (nvcpus < vm->newDef->vcpus)
+ def->vcpus = nvcpus;
+ ret = 0;
+ break;
+
+ case VIR_DOMAIN_VCPU_CONFIG:
+ def = vm->def;
+ if (virDomainObjIsActive(vm)) {
+ if (vm->newDef)
+ def = vm->newDef;
+ else {
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("no persistent state"));
+ goto endjob;
+ }
+ }
+ def->vcpus = nvcpus;
+ ret = 0;
+ break;
+
+ case VIR_DOMAIN_VCPU_LIVE:
+ ret = qemudDomainHotplugVcpus(vm, nvcpus);
+ break;
+
+ case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
+ ret = qemudDomainHotplugVcpus(vm, nvcpus);
+ if (ret == 0 && vm->newDef)
+ vm->newDef->vcpus = nvcpus;
+ break;
+ }
endjob:
if (qemuDomainObjEndJob(vm) == 0)
@@ -6171,12 +6232,17 @@ qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
- const char *type;
+ virDomainDefPtr def;
int ret = -1;
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
- qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
- flags);
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
+ /* Exactly one of LIVE or CONFIG must be set. */
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
+ qemuReportError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
return -1;
}
@@ -6192,14 +6258,18 @@ qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
goto cleanup;
}
- if (!(type = virDomainVirtTypeToString(vm->def->virtType))) {
- qemuReportError(VIR_ERR_INTERNAL_ERROR,
- _("unknown virt type in domain definition '%d'"),
- vm->def->virtType);
- goto cleanup;
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
+ if (!virDomainObjIsActive(vm)) {
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain not active"));
+ goto cleanup;
+ }
+ def = vm->def;
+ } else {
+ def = vm->newDef ? vm->newDef : vm->def;
}
- ret = qemudGetMaxVCPUs(NULL, type);
+ ret = (flags & VIR_DOMAIN_VCPU_MAXIMUM) ? def->maxvcpus : def->vcpus;
cleanup:
if (vm)
--
1.7.2.3

View File

@@ -0,0 +1,294 @@
From 0fab10e5ed971ab4f960a53e9640b0672f4b8ac3 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Tue, 5 Oct 2010 08:18:52 -0600
Subject: [PATCH 12/15] vcpu: improve vcpu support in xen command line
This patch series focuses on xendConfigVersion 2 (xm_internal) and 3
(xend_internal), but leaves out changes for xenapi drivers.
See this link for more details about vcpu_avail for xm usage.
http://lists.xensource.com/archives/html/xen-devel/2009-11/msg01061.html
This relies on the fact that def->maxvcpus can be at most 32 with xen.
* src/xen/xend_internal.c (xenDaemonParseSxpr)
(sexpr_to_xend_domain_info, xenDaemonFormatSxpr): Use vcpu_avail
when current vcpus is less than maximum.
* src/xen/xm_internal.c (xenXMDomainConfigParse)
(xenXMDomainConfigFormat): Likewise.
* tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr: New file.
* tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr: Likewise.
* tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml: Likewise.
* tests/xmconfigdata/test-paravirt-vcpu.cfg: Likewise.
* tests/xmconfigdata/test-paravirt-vcpu.xml: Likewise.
* tests/xml2sexprtest.c (mymain): New test.
* tests/sexpr2xmltest.c (mymain): Likewise.
* tests/xmconfigtest.c (mymain): Likewise.
---
src/xen/xend_internal.c | 19 +++++++++++++--
src/xen/xm_internal.c | 10 ++++++-
tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr | 1 +
tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml | 27 +++++++++++++++++++++
tests/sexpr2xmltest.c | 1 +
tests/xmconfigdata/test-paravirt-vcpu.cfg | 17 +++++++++++++
tests/xmconfigdata/test-paravirt-vcpu.xml | 32 ++++++++++++++++++++++++++
tests/xmconfigtest.c | 1 +
tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr | 1 +
tests/xml2sexprtest.c | 1 +
10 files changed, 105 insertions(+), 5 deletions(-)
create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
create mode 100644 tests/xmconfigdata/test-paravirt-vcpu.cfg
create mode 100644 tests/xmconfigdata/test-paravirt-vcpu.xml
create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 456b477..dfc6415 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -44,6 +44,7 @@
#include "xen_hypervisor.h"
#include "xs_internal.h" /* To extract VNC port & Serial console TTY */
#include "memory.h"
+#include "count-one-bits.h"
/* required for cpumap_t */
#include <xen/dom0_ops.h>
@@ -2191,7 +2192,9 @@ xenDaemonParseSxpr(virConnectPtr conn,
}
def->maxvcpus = sexpr_int(root, "domain/vcpus");
- def->vcpus = def->maxvcpus;
+ def->vcpus = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
+ if (!def->vcpus || def->maxvcpus < def->vcpus)
+ def->vcpus = def->maxvcpus;
tmp = sexpr_node(root, "domain/on_poweroff");
if (tmp != NULL) {
@@ -2433,7 +2436,7 @@ sexpr_to_xend_domain_info(virDomainPtr domain, const struct sexpr *root,
virDomainInfoPtr info)
{
const char *flags;
-
+ int vcpus;
if ((root == NULL) || (info == NULL))
return (-1);
@@ -2464,7 +2467,11 @@ sexpr_to_xend_domain_info(virDomainPtr domain, const struct sexpr *root,
info->state = VIR_DOMAIN_NOSTATE;
}
info->cpuTime = sexpr_float(root, "domain/cpu_time") * 1000000000;
- info->nrVirtCpu = sexpr_int(root, "domain/vcpus");
+ vcpus = sexpr_int(root, "domain/vcpus");
+ info->nrVirtCpu = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
+ if (!info->nrVirtCpu || vcpus < info->nrVirtCpu)
+ info->nrVirtCpu = vcpus;
+
return (0);
}
@@ -5668,6 +5675,9 @@ xenDaemonFormatSxpr(virConnectPtr conn,
virBufferAsprintf(&buf, "(memory %lu)(maxmem %lu)",
def->mem.cur_balloon/1024, def->mem.max_balloon/1024);
virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
+ /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is 32. */
+ if (def->vcpus < def->maxvcpus)
+ virBufferAsprintf(&buf, "(vcpu_avail %u)", (1U << def->vcpus) - 1);
if (def->cpumask) {
char *ranges = virDomainCpuSetFormat(def->cpumask, def->cpumasklen);
@@ -5763,6 +5773,9 @@ xenDaemonFormatSxpr(virConnectPtr conn,
virBufferAsprintf(&buf, "(kernel '%s')", def->os.loader);
virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
+ if (def->vcpus < def->maxvcpus)
+ virBufferAsprintf(&buf, "(vcpu_avail %u)",
+ (1U << def->vcpus) - 1);
for (i = 0 ; i < def->os.nBootDevs ; i++) {
switch (def->os.bootDevs[i]) {
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index bf20a64..f7121ab 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -46,6 +46,7 @@
#include "util.h"
#include "memory.h"
#include "logging.h"
+#include "count-one-bits.h"
#define VIR_FROM_THIS VIR_FROM_XENXM
@@ -772,10 +773,12 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
def->mem.max_balloon *= 1024;
if (xenXMConfigGetULong(conf, "vcpus", &count, 1) < 0 ||
- (unsigned short) count != count)
+ MAX_VIRT_CPUS < count)
goto cleanup;
def->maxvcpus = count;
- def->vcpus = def->maxvcpus;
+ if (xenXMConfigGetULong(conf, "vcpu_avail", &count, -1) < 0)
+ goto cleanup;
+ def->vcpus = MIN(count_one_bits(count), def->maxvcpus);
if (xenXMConfigGetString(conf, "cpus", &str, NULL) < 0)
goto cleanup;
@@ -2246,6 +2249,9 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn,
if (xenXMConfigSetInt(conf, "vcpus", def->maxvcpus) < 0)
goto no_memory;
+ if (def->vcpus < def->maxvcpus &&
+ xenXMConfigSetInt(conf, "vcpu_avail", (1U << def->vcpus) - 1) < 0)
+ goto no_memory;
if ((def->cpumask != NULL) &&
((cpus = virDomainCpuSetFormat(def->cpumask,
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
new file mode 100644
index 0000000..2be6822
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
@@ -0,0 +1 @@
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 4)(vcpu_avail 3)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
new file mode 100644
index 0000000..0d6bf11
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
@@ -0,0 +1,27 @@
+<domain type='xen' id='6'>
+ <name>pvtest</name>
+ <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
+ <memory>430080</memory>
+ <currentMemory>430080</currentMemory>
+ <vcpu current='2'>4</vcpu>
+ <os>
+ <type>linux</type>
+ <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+ <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+ <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>destroy</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='file'/>
+ <source file='/root/some.img'/>
+ <target dev='xvda' bus='xen'/>
+ </disk>
+ <console type='pty'>
+ <target type='xen' port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
index d62b44f..f100dd8 100644
--- a/tests/sexpr2xmltest.c
+++ b/tests/sexpr2xmltest.c
@@ -132,6 +132,7 @@ mymain(int argc, char **argv)
DO_TEST("pv-vfb-type-crash", "pv-vfb-type-crash", 3);
DO_TEST("fv-autoport", "fv-autoport", 3);
DO_TEST("pv-bootloader", "pv-bootloader", 1);
+ DO_TEST("pv-vcpus", "pv-vcpus", 1);
DO_TEST("disk-file", "disk-file", 2);
DO_TEST("disk-block", "disk-block", 2);
diff --git a/tests/xmconfigdata/test-paravirt-vcpu.cfg b/tests/xmconfigdata/test-paravirt-vcpu.cfg
new file mode 100644
index 0000000..24c78f4
--- /dev/null
+++ b/tests/xmconfigdata/test-paravirt-vcpu.cfg
@@ -0,0 +1,17 @@
+name = "XenGuest1"
+uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809"
+maxmem = 579
+memory = 394
+vcpus = 4
+vcpu_avail = 3
+bootloader = "/usr/bin/pygrub"
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+sdl = 0
+vnc = 1
+vncunused = 1
+vnclisten = "127.0.0.1"
+vncpasswd = "123poi"
+disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ]
+vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ]
diff --git a/tests/xmconfigdata/test-paravirt-vcpu.xml b/tests/xmconfigdata/test-paravirt-vcpu.xml
new file mode 100644
index 0000000..0be9456
--- /dev/null
+++ b/tests/xmconfigdata/test-paravirt-vcpu.xml
@@ -0,0 +1,32 @@
+<domain type='xen'>
+ <name>XenGuest1</name>
+ <uuid>c7a5fdb0-cdaf-9455-926a-d65c16db1809</uuid>
+ <memory>592896</memory>
+ <currentMemory>403456</currentMemory>
+ <vcpu current='2'>4</vcpu>
+ <bootloader>/usr/bin/pygrub</bootloader>
+ <os>
+ <type arch='i686' machine='xenpv'>linux</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <disk type='block' device='disk'>
+ <driver name='phy'/>
+ <source dev='/dev/HostVG/XenGuest1'/>
+ <target dev='xvda' bus='xen'/>
+ </disk>
+ <interface type='bridge'>
+ <mac address='00:16:3e:66:94:9c'/>
+ <source bridge='br0'/>
+ <script path='vif-bridge'/>
+ </interface>
+ <console type='pty'>
+ <target type='xen' port='0'/>
+ </console>
+ <input type='mouse' bus='xen'/>
+ <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' passwd='123poi'/>
+ </devices>
+</domain>
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
index 221b322..ea00747 100644
--- a/tests/xmconfigtest.c
+++ b/tests/xmconfigtest.c
@@ -210,6 +210,7 @@ mymain(int argc, char **argv)
DO_TEST("paravirt-new-pvfb-vncdisplay", 3);
DO_TEST("paravirt-net-e1000", 3);
DO_TEST("paravirt-net-vifname", 3);
+ DO_TEST("paravirt-vcpu", 2);
DO_TEST("fullvirt-old-cdrom", 1);
DO_TEST("fullvirt-new-cdrom", 2);
DO_TEST("fullvirt-utc", 2);
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
new file mode 100644
index 0000000..e886545
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
@@ -0,0 +1 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 4)(vcpu_avail 3)(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
\ No newline at end of file
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
index 77cf760..9cf8d39 100644
--- a/tests/xml2sexprtest.c
+++ b/tests/xml2sexprtest.c
@@ -118,6 +118,7 @@ mymain(int argc, char **argv)
DO_TEST("pv-vfb-new", "pv-vfb-new", "pvtest", 3);
DO_TEST("pv-vfb-new-auto", "pv-vfb-new-auto", "pvtest", 3);
DO_TEST("pv-bootloader", "pv-bootloader", "pvtest", 1);
+ DO_TEST("pv-vcpus", "pv-vcpus", "pvtest", 1);
DO_TEST("disk-file", "disk-file", "pvtest", 2);
DO_TEST("disk-block", "disk-block", "pvtest", 2);
--
1.7.2.3

View File

@@ -0,0 +1,216 @@
From 290ea33111be7bdf1f1381b90de33eb0e67c1a15 Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Wed, 6 Oct 2010 17:54:41 -0600
Subject: [PATCH 13/15] vcpu: improve support for getting xen vcpu counts
* src/xen/xen_driver.c (xenUnifiedDomainGetVcpusFlags): Support
more flags.
* src/xen/xend_internal.h (xenDaemonDomainGetVcpusFlags): New
prototype.
* src/xen/xm_internal.h (xenXMDomainGetVcpusFlags): Likewise.
* src/xen/xend_internal.c (virDomainGetVcpusFlags): New function.
* src/xen/xm_internal.c (xenXMDomainGetVcpusFlags): Likewise.
---
src/xen/xen_driver.c | 31 +++++++++++++++++++--------
src/xen/xend_internal.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++
src/xen/xend_internal.h | 2 +
src/xen/xm_internal.c | 47 ++++++++++++++++++++++++++++++++++++++++++
src/xen/xm_internal.h | 1 +
5 files changed, 124 insertions(+), 9 deletions(-)
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index d6c9c57..fe2ff86 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -1142,20 +1142,33 @@ static int
xenUnifiedDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
{
GET_PRIVATE(dom->conn);
- int i, ret;
+ int ret;
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
- xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
- flags);
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
+ /* Exactly one of LIVE or CONFIG must be set. */
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
return -1;
}
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->domainGetMaxVcpus) {
- ret = drivers[i]->domainGetMaxVcpus (dom);
- if (ret != 0) return ret;
- }
+ if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
+ ret = xenDaemonDomainGetVcpusFlags(dom, flags);
+ if (ret != -2)
+ return ret;
+ }
+ if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
+ ret = xenXMDomainGetVcpusFlags(dom, flags);
+ if (ret != -2)
+ return ret;
+ }
+ if (flags == (VIR_DOMAIN_VCPU_CONFIG | VIR_DOMAIN_VCPU_MAXIMUM))
+ return xenHypervisorGetVcpuMax(dom);
+ xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
}
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index dfc6415..3642296 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -3620,6 +3620,58 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
}
/**
+ * xenDaemonDomainGetVcpusFlags:
+ * @domain: pointer to domain object
+ * @flags: bitwise-ORd from virDomainVcpuFlags
+ *
+ * Extract information about virtual CPUs of domain according to flags.
+ *
+ * Returns the number of vcpus on success, -1 if an error message was
+ * issued, and -2 if the unified driver should keep trying.
+
+ */
+int
+xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
+{
+ struct sexpr *root;
+ int ret;
+ xenUnifiedPrivatePtr priv;
+
+ if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
+ virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ return -1;
+ }
+
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
+
+ /* If xendConfigVersion is 2, then we can only report _LIVE (and
+ * xm_internal reports _CONFIG). If it is 3, then _LIVE and
+ * _CONFIG are always in sync for a running system. */
+ if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+ return -2;
+ if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain not active"));
+ return -1;
+ }
+
+ root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
+ if (root == NULL)
+ return -1;
+
+ ret = sexpr_int(root, "domain/vcpus");
+ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM)) {
+ int vcpus = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
+ if (vcpus)
+ ret = MIN(vcpus, ret);
+ }
+ if (!ret)
+ ret = -2;
+ sexpr_free(root);
+ return ret;
+}
+
+/**
* virDomainGetVcpus:
* @domain: pointer to domain object, or NULL for Domain0
* @info: pointer to an array of virVcpuInfo structures (OUT)
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index c757716..923cebd 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -155,6 +155,8 @@ int xenDaemonDomainPinVcpu (virDomainPtr domain,
unsigned int vcpu,
unsigned char *cpumap,
int maplen);
+int xenDaemonDomainGetVcpusFlags (virDomainPtr domain,
+ unsigned int flags);
int xenDaemonDomainGetVcpus (virDomainPtr domain,
virVcpuInfoPtr info,
int maxinfo,
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index f7121ab..4ea4245 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -1671,6 +1671,53 @@ cleanup:
}
/**
+ * xenXMDomainGetVcpusFlags:
+ * @domain: pointer to domain object
+ * @flags: bitwise-ORd from virDomainVcpuFlags
+ *
+ * Extract information about virtual CPUs of domain according to flags.
+ *
+ * Returns the number of vcpus on success, -1 if an error message was
+ * issued, and -2 if the unified driver should keep trying.
+ */
+int
+xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
+{
+ xenUnifiedPrivatePtr priv;
+ const char *filename;
+ xenXMConfCachePtr entry;
+ int ret = -2;
+
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
+ xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ return -1;
+ }
+
+ if (domain->id != -1)
+ return -2;
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
+ xenXMError(VIR_ERR_OPERATION_FAILED, "%s", _("domain not active"));
+ return -1;
+ }
+
+ priv = domain->conn->privateData;
+ xenUnifiedLock(priv);
+
+ if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
+ goto cleanup;
+
+ if (!(entry = virHashLookup(priv->configCache, filename)))
+ goto cleanup;
+
+ ret = ((flags & VIR_DOMAIN_VCPU_MAXIMUM) ? entry->def->maxvcpus
+ : entry->def->vcpus);
+
+cleanup:
+ xenUnifiedUnlock(priv);
+ return ret;
+}
+
+/**
* xenXMDomainPinVcpu:
* @domain: pointer to domain object
* @vcpu: virtual CPU number (reserved)
diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
index 3ad3456..3295fbd 100644
--- a/src/xen/xm_internal.h
+++ b/src/xen/xm_internal.h
@@ -45,6 +45,7 @@ int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus);
+int xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags);
int xenXMDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
unsigned char *cpumap, int maplen);
virDomainPtr xenXMDomainLookupByName(virConnectPtr conn, const char *domname);
--
1.7.2.3

View File

@@ -0,0 +1,342 @@
From e443a003129a172a7332f3cb6e40b3c39363ed5e Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Thu, 14 Oct 2010 16:17:18 -0600
Subject: [PATCH 14/15] vcpu: improve support for setting xen vcpu counts
Tested with RHEL 5.6 (xendConfigVersion 2, where xend_internal
controls live domains and xm_internal controls inactive domains).
Hopefully this works with xendConfigVersion 3 (where xend_internal
controls everything).
* src/xen/xen_driver.c (xenUnifiedDomainSetVcpusFlags): Support
more flags.
(xenUnifiedGetMaxVcpus): Export.
* src/xen/xm_internal.h (xenXMDomainSetVcpusFlags): New prototype.
* src/xen/xend_internal.h (xenDaemonDomainSetVcpusFlags): Likewise.
* src/xen/xen_driver.h (xenUnifiedGetMaxVcpus): Likewise.
* src/xen/xm_internal.c (xenXMDomainSetVcpusFlags): New function.
* src/xen/xend_internal.c (xenDaemonDomainSetVcpusFlags): Likewise.
---
src/xen/xen_driver.c | 60 ++++++++++++++++++++++++---------
src/xen/xen_driver.h | 1 +
src/xen/xend_internal.c | 76 +++++++++++++++++++++++++++++++++++++++++++
src/xen/xend_internal.h | 3 ++
src/xen/xm_internal.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++
src/xen/xm_internal.h | 2 +
6 files changed, 208 insertions(+), 17 deletions(-)
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index fe2ff86..66e8518 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -508,7 +508,7 @@ xenUnifiedIsSecure(virConnectPtr conn)
return ret;
}
-static int
+int
xenUnifiedGetMaxVcpus (virConnectPtr conn, const char *type)
{
GET_PRIVATE(conn);
@@ -1073,36 +1073,62 @@ xenUnifiedDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
unsigned int flags)
{
GET_PRIVATE(dom->conn);
- int i;
+ int ret;
+
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
- xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
- flags);
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
+ * mixed with LIVE. */
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
+ _("invalid flag combination: (0x%x)"), flags);
+ return -1;
+ }
+ if (!nvcpus || (unsigned short) nvcpus != nvcpus) {
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
+ _("argument out of range: %d"), nvcpus);
return -1;
}
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (i != XEN_UNIFIED_HYPERVISOR_OFFSET &&
- priv->opened[i] &&
- drivers[i]->domainSetVcpus &&
- drivers[i]->domainSetVcpus (dom, nvcpus) == 0)
- return 0;
-
- if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET] &&
- drivers[XEN_UNIFIED_HYPERVISOR_OFFSET]->domainSetVcpus &&
- drivers[XEN_UNIFIED_HYPERVISOR_OFFSET]->domainSetVcpus (dom, nvcpus) == 0)
- return 0;
+ if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
+ ret = xenDaemonDomainSetVcpusFlags(dom, nvcpus, flags);
+ if (ret != -2)
+ return ret;
+ }
+ if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
+ ret = xenXMDomainSetVcpusFlags(dom, nvcpus, flags);
+ if (ret != -2)
+ return ret;
+ }
+ if (flags == VIR_DOMAIN_VCPU_LIVE)
+ return xenHypervisorSetVcpus(dom, nvcpus);
+ xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
}
static int
xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
{
- return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
+ unsigned int flags = VIR_DOMAIN_VCPU_LIVE;
+ xenUnifiedPrivatePtr priv;
+
+ /* Per the documented API, it is hypervisor-dependent whether this
+ * affects just _LIVE or _LIVE|_CONFIG; in xen's case, that
+ * depends on xendConfigVersion. */
+ if (dom) {
+ priv = dom->conn->privateData;
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
+ flags |= VIR_DOMAIN_VCPU_CONFIG;
+ }
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, flags);
}
static int
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
index 3e7c1d0..115a26a 100644
--- a/src/xen/xen_driver.h
+++ b/src/xen/xen_driver.h
@@ -220,6 +220,7 @@ int xenUnifiedRemoveDomainInfo(xenUnifiedDomainInfoListPtr info,
void xenUnifiedDomainEventDispatch (xenUnifiedPrivatePtr priv,
virDomainEventPtr event);
unsigned long xenUnifiedVersion(void);
+int xenUnifiedGetMaxVcpus(virConnectPtr conn, const char *type);
# ifndef PROXY
void xenUnifiedLock(xenUnifiedPrivatePtr priv);
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 3642296..55c2cc4 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -3535,6 +3535,82 @@ xenDaemonLookupByID(virConnectPtr conn, int id) {
}
/**
+ * xenDaemonDomainSetVcpusFlags:
+ * @domain: pointer to domain object
+ * @nvcpus: the new number of virtual CPUs for this domain
+ * @flags: bitwise-ORd from virDomainVcpuFlags
+ *
+ * Change virtual CPUs allocation of domain according to flags.
+ *
+ * Returns 0 on success, -1 if an error message was issued, and -2 if
+ * the unified driver should keep trying.
+ */
+int
+xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
+ unsigned int flags)
+{
+ char buf[VIR_UUID_BUFLEN];
+ xenUnifiedPrivatePtr priv;
+ int max;
+
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
+ || (vcpus < 1)) {
+ virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ return (-1);
+ }
+
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
+
+ if ((domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) ||
+ (flags & VIR_DOMAIN_VCPU_MAXIMUM))
+ return -2;
+
+ /* With xendConfigVersion 2, only _LIVE is supported. With
+ * xendConfigVersion 3, only _LIVE|_CONFIG is supported for
+ * running domains, or _CONFIG for inactive domains. */
+ if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
+ if (flags & VIR_DOMAIN_VCPU_CONFIG) {
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("Xend version does not support modifying "
+ "persistent config"));
+ return -1;
+ }
+ } else if (domain->id < 0) {
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain not running"));
+ return -1;
+ }
+ } else {
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) !=
+ (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) {
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("Xend only supports modifying both live and "
+ "persistent config"));
+ }
+ }
+
+ /* Unfortunately, xend_op does not validate whether this exceeds
+ * the maximum. */
+ flags |= VIR_DOMAIN_VCPU_MAXIMUM;
+ if ((max = xenDaemonDomainGetVcpusFlags(domain, flags)) < 0) {
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("could not determin max vcpus for the domain"));
+ return -1;
+ }
+ if (vcpus > max) {
+ virXendError(VIR_ERR_INVALID_ARG,
+ _("requested vcpus is greater than max allowable"
+ " vcpus for the domain: %d > %d"), vcpus, max);
+ return -1;
+ }
+
+ snprintf(buf, sizeof(buf), "%d", vcpus);
+ return xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
+ buf, NULL);
+}
+
+/**
* xenDaemonDomainSetVcpus:
* @domain: pointer to domain object
* @nvcpus: the new number of virtual CPUs for this domain
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index 923cebd..53f5d2c 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -151,6 +151,9 @@ int xenDaemonDomainUndefine(virDomainPtr domain);
int xenDaemonDomainSetVcpus (virDomainPtr domain,
unsigned int vcpus);
+int xenDaemonDomainSetVcpusFlags (virDomainPtr domain,
+ unsigned int vcpus,
+ unsigned int flags);
int xenDaemonDomainPinVcpu (virDomainPtr domain,
unsigned int vcpu,
unsigned char *cpumap,
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index 4ea4245..2b8e51e 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -1670,6 +1670,89 @@ cleanup:
return ret;
}
+/*
+ * xenXMDomainSetVcpusFlags:
+ * @domain: pointer to domain object
+ * @nvcpus: number of vcpus
+ * @flags: bitwise-ORd from virDomainVcpuFlags
+ *
+ * Change virtual CPUs allocation of domain according to flags.
+ *
+ * Returns 0 on success, -1 if an error message was issued, and -2 if
+ * the unified driver should keep trying.
+ */
+int
+xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
+ unsigned int flags)
+{
+ xenUnifiedPrivatePtr priv;
+ const char *filename;
+ xenXMConfCachePtr entry;
+ int ret = -1;
+ int max;
+
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
+ xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ return -1;
+ }
+ if (domain->conn->flags & VIR_CONNECT_RO) {
+ xenXMError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ return -1;
+ }
+ if (domain->id != -1)
+ return -2;
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
+ xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain is not running"));
+ return -1;
+ }
+
+ priv = domain->conn->privateData;
+ xenUnifiedLock(priv);
+
+ if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
+ goto cleanup;
+
+ if (!(entry = virHashLookup(priv->configCache, filename)))
+ goto cleanup;
+
+ /* Hypervisor maximum. */
+ if ((max = xenUnifiedGetMaxVcpus(domain->conn, NULL)) < 0) {
+ xenXMError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("could not determin max vcpus for the domain"));
+ goto cleanup;
+ }
+ /* Can't specify a current larger than stored maximum; but
+ * reducing maximum can silently reduce current. */
+ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM))
+ max = entry->def->maxvcpus;
+ if (vcpus > max) {
+ xenXMError(VIR_ERR_INVALID_ARG,
+ _("requested vcpus is greater than max allowable"
+ " vcpus for the domain: %d > %d"), vcpus, max);
+ goto cleanup;
+ }
+
+ if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
+ entry->def->maxvcpus = vcpus;
+ if (entry->def->vcpus > vcpus)
+ entry->def->vcpus = vcpus;
+ } else {
+ entry->def->vcpus = vcpus;
+ }
+
+ /* If this fails, should we try to undo our changes to the
+ * in-memory representation of the config file. I say not!
+ */
+ if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
+ goto cleanup;
+ ret = 0;
+
+cleanup:
+ xenUnifiedUnlock(priv);
+ return ret;
+}
+
/**
* xenXMDomainGetVcpusFlags:
* @domain: pointer to domain object
diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
index 3295fbd..a46e1a2 100644
--- a/src/xen/xm_internal.h
+++ b/src/xen/xm_internal.h
@@ -45,6 +45,8 @@ int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus);
+int xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
+ unsigned int flags);
int xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags);
int xenXMDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
unsigned char *cpumap, int maplen);
--
1.7.2.3

View File

@@ -0,0 +1,228 @@
From b013788742183afec9aa5068d3cfd185a3b5c62e Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Thu, 7 Oct 2010 08:59:27 -0600
Subject: [PATCH 15/15] vcpu: remove dead xen code
* src/xen/xen_driver.h (xenUnifiedDriver): Remove now-unused
domainGetMaxVcpus, domainSetVcpus.
* src/xen/proxy_internal.c (xenProxyDriver): Likewise.
* src/xen/xen_hypervisor.c (xenHypervisorDriver): Likewise.
* src/xen/xen_inotify.c (xenInotifyDriver): Likewise.
* src/xen/xend_internal.c (xenDaemonDriver)
(xenDaemonDomainSetVcpus): Likewise.
* src/xen/xm_internal.c (xenXMDriver, xenXMDomainSetVcpus):
Likewise.
* src/xen/xs_internal.c (xenStoreDriver): Likewise.
---
src/xen/proxy_internal.c | 2 --
src/xen/xen_driver.h | 4 +---
src/xen/xen_hypervisor.c | 2 --
src/xen/xen_inotify.c | 2 --
src/xen/xend_internal.c | 33 ---------------------------------
src/xen/xm_internal.c | 43 -------------------------------------------
src/xen/xs_internal.c | 2 --
7 files changed, 1 insertions(+), 87 deletions(-)
diff --git a/src/xen/proxy_internal.c b/src/xen/proxy_internal.c
index 335dfc4..4033727 100644
--- a/src/xen/proxy_internal.c
+++ b/src/xen/proxy_internal.c
@@ -67,10 +67,8 @@ struct xenUnifiedDriver xenProxyDriver = {
NULL, /* domainSave */
NULL, /* domainRestore */
NULL, /* domainCoreDump */
- NULL, /* domainSetVcpus */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
- NULL, /* domainGetMaxVcpus */
NULL, /* listDefinedDomains */
NULL, /* numOfDefinedDomains */
NULL, /* domainCreate */
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
index 115a26a..53f97d4 100644
--- a/src/xen/xen_driver.h
+++ b/src/xen/xen_driver.h
@@ -1,7 +1,7 @@
/*
* xen_unified.c: Unified Xen driver.
*
- * Copyright (C) 2007 Red Hat, Inc.
+ * Copyright (C) 2007, 2010 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
@@ -84,10 +84,8 @@ struct xenUnifiedDriver {
virDrvDomainSave domainSave;
virDrvDomainRestore domainRestore;
virDrvDomainCoreDump domainCoreDump;
- virDrvDomainSetVcpus domainSetVcpus;
virDrvDomainPinVcpu domainPinVcpu;
virDrvDomainGetVcpus domainGetVcpus;
- virDrvDomainGetMaxVcpus domainGetMaxVcpus;
virDrvListDefinedDomains listDefinedDomains;
virDrvNumOfDefinedDomains numOfDefinedDomains;
virDrvDomainCreate domainCreate;
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index 6246513..3797865 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -784,10 +784,8 @@ struct xenUnifiedDriver xenHypervisorDriver = {
NULL, /* domainSave */
NULL, /* domainRestore */
NULL, /* domainCoreDump */
- xenHypervisorSetVcpus, /* domainSetVcpus */
xenHypervisorPinVcpu, /* domainPinVcpu */
xenHypervisorGetVcpus, /* domainGetVcpus */
- xenHypervisorGetVcpuMax, /* domainGetMaxVcpus */
NULL, /* listDefinedDomains */
NULL, /* numOfDefinedDomains */
NULL, /* domainCreate */
diff --git a/src/xen/xen_inotify.c b/src/xen/xen_inotify.c
index d24b20f..9507061 100644
--- a/src/xen/xen_inotify.c
+++ b/src/xen/xen_inotify.c
@@ -71,10 +71,8 @@ struct xenUnifiedDriver xenInotifyDriver = {
NULL, /* domainSave */
NULL, /* domainRestore */
NULL, /* domainCoreDump */
- NULL, /* domainSetVcpus */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
- NULL, /* domainGetMaxVcpus */
NULL, /* listDefinedDomains */
NULL, /* numOfDefinedDomains */
NULL, /* domainCreate */
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 55c2cc4..b90c331 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -3611,37 +3611,6 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
}
/**
- * xenDaemonDomainSetVcpus:
- * @domain: pointer to domain object
- * @nvcpus: the new number of virtual CPUs for this domain
- *
- * Dynamically change the number of virtual CPUs used by the domain.
- *
- * Returns 0 for success; -1 (with errno) on error
- */
-int
-xenDaemonDomainSetVcpus(virDomainPtr domain, unsigned int vcpus)
-{
- char buf[VIR_UUID_BUFLEN];
- xenUnifiedPrivatePtr priv;
-
- if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
- || (vcpus < 1)) {
- virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
- return (-1);
- }
-
- priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
-
- if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
- return(-1);
-
- snprintf(buf, sizeof(buf), "%d", vcpus);
- return(xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
- buf, NULL));
-}
-
-/**
* xenDaemonDomainPinCpu:
* @domain: pointer to domain object
* @vcpu: virtual CPU number
@@ -5213,10 +5182,8 @@ struct xenUnifiedDriver xenDaemonDriver = {
xenDaemonDomainSave, /* domainSave */
xenDaemonDomainRestore, /* domainRestore */
xenDaemonDomainCoreDump, /* domainCoreDump */
- xenDaemonDomainSetVcpus, /* domainSetVcpus */
xenDaemonDomainPinVcpu, /* domainPinVcpu */
xenDaemonDomainGetVcpus, /* domainGetVcpus */
- NULL, /* domainGetMaxVcpus */
xenDaemonListDefinedDomains, /* listDefinedDomains */
xenDaemonNumOfDefinedDomains,/* numOfDefinedDomains */
xenDaemonDomainCreate, /* domainCreate */
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index 2b8e51e..430d40b 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -103,10 +103,8 @@ struct xenUnifiedDriver xenXMDriver = {
NULL, /* domainSave */
NULL, /* domainRestore */
NULL, /* domainCoreDump */
- xenXMDomainSetVcpus, /* domainSetVcpus */
xenXMDomainPinVcpu, /* domainPinVcpu */
NULL, /* domainGetVcpus */
- NULL, /* domainGetMaxVcpus */
xenXMListDefinedDomains, /* listDefinedDomains */
xenXMNumOfDefinedDomains, /* numOfDefinedDomains */
xenXMDomainCreate, /* domainCreate */
@@ -1630,47 +1628,6 @@ cleanup:
}
/*
- * Set the VCPU count in config
- */
-int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus) {
- xenUnifiedPrivatePtr priv;
- const char *filename;
- xenXMConfCachePtr entry;
- int ret = -1;
-
- if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
- xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
- return (-1);
- }
- if (domain->conn->flags & VIR_CONNECT_RO)
- return (-1);
- if (domain->id != -1)
- return (-1);
-
- priv = domain->conn->privateData;
- xenUnifiedLock(priv);
-
- if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
- goto cleanup;
-
- if (!(entry = virHashLookup(priv->configCache, filename)))
- goto cleanup;
-
- entry->def->maxvcpus = entry->def->vcpus = vcpus;
-
- /* If this fails, should we try to undo our changes to the
- * in-memory representation of the config file. I say not!
- */
- if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
- goto cleanup;
- ret = 0;
-
-cleanup:
- xenUnifiedUnlock(priv);
- return ret;
-}
-
-/*
* xenXMDomainSetVcpusFlags:
* @domain: pointer to domain object
* @nvcpus: number of vcpus
diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c
index 9296f25..a9817b1 100644
--- a/src/xen/xs_internal.c
+++ b/src/xen/xs_internal.c
@@ -67,10 +67,8 @@ struct xenUnifiedDriver xenStoreDriver = {
NULL, /* domainSave */
NULL, /* domainRestore */
NULL, /* domainCoreDump */
- NULL, /* domainSetVcpus */
NULL, /* domainPinVcpu */
NULL, /* domainGetVcpus */
- NULL, /* domainGetMaxVcpus */
NULL, /* listDefinedDomains */
NULL, /* numOfDefinedDomains */
NULL, /* domainCreate */
--
1.7.2.3

View File

@@ -23,13 +23,12 @@
<p>
The QEMU driver is capable of using the <code>cpuset</code>,
<code>cpu</code>, <code>cpuacct</code>, <code>memory</code>,
<code>blkio</code> and <code>devices</code> controllers.
None of them are compulsory. If any controller is not mounted,
the resource management APIs which use it will cease to operate.
It is possible to explicitly turn off use of a controller,
even when mounted, via the <code>/etc/libvirt/qemu.conf</code>
configuration file.
<code>cpu</code>, <code>memory</code>, <code>blkio</code> and
<code>devices</code> controllers. None of them are compulsory.
If any controller is not mounted, the resource management APIs
which use it will cease to operate. It is possible to explicitly
turn off use of a controller, even when mounted, via the
<code>/etc/libvirt/qemu.conf</code> configuration file.
</p>
<p>
@@ -76,13 +75,11 @@
<p>
The systemd convention is for the scope name of virtual machines / containers
to be of the general format <code>machine-$NAME.scope</code>. Libvirt forms the
<code>$NAME</code> part of this by concatenating the driver type with the id
and truncated name of the guest, and then escaping any systemd reserved
characters.
<code>$NAME</code> part of this by concatenating the driver type with the name
of the guest, and then escaping any systemd reserved characters.
So for a guest <code>demo</code> running under the <code>lxc</code> driver,
we get a <code>$NAME</code> of <code>lxc-12345-demo</code> which when escaped
is <code>lxc\x2d12345\x2ddemo</code>. So the complete scope name is
<code>machine-lxc\x2d12345\x2ddemo.scope</code>.
we get a <code>$NAME</code> of <code>lxc-demo</code> which when escaped is
<code>lxc\x2ddemo</code>. So the complete scope name is <code>machine-lxc\x2ddemo.scope</code>.
The scope names map directly to the cgroup directory names.
</p>
@@ -115,19 +112,19 @@ $ROOT
|
+- machine.slice
|
+- machine-qemu\x2d1\x2dvm1.scope
+- machine-qemu\x2dvm1.scope
| |
| +- emulator
| +- vcpu0
| +- vcpu1
|
+- machine-qemu\x2d2\x2dvm2.scope
+- machine-qemu\x2dvm2.scope
| |
| +- emulator
| +- vcpu0
| +- vcpu1
|
+- machine-qemu\x2d3\x2dvm3.scope
+- machine-qemu\x2dvm3.scope
| |
| +- emulator
| +- vcpu0
@@ -137,15 +134,15 @@ $ROOT
| |
| +- machine-engineering-testing.slice
| | |
| | +- machine-lxc\x2d11111\x2dcontainer1.scope
| | +- machine-lxc\x2dcontainer1.scope
| |
| +- machine-engineering-production.slice
| |
| +- machine-lxc\x2d22222\x2dcontainer2.scope
| +- machine-lxc\x2dcontainer2.scope
|
+- machine-marketing.slice
|
+- machine-lxc\x2d33333\x2dcontainer3.scope
+- machine-lxc\x2dcontainer3.scope
</pre>
<h3><a id="currentLayoutGeneric">Non-systemd cgroups layout</a></h3>
@@ -176,19 +173,19 @@ $ROOT
|
+- machine
|
+- qemu-1-vm1.libvirt-qemu
+- vm1.libvirt-qemu
| |
| +- emulator
| +- vcpu0
| +- vcpu1
|
+- qeme-2-vm2.libvirt-qemu
+- vm2.libvirt-qemu
| |
| +- emulator
| +- vcpu0
| +- vcpu1
|
+- qemu-3-vm3.libvirt-qemu
+- vm3.libvirt-qemu
| |
| +- emulator
| +- vcpu0
@@ -198,15 +195,15 @@ $ROOT
| |
| +- testing.partition
| | |
| | +- lxc-11111-container1.libvirt-lxc
| | +- container1.libvirt-lxc
| |
| +- production.partition
| |
| +- lxc-22222-container2.libvirt-lxc
| +- container2.libvirt-lxc
|
+- marketing.partition
|
+- lxc-33333-container3.libvirt-lxc
+- container3.libvirt-lxc
</pre>
<h2><a id="customPartiton">Using custom partitions</a></h2>

View File

@@ -8,7 +8,7 @@
<p>
The libvirt KVM/QEMU driver can manage any QEMU emulator from
version 1.5.0 or later.
version 0.12.0 or later.
</p>
<h2><a id="project">Project Links</a></h2>

View File

@@ -8,7 +8,7 @@
<p>
The libvirt libxl driver provides the ability to manage virtual
machines on any Xen release from 4.6.0 onwards.
machines on any Xen release from 4.4.0 onwards.
</p>
<h2><a id="project">Project Links</a></h2>

View File

@@ -74,14 +74,11 @@
is able to run. Possible values are:
<dl>
<dt><code>xen</code></dt>
<dd>for XEN PV</dd>
<dd>for XEN</dd>
<dt><code>linux</code></dt>
<dd>legacy alias for <code>xen</code></dd>
<dt><code>xenpvh</code></dt>
<dd>for XEN PVH</dd>
<dt><code>hvm</code></dt>
<dd>Unmodified operating system</dd>
@@ -94,27 +91,7 @@
</dd>
<dt><code>arch</code></dt>
<dd>This element brings some information on supported guest
architecture. Possible subelements are:
<dl>
<dt><code>wordsize</code></dt><dd>Size of CPU word in bits, for example 64.</dd>
<dt><code>emulator</code></dt><dd>Emulator (device model) path, for
use in <a href="formatdomain.html#elementEmulator">emulator</a>
element of domain XML.</dd>
<dt><code>loader</code></dt><dd>Loader path, for use in
<a href="formatdomain.html#elementLoader">loader</a> element of domain
XML.</dd>
<dt><code>machine</code></dt><dd>Machine type, for use in
<a href="formatdomain.html#attributeOSTypeMachine">machine</a>
attribute of os/type element in domain XML. For example Xen
supports <code>xenfv</code> for HVM, <code>xenpv</code> for
PV, or <code>xenpvh</code> for PVH.</dd>
<dt><code>domain</code></dt><dd>The <code>type</code> attribute of
this element specifies the type of hypervisor required to run the
domain. Use in <a href="formatdomain.html#attributeDomainType">type</a>
attribute of the domain root element.</dd>
</dl>
</dd>
<dd>This element brings some information on supported guest architecture.</dd>
<dt><code>features</code></dt>
<dd>This optional element encases possible features that can be used

View File

@@ -19,8 +19,7 @@
<p>
The root element required for all virtual machines is
named <code>domain</code>. It has two attributes, the
<a id="attributeDomainType"><code>type</code></a>
specifies the hypervisor used for running
<code>type</code> specifies the hypervisor used for running
the domain. The allowed values are driver specific, but
include "xen", "kvm", "qemu", "lxc" and "kqemu". The
second attribute is <code>id</code> which is a unique
@@ -149,11 +148,11 @@
(badly named!) refers to an OS that supports the Xen 3 hypervisor
guest ABI. There are also two optional attributes, <code>arch</code>
specifying the CPU architecture to virtualization,
and <a id="attributeOSTypeMachine"><code>machine</code></a> referring
to the machine type. The <a href="formatcaps.html">Capabilities XML</a>
and <code>machine</code> referring to the machine
type. The <a href="formatcaps.html">Capabilities XML</a>
provides details on allowed values for
these. <span class="since">Since 0.0.1</span></dd>
<dt><a id="elementLoader"><code>loader</code></a></dt>
<dt><code>loader</code></dt>
<dd>The optional <code>loader</code> tag refers to a firmware blob,
which is specified by absolute path,
used to assist the domain creation process. It is used by Xen
@@ -759,17 +758,7 @@
&lt;cachetune vcpus='0-3'&gt;
&lt;cache id='0' level='3' type='both' size='3' unit='MiB'/&gt;
&lt;cache id='1' level='3' type='both' size='3' unit='MiB'/&gt;
&lt;monitor level='3' vcpus='1'/&gt;
&lt;monitor level='3' vcpus='0-3'/&gt;
&lt;/cachetune&gt;
&lt;cachetune vcpus='4-5'&gt;
&lt;monitor level='3' vcpus='4'/&gt;
&lt;monitor level='3' vcpus='5'/&gt;
&lt;/cachetune&gt;
&lt;memorytune vcpus='0-3'&gt;
&lt;node id='0' bandwidth='60'/&gt;
&lt;/memorytune&gt;
&lt;/cputune&gt;
...
&lt;/domain&gt;
@@ -831,7 +820,7 @@
<dt><code>period</code></dt>
<dd>
The optional <code>period</code> element specifies the enforcement
interval (unit: microseconds). Within <code>period</code>, each vCPU of
interval(unit: microseconds). Within <code>period</code>, each vCPU of
the domain will not be allowed to consume more than <code>quota</code>
worth of runtime. The value should be in range [1000, 1000000]. A period
with value 0 means no value.
@@ -841,7 +830,7 @@
<dt><code>quota</code></dt>
<dd>
The optional <code>quota</code> element specifies the maximum allowed
bandwidth (unit: microseconds). A domain with <code>quota</code> as any
bandwidth(unit: microseconds). A domain with <code>quota</code> as any
negative value indicates that the domain has infinite bandwidth for
vCPU threads, which means that it is not bandwidth controlled. The value
should be in range [1000, 18446744073709551] or less than 0. A quota
@@ -874,8 +863,8 @@
<dt><code>emulator_period</code></dt>
<dd>
The optional <code>emulator_period</code> element specifies the enforcement
interval (unit: microseconds). Within <code>emulator_period</code>, emulator
threads (those excluding vCPUs) of the domain will not be allowed to consume
interval(unit: microseconds). Within <code>emulator_period</code>, emulator
threads(those excluding vCPUs) of the domain will not be allowed to consume
more than <code>emulator_quota</code> worth of runtime. The value should be
in range [1000, 1000000]. A period with value 0 means no value.
<span class="since">Only QEMU driver support since 0.10.0</span>
@@ -883,7 +872,7 @@
<dt><code>emulator_quota</code></dt>
<dd>
The optional <code>emulator_quota</code> element specifies the maximum
allowed bandwidth (unit: microseconds) for domain's emulator threads (those
allowed bandwidth(unit: microseconds) for domain's emulator threads(those
excluding vCPUs). A domain with <code>emulator_quota</code> as any negative
value indicates that the domain has infinite bandwidth for emulator threads
(those excluding vCPUs), which means that it is not bandwidth controlled.
@@ -895,7 +884,7 @@
<dt><code>iothread_period</code></dt>
<dd>
The optional <code>iothread_period</code> element specifies the
enforcement interval (unit: microseconds) for IOThreads. Within
enforcement interval(unit: microseconds) for IOThreads. Within
<code>iothread_period</code>, each IOThread of the domain will
not be allowed to consume more than <code>iothread_quota</code>
worth of runtime. The value should be in range [1000, 1000000].
@@ -905,7 +894,7 @@
<dt><code>iothread_quota</code></dt>
<dd>
The optional <code>iothread_quota</code> element specifies the maximum
allowed bandwidth (unit: microseconds) for IOThreads. A domain with
allowed bandwidth(unit: microseconds) for IOThreads. A domain with
<code>iothread_quota</code> as any negative value indicates that the
domain IOThreads have infinite bandwidth, which means that it is
not bandwidth controlled. The value should be in range
@@ -943,14 +932,12 @@
size and required granularity are reported as well. The required
attribute <code>vcpus</code> specifies to which vCPUs this allocation
applies. A vCPU can only be member of one <code>cachetune</code> element
allocation. The vCPUs specified by cachetune can be identical with those
in memorytune, however they are not allowed to overlap.
Supported subelements are:
allocations. Supported subelements are:
<dl>
<dt><code>cache</code></dt>
<dd>
This optional element controls the allocation of CPU cache and has
the following attributes:
This element controls the allocation of CPU cache and has the
following attributes:
<dl>
<dt><code>level</code></dt>
<dd>
@@ -984,59 +971,8 @@
</dd>
</dl>
</dd>
<dt><code>monitor</code><span class="since">Since 4.10.0</span></dt>
<dd>
The optional element <code>monitor</code> creates the cache
monitor(s) for current cache allocation and has the following
required attributes:
<dl>
<dt><code>level</code></dt>
<dd>
Host cache level the monitor belongs to.
</dd>
<dt><code>vcpus</code></dt>
<dd>
vCPU list the monitor applies to. A monitor's vCPU list
can only be the member(s) of the vCPU list of the associated
allocation. The default monitor has the same vCPU list as the
associated allocation. For non-default monitors, overlapping
vCPUs are not permitted.
</dd>
</dl>
</dd>
</dl>
</dd>
<dt><code>memorytune</code><span class="since">Since 4.7.0</span></dt>
<dd>
Optional <code>memorytune</code> element can control allocations for
memory bandwidth using the resctrl on the host. Whether or not is this
supported can be gathered from capabilities where some limitations like
minimum bandwidth and required granularity are reported as well. The
required attribute <code>vcpus</code> specifies to which vCPUs this
allocation applies. A vCPU can only be member of one
<code>memorytune</code> element allocation. The <code>vcpus</code> specified
by <code>memorytune</code> can be identical to those specified by
<code>cachetune</code>. However they are not allowed to overlap each other.
Supported subelements are:
<dl>
<dt><code>node</code></dt>
<dd>
This element controls the allocation of CPU memory bandwidth and has the
following attributes:
<dl>
<dt><code>id</code></dt>
<dd>
Host node id from which to allocate memory bandwidth.
</dd>
<dt><code>bandwidth</code></dt>
<dd>
The memory bandwidth to allocate from this node. The value by default
is in percentage.
</dd>
</dl>
</dd>
</dl>
</dd>
</dl>
@@ -1126,7 +1062,7 @@
&lt;/hugepages&gt;
&lt;nosharepages/&gt;
&lt;locked/&gt;
&lt;source type="file|anonymous|memfd"/&gt;
&lt;source type="file|anonymous"/&gt;
&lt;access mode="shared|private"/&gt;
&lt;allocation mode="immediate|ondemand"/&gt;
&lt;discard/&gt;
@@ -1177,17 +1113,13 @@
suitable for the specific environment at the same time to mitigate
the risks described above. <span class="since">Since 1.0.6</span></dd>
<dt><code>source</code></dt>
<dd>Using the <code>type</code> attribute, it's possible to
provide "file" to utilize file memorybacking or keep the
default "anonymous". <span class="since">Since 4.10.0</span>,
you may choose "memfd" backing. (QEMU/KVM only)</dd>
<dd>In this attribute you can switch to file memorybacking or keep
default anonymous.</dd>
<dt><code>access</code></dt>
<dd>Using the <code>mode</code> attribute, specify if the memory is
to be "shared" or "private". This can be overridden per numa node by
<code>memAccess</code>.</dd>
<dd>Specify if memory is shared or private. This can be overridden per
numa node by <code>memAccess</code></dd>
<dt><code>allocation</code></dt>
<dd>Using the <code>mode</code> attribute, specify when to allocate
the memory by supplying either "immediate" or "ondemand".</dd>
<dd>Specify when allocate the memory</dd>
<dt><code>discard</code></dt>
<dd>When set and supported by hypervisor the memory
content is discarded just before guest shuts down (or
@@ -2005,11 +1937,6 @@
&lt;synic state='on'/&gt;
&lt;reset state='on'/&gt;
&lt;vendor_id state='on' value='KVM Hv'/&gt;
&lt;frequencies state='on'/&gt;
&lt;reenlightenment state='on'/&gt;
&lt;tlbflush state='on'/&gt;
&lt;ipi state='on'/&gt;
&lt;evmcs state='on'/&gt;
&lt;/hyperv&gt;
&lt;kvm&gt;
&lt;hidden state='on'/&gt;
@@ -2081,7 +2008,7 @@
<tr>
<td>relaxed</td>
<td>Relax constraints on timers</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.0.0 (QEMU 2.0)</span></td>
</tr>
<tr>
@@ -2099,31 +2026,31 @@
<tr>
<td>vpindex</td>
<td>Virtual processor index</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
</tr>
<tr>
<td>runtime</td>
<td>Processor time spent on running guest code and on behalf of guest code</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
</tr>
<tr>
<td>synic</td>
<td>Enable Synthetic Interrupt Controller (SyNIC)</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
</tr>
<tr>
<td>stimer</td>
<td>Enable SyNIC timers</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
</tr>
<tr>
<td>reset</td>
<td>Enable hypervisor reset</td>
<td>on, off</td>
<td> on, off</td>
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
</tr>
<tr>
@@ -2132,36 +2059,6 @@
<td>on, off; value - string, up to 12 characters</td>
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
</tr>
<tr>
<td>frequencies</td>
<td>Expose frequency MSRs</td>
<td>on, off</td>
<td><span class="since">4.7.0 (QEMU 2.12)</span></td>
</tr>
<tr>
<td>reenlightenment</td>
<td>Enable re-enlightenment notification on migration</td>
<td>on, off</td>
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
</tr>
<tr>
<td>tlbflush</td>
<td>Enable PV TLB flush support</td>
<td>on, off</td>
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
</tr>
<tr>
<td>ipi</td>
<td>Enable PV IPI support</td>
<td>on, off</td>
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
</tr>
<tr>
<td>evmcs</td>
<td>Enable Enlightened VMCS</td>
<td>on, off</td>
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
</tr>
</table>
</dd>
<dt><code>pvspinlock</code></dt>
@@ -2295,18 +2192,6 @@
defined, the hypervisor default will be used.
<span class="since">Since 4.6.0</span> (QEMU/KVM only)
</dd>
<dt><code>nested-hv</code></dt>
<dd>Configure nested HV availability for pSeries guests. This needs to
be enabled from the host (L0) in order to be effective; having HV
support in the (L1) guest is very desiderable if it's planned to
run nested (L2) guests inside it, because it will result in those
nested guests having much better performance than they would when
using KVM PR or TCG.
Possible values for the <code>state</code> attribute are
<code>on</code> and <code>off</code>. If the attribute is not
defined, the hypervisor default will be used.
<span class="since">Since 4.10.0</span> (QEMU/KVM only)
</dd>
</dl>
<h3><a id="elementsTime">Time keeping</a></h3>
@@ -2675,7 +2560,7 @@
...</pre>
<dl>
<dt><a id="elementEmulator"><code>emulator</code></a></dt>
<dt><code>emulator</code></dt>
<dd>
The contents of the <code>emulator</code> element specify
the fully qualified path to the device model emulator binary.
@@ -2848,16 +2733,6 @@
&lt;/source&gt;
&lt;target dev='sdb' bus='scsi'/&gt;
&lt;/disk&gt;
&lt;disk type='network' device='lun'&gt;
&lt;driver name='qemu' type='raw'/&gt;
&lt;source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/0'&gt;
&lt;host name='example.com' port='3260'/&gt;
&lt;initiator&gt;
&lt;iqn name='iqn.2013-07.com.example:client'/&gt;
&lt;/initiator&gt;
&lt;/source&gt;
&lt;target dev='sdb' bus='scsi'/&gt;
&lt;/disk&gt;
&lt;disk type='volume' device='disk'&gt;
&lt;driver name='qemu' type='raw'/&gt;
&lt;source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/&gt;
@@ -3076,11 +2951,6 @@
is only valid when the specified storage volume is of 'file' or
'block' type).
<p>
The <code>source</code> element may also have the <code>index</code>
attribute with same semantics the <a href='#elementsDiskBackingStoreIndex'>
<code>index</code></a> attribute of <code>backingStore</code>
</p>
<p>
The <code>source</code> element may contain the following sub elements:
</p>
@@ -3220,15 +3090,6 @@
It's recommended to allow libvirt manage the persistent
reservations.
</dd>
<dt><code>initiator</code></dt>
<dd><span class="since">Since libvirt 4.7.0</span>, the
<code>initiator</code> element is supported for a disk
<code>type</code> "network" that is using a <code>source</code>
element with the <code>protocol</code> attribute "iscsi".
If present, the <code>initiator</code> element provides the
initiator IQN needed to access the source via mandatory
attribute <code>name</code>.
</dd>
</dl>
<p>
@@ -3289,7 +3150,7 @@
by the backing store, see disk type attribute above for more
details and possible values.
</dd>
<dt><code><a id="elementsDiskBackingStoreIndex">index</a></code></dt>
<dt><code>index</code></dt>
<dd>
This attribute is only valid in output (and ignored on input) and
it can be used to refer to a specific part of the disk chain when
@@ -3977,15 +3838,7 @@
(<span class="since">since 0.9.7, requires QEMU
0.13</span>). <code>multifunction</code> defaults to 'off',
but should be set to 'on' for function 0 of a slot that will
have multiple functions used.
(<span class="since">Since 4.10.0</span>), PCI address extensions
depending on the architecture are supported. For example, PCI
addresses for S390 guests will have a <code>zpci</code> child
element, with two attributes: <code>uid</code> (a hex value
between 0x0001 and 0xffff, inclusive), and <code>fid</code> (a
hex value between 0x00000000 and 0xffffffff, inclusive) used by
PCI devices on S390 for User-defined Identifiers and Function
Identifiers.<br/>
have multiple functions used.<br/>
<span class="since">Since 1.3.5</span>, some hypervisor
drivers may accept an <code>&lt;address type='pci'/&gt;</code>
element with no other attributes as an explicit request to
@@ -4532,8 +4385,8 @@
<p>
USB, PCI and SCSI devices attached to the host can be passed through
to the guest using the <code>hostdev</code> element.
<span class="since">since after 0.4.4 for USB, 0.6.0 for PCI (KVM only)
and 1.0.6 for SCSI (KVM only)</span>:
<span class="since">since after 0.4.4 for USB, 0.6.0 for PCI(KVM only)
and 1.0.6 for SCSI(KVM only)</span>:
</p>
<pre>
@@ -4676,9 +4529,8 @@
<dd>For mediated devices (<span class="since">Since 3.2.0</span>)
the <code>model</code> attribute specifies the device API which
determines how the host's vfio driver will expose the device to the
guest. Currently, <code>model='vfio-pci'</code>,
guest. Currently, <code>model='vfio-pci'</code> and
<code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
and <code>model='vfio-ap'</code> (<span class="since">Since 4.9.0</span>)
is supported. <a href="drvnodedev.html#MDEV">MDEV</a> section
provides more information about mediated devices as well as how to
create mediated devices on the host.
@@ -5228,6 +5080,7 @@
&lt;virtualport&gt;
&lt;parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&gt;
&lt;/virtualport&gt;
&lt;/interface&gt;
&lt;/devices&gt;
...</pre>
@@ -5720,7 +5573,8 @@ qemu-kvm -net nic,model=? /dev/null
&lt;host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/&gt;
&lt;guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/&gt;
&lt;/driver&gt;
</b>&lt;/interface&gt;
</b>
&lt;/interface&gt;
&lt;/devices&gt;
...</pre>
@@ -6222,7 +6076,7 @@ qemu-kvm -net nic,model=? /dev/null
<b>&lt;route family='ipv4' address='192.168.122.0' prefix='24' gateway='192.168.122.1'/&gt;</b>
<b>&lt;route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/&gt;</b>
&lt;/hostdev&gt;
...
&lt;/devices&gt;
...
</pre>
@@ -7074,8 +6928,7 @@ qemu-kvm -net nic,model=? /dev/null
is available) and <code>pci-serial</code> (usable whenever PCI support
is available); <span class="since">since 3.10.0</span>,
<code>spapr-vio-serial</code> (usable with ppc64/pseries guests),
<code>system-serial</code> (usable with aarch64/virt and,
<span class="since">since 4.7.0</span>, riscv/virt guests) and
<code>system-serial</code> (usable with aarch64/virt guests) and
<code>sclp-serial</code> (usable with s390 and s390x guests) are
available as well.
</p>
@@ -7089,11 +6942,10 @@ qemu-kvm -net nic,model=? /dev/null
target type); <code>pci-serial</code>
(usable with the <code>pci-serial</code> target type);
<code>spapr-vty</code> (usable with the <code>spapr-vio-serial</code>
target type); <code>pl011</code> and,
<span class="since">since 4.7.0</span>, <code>16550a</code> (usable
with the <code>system-serial</code> target type);
<code>sclpconsole</code> and <code>sclplmconsole</code> (usable with
the <code>sclp-serial</code> target type).
target type); <code>pl011</code> (usable with the
<code>system-serial</code> target type); <code>sclpconsole</code> and
<code>sclplmconsole</code> (usable with the <code>sclp-serial</code>
target type).
</p>
<p>
@@ -8242,9 +8094,7 @@ qemu-kvm -net nic,model=? /dev/null
<dt><code>shmem</code></dt>
<dd>
The <code>shmem</code> element has one mandatory attribute,
<code>name</code> to identify the shared memory. This attribute cannot
be directory specific to <code>.</code> or <code>..</code> as well as
it cannot involve path separator <code>/</code>.
<code>name</code> to identify the shared memory.
</dd>
<dt><code>model</code></dt>
<dd>

View File

@@ -393,7 +393,6 @@ table.acl {
table.acl tr, table.acl td {
padding: 0.3em;
border: 1px solid #ccc;
}
table.acl thead {

View File

@@ -33,329 +33,6 @@
-->
<libvirt>
<release version="v4.10.0" date="unreleased">
<section title="New features">
<change>
<summary>
qemu: Add Hyper-V PV IPI and Enlightened VMCS support
</summary>
<description>
The QEMU driver now has support for Hyper-V PV IPI and Enlightened VMCS
for Windows and Hyper-V guests.
</description>
</change>
<change>
<summary>
qemu: Added support for PCI devices on S390
</summary>
<description>
PCI addresses can now include the new zpci element which contains
uid (user-defined identifier) and fid (PCI function identifier)
attributes and makes the corresponding devices usable by S390
guests.
</description>
</change>
<change>
<summary>
Support changing IOThread polling parameters for a live guest
</summary>
<description>
Introduced virDomainSetIOThreadParams which allows dynamically
setting the IOThread polling parameters used by QEMU to manage
the thread polling interval and the algorithm for growth or
shrink of the polling time. The values only affect a running
guest with IOThreads. The guest's IOThread polling values can
be viewed via the domain statistics.
</description>
</change>
<change>
<summary>
Xen: Add support for PVH
</summary>
<description>
The libxl driver now supports Xen's PVH virtual machine type.
PVH machines are enabled with the new "xenpvh" OS type, e.g.
<code>&lt;os&gt;&lt;type&gt;xenpvh&lt;/type&gt;&lt;/os&gt;</code>
</description>
</change>
<change>
<summary>
qemu: Added support for CMT (Cache Monitoring Technology)
</summary>
<description>
Introduced cache monitoring using the <code>monitor</code>
element in <code>cachetune</code> for vCPU threads. Added
interfaces to get and display the cache utilization statistics
through the command 'virsh domstats' via the
virConnectGetAllDomainStats API.
</description>
</change>
<change>
<summary>
qemu: Add support for nested HV for pSeries guests
</summary>
<description>
Nested HV support makes it possible to run nested (L2) guests
with minimal performance penalty when compared to regular (L1)
guests on ppc64 hardware.
</description>
</change>
</section>
<section title="Improvements">
</section>
<section title="Bug fixes">
<change>
<summary>
Xen: Handle soft reset shutdown event
</summary>
<description>
The pvops Linux kernel uses soft reset to handle the crash
machine operation. The libxl driver now supports the soft
reset shutdown event, allowing proper crash handling of
pvops-based HVM domains.
</description>
</change>
</section>
</release>
<release version="v4.9.0" date="2018-11-04">
<section title="New features">
<change>
<summary>
util: Add cgroup v2 support
</summary>
<description>
cgroup v2 support has been implemented in libvirt, with both
"unified" (v2 only) and "hybrid" (v2 + v1) setups being usable;
existing "legacy" (v1 only) setups will keep working.
</description>
</change>
<change>
<summary>
qemu: Add vfio AP support
</summary>
<description>
The QEMU driver now has support to passthrough adjunct processors
into QEMU guests on S390.
</description>
</change>
</section>
<section title="Improvements">
<change>
<summary>
rpc: Make 'genprotocol' output reproducible
</summary>
<description>
This is another step towards making libvirt builds fully
reproducible.
</description>
</change>
</section>
<section title="Bug fixes">
<change>
<summary>
security: Fix permissions for UNIX sockets
</summary>
<description>
Since 4.5.0, libvirt is using FD passing to hand sockets over to
QEMU, which in theory removes the need for them to be accessible by
the user under which the QEMU process is running; however, other
processes such as vdsm need to access the sockets as well, which
means adjusting permissions is still necessary.
</description>
</change>
<change>
<summary>
cpu_map: Add Icelake model definitions
</summary>
<description>
These CPU models will be available in the upcoming 3.1.0 QEMU
release.
</description>
</change>
<change>
<summary>
util: Properly parse URIs with missing trailing slash
</summary>
<description>
Some storage URIs were not parsed correctly, in which case libvirt
ended up emitting XML that it would then refuse to parse back.
</description>
</change>
</section>
</release>
<release version="v4.8.0" date="2018-10-01">
<section title="New features">
<change>
<summary>
Xen: Support PM Suspend and Wakeup
</summary>
<description>
The libxl driver now supports the virDomainPMSuspendForDuration
and virDomainPMWakeup APIs.
</description>
</change>
</section>
<section title="Removed features">
<change>
<summary>
Xen: Drop support for Xen 4.4 and 4.5
</summary>
<description>
Xen 4.4 and 4.5 are no longer supported by the Xen community.
Drop support for these older versions and require Xen >= 4.6.
</description>
</change>
<change>
<summary>
nwfilter: Disallow binding creation in session mode
</summary>
<description>
Ensure that a filter binding creation is not attempted in session
mode and generates a proper error message.
</description>
</change>
</section>
<section title="Improvements">
<change>
<summary>
qemu: Retrieve guest hostname through QEMU Guest Agent command
</summary>
<description>
QEMU is now able to retrieve the guest hostname using a new QEMU-GA
command called 'guest-get-host-name'. Virsh users can execute
'domhostname' for QEMU driver for domains configured to use the
Guest Agent.
</description>
</change>
<change>
<summary>
virsh: Implement vsh-table in virsh and virsh-admin
</summary>
<description>
The new API fixes problems with table-alignment, making the tables
more readable and deals with unicode.
</description>
</change>
</section>
<section title="Bug fixes">
<change>
<summary>
storage: Allow inputvol to be encrypted
</summary>
<description>
When creating a storage volume based on another volume, the base
input volume is allowed to be encrypted.
</description>
</change>
<change>
<summary>
virsh: Require explicit --domain for domxml-to-native
</summary>
<description>
The --domain option for domxml-to-native virsh command has always
been documented as required, but commit v4.3.0-127-gd86531daf2
accidentally made it optional.
</description>
</change>
<change>
<summary>
lxc_monitor: Avoid AB / BA lock race
</summary>
<description>
A deadlock situation could occur when autostarting a LXC domain
'guest' due to two threads attempting to take opposing locks while
holding opposing locks (AB BA problem).
</description>
</change>
</section>
</release>
<release version="v4.7.0" date="2018-09-03">
<section title="New features">
<change>
<summary>
storage: add storage pool iscsi-direct
</summary>
<description>
Introduce a new storage pool backend that uses libiscsi instead of
iscsiadm. It support basic pool operations: checkPool and refreshPool.
</description>
</change>
<change>
<summary>
Add support for MBA (Memory Bandwidth Allocation technology)
</summary>
<description>
Domain vCPU threads can now have allocated some parts of host memory
bandwidth by using the <code>memorytune</code> element in <code>cputune</code>.
</description>
</change>
<change>
<summary>
qemu: Add support for RISC-V guests
</summary>
<description>
riscv32 and riscv64 guest architectures are now supported.
</description>
</change>
</section>
<section title="Improvements">
<change>
<summary>
qemu: Add ccw support for vhost-vsock
</summary>
<description>
Support the vhost-vsock-ccw device on S390.
</description>
</change>
<change>
<summary>
qemu: Make default machine type independent of QEMU
</summary>
<description>
We can't control whether or not QEMU will change its default
machine type in the future, or whether downstream distributions
will decide to compile out some machine types, so our only option
to provide a predictable behavior is taking care of the default
ourselves; management applications and users are encouraged to
explicitly pick a machine type when creating new guests.
</description>
</change>
<change>
<summary>
apparmor: Various improvements
</summary>
<description>
Rules have been added to deal with a number of scenarios that
didn't work correctly.
</description>
</change>
</section>
<section title="Bug fixes">
<change>
<summary>
esx: Truncate CPU model name
</summary>
<description>
Some CPU model names are too long to be stored into the
corresponding property, and should be explicitly truncated
to avoid unexpected behavior in users of the
<code>virNodeGetInfo()</code> API such as
<code>virsh nodeinfo</code>.
</description>
</change>
<change>
<summary>
utils: Remove arbitrary limit on socket_id/core_id
</summary>
<description>
Both values were assumed to be smaller than 4096, but in fact
they are entirely hardware-dependent and there have been reports
of machines presenting much bigger values, preventing libvirt from
working correctly; all such limits have now been removed.
</description>
</change>
</section>
</release>
<release version="v4.6.0" date="2018-08-06">
<section title="New features">
<change>

View File

@@ -39,7 +39,7 @@
<ul>
<li><a href="https://repology.org/metapackage/libvirt/versions">libvirt</a></li>
<li><a href="https://repology.org/metapackage/qemu/versions">qemu</a></li>
<li><a href="https://repology.org/metapackage/qemu-kvm/versions">qemu-kvm</a></li>
<li><a href="https://repology.org/metapackage/qemu/versions">qemu-kvm</a></li>
</ul>

View File

@@ -65,17 +65,6 @@
</data>
</choice>
</define>
<define name="uint32">
<choice>
<data type="string">
<param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param>
</data>
<data type="unsignedInt">
<param name="minInclusive">0</param>
<param name="maxInclusive">4294967295</param>
</data>
</choice>
</define>
<define name="UUID">
<choice>
@@ -122,22 +111,6 @@
</attribute>
</optional>
</define>
<define name="zpciaddress">
<optional>
<element name="zpci">
<optional>
<attribute name="uid">
<ref name="uint16"/>
</attribute>
</optional>
<optional>
<attribute name="fid">
<ref name="uint32"/>
</attribute>
</optional>
</element>
</optional>
</define>
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
<!-- The lowest bit of the 1st byte is the "multicast" bit. a -->
@@ -425,8 +398,6 @@
<value>ppc64</value>
<value>ppc64le</value>
<value>ppcemb</value>
<value>riscv32</value>
<value>riscv64</value>
<value>s390</value>
<value>s390x</value>
<value>sh4</value>

View File

@@ -51,9 +51,6 @@
<optional>
<ref name='cache'/>
</optional>
<optional>
<ref name='memory_bandwidth'/>
</optional>
<zeroOrMore>
<ref name='secmodel'/>
</zeroOrMore>
@@ -316,9 +313,6 @@
</zeroOrMore>
</element>
</oneOrMore>
<optional>
<ref name='cpuMonitor'/>
</optional>
</element>
</define>
@@ -332,68 +326,6 @@
</attribute>
</define>
<define name='memory_bandwidth'>
<element name='memory_bandwidth'>
<oneOrMore>
<element name='node'>
<attribute name='id'>
<ref name='unsignedInt'/>
</attribute>
<attribute name='cpus'>
<ref name='cpuset'/>
</attribute>
<zeroOrMore>
<element name='control'>
<attribute name='granularity'>
<ref name='unsignedInt'/>
</attribute>
<optional>
<attribute name='min'>
<ref name='unsignedInt'/>
</attribute>
</optional>
<attribute name='maxAllocs'>
<ref name='unsignedInt'/>
</attribute>
</element>
</zeroOrMore>
</element>
</oneOrMore>
<optional>
<ref name='cpuMonitor'/>
</optional>
</element>
</define>
<define name='cpuMonitor'>
<element name='monitor'>
<optional>
<attribute name='level'>
<ref name='unsignedInt'/>
</attribute>
<attribute name='reuseThreshold'>
<ref name='unsignedInt'/>
</attribute>
</optional>
<attribute name='maxMonitors'>
<ref name='unsignedInt'/>
</attribute>
<oneOrMore>
<element name='feature'>
<attribute name='name'>
<ref name='monitorFeature'/>
</attribute>
</element>
</oneOrMore>
</element>
</define>
<define name='monitorFeature'>
<data type='string'>
<param name='pattern'>(llc_|mbm_)[a-zA-Z0-9\-_]+</param>
</data>
</define>
<define name='guestcaps'>
<element name='guest'>
<ref name='ostype'/>

View File

@@ -340,15 +340,13 @@
<attribute name="machine">
<choice>
<value>xenpv</value>
<value>xenfv</value>
<value>xenpvh</value>
<value>xenner</value>
</choice>
</attribute>
</optional>
<choice>
<value>xen</value>
<value>linux</value>
<value>xenpvh</value>
</choice>
</element>
</define>
@@ -657,7 +655,6 @@
<choice>
<value>file</value>
<value>anonymous</value>
<value>memfd</value>
</choice>
</attribute>
</element>
@@ -959,7 +956,7 @@
<attribute name="vcpus">
<ref name='cpuset'/>
</attribute>
<zeroOrMore>
<oneOrMore>
<element name="cache">
<attribute name="id">
<ref name='unsignedInt'/>
@@ -983,33 +980,6 @@
</attribute>
</optional>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="monitor">
<attribute name="level">
<ref name='unsignedInt'/>
</attribute>
<attribute name="vcpus">
<ref name='cpuset'/>
</attribute>
</element>
</zeroOrMore>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="memorytune">
<attribute name="vcpus">
<ref name='cpuset'/>
</attribute>
<oneOrMore>
<element name="node">
<attribute name="id">
<ref name='unsignedInt'/>
</attribute>
<attribute name="bandwidth">
<ref name='unsignedInt'/>
</attribute>
</element>
</oneOrMore>
</element>
</zeroOrMore>
@@ -1558,14 +1528,6 @@
</optional>
</define>
<define name="diskSourceCommon">
<optional>
<attribute name="index">
<ref name="positiveInteger"/>
</attribute>
</optional>
</define>
<define name="diskSource">
<choice>
<ref name="diskSourceFile"/>
@@ -1589,7 +1551,6 @@
<ref name="absFilePath"/>
</attribute>
</optional>
<ref name="diskSourceCommon"/>
<optional>
<ref name="storageStartupPolicy"/>
</optional>
@@ -1614,7 +1575,6 @@
<ref name="absFilePath"/>
</attribute>
</optional>
<ref name="diskSourceCommon"/>
<optional>
<ref name="storageStartupPolicy"/>
</optional>
@@ -1640,7 +1600,6 @@
<attribute name="dir">
<ref name="absFilePath"/>
</attribute>
<ref name="diskSourceCommon"/>
<optional>
<ref name="storageStartupPolicy"/>
</optional>
@@ -1694,7 +1653,6 @@
<attribute name="protocol">
<value>rbd</value>
</attribute>
<ref name="diskSourceCommon"/>
<optional>
<attribute name="name"/>
</optional>
@@ -1734,7 +1692,6 @@
<value>iscsi</value>
</attribute>
<attribute name="name"/>
<ref name="diskSourceCommon"/>
<ref name="diskSourceNetworkHost"/>
<optional>
<ref name="diskAuth"/>
@@ -1742,9 +1699,6 @@
<optional>
<ref name="encryption"/>
</optional>
<optional>
<ref name="initiatorinfo"/>
</optional>
</element>
</define>
@@ -1757,7 +1711,6 @@
</choice>
</attribute>
<attribute name="name"/>
<ref name="diskSourceCommon"/>
<ref name="diskSourceNetworkHost"/>
<optional>
<ref name="encryption"/>
@@ -1776,7 +1729,6 @@
</choice>
</attribute>
<attribute name="name"/>
<ref name="diskSourceCommon"/>
<ref name="diskSourceNetworkHost"/>
<optional>
<ref name="encryption"/>
@@ -1797,7 +1749,6 @@
<ref name="virYesNo"/>
</attribute>
</optional>
<ref name="diskSourceCommon"/>
<ref name="diskSourceNetworkHost"/>
<optional>
<ref name="encryption"/>
@@ -1811,7 +1762,6 @@
<value>gluster</value>
</attribute>
<attribute name="name"/>
<ref name="diskSourceCommon"/>
<oneOrMore>
<ref name="diskSourceNetworkHost"/>
</oneOrMore>
@@ -1829,7 +1779,6 @@
</choice>
</attribute>
<attribute name="name"/>
<ref name="diskSourceCommon"/>
<optional>
<attribute name="tls">
<ref name="virYesNo"/>
@@ -1874,7 +1823,6 @@
</choice>
</attribute>
</optional>
<ref name="diskSourceCommon"/>
<optional>
<ref name="storageStartupPolicy"/>
</optional>
@@ -3746,7 +3694,6 @@
<value>pci-serial</value>
<value>spapr-vty</value>
<value>pl011</value>
<value>16550a</value>
<value>sclpconsole</value>
<value>sclplmconsole</value>
</choice>
@@ -4631,7 +4578,6 @@
<choice>
<value>vfio-pci</value>
<value>vfio-ccw</value>
<value>vfio-ap</value>
</choice>
</attribute>
<optional>
@@ -4978,11 +4924,6 @@
<ref name="featurestate"/>
</element>
</optional>
<optional>
<element name="nested-hv">
<ref name="featurestate"/>
</element>
</optional>
</interleave>
</element>
</optional>
@@ -5239,7 +5180,6 @@
<value>pci</value>
</attribute>
<ref name="pciaddress"/>
<ref name="zpciaddress"/>
</group>
<group>
<attribute name="type">
@@ -5773,31 +5713,6 @@
</optional>
</element>
</optional>
<optional>
<element name="frequencies">
<ref name="featurestate"/>
</element>
</optional>
<optional>
<element name="reenlightenment">
<ref name="featurestate"/>
</element>
</optional>
<optional>
<element name="tlbflush">
<ref name="featurestate"/>
</element>
</optional>
<optional>
<element name="ipi">
<ref name="featurestate"/>
</element>
</optional>
<optional>
<element name="evmcs">
<ref name="featurestate"/>
</element>
</optional>
</interleave>
</element>
</define>

View File

@@ -39,17 +39,6 @@
</element>
</define>
<define name='initiatorinfo'>
<element name='initiator'>
<element name='iqn'>
<attribute name='name'>
<text/>
</attribute>
<empty/>
</element>
</element>
</define>
<define name="reconnect">
<element name="reconnect">
<attribute name="enabled">

View File

@@ -18,7 +18,6 @@
<ref name='poollogical'/>
<ref name='pooldisk'/>
<ref name='pooliscsi'/>
<ref name='pooliscsidirect'/>
<ref name='poolscsi'/>
<ref name='poolmpath'/>
<ref name='poolrbd'/>
@@ -102,19 +101,6 @@
</interleave>
</define>
<define name='pooliscsidirect'>
<attribute name='type'>
<value>iscsi-direct</value>
</attribute>
<interleave>
<ref name='commonmetadata'/>
<optional>
<ref name='sizing'/>
</optional>
<ref name='sourceiscsidirect'/>
</interleave>
</define>
<define name='poolscsi'>
<attribute name='type'>
<value>scsi</value>
@@ -328,11 +314,14 @@
</element>
</define>
<define name='sourceinfodeviscsidirect'>
<element name='device'>
<attribute name='path'>
<ref name='IscsiQualifiedName'/>
</attribute>
<define name='initiatorinfo'>
<element name='initiator'>
<element name='iqn'>
<attribute name='name'>
<text/>
</attribute>
<empty/>
</element>
</element>
</define>
@@ -606,19 +595,6 @@
</element>
</define>
<define name='sourceiscsidirect'>
<element name='source'>
<interleave>
<ref name='sourceinfohost'/>
<ref name='sourceinfodeviscsidirect'/>
<ref name='initiatorinfo'/>
<optional>
<ref name='sourceinfoauth'/>
</optional>
</interleave>
</element>
</define>
<define name='sourcescsi'>
<element name='source'>
<interleave>

View File

@@ -139,7 +139,6 @@
</element>
<ref name='format'/>
<ref name='permissions'/>
<ref name='timestamps'/>
</interleave>
</element>
</define>

View File

@@ -310,7 +310,7 @@
on the size and placement of volumes. The 'free extents'
information will detail the regions which are available for creating
new volumes. A volume cannot span across 2 different free extents.
It will default to using <code>dos</code> as the pool source format.
It will default to using <code>msdos</code> as the pool source format.
</p>
<h3>Example pool input</h3>
@@ -357,10 +357,8 @@
</li>
</ul>
<p>
The formats <code>dos</code> ("msdos" in parted terminology,
good for BIOS systems) or <code>gpt</code> (good for UEFI
systems) are recommended for best portability - the latter is
needed for disks larger than 2TB.
The <code>dos</code> or <code>gpt</code> formats are recommended for
best portability - the latter is needed for disks larger than 2TB.
</p>
<h3>Valid volume format types</h3>
@@ -435,36 +433,6 @@
The iSCSI volume pool does not use the volume format type element.
</p>
<h2><a id="StorageBackendISCSIDirect">iSCSI direct pool</a></h2>
<p>
This is a variant of the iSCSI pool. Instead of unsing iscsiadm, it uses
libiscsi.
It require a host, a path which is the target iqn and an initiator iqn.
</p>
<h3>Example pool input</h3>
<pre>
&lt;pool type="iscsi-direct"&gt;
&lt;name&gt;virtimages&lt;/name&gt;
&lt;source&gt;
&lt;host name="iscsi.example.com"/&gt;
&lt;device path="iqn.2013-06.com.example:iscsi-pool"/&gt;
&lt;initiator&gt;
&lt;iqn name="iqn.2013-06.com.example:iscsi-initiator"/&gt;
&lt;/initiator&gt;
&lt;/source&gt;
&lt;/pool&gt;</pre>
<h3>Valid pool format types</h3>
<p>
The iSCSI volume pool does not use the pool format type element.
</p>
<h3>Valid volume format types</h3>
<p>
The iSCSI volume pool does not use the volume format type element.
</p>
<h2><a id="StorageBackendSCSI">SCSI pool</a></h2>
<p>
This provides a pool based on a SCSI HBA. Volumes are preexisting SCSI

View File

@@ -94,11 +94,7 @@ install-apparmor-local:
$(MKDIR_P) "$(APPARMOR_LOCAL_DIR)"
echo "# Site-specific additions and overrides for \
'usr.lib.libvirt.virt-aa-helper'" \
>"$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper"
uninstall-apparmor-local:
rm -f "$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper"
rmdir "$(APPARMOR_LOCAL_DIR)" || :
>$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper
INSTALL_DATA_LOCAL += install-apparmor-local
UNINSTALL_LOCAL += uninstall-apparmor-local

View File

@@ -180,19 +180,6 @@
# for rbd
/etc/ceph/ceph.conf r,
# Various functions will need to enumerate /tmp (e.g. ceph), allow the base
# dir and a few known functions like samba support.
# We want to avoid to give blanket rw permission to everything under /tmp,
# users are expected to add site specific addons for more uncommon cases.
# Qemu processes usually all run as the same users, so the "owner"
# restriction prevents access to other services files, but not across
# different instances.
# This is a tradeoff between usability and security - if paths would be more
# predictable that would be preferred - at least for write rules we would
# want more unique paths per rule.
/{,var/}tmp/ r,
owner /{,var/}tmp/**/ r,
# for file-posix getting limits since 9103f1ce
/sys/devices/**/block/*/queue/max_segments r,
@@ -201,9 +188,6 @@
@{PROC}/device-tree/** r,
/sys/firmware/devicetree/** r,
# allow connect with openGraphicsFD to work
unix (send, receive) type=stream addr=none peer=(label=/usr/sbin/libvirtd),
# for gathering information about available host resources
/sys/devices/system/cpu/ r,
/sys/devices/system/node/ r,

View File

@@ -33,11 +33,17 @@
mount options=(rw,rslave) -> /,
mount options=(rw, nosuid) -> /{var/,}run/libvirt/qemu/*.dev/,
# libvirt provides any mounts under /dev to qemu namespaces
mount options=(rw, move) /dev/ -> /{,var/}run/libvirt/qemu/*.dev/,
mount options=(rw, move) /dev/** -> /{,var/}run/libvirt/qemu/*{,/},
mount options=(rw, move) /{,var/}run/libvirt/qemu/*.dev/ -> /dev/,
mount options=(rw, move) /{,var/}run/libvirt/qemu/*{,/} -> /dev/**,
mount options=(rw, move) /dev/ -> /{var/,}run/libvirt/qemu/*.dev/,
mount options=(rw, move) /dev/hugepages/ -> /{var/,}run/libvirt/qemu/*.hugepages/,
mount options=(rw, move) /dev/mqueue/ -> /{var/,}run/libvirt/qemu/*.mqueue/,
mount options=(rw, move) /dev/pts/ -> /{var/,}run/libvirt/qemu/*.pts/,
mount options=(rw, move) /dev/shm/ -> /{var/,}run/libvirt/qemu/*.shm/,
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.dev/ -> /dev/,
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.hugepages/ -> /dev/hugepages/,
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.mqueue/ -> /dev/mqueue/,
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.pts/ -> /dev/pts/,
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.shm/ -> /dev/shm/,
network inet stream,
network inet dgram,
@@ -50,10 +56,10 @@
# for --p2p migrations
unix (send, receive) type=stream addr=none peer=(label=unconfined addr=none),
ptrace (read,trace) peer=unconfined,
ptrace (read,trace) peer=/usr/sbin/libvirtd,
ptrace (read,trace) peer=/usr/sbin/dnsmasq,
ptrace (read,trace) peer=libvirt-*,
ptrace (trace) peer=unconfined,
ptrace (trace) peer=/usr/sbin/libvirtd,
ptrace (trace) peer=/usr/sbin/dnsmasq,
ptrace (trace) peer=libvirt-*,
signal (send) peer=/usr/sbin/dnsmasq,
signal (read, send) peer=libvirt-*,
@@ -63,14 +69,6 @@
unix (send, receive) type=stream addr=none peer=(label=/usr/sbin/libvirtd//qemu_bridge_helper),
signal (send) set=("term") peer=/usr/sbin/libvirtd//qemu_bridge_helper,
# allow connect with openGraphicsFD, direction reversed in newer versions
unix (send, receive) type=stream addr=none peer=(label=libvirt-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*),
# unconfined also required if guests run without security module
unix (send, receive) type=stream addr=none peer=(label=unconfined),
# required if guests run unconfined seclabel type='none' but libvirtd is confined
signal (read, send) peer=unconfined,
# Very lenient profile for libvirtd since we want to first focus on confining
# the guests. Guests will have a very restricted profile.
/ r,

View File

@@ -145,8 +145,6 @@ typedef enum {
VIR_DOMAIN_SHUTOFF_FAILED = 6, /* domain failed to start */
VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT = 7, /* restored from a snapshot which was
* taken while domain was shutoff */
VIR_DOMAIN_SHUTOFF_DAEMON = 8, /* daemon decides to kill domain
during reconnection processing */
# ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_SHUTOFF_LAST
# endif
@@ -1913,50 +1911,6 @@ int virDomainDelIOThread(virDomainPtr domain,
unsigned int iothread_id,
unsigned int flags);
/* IOThread set parameters */
/**
* VIR_DOMAIN_IOTHREAD_POLL_MAX_NS:
*
* The maximum polling time that can be used by polling algorithm in ns.
* The polling time starts at 0 (zero) and is the time spent by the guest
* to process IOThread data before returning the CPU to the host. The
* polling time will be dynamically modified over time based on the
* poll_grow and poll_shrink parameters provided. A value set too large
* will cause more CPU time to be allocated the guest. A value set too
* small will not provide enough cycles for the guest to process data.
* The polling interval is not available for statistical purposes.
*/
# define VIR_DOMAIN_IOTHREAD_POLL_MAX_NS "poll_max_ns"
/**
* VIR_DOMAIN_IOTHREAD_POLL_GROW:
*
* This provides a value for the dynamic polling adjustment algorithm to
* use to grow its polling interval up to the poll_max_ns value. A value
* of 0 (zero) allows the hypervisor to choose its own value. The algorithm
* to use for adjustment is hypervisor specific.
*/
# define VIR_DOMAIN_IOTHREAD_POLL_GROW "poll_grow"
/**
* VIR_DOMAIN_IOTHREAD_POLL_SHRINK:
*
* This provides a value for the dynamic polling adjustment algorithm to
* use to shrink its polling interval when the polling interval exceeds
* the poll_max_ns value. A value of 0 (zero) allows the hypervisor to
* choose its own value. The algorithm to use for adjustment is hypervisor
* specific.
*/
# define VIR_DOMAIN_IOTHREAD_POLL_SHRINK "poll_shrink"
int virDomainSetIOThreadParams(virDomainPtr domain,
unsigned int iothread_id,
virTypedParameterPtr params,
int nparams,
unsigned int flags);
/**
* VIR_USE_CPU:
* @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT)
@@ -2094,7 +2048,6 @@ typedef enum {
VIR_DOMAIN_STATS_INTERFACE = (1 << 4), /* return domain interfaces info */
VIR_DOMAIN_STATS_BLOCK = (1 << 5), /* return domain block info */
VIR_DOMAIN_STATS_PERF = (1 << 6), /* return domain perf event info */
VIR_DOMAIN_STATS_IOTHREAD = (1 << 7), /* return iothread poll info */
} virDomainStatsTypes;
typedef enum {

View File

@@ -4,7 +4,7 @@
# that's still supported by the vendor. It may work on other distros
# or versions, but no effort will be made to ensure that going forward.
%define min_rhel 7
%define min_fedora 28
%define min_fedora 26
%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
%define supported_platform 1
@@ -71,13 +71,6 @@
%define with_storage_zfs 0
%endif
# We need a recent enough libiscsi (>= 1.18.0)
%if 0%{?fedora} || 0%{?rhel} > 7
%define with_storage_iscsi_direct 0%{!?_without_storage_iscsi_direct:1}
%else
%define with_storage_iscsi_direct 0
%endif
# A few optional bits off by default, we enable later
%define with_fuse 0%{!?_without_fuse:0}
%define with_sanlock 0%{!?_without_sanlock:0}
@@ -100,13 +93,27 @@
%define with_vbox 0
%endif
# Numactl is not available on many non-x86 archs
%ifarch s390 s390x %{arm} riscv64
# Numactl is not available on s390[x] and ARM
%ifarch s390 s390x %{arm}
%define with_numactl 0
%endif
# libgfapi is built only on x86_64 on rhel
%ifnarch x86_64
%if 0%{?rhel}
%define with_storage_gluster 0
%endif
%endif
# librados and librbd are built only on x86_64 on rhel
%ifnarch x86_64
%if 0%{?rhel}
%define with_storage_rbd 0
%endif
%endif
# zfs-fuse is not available on some architectures
%ifarch s390 s390x aarch64 riscv64
%ifarch s390 s390x aarch64
%define with_storage_zfs 0
%endif
@@ -180,8 +187,8 @@
%if %{with_qemu} || %{with_lxc} || %{with_uml}
# numad is used to manage the CPU and memory placement dynamically,
# it's not available on many non-x86 architectures.
%ifnarch s390 s390x %{arm} riscv64
# it's not available on s390[x] and ARM.
%ifnarch s390 s390x %{arm}
%define with_numad 0%{!?_without_numad:1}
%endif
%endif
@@ -200,10 +207,10 @@
%define enable_werror --disable-werror
%endif
%if 0%{?rhel} == 7
%define tls_priority "NORMAL"
%else
%if 0%{?fedora}
%define tls_priority "@LIBVIRT,SYSTEM"
%else
%define tls_priority "NORMAL"
%endif
@@ -258,7 +265,7 @@ BuildRequires: /usr/bin/pod2man
%endif
BuildRequires: gcc
BuildRequires: git
%if 0%{?fedora} || 0%{?rhel} > 7
%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
BuildRequires: perl-interpreter
%else
BuildRequires: perl
@@ -285,7 +292,7 @@ BuildRequires: libblkid-devel >= 2.17
BuildRequires: augeas
BuildRequires: systemd-devel >= 185
BuildRequires: libpciaccess-devel >= 0.10.9
BuildRequires: yajl-devel
BuildRequires: jansson-devel
%if %{with_sanlock}
BuildRequires: sanlock-devel >= 2.4
%endif
@@ -310,12 +317,8 @@ BuildRequires: /usr/bin/qemu-img
%endif
# For LVM drivers
BuildRequires: lvm2
# For pool type=iscsi
# For ISCSI driver
BuildRequires: iscsi-initiator-utils
%if %{with_storage_iscsi_direct}
# For pool type=iscsi-direct
BuildRequires: libiscsi-devel
%endif
# For disk driver
BuildRequires: parted-devel
# For Multipath support
@@ -386,7 +389,7 @@ BuildRequires: wireshark-devel >= 2.1.0
BuildRequires: libssh-devel >= 0.7.0
%endif
%if 0%{?fedora} || 0%{?rhel} > 7
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
BuildRequires: rpcgen
BuildRequires: libtirpc-devel
%endif
@@ -588,19 +591,6 @@ The storage driver backend adding implementation of the storage APIs for iscsi
volumes using the host iscsi stack.
%if %{with_storage_iscsi_direct}
%package daemon-driver-storage-iscsi-direct
Summary: Storage driver plugin for iscsi-direct
Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
Requires: libvirt-libs = %{version}-%{release}
Requires: libiscsi
%description daemon-driver-storage-iscsi-direct
The storage driver backend adding implementation of the storage APIs for iscsi
volumes using libiscsi direct connection.
%endif
%package daemon-driver-storage-mpath
Summary: Storage driver plugin for multipath volumes
Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
@@ -678,9 +668,6 @@ Requires: libvirt-daemon-driver-storage-logical = %{version}-%{release}
Requires: libvirt-daemon-driver-storage-scsi = %{version}-%{release}
Requires: libvirt-daemon-driver-storage-iscsi = %{version}-%{release}
Requires: libvirt-daemon-driver-storage-mpath = %{version}-%{release}
%if %{with_storage_iscsi_direct}
Requires: libvirt-daemon-driver-storage-iscsi-direct = %{version}-%{release}
%endif
%if %{with_storage_gluster}
Requires: libvirt-daemon-driver-storage-gluster = %{version}-%{release}
%endif
@@ -911,6 +898,8 @@ Requires: ncurses
Requires: gettext
# Needed by virt-pki-validate script.
Requires: gnutls-utils
# We dlopen(libjansson.so.4), so need an explicit dep
Requires: jansson
%if %{with_bash_completion}
Requires: %{name}-bash-completion = %{version}-%{release}
%endif
@@ -1004,7 +993,43 @@ Libvirt plugin for NSS for translating domain names into IP addresses.
%prep
%autosetup -S git_am
%setup -q
# Patches have to be stored in a temporary file because RPM has
# a limit on the length of the result of any macro expansion;
# if the string is longer, it's silently cropped
%{lua:
tmp = os.tmpname();
f = io.open(tmp, "w+");
count = 0;
for i, p in ipairs(patches) do
f:write(p.."\n");
count = count + 1;
end;
f:close();
print("PATCHCOUNT="..count.."\n")
print("PATCHLIST="..tmp.."\n")
}
git init -q
git config user.name rpm-build
git config user.email rpm-build
git config gc.auto 0
git add .
git commit -q -a --author 'rpm-build <rpm-build>' \
-m '%{name}-%{version} base'
COUNT=$(grep '\.patch$' $PATCHLIST | wc -l)
if [ $COUNT -ne $PATCHCOUNT ]; then
echo "Found $COUNT patches in $PATCHLIST, expected $PATCHCOUNT"
exit 1
fi
if [ $COUNT -gt 0 ]; then
xargs git am <$PATCHLIST || exit 1
fi
echo "Applied $COUNT patches"
rm -f $PATCHLIST
rm -rf .git
%build
%if ! %{supported_platform}
@@ -1134,12 +1159,6 @@ exit 1
%define arg_wireshark --without-wireshark-dissector
%endif
%if %{with_storage_iscsi_direct}
%define arg_storage_iscsi_direct --with-storage-iscsi-direct
%else
%define arg_storage_iscsi_direct --without-storage-iscsi-direct
%endif
%define when %(date +"%%F-%%T")
%define where %(hostname)
%define who %{?packager}%{!?packager:Unknown}
@@ -1149,23 +1168,14 @@ exit 1
%define arg_selinux_mount --with-selinux-mount="/sys/fs/selinux"
%if 0%{?fedora}
# Nightly edk2.git-ovmf-x64
# Nightly firmware repo x86/OVMF
LOADERS="/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd"
# Nightly edk2.git-ovmf-ia32
LOADERS="$LOADERS:/usr/share/edk2.git/ovmf-ia32/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-ia32/OVMF_VARS-pure-efi.fd"
# Nightly edk2.git-aarch64
# Nightly firmware repo aarch64/AAVMF
LOADERS="$LOADERS:/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"
# Nightly edk2.git-arm
LOADERS="$LOADERS:/usr/share/edk2.git/arm/QEMU_EFI-pflash.raw:/usr/share/edk2.git/arm/vars-template-pflash.raw"
# Fedora edk2-ovmf
# Fedora official x86/OVMF
LOADERS="$LOADERS:/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"
# Fedora edk2-ovmf-ia32
LOADERS="$LOADERS:/usr/share/edk2/ovmf-ia32/OVMF_CODE.fd:/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd"
# Fedora edk2-aarch64
# Fedora official aarch64/AAVMF
LOADERS="$LOADERS:/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"
# Fedora edk2-arm
LOADERS="$LOADERS:/usr/share/edk2/arm/QEMU_EFI-pflash.raw:/usr/share/edk2/arm/vars-template-pflash.raw"
%define arg_loader_nvram --with-loader-nvram="$LOADERS"
%endif
@@ -1200,7 +1210,6 @@ rm -f po/stamp-po
--with-storage-fs \
--with-storage-lvm \
--with-storage-iscsi \
%{?arg_storage_iscsi_direct} \
--with-storage-scsi \
--with-storage-disk \
--with-storage-mpath \
@@ -1219,7 +1228,7 @@ rm -f po/stamp-po
--without-apparmor \
--without-hal \
--with-udev \
--with-yajl \
--with-jansson \
%{?arg_sanlock} \
--with-libpcap \
--with-macvtap \
@@ -1248,7 +1257,10 @@ rm -fr %{buildroot}
export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
%make_install %{?_smp_mflags} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
# Avoid using makeinstall macro as it changes prefixes rather than setting
# DESTDIR. Newer make_install macro would be better but it's not available
# on RHEL 5, thus we need to expand it here.
make %{?_smp_mflags} install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
make %{?_smp_mflags} -C examples distclean V=1
@@ -1666,11 +1678,6 @@ exit 0
%files daemon-driver-storage-iscsi
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_iscsi.so
%if %{with_storage_iscsi_direct}
%files daemon-driver-storage-iscsi-direct
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_iscsi-direct.so
%endif
%files daemon-driver-storage-mpath
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_mpath.so
@@ -1849,7 +1856,7 @@ exit 0
%{_datadir}/libvirt/schemas/storagepool.rng
%{_datadir}/libvirt/schemas/storagevol.rng
%{_datadir}/libvirt/cpu_map/*.xml
%{_datadir}/libvirt/cpu_map.xml
%{_datadir}/libvirt/test-screenshot.png

View File

@@ -5,7 +5,7 @@ AC_DEFUN([LIBVIRT_ARG_ATTR],[
])
AC_DEFUN([LIBVIRT_CHECK_ATTR],[
LIBVIRT_CHECK_LIB([ATTR], [attr], [getxattr], [sys/xattr.h])
LIBVIRT_CHECK_LIB([ATTR], [attr], [getxattr], [attr/xattr.h])
])
AC_DEFUN([LIBVIRT_RESULT_ATTR],[

View File

@@ -26,34 +26,40 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [
LIBXL_CFLAGS=""
LIBXL_FIRMWARE_DIR=""
LIBXL_EXECBIN_DIR=""
LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040500"
LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040400"
dnl search for libxl, aka libxenlight
dnl Xen > 4.5 introduced a pkgconfig file, check for it first
old_with_libxl="$with_libxl"
LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.6.0], [true])
LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.4.0], [true])
if test "x$with_libxl" = "xyes" ; then
LIBXL_FIRMWARE_DIR=$($PKG_CONFIG --variable xenfirmwaredir xenlight)
LIBXL_EXECBIN_DIR=$($PKG_CONFIG --variable libexec_bin xenlight)
fi
dnl In Fedora <= 28, the xenlight pkgconfig file is in the -runtime package
dnl https://bugzilla.redhat.com/show_bug.cgi?id=1629643
dnl Until Fedora 28 reaches EOL, fallback to lib probe if xenlight.pc is
dnl not found
dnl pkgconfig file not found, fallback to lib probe
if test "x$with_libxl" = "xno" ; then
with_libxl="$old_with_libxl"
save_CFLAGS="$CFLAGS"
dnl LIBXL_API_VERSION 4.4.0 introduced a new parameter to
dnl libxl_domain_create_restore for specifying restore parameters.
dnl The libxl driver will make use of this new parameter for specifying
dnl the Xen migration stream version. Specify LIBXL_API_VERSION to trigger
dnl an error if there is too old xenlight
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $LIBXL_API_VERSION"
LIBVIRT_CHECK_LIB([LIBXL], [xenlight], [libxl_cpupool_cpuadd_cpumap], [libxl.h], [fail="1"])
CFLAGS="$save_CFLAGS"
LIBVIRT_CHECK_LIB([LIBXL], [xenlight], [libxl_ctx_alloc], [libxl.h], [fail="1"])
CFLAGS="$old_CFLAGS"
if test $fail = 1; then
AC_MSG_ERROR([You must install the libxl Library from Xen >= 4.6 to compile libxenlight driver with -lxl])
AC_MSG_ERROR([You must install the libxl Library from Xen >= 4.4 to compile libxenlight driver with -lxl])
fi
fi
if test "$with_libxl" = "yes"; then
old_LIBS="$LIBS"
old_CFLAGS="$CFLAGS"
LIBXL_CFLAGS="$LIBXL_CFLAGS $LIBXL_API_VERSION"
dnl If building with libxl, use the libxl utility header and lib too
@@ -73,10 +79,14 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [
],[
LIBXL_LIBS="$LIBXL_LIBS -lxenstore -lxenctrl"
])
fi
dnl Check if Xen has support for PVH
AC_CHECK_DECL(LIBXL_DOMAIN_TYPE_PVH, [AC_DEFINE([HAVE_XEN_PVH], [1], [Define to 1 if Xen has PVH support.])], [], [#include <libxl.h>])
dnl Check if libxl_domain_config_from_json is available for domXML to
dnl libxl_domain_config tests
LIBS="$LIBS -lxenlight -lxenctrl"
AC_CHECK_FUNCS([libxl_domain_config_from_json])
CFLAGS="$old_CFLAGS"
LIBS="$old_LIBS"
fi
AC_SUBST([LIBXL_CFLAGS])
AC_SUBST([LIBXL_LIBS])

View File

@@ -18,7 +18,7 @@ dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [yes])
LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [check])
LIBVIRT_ARG_WITH([QEMU_USER], [username to run QEMU system instance as],
['platform dependent'])
LIBVIRT_ARG_WITH([QEMU_GROUP], [groupname to run QEMU system instance as],
@@ -26,6 +26,13 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
])
AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [
AC_REQUIRE([LIBVIRT_CHECK_JANSSON])
if test "$with_qemu:$with_jansson" = "yes:no"; then
AC_MSG_ERROR([Jansson >= 2.5 is required to build QEMU driver])
fi
if test "$with_qemu" = "check"; then
with_qemu=$with_jansson
fi
if test "$with_qemu" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_QEMU], 1, [whether QEMU driver is enabled])
fi

View File

@@ -1,6 +1,4 @@
dnl Libiscsi library
dnl
dnl Copyright (C) 2018 Clementine Hayat.
dnl The jansson library
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
@@ -17,14 +15,18 @@ dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_ARG_LIBISCSI],[
LIBVIRT_ARG_WITH_FEATURE([LIBISCSI], [libiscsi], [check], [1.18.0])
AC_DEFUN([LIBVIRT_ARG_JANSSON],[
LIBVIRT_ARG_WITH_FEATURE([JANSSON], [jansson], [check])
])
AC_DEFUN([LIBVIRT_CHECK_LIBISCSI],[
LIBVIRT_CHECK_PKG([LIBISCSI], [libiscsi], [1.18.0])
AC_DEFUN([LIBVIRT_CHECK_JANSSON],[
dnl Jansson http://www.digip.org/jansson/
LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5])
dnl Older versions of Jansson did not preserve the order of object keys
dnl use this check to guard the tests that are sensitive to this
LIBVIRT_CHECK_PKG([STABLE_ORDERING_JANSSON], [jansson], [2.8], [true])
])
AC_DEFUN([LIBVIRT_RESULT_LIBISCSI],[
LIBVIRT_RESULT_LIB(LIBISCSI)
AC_DEFUN([LIBVIRT_RESULT_JANSSON],[
LIBVIRT_RESULT_LIB([JANSSON])
])

View File

@@ -27,9 +27,9 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[
bsd_nss=no
fail=0
if test "x$with_nss_plugin" != "xno" ; then
if test "x$with_yajl" != "xyes" ; then
if test "x$with_jansson" != "xyes" ; then
if test "x$with_nss_plugin" = "xyes" ; then
AC_MSG_ERROR([Can't build nss plugin without yajl])
AC_MSG_ERROR([Can't build nss plugin without JSON support])
else
with_nss_plugin=no
fi

View File

@@ -1,44 +0,0 @@
dnl Iscsi-direct storage
dnl
dnl Copyright (C) 2018 Clementine Hayat.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_STORAGE_ARG_ISCSI_DIRECT], [
LIBVIRT_ARG_WITH_FEATURE([STORAGE_ISCSI_DIRECT],
[iscsi-direct backend for the storage driver],
[check])
])
AC_DEFUN([LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT], [
AC_REQUIRE([LIBVIRT_CHECK_LIBISCSI])
if test "$with_storage_iscsi_direct" = "check"; then
with_storage_iscsi_direct=$with_libiscsi
fi
if test "$with_storage_iscsi_direct" = "yes"; then
if test "$with_libiscsi" = "no"; then
AC_MSG_ERROR([Need libiscsi for iscsi-direct storage driver])
fi
AC_DEFINE_UNQUOTED([WITH_STORAGE_ISCSI_DIRECT], [1],
[whether iSCSI backend for storage driver is enabled])
fi
AM_CONDITIONAL([WITH_STORAGE_ISCSI_DIRECT],
[test "$with_storage_iscsi_direct" = "yes"])
])
AC_DEFUN([LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT], [
LIBVIRT_RESULT([iscsi-direct], [$with_storage_iscsi_direct])
])

View File

@@ -23,31 +23,10 @@ AC_DEFUN([LIBVIRT_ARG_YAJL],[
AC_DEFUN([LIBVIRT_CHECK_YAJL],[
dnl YAJL JSON library http://lloyd.github.com/yajl/
if test "$with_qemu:$with_yajl" = yes:check; then
dnl Some versions of qemu require the use of yajl; try to detect them
dnl here, although we do not require qemu to exist in order to compile.
dnl This check mirrors src/qemu/qemu_capabilities.c
AC_PATH_PROGS([QEMU], [qemu-kvm qemu kvm qemu-system-x86_64],
[], [$PATH:/usr/bin:/usr/libexec])
if test -x "$QEMU"; then
if $QEMU -help 2>/dev/null | grep -q libvirt; then
with_yajl=yes
else
[qemu_version_sed='s/.*ersion \([0-9.,]*\).*/\1/']
qemu_version=`$QEMU -version | sed "$qemu_version_sed"`
case $qemu_version in
[[1-9]].* | 0.15.* ) with_yajl=yes ;;
0.* | '' ) ;;
*) AC_MSG_ERROR([Unexpected qemu version string]) ;;
esac
fi
fi
if test "$with_yajl" = yes; then
AC_MSG_ERROR([Compilation with YAJL is no longer supported])
fi
LIBVIRT_CHECK_LIB_ALT([YAJL], [yajl],
[yajl_parse_complete], [yajl/yajl_common.h],
[YAJL2], [yajl],
[yajl_tree_parse], [yajl/yajl_common.h])
with_yajl=no
])
AC_DEFUN([LIBVIRT_RESULT_YAJL],[

View File

@@ -260,7 +260,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh
%{mingw32_datadir}/libvirt/api/libvirt-qemu-api.xml
%{mingw32_datadir}/libvirt/api/libvirt-admin-api.xml
%{mingw32_datadir}/libvirt/cpu_map/*.xml
%{mingw32_datadir}/libvirt/cpu_map.xml
%{mingw32_datadir}/libvirt/test-screenshot.png
@@ -347,7 +347,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh
%{mingw64_datadir}/libvirt/api/libvirt-qemu-api.xml
%{mingw64_datadir}/libvirt/api/libvirt-admin-api.xml
%{mingw64_datadir}/libvirt/cpu_map/*.xml
%{mingw64_datadir}/libvirt/cpu_map.xml
%{mingw64_datadir}/libvirt/test-screenshot.png

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Amharic\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Angika\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -7,9 +7,9 @@
# Daniel Berrange <dan-zanata@berrange.com>, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 04:33+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,4 +20,4 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -13,9 +13,9 @@
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 06:48+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Assamese (http://www.transifex.com/projects/p/libvirt/"
@@ -25,7 +25,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -287,6 +287,9 @@ msgstr " নেটৱাৰ্কিং:"
msgid " Storage:"
msgstr " সংৰক্ষণ:"
msgid " block_io_throttle reply was missing device list"
msgstr "block_io_throttle উত্তৰত ডিভাইচ তালিকা নাছিল"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -595,6 +598,9 @@ msgstr "guest-get-vcpus ৰ উত্তৰত 'logical-id' নাই"
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "guest-get-vcpus ৰ উত্তৰত 'online' নাই"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr "vHBA ৰ বাবে 'parent' ধাৰ্য্য কৰা হোৱা নাই, আৰু এই হস্টত এটা পোৱা নাযায়"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'peak' আৰু 'burst' ৰ বাবে 'average' বৈশিষ্ট্যৰ প্ৰয়োজন"
@@ -941,6 +947,9 @@ msgstr "NAT '%s' কৰাৰ চেষ্টা কৰা হৈছে। NAT
msgid "Attribute mode is only allowed for guest CPU"
msgstr "বৈশিষ্ট অৱস্থা কেৱল অতিথি CPU ৰ বাবে অনুমোদিত"
msgid "Authentication Credentials not found"
msgstr "প্ৰমাণীকৰণ তথ্যসমূহ পোৱা নগল"
msgid "Authentication failed"
msgstr "অনুমোদন বিফল"
@@ -1413,6 +1422,9 @@ msgstr "বেলুন ডিভাইচ পথ নিৰ্ধাৰণ ক
msgid "Cannot determine free memory"
msgstr "মুক্ত মেমৰি নিৰ্ধাৰণ কৰিব নোৱাৰি"
msgid "Cannot determine system clock HZ"
msgstr "চিস্টেম ঘড়ী HZ নিৰ্ধাৰণ কৰিব নোৱাৰি"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "ফ্ল'পি %s পোনেপোনে সংযুক্ত কৰিব নোৱাৰি"
@@ -1630,6 +1642,14 @@ msgstr "চকেট ঠিকনা '%s' বিশ্লেষণ কৰিব
msgid "Cannot parse start time %s in %s"
msgstr "%s ত আৰম্ভণি সময় %s বিশ্লেষণ কৰিব নোৱাৰি"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "sys স্টেট '%s' বিশ্লেষণ কৰিব নোৱাৰি"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "ব্যৱহাৰকাৰী স্টেট '%s' বিশ্লেষণ কৰিব নোৱাৰি"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1778,6 +1798,10 @@ msgstr "আৰম্ভ নকৰা CURL হেণ্ডেল অংশীদ
msgid "Cannot specify a label if relabelling is turned off. model=%s"
msgstr "এটা লেবেল ধাৰ্য্য কৰিব নোৱাৰি যদি পুনৰলেবেলিং বন্ধ কৰা থাকে। model=%s"
#, c-format
msgid "Cannot stat %s"
msgstr "%s স্টেট কৰিব নোৱাৰি"
#, c-format
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
msgstr "এটা '%s' পোৰ্ট থকা HostVirtualSwitch অবিৱৰিত কৰিব নোৱাৰি"
@@ -1954,6 +1978,10 @@ msgstr ""
msgid "Command %s too long for destination"
msgstr "গন্তব্যৰ ক্ষেত্ৰত আদেশ %s অত্যাধিক দীঘল"
#, c-format
msgid "Command '%s' is not found"
msgstr "কমান্ড '%s' পোৱা নগল"
msgid "Commit aborted"
msgstr "Commit বাদ দিয়া হল"
@@ -2065,6 +2093,26 @@ msgstr "ডোমেইন বৰ্তমানে সক্ৰিয় নহয়
msgid "Control groups not supported on this platform"
msgstr "নিয়ন্ত্ৰণ দলসমূহ এই প্লেটফৰ্মত সমৰ্থিত নহয়"
#, c-format
msgid "Controller %d out of range"
msgstr "নিয়ন্ত্ৰক %d বিস্তাৰৰ বাহিৰ"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "নিয়ন্ত্ৰক '%s' দলৰ বাবে সামৰ্থবান নহয়"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "নিয়ন্ত্ৰক '%s' মাউণ্ট কৰা নাই"
#, c-format
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
msgstr "নিয়ন্ত্ৰক '%s' ৰ প্ৰয়োজন নাই, কিন্তু '%s' co-mount কৰা আছে"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "নিয়ন্ত্ৰক '%s' মাউণ্টেড নহয়"
msgid "Controllers must use the 'ccid' address type"
msgstr "নিয়ন্ত্ৰকসমূহে 'ccid' ঠিকনা ধৰণ ব্যৱহাৰ কৰিব লাগিব"
@@ -2258,6 +2306,9 @@ msgstr "নাম '%s' ৰ সৈতে PhysicalNic পোৱা নগল"
msgid "Could not find any 'network' element in status file"
msgstr "অৱস্থা ফাইলত কোনো 'network' উপাদান পোৱা নগল"
msgid "Could not find any mounted controllers"
msgstr "কোনো মাউণ্ট কৰা নিয়ন্ত্ৰক পোৱা নগল"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "'%s' ত ধাৰ্য্যত সম্পদ গণনা কৰিব পৰা নগল"
@@ -2274,6 +2325,10 @@ msgstr "প্ৰকৃত পথ '%s' অন্তৰ্ভুক্ত কৰ
msgid "Could not find datastore with name '%s'"
msgstr "নাম '%s' ৰ সৈতে তথ্যসংগ্ৰহ বিচাৰি পোৱা নগল"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "%s ত ডাইৰেকটৰি বিভাজক পোৱা নগল"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr "অভ্যন্তৰীক নাম '%s' ৰ সৈতে ডমেইন স্নেপস্বট পোৱা নগল"
@@ -2309,6 +2364,10 @@ msgstr "MAC ঠিকনা '%s' ৰ সৈতে ভৌতিক NIC পোৱ
msgid "Could not find physical NIC with name '%s'"
msgstr "নাম '%s' ৰ সৈতে ভৌতিক NIC পোৱা নগল"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "%s ত নিয়ন্ত্ৰক %s ৰ বাবে স্থাপনা বিচাৰি পোৱা নগল"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "'%s' নামৰ সৈতে স্নেপশ্বট বিচাৰি পোৱা নগল"
@@ -3004,6 +3063,10 @@ msgstr "ডিভাইচ %s ইতিমধ্যে অস্তিত্ব
msgid "Device %s detached\n"
msgstr "ডিভাইচ %s অসংলগ্ন কৰা হল\n"
#, c-format
msgid "Device %s in use"
msgstr "ডিভাইচ %s ব্যৱহৃত"
#, c-format
msgid "Device %s is already in use"
msgstr "%s ডিভাইচ বৰ্তমানে ব্যৱহৃত হৈছে"
@@ -3873,6 +3936,10 @@ msgstr "নেটৱৰ্ক সংৰূপ পৰিবৰ্তন লেন
msgid "Failed to bind PCI device '%s' to %s"
msgstr "PCI ডিভাইচ '%s' ক %s লৈ bind কৰিবলৈ বিফল"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "'%s' ত cgroup '%s' বাইণ্ড কৰিবলে ব্যৰ্থ"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "মাউণ্ট ডাইৰেকটৰি %s ক %s লে বান্ধিবলে ব্যৰ্থ"
@@ -4031,6 +4098,10 @@ msgstr "বান্ধনী লক্ষ্য %s সৃষ্টি কৰি
msgid "Failed to create bridge node in xml document"
msgstr "xml দস্তাবেজত ব্ৰিজ ন'ড সৃষ্টি কৰিবলে ব্যৰ্থ"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "দলৰ বাবে নিয়ন্ত্ৰক %s সৃষ্টি কৰিবলে ব্যৰ্থ"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "'%s' dev '%s' ৰ বাবে ডাইৰেকটৰি সৃষ্টি কৰিবলে ব্যৰ্থ"
@@ -4314,6 +4385,9 @@ msgstr "আন্তঃপৃষ্ঠ %s ৰ বাবে নতুন না
msgid "Failed to get %s minor number"
msgstr "%s গৌণ সংখ্যা প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
msgid "Failed to get PCI Config Address String"
msgstr "PCI সংৰূপ ঠিকনা স্ট্ৰিং প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
msgid "Failed to get PCI SYSFS file"
msgstr "PCI SYSFS ফাইল প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
@@ -4589,6 +4663,10 @@ msgstr "ডোমেইন %s স্বয়ংক্ৰিয় প্ৰাৰম
msgid "Failed to mkdir %s"
msgstr "mkdir %s কৰিবলৈ ব্যৰ্থযৰ্থ"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "%s ধৰণ %s ত %s মাউণ্ট কৰিবলে ব্যৰ্থ"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "%s ক /dev ত মাউণ্ট কৰিবলে ব্যৰ্থ"
@@ -6539,6 +6617,13 @@ msgstr "সৰ্বাধিক মেমৰি, স্কেইল্ড প
msgid "Max memory:"
msgstr "সৰ্বোচ্চ মেমৰি:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr "ধাৰ্য্যত মেচিন ধৰণ সীমাতকৈ সৰ্বাধিক CPUs অধিক"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "মেমৰি '%llu', %llu কে কম হব লাগিব"
msgid "Memory allocation failure"
msgstr "মেমৰি বিতৰণ কৰোঁতে ব্যৰ্থ"
@@ -6644,6 +6729,10 @@ msgstr "'%s' বৈশিষ্ট্য সন্ধানহীন"
msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr "ManagedEntityStatus ৰ বাবে সন্ধান কৰোতে '%s' বৈশিষ্ট সন্ধানহীন"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "cgroup মাউণ্ট '%s' ত '/' বিভাজক নাই"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "CPU টোপোলজিত 'core' নামক গুণ অনুপস্থিত"
@@ -6702,6 +6791,9 @@ msgstr "CPU গুণৰ নাম অনুপস্থিত"
msgid "Missing CPU model name"
msgstr "CPU ৰ মডেলৰ নাম অনুপস্থিত"
msgid "Missing CPU vendor name"
msgstr "CPU বিক্ৰেতা নাম সন্ধানহীন"
msgid "Missing ID parameter for domain object"
msgstr "ডমেইন অবজেক্টৰ বাবে ID প্ৰাচল সন্ধানহীন"
@@ -6844,6 +6936,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "CPU আৰ্হি %s ত সন্ধানহীন অথবা অবৈধ PVR মান"
msgid "Missing or invalid auth pointer"
msgstr "সন্ধানহীন অথবা অবৈধ auth পইন্টাৰ"
msgid "Missing or invalid scsi adapter 'unique_id' value"
msgstr "সন্ধানহীন অথবা অবৈধ scsi adapter 'unique_id' মান"
@@ -7293,6 +7388,9 @@ msgstr "স্বাক্ষৰ %s ৰ বাবে কোনো args নাই
msgid "No authentication callback available"
msgstr "কোনো প্ৰমাণীকৰণ কলবেক উপলব্ধ নাই"
msgid "No authentication callback provided."
msgstr "অনুমোদনৰ কোনো কল-বেক উপলব্ধ কৰা নহয়।"
msgid "No authentication methods and credentials provided"
msgstr "কোনো প্ৰমাণীকৰণ পদ্ধতি আৰু তথ্য প্ৰদান কৰা হোৱা নাই"
@@ -8420,6 +8518,9 @@ msgstr "SCSI ডিস্ক সূচী ('%s' ৰ পৰা বিশ্লে
msgid "SCSI host device doesn't support managed mode"
msgstr "SCSI হস্ট ডিভাইচে ব্যৱস্থাপিত অৱস্থা সমৰ্থন নকৰে"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "qemu ৰ এই সংস্কৰণ দ্বাৰা SCSI পাছথ্ৰু সমৰ্থিত নহয়"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr "SCSI একক সূচী %d [0..6,8..15] বিস্তাৰৰ বাহিৰ"
@@ -9732,6 +9833,9 @@ msgstr "USB ডিভাইচ %s ইতিমধ্যে ব্যৱহৃত
msgid "USB host device is missing bus/device information"
msgstr "USB হোস্ট ডিভাইচত বাচ/ডিভাইচ সংক্ৰান্ত তথ্য অনুপস্থিত"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr "QEMU ৰ এই সংস্কৰণ দ্বাৰা USB পুনৰনিৰ্দেশ বুটিং সমৰ্থিত নহয়"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr "USB পুনৰনিৰ্দেশ ফিল্টাৰ QEMU ৰ এই সংস্কৰণ দ্বাৰা সমৰ্থিত নহয়"
@@ -9916,12 +10020,6 @@ msgstr "চকেট ফাইল হেণ্ডেল কপি কৰিব
msgid "Unable to create %s"
msgstr "%s সৃষ্টি কৰিবলে অক্ষম"
msgid "Unable to create JSON formatter"
msgstr "JSON ফৰমেটাৰ সৃষ্টি কৰিবলে অক্ষম"
msgid "Unable to create JSON parser"
msgstr "JSON বিশ্লেষক সৃষ্টি কৰিবলে অক্ষম"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "LPAR সৃষ্টি কৰিবলে অক্ষম। কাৰণ: '%s'"
@@ -9951,6 +10049,10 @@ msgstr "ব্ৰিজ ডিভাইচ সৃষ্টি কৰিবলে
msgid "Unable to create device %s"
msgstr "ডিভাইচ %s সৃষ্টি কৰিবলে অক্ষম"
#, c-format
msgid "Unable to create directory %s"
msgstr "ডাইৰেকটৰি %s সৃষ্টি কৰিবলে অক্ষম"
msgid "Unable to create epoll fd"
msgstr "epoll fd সৃষ্টি কৰিবলে অক্ষম"
@@ -10414,9 +10516,6 @@ msgstr "'%s' খোলিবলে অক্ষম"
msgid "Unable to open /dev/loop-control"
msgstr "/dev/loop-control খোলিবলৈ অক্ষম"
msgid "Unable to open /proc/mounts"
msgstr "/proc/mounts খোলিবলে অক্ষম"
msgid "Unable to open UNIX socket"
msgstr "UNIX চকেট খোলিবলে অক্ষম"
@@ -10707,6 +10806,10 @@ msgstr "এই প্লেটফৰ্মত %s ত STP সংহতি কৰ
msgid "Unable to set VM logfile close-on-exec flag"
msgstr "VM লগ ফাইলৰ close on exec ফ্লেগ %s নিৰ্ধাৰণ কৰোঁতে ব্যৰ্থ"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "ব্ৰিজ %s %s সংহতি কৰিবলে অক্ষম"
msgid "Unable to set cloexec flag"
msgstr "cloexec ফ্লেগ সংহতি কৰিবলে অক্ষম"
@@ -10769,6 +10872,10 @@ msgstr "বান্ধনী উৎস %s stat কৰিবলে অক্ষ
msgid "Unable to stat bind target %s"
msgstr "বান্ধনী লক্ষ্য %s বান্ধীবলে অক্ষম"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "ডাইৰেকটৰি %s ক %s লে symlink কৰিব নোৱাৰি"
#, c-format
msgid "Unable to truncate %s"
msgstr "%s চুটি কৰিবলে অক্ষম"
@@ -10898,6 +11005,9 @@ msgstr "non-peer2peer প্ৰব্ৰজনৰ সৈতে অপ্ৰত
msgid "Unexpected disk sgio mode '%d'"
msgstr "অপ্ৰত্যাশিত ডিস্ক sgio অৱস্থা '%d'"
msgid "Unexpected error"
msgstr "অপ্ৰত্যাশিত ত্ৰুটি"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "অপ্ৰত্যাশিত ফাইলচিস্টেম ধৰণ %s"
@@ -11415,6 +11525,9 @@ msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
msgstr ""
"VMX প্ৰবিষ্টি 'sched.cpu.affinity' এ এটা %d অন্তৰ্ভুক্ত কৰে, এই মান অত্যাধিক ডাঙৰ"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "এই QEMU বাইনাৰিৰ সৈতে VNC WebSockets সমৰ্থিত নহয়"
msgid "VNC supports connected='keep' only"
msgstr "VNC এ কেৱল connected='keep' সমৰ্থণ কৰে"
@@ -12024,6 +12137,25 @@ msgstr "এটাৰ অধিক ডিভাইচৰ বাবে ব্য
msgid "booted"
msgstr "বুটেড"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr ""
"VFIO ৰ সৈতে ধাৰ্য্যত PCI ডিভাইচসমূহৰ পৰা বুট কৰাটো qemu ৰ এই সংস্কৰণৰ সৈতে সমৰ্থিত "
"নহয়"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত PCI ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত SCSI ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত USB ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr ""
@@ -12566,6 +12698,9 @@ msgstr "সুৰক্ষা props %d (%s) প্ৰাপ্ত কৰিব
msgid "cannot get the host uuid"
msgstr "হস্ট uuid প্ৰাপ্ত কৰিব নোৱাৰি"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "MEMORY cgroup নিয়ন্ত্ৰকৰ পথ প্ৰাপ্ত কৰিব নোৱাৰি"
msgid "cannot get vCPU placement & pCPU time"
msgstr "vCPU স্থাপনাও আৰু pCPU ৰ সময় প্ৰাপ্ত কৰিবলৈ ব্যৰ্থ"
@@ -12728,6 +12863,10 @@ msgstr "ভলিউম '%s' খোলোঁতে ব্যৰ্থ"
msgid "cannot parse %s version number in '%.*s'"
msgstr "%s সংস্কৰণ সংখ্যা বিশ্লেষণ কৰিব নোৱাৰি '%.*s'"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "%s স্থাপত্যৰ বাবে CPU মেপ বিশ্লেষণ কৰা সম্ভৱ নহয়"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "CPU ৰ টোপোলজি '%s' বিশ্লেষণ কৰিবলৈ ব্যৰ্থ"
@@ -12819,10 +12958,6 @@ msgstr "interfaceid প্ৰাচলক uuid হিচাপে বিশ্
msgid "cannot parse io mode '%s'"
msgstr "io অৱস্থা '%s' বিশ্লেষণ কৰিব নোৱাৰি"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "json %s বিশ্লেষণ কৰা সম্ভৱ নহয়: %s"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "nbd ফাইলনাম '%s' বিশ্লেষণ কৰিব নোৱাৰি"
@@ -13259,6 +13394,14 @@ msgstr "%s ত cellNum %d কে কম বা সমান হব লাগি
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "%s ত cellNum এ %d ক কেৱল ধনাত্মক মান হিচাপে গ্ৰহণ কৰে"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' বিস্তাৰ (1000, 1000000) ত হব লাগিব"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' বিস্তাৰ (1000, %llu) ত হব লাগিব"
msgid "cgroup CPU controller is not mounted"
msgstr "cgroup CPU নিয়ন্ত্ৰক মাউণ্ট কৰা নহয়"
@@ -13401,6 +13544,10 @@ msgstr "সংৰূপ"
msgid "config data file to import from"
msgstr "আমদানি কৰিব লগা বিন্যাস তথ্যৰ ফাইল"
#, c-format
msgid "config value %s not a string"
msgstr "সংৰূপ মান %s এটা স্ট্ৰিং নহয়"
#, c-format
msgid "config value %s was malformed"
msgstr "বিন্যাসৰ মান %s ভুল"
@@ -13409,6 +13556,10 @@ msgstr "বিন্যাসৰ মান %s ভুল"
msgid "config value %s was missing"
msgstr "বিন্যাসৰ মান %s নাছিল"
#, c-format
msgid "config value %s was not a string"
msgstr "বিন্যাসৰ মান %s এটা স্ট্ৰিং নাছিল"
msgid "configuration file syntax error"
msgstr "বিনেস ফাইলৰ শব্দবিনেসত ভুল"
@@ -15161,6 +15312,9 @@ msgstr "qemu ডিভাইচ তালিকা বিশ্লেষণ ক
msgid "failed to parse value of %s"
msgstr "%s ৰ বাবে মান বিশ্লেষণ কৰিবলে ব্যৰ্থ"
msgid "failed to parse xml document"
msgstr "xml নথি বিশ্লেষণ কৰোঁতে ব্যৰ্থ"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "ডিস্ক %s ৰ বাবে কাৰ্য্য পিভট কৰিবলে ব্যৰ্থ"
@@ -15234,6 +15388,9 @@ msgstr "তথ্যসমূহ উদ্ধাৰ কৰিবলে ব্য
msgid "failed to retrieve decision to accept host key"
msgstr "হস্ট কি' গ্ৰহণ কৰিবলে সিধান্ত উদ্ধাৰ কৰিবলে ব্যৰ্থ"
msgid "failed to retrieve password"
msgstr "পাছৱৰ্ড উদ্ধাৰ কৰিবলে ব্যৰ্থ"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr "ব্যক্তিগত কি' পাচফ্ৰেইছ উদ্ধাৰ কৰিবলে ব্যৰ্থ: কলবেক ব্যৰ্থ হৈছে"
@@ -15729,6 +15886,9 @@ msgstr "hugepage আকাৰ শূন্য হব নোৱাৰিব"
msgid "hypervisor connection URI"
msgstr "হাইপাৰ ভাইসৰ সংযোগৰ URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "হাইপাৰজৰত ডিভাইচবুট বৈশিষ্ট্য নাই"
msgid "iSCSI storage pool does not support volume creation"
msgstr "iSCSI সংৰক্ষণ পুলে ভলিউম সৃষ্টি সমৰ্থন নকৰে"
@@ -16961,6 +17121,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "ঠিকনা ধৰণ '%s' ৰ সৈতে memballoon অসমৰ্থিত"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "মেমৰি বৈশিষ্ট্যসমূহ: [file=]name[,snapshot=type]"
@@ -17913,6 +18077,9 @@ msgstr "'%s' ৰ কাৰণে কোনো ব্ল'ক ডিভাইচ
msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr "prog %d vers %d serial %d ৰ সৈতে উত্তৰৰ বাবে অপেক্ষা কৰা কোনো কল নাই"
msgid "no callback provided"
msgstr "কোনো কলবেক প্ৰদান কৰা হোৱা নাই"
msgid "no client username was found"
msgstr "গ্ৰাহকৰ ব্যৱহাৰকৰোঁতাৰ নাম পোৱা নাযায়"
@@ -17942,6 +18109,10 @@ msgstr "এলিয়াচ %s ৰ সৈতে কোনো ডিভাইচ
msgid "no disk format for %s and probing is disabled"
msgstr "%s ৰ বাবে কোনো ডিস্ক বিন্যাস নাই আৰু প্ৰবিং অসামৰ্থবান কৰা আছে"
#, c-format
msgid "no disk found with alias %s"
msgstr "এলিয়াচ %s ৰ সৈতে কোনো ডিস্ক পোৱা নগল"
#, c-format
msgid "no disk named '%s'"
msgstr "'%s' নামৰ কোনো ডিস্ক নাই"
@@ -20094,6 +20265,9 @@ msgstr "স্নেপশ্বট ফিল্টাৰিং পৰিৱে
msgid "unable to poll on child"
msgstr "ছাইল্ডত পল কৰিবলে অক্ষম"
msgid "unable to probe for add-fd"
msgstr "add-fd ৰ বাবে প্ৰৌব কৰিবলে অক্ষম"
msgid "unable to read child stderr"
msgstr "ছাইল্ড stderr পঢ়িবলে অক্ষম"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Asturian\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Baluchi\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Belarusian\n"
@@ -17,4 +17,4 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -7,9 +7,9 @@
# Miroslav Ivanov <kiro.kopeleto@gmail.com>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 07:16+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/fedora/"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:13+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Bengali (http://www.transifex.com/projects/p/fedora/language/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,9 +8,9 @@
# runab <runab@redhat.com>, 2006-2010
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 07:10+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Bengali (India) (http://www.transifex.com/projects/p/libvirt/"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -2291,6 +2291,9 @@ msgstr "CPU বৈশিষ্ট্যের নাম অনুপস্থি
msgid "Missing CPU model name"
msgstr "CPU-র মডেলের নাম অনুপস্থিত"
msgid "Missing CPU vendor name"
msgstr "CPU ভেন্ডার নাম অনুপস্থিত"
#, c-format
msgid "Missing IP address in network '%s' DNS HOST record"
msgstr "নেটওয়ার্ক '%s' DNS HOST রেকর্ডে IP ঠিকানা অনুপস্থিত"
@@ -2342,6 +2345,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "CPU মডেল %s এ PVR মান অনুপস্থিত বা অবৈধ"
msgid "Missing or invalid auth pointer"
msgstr "auth পয়েন্টার হয় অনুপস্থিত বা অবৈধ"
#, c-format
msgid "Missing required address attribute in network '%s'"
msgstr "'%s' নেটওয়ার্কে প্রয়োজনীয় ঠিকানা অ্যাট্রিবিউট অনুপস্থিত"
@@ -2525,6 +2531,9 @@ msgstr "কোনো UNIX প্রক্রিয়া অাইডি উপ
msgid "No address associated with hostname"
msgstr "হোস্টনামের সংগে কোনো ঠিকানা সংশ্লিষ্ট নেই"
msgid "No authentication callback provided."
msgstr "অনুমোদনের কোনো কল-ব্যাক উপলব্ধ করা হয়নি।"
msgid "No data supplied for <initarg> element"
msgstr "<initarg> উপাদানের জন্য কোনো ডেটা সরবরাহ করা হয়নি"
@@ -4315,6 +4324,10 @@ msgstr "সকেট খুলতে ব্যর্থ: %s"
msgid "cannot open volume '%s'"
msgstr "ভলিউম '%s' খুলতে ব্যর্থ"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "%s আর্কিটেকচারের জন্য CPU ম্যাপ পার্স করা সম্ভব নয়"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "CPU-র টোপোলজি '%s' পার্স করতে ব্যর্থ"
@@ -4387,10 +4400,6 @@ msgstr "instanceid প্যারামিটার uuid হিসাবে প
msgid "cannot parse interfaceid parameter as a uuid"
msgstr "instanceid প্যারামিটার uuid হিসাবে পার্জ করা যাবে না"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "json %s পার্স করা সম্ভব নয়: %s"
#, c-format
msgid "cannot parse partition number from target '%s'"
msgstr "'%s' টার্গেট থেকে পার্টিশনের সংখ্যা পার্স করা সম্ভব নয়"
@@ -4732,6 +4741,10 @@ msgstr "%s কনফিগের মান ত্রুটিপূর্ণ"
msgid "config value %s was missing"
msgstr "%s কনফিগ মান অনুপস্থিত"
#, c-format
msgid "config value %s was not a string"
msgstr "%s কনফিগের মান স্ট্রিং প্রকৃতির নয়"
msgid "configuration file syntax error"
msgstr "কনফিগারেশন ফাইলের মধ্যে সিন্টেক্স সংক্রান্ত সমস্যা"
@@ -5376,6 +5389,9 @@ msgstr "কনফিগারেশন ফাইল পার্স করতে
msgid "failed to parse configuration file %s"
msgstr "কনফিগারেশন ফাইল %s পার্স করতে ব্যর্থ"
msgid "failed to parse xml document"
msgstr "xml নথি পার্স করতে ব্যর্থ"
msgid "failed to read XML"
msgstr "XML পড়তে ব্যর্থ"
@@ -6691,6 +6707,9 @@ msgstr "স্বয়ংক্রিয় প্রারম্ভকরণ হব
msgid "no block device path supplied for '%s'"
msgstr "'%s'-র জন্য কোনো ব্লক ডিভাইসের পাথ উল্লিখিত হয়নি"
msgid "no callback provided"
msgstr "কোনো কলব্যাক প্রদান করা হয়নি"
msgid "no client username was found"
msgstr "ক্লায়েন্টের ব্যবহারকারীর নাম পাওয়া যায়নি"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Tibetan\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Breton\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Bodo\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -7,9 +7,9 @@
# Daniel <veillard@redhat.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 07:12+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Bosnian (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -11,9 +11,9 @@
# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-02-24 11:19+0000\n"
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/libvirt/language/"
@@ -23,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -7,14 +7,13 @@
# dibalaj <dibalaj@dibalaj.cz>, 2013
# Milan Kerslager <kerslage@linux.cz>, 2007
# Zdenek <chmelarz@gmail.com>, 2016. #zanata
# Pavel Borecki <pavel.borecki@gmail.com>, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"PO-Revision-Date: 2018-11-27 07:08+0000\n"
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2016-09-15 06:18+0000\n"
"Last-Translator: Zdenek <chmelarz@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/fedora/language/"
"cs/)\n"
"Language: cs\n"
@@ -22,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -80,7 +79,7 @@ msgid " %s (help keyword '%s')\n"
msgstr " %s (klíčové slovo nápovědy '%s')\n"
msgid " Hypervisors:"
msgstr " Hypervizory:"
msgstr " Hypervizoři:"
msgid " Miscellaneous:"
msgstr " Různé:"
@@ -147,14 +146,6 @@ msgstr "%s: selhal zápis do log souboru: %s"
msgid "%s: initialization failed\n"
msgstr "%s: inicializace selhala\n"
#, c-format
msgid "%s: option '%s%s' is ambiguous\n"
msgstr "%s: volba „%s%s“ není jednoznačná\n"
#, c-format
msgid "%s: option '%s%s' is ambiguous; possibilities:"
msgstr "%s: volba „%s%s“ není jednoznačná; možnosti:"
#, c-format
msgid ""
"%s: temporary filename contains shell meta or other unacceptable characters "
@@ -163,10 +154,6 @@ msgstr ""
"%s: jméno dočasného souboru obsahuje nepovolené nebo speciální znaky shellu "
"(je správně nastavená $TMPDIR?)"
#, c-format
msgid "%s: unrecognized option '%s%s'\n"
msgstr "%s: nerozpoznaná volba „%s%s“\n"
#, c-format
msgid "%s: warning: %s%c"
msgstr "%s: varování: %s%c"
@@ -195,9 +182,6 @@ msgstr "--%s <řetězec>"
msgid "Active:"
msgstr "Aktivní:"
msgid "All requests done"
msgstr "Všechny požadavky dokončeny"
msgid "Allocation"
msgstr "Alokace"
@@ -228,10 +212,6 @@ msgstr "Dostupný"
msgid "Available:"
msgstr "Dostupný:"
#, c-format
msgid "Bad $%s value."
msgstr "Chybná hodnota $%s."
msgid "Build a given pool."
msgstr "Sestav dané úložiště."
@@ -364,15 +344,6 @@ msgstr ""
msgid "Change the number of virtual CPUs in the guest domain."
msgstr "Změnit počet aktivních virtuálních CPU v hostované doméně."
msgid ""
"Check that CPU and firmware supports virtualization and kvm module is loaded"
msgstr ""
"Zkontrolujte zda procesor a (nastavení) firmware podporují virtualizaci a je "
"načten modul kvm"
msgid "Compiled with support for:"
msgstr "Sestaveno s podporou pro:"
msgid "Compiled with support for:\n"
msgstr "Zkompilováno s podporou pro:\n"
@@ -444,9 +415,6 @@ msgstr "Nelze smazat svazek: %s"
msgid "Could not destroy domain: %s"
msgstr "Nepodařilo se zničit doménu: %s"
msgid "Could not determine home directory"
msgstr "Nedaří se zjistit domovskou složku"
msgid "Could not find 'active' element"
msgstr "Nepodařilo se nalézt element 'active'"
@@ -805,9 +773,6 @@ msgstr "Selhalo porovnání hostitelského CPU s %s"
msgid "Failed to connect to %s"
msgstr "Selhalo připojování k %s"
msgid "Failed to connect to the admin server"
msgstr "Nepodařilo se připojit ke správnímu serveru"
#, c-format
msgid "Failed to convert '%s' to int"
msgstr "Selhala konverze '%s' na int"
@@ -957,12 +922,6 @@ msgstr "Nepodařilo se získat informace o rozhraní"
msgid "Failed to get interface stats %s %s"
msgstr "Nepodařilo se získat stav rozhraní %s %s"
msgid "Failed to initialize libvirt"
msgstr "libvirt se nepodařilo inicializovat"
msgid "Failed to initialize mutex"
msgstr "mutex se nepodařilo inicializovat"
msgid "Failed to list active domains"
msgstr "Nepodařilo se vypsat aktivní domény"
@@ -996,9 +955,6 @@ msgstr "Selhalo vypsání hesel"
msgid "Failed to list storage volumes"
msgstr "Nepodařilo se vypsat svazky na úložišti"
msgid "Failed to list volumes"
msgstr "Nepodařilo se vypsat svazky"
#, c-format
msgid "Failed to make device %s"
msgstr "Selhalo vytvoření zařízení %s"
@@ -1191,7 +1147,7 @@ msgid ""
"Grouped commands:\n"
"\n"
msgstr ""
"Seskupené příkazy:\n"
"Příkazy:\n"
"\n"
#, c-format
@@ -1226,9 +1182,6 @@ msgstr "Rozhraní bylo úspěšně připojeno\n"
msgid "Interface detached successfully\n"
msgstr "Rozhraní bylo úspěšně odpojeno\n"
msgid "Interrupted by a signal"
msgstr "Přerušeno signálem"
msgid "Invalid CPU feature name"
msgstr "Neplatné jméno vlastnosti CPU"
@@ -1343,6 +1296,9 @@ msgstr "Chybí jméno vlastnosti CPU"
msgid "Missing CPU model name"
msgstr "Chybí jméno modelu CPU"
msgid "Missing CPU vendor name"
msgstr "Chybí jméno výrobce CPU"
msgid "Missing address"
msgstr "Chybí adresa"
@@ -1365,9 +1321,6 @@ msgstr "Volná paměť NUMA"
msgid "Name"
msgstr "Jméno"
msgid "Name or service not known"
msgstr "Neznámý název nebo služba"
msgid "Name:"
msgstr "Jméno:"
@@ -1616,12 +1569,6 @@ msgstr "uložit stav domény do souboru"
msgid "Renaming domains on migration not supported"
msgstr "Přejmenování domén během migrace není podporováno"
msgid "Request canceled"
msgstr "Požadavek zrušen"
msgid "Request not canceled"
msgstr "Požadavek nebyl zrušen"
#, c-format
msgid ""
"Requested number of virtual CPUs is greater than max allowable number of "
@@ -1754,9 +1701,6 @@ msgstr "Svazek nenalezen: %s"
msgid "Suspend a running domain."
msgstr "Uspat běžící doménu."
msgid "System error"
msgstr "Chyba systému"
msgid "The domain is not running"
msgstr "Doména neběží"
@@ -1768,9 +1712,6 @@ msgstr "Server přesměrovává z '%s'"
msgid "The server redirects from '%s' to '%s'"
msgstr "Server přesměrovává z '%s' na '%s'"
msgid "This function is not supported on WIN32 platform"
msgstr "Tato funkce není na platformě WIN32 podporována"
msgid "This host is not managed by a vCenter"
msgstr "Tento host není spravován vCenter"
@@ -1780,9 +1721,6 @@ msgstr "Vláken na jádro:"
msgid "Total"
msgstr "Celkem"
msgid "Try again?"
msgstr "Zkusit znovu?"
msgid "Type"
msgstr "Typ"
@@ -1840,9 +1778,6 @@ msgstr "Nelze zmigrovat %s na %s"
msgid "Unable to open %s"
msgstr "Nelze otevřít %s"
msgid "Unable to open /proc/mounts"
msgstr "Nelze otevřít /proc/mounts"
msgid "Unable to open UNIX socket"
msgstr "Nelze otevřít UNIXový socket"
@@ -2159,6 +2094,10 @@ msgstr "nelze otevřít cestu '%s'"
msgid "cannot open volume '%s'"
msgstr "nelze otevřít svazek '%s'"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "nelze parsovat mapování CPU pro architekturu %s"
#, c-format
msgid "cannot parse UUID '%s'"
msgstr "nelze parsovat UUID '%s'"
@@ -2178,10 +2117,6 @@ msgstr "nelze parsovat zařízení %s"
msgid "cannot parse instanceid parameter as a uuid"
msgstr "nelze parsovat parametr instanceid jako uuid"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "nelze parsovat json %s: %s"
#, c-format
msgid "cannot parse product %s"
msgstr "nelze parsovat produkt %s"
@@ -2314,9 +2249,6 @@ msgstr "chybná syntaxe konfiguračního souboru"
msgid "configuration file syntax error: %s"
msgstr "chybná syntaxe konfiguračního souboru: %s"
msgid "connect to daemon's admin server"
msgstr "připojit se ke správnímu serveru daného procesu služby"
msgid "connect to the guest console"
msgstr "připojit se k hostované konzoli"
@@ -2563,9 +2495,6 @@ msgstr "chyba při kopírování UUID"
msgid "error: "
msgstr "chyba:"
msgid "error: Out of memory\n"
msgstr "chyba: došla paměť\n"
#, c-format
msgid "expected syntax: --%s <%s>"
msgstr "očekávaná syntaxe: --%s <%s>"
@@ -2702,6 +2631,9 @@ msgstr "chyba při parsování konfigurační souboru"
msgid "failed to parse configuration file %s"
msgstr "chyba při parsování konfigurační souboru %s"
msgid "failed to parse xml document"
msgstr "selhalo parsovaní xml dokumentu"
msgid "failed to read XML"
msgstr "selhalo čtení XML"
@@ -2777,9 +2709,6 @@ msgstr "soubor obsahující XML popis svazku"
msgid "filter has no name"
msgstr "filtr nemá jméno"
msgid "for hardware virtualization"
msgstr "pro hardwarovou virtualizaci"
msgid "force device update"
msgstr "vynutit aktualizaci zařízení"
@@ -2833,9 +2762,6 @@ msgstr "jméno rozhraní"
msgid "internal error"
msgstr "vnitřní chyba"
msgid "internal use only"
msgstr "pouze pro vnitřní použití"
#, c-format
msgid "invalid '=' after option --%s"
msgstr "neplatné '=' po volbě --%s"
@@ -3452,12 +3378,6 @@ msgstr "uuid nebo jméno úložiště"
msgid "print help"
msgstr "vypsat nápovědu"
msgid "print help for this function"
msgstr "vypsat nápovědu k této funkci"
msgid "print the admin server URI"
msgstr "vypsat URI adresu správního serveru"
msgid "print the current directory"
msgstr "zobrazí jméno adresáře, ve kterém se právě nacházíte"
@@ -3599,9 +3519,6 @@ msgstr "cíl diskového zařízení"
msgid "target type must be specified for %s device"
msgstr "cíl musí být specifikován pro zařízení %s"
msgid "tcp"
msgstr "tcp"
#, c-format
msgid "template '%s' does not exist"
msgstr "template '%s' neexistuje"
@@ -3618,9 +3535,6 @@ msgstr "tato doména již existuje"
msgid "this network exists already"
msgstr "tato síť již existuje"
msgid "tls"
msgstr "tls"
msgid "too many drivers registered"
msgstr "registrováno příliš mnoho ovladačů"
@@ -3704,7 +3618,7 @@ msgstr "neočekávaný typ řadiče %d"
#, c-format
msgid "unexpected data '%s'"
msgstr "neočekávaná data %s"
msgstr "neočekávaná data '%s'"
#, c-format
msgid "unexpected disk bus %d"
@@ -3800,10 +3714,6 @@ msgstr "neočekávaná akce watchdogu %d"
msgid "unexpected watchdog model %d"
msgstr "neočekávaný model watchdogu %d"
#, c-format
msgid "unimplemented parameter type %d"
msgstr "neimplementovaný typ parametru %d"
msgid "unknown"
msgstr "neznámý"
@@ -3840,7 +3750,7 @@ msgstr "neznámý offset hodin '%s'"
#, c-format
msgid "unknown command: '%s'"
msgstr "neznámý příkaz: „%s"
msgstr "neznámý příkaz '%s'"
#, c-format
msgid "unknown dhcp peerdns value %s"
@@ -3920,9 +3830,6 @@ msgstr "neznámý typ rozhraní '%s'"
msgid "unknown memory balloon model '%s'"
msgstr "neznámý model ballon memory '%s'"
msgid "unknown option"
msgstr "neznámá volba"
#, c-format
msgid "unknown pci source type '%s'"
msgstr "neznámý typ '%s' pro zdroj pci"

View File

@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 05:01+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Welsh (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,4 +20,4 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
"11) ? 2 : 3;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -9,9 +9,9 @@
# Magnus Larsson <fedoratrans@gmail.com>, 2006.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 08:52+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/fedora/language/"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -19,9 +19,9 @@
# Florian H. <postfuerflo@gmail.com>, 2016. #zanata
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2016-04-01 11:32+0000\n"
"Last-Translator: Florian H. <postfuerflo@gmail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/libvirt/language/"
@@ -31,7 +31,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -255,6 +255,9 @@ msgstr "Vernetzung:"
msgid " Storage:"
msgstr "Speicher:"
msgid " block_io_throttle reply was missing device list"
msgstr "Der block_io_throttle Antwort fehlte die Einheiten-Liste"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -548,6 +551,10 @@ msgstr "'logical-id' fehlt in Antwort auf guest-get-vcpus"
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "'online' fehlt in Antwort auf guest-get-vcpus"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr ""
"'parent' für vHBA nicht angegeben, und kann keinen auf diesem Host finden"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'peak' und 'burst' benötigen 'average' Attribut"
@@ -891,6 +898,9 @@ msgstr "NAT '%s' wurde versucht. NAT ist nur für IPv4 unterstützt."
msgid "Attribute mode is only allowed for guest CPU"
msgstr "Attribut-Modus ist nur für Gäste CPU erlaubt"
msgid "Authentication Credentials not found"
msgstr "Authentifizierungs-Berechtigungen nicht gefunden"
msgid "Authentication failed"
msgstr "Authentifizierung gescheitert"
@@ -1376,6 +1386,9 @@ msgstr "Kann Ballon-Einheit Pfad nicht bestimmen"
msgid "Cannot determine free memory"
msgstr "Kann freien Speicher nicht bestimmen"
msgid "Cannot determine system clock HZ"
msgstr "Kann Systemuhr Hz nicht bestimmen"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "Kann Floppy %s nicht direkt anhängen"
@@ -1586,6 +1599,14 @@ msgstr "Socket-Adresse »%s« kann nicht verarbeitet werden: %s"
msgid "Cannot parse start time %s in %s"
msgstr "Start-Zeit %s in %s kann nicht analysiert werden"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "System-Status '%s' kann nicht analysiert werden"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "Benutzer-Status '%s' kann nicht analysiert werden"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1731,6 +1752,10 @@ msgstr ""
"Label kann nicht angegeben werden wenn Neuetikettierung ausgeschaltet ist. "
"model=%s"
#, c-format
msgid "Cannot stat %s"
msgstr "Kann Status %s nicht abrufen"
#, c-format
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
msgstr "Kann nicht HostVirtualSwitch der einen '%s' Port hat zurücksetzen"
@@ -1910,6 +1935,10 @@ msgstr ""
msgid "Command %s too long for destination"
msgstr "Befehl %s zu lang für Ziel"
#, c-format
msgid "Command '%s' is not found"
msgstr "Befehl '%s' nicht gefunden"
msgid "Commit aborted"
msgstr "Übergabe abgebrochen"
@@ -2029,6 +2058,27 @@ msgstr "Container ist nicht definiert"
msgid "Control groups not supported on this platform"
msgstr "Kontroll-Gruppen werden auf dieser Plattform nicht unterstützt"
#, c-format
msgid "Controller %d out of range"
msgstr "Controller %d ausserhalb des Bereiches"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "Controller '%s' ist nicht für Gruppe aktiviert"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "Controller '%s' ist nicht angeschlossen"
#, c-format
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
msgstr ""
"Controller '%s' ist nicht gesucht, aber '%s' ist gemeinsam angeschlossen"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "Controller '%s' nicht angeschlossen"
msgid "Controllers must use the 'ccid' address type"
msgstr "Controller müssen den »ccid«-Adresstyp verwenden"
@@ -2229,6 +2279,9 @@ msgstr "PhysicalNic mit Namen '%s' konnte nicht gefunden werden"
msgid "Could not find any 'network' element in status file"
msgstr "Konnte kein \"Netzwerk\" Element in Status-Datei finden"
msgid "Could not find any mounted controllers"
msgstr "Konnte keine angeschlossenen Controllers finden"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "Konnte die in '%s' angegebene Rechen-Ressource nicht finden"
@@ -2245,6 +2298,10 @@ msgstr "Datenspeicher mit absolutem Pfad '%s' konnte nicht gefunden werden"
msgid "Could not find datastore with name '%s'"
msgstr "Datenspeicher namens »%s« konnte nicht gefunden werden"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "Verzeichnis-Trennungszeichen in %s konnte nicht gefunden werden"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr "Domain-Snapshot mit internem Namen »%s« konnte nicht gefunden werden"
@@ -2280,6 +2337,10 @@ msgstr "Physische NIC mit MAC-Adresse '%s' konnte nicht gefunden werden"
msgid "Could not find physical NIC with name '%s'"
msgstr "Physische NIC mit Namen '%s' konnte nicht gefunden werden"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "Konnte keine Plazierung für Controller %s bei %s finden"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "Snapshot namens »%s« konnte nicht gefunden werden"
@@ -2983,6 +3044,10 @@ msgstr "Einheit %s existiert bereits"
msgid "Device %s detached\n"
msgstr "Einheit %s abgehängt\n"
#, c-format
msgid "Device %s in use"
msgstr "Einheit %s wird verwendet"
#, c-format
msgid "Device %s is already in use"
msgstr "Gerät %s wird bereits verwendet"
@@ -3862,6 +3927,10 @@ msgstr "Anfang der Netzwerk Konfig-Änderungs Transaktion gescheitert"
msgid "Failed to bind PCI device '%s' to %s"
msgstr "Verbinden von PCI-Gerät '%s' mit %s fehlgeschlagen"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "Verbinden von cgroup '%s' mit '%s' fehlgeschlagen"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "Verbinden von Verzeichnis %s mit %s fehlgeschlagen"
@@ -4017,6 +4086,10 @@ msgstr "Erstellen von Bind-Ziel %s fehlgeschlagen"
msgid "Failed to create bridge node in xml document"
msgstr "Erstellen des Bridge Knotens im XML-Dokument fehlgeschlagen"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "Erstellen Controller %s für Gruppe fehlgeschlagen"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "Fehler beim Anlegen des Verzeichnisses für '%s' dev '%s'"
@@ -4307,6 +4380,9 @@ msgstr "Fehler beim Erstellen eines neuen Namens für Schnittstelle %s"
msgid "Failed to get %s minor number"
msgstr "Abrufen der %s Minor-Nummer fehlgeschlagen"
msgid "Failed to get PCI Config Address String"
msgstr "Konnte PCI Konfigurationsadressen-String nicht erhalten"
msgid "Failed to get PCI SYSFS file"
msgstr "Konnte PCI SYSFS Datei nicht erhalten"
@@ -4577,6 +4653,10 @@ msgstr "Markierung der Domain %s als automatisch zu starten gescheitert"
msgid "Failed to mkdir %s"
msgstr "Anlegen des Verzeichnisses %s fehlgeschlagen"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "Anschließen von %s in %s Typ %s fehlgeschlagen"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "Anschließen von %s auf /dev fehlgeschlagen"
@@ -6540,6 +6620,13 @@ msgstr "Maximale Speichergröße, als skalierte ganze Zahl (Standard in KiB)"
msgid "Max memory:"
msgstr "Max Speicher:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr "Maximale CPUs größer als angegebene Maschinen-Typ Grenze"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "Speicher '%llu' muss kleiner sein als %llu"
msgid "Memory allocation failure"
msgstr "Fehler bei Speicherzuweisung"
@@ -6642,6 +6729,10 @@ msgstr "Fehlende »%s«-Eigenschaft"
msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr "Fehlende '%s' Eigenschaft bei der Suche nach ManagedEntityStatus"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "Fehlendes '/' Trennzeichen auf cgroup Anschluss '%s'"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "Fehlendes 'cores'-Attribut in CPU-Topologie"
@@ -6696,6 +6787,9 @@ msgstr "Fehlender CPU-Feature-Name"
msgid "Missing CPU model name"
msgstr "Fehlender CPU Modell-Name"
msgid "Missing CPU vendor name"
msgstr "Fehlender CPU-Herstellername"
msgid "Missing ID parameter for domain object"
msgstr "Fehlender ID-Parameter für Domain-Objekt"
@@ -6835,6 +6929,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "Fehlender oder ungültiger PVR Wert in CPU-Modell %s"
msgid "Missing or invalid auth pointer"
msgstr "Fehlender oder ungültiger Auth-Zeiger"
msgid "Missing ownerId data in JSON document"
msgstr "Fehlende ownerId Daten in JSON Dokument"
@@ -7263,6 +7360,9 @@ msgstr "Keine Argumente für Signatur %s vorhanden"
msgid "No authentication callback available"
msgstr "Kein Authentifikations-Rückruf zur Verfügung"
msgid "No authentication callback provided."
msgstr "Kein Authentifikation-Callback zur Verfügung gestellt."
msgid "No authentication methods and credentials provided"
msgstr ""
"Keine Authentifizierungsmethoden und Berechtigungsnachweise bereitgestellt"
@@ -8413,6 +8513,9 @@ msgstr "SCSI Disk Index (erstellt von '%s') ist zu groß"
msgid "SCSI host device doesn't support managed mode"
msgstr "SCSI-Host-Einheit unterstützt verwalteten Modus nicht"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "SCSI-Weiterleitung wird mit dieser Version von qemu nicht unterstützt"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr "SCSI Unit index %d außerhalb dem [0..6,8..15] Bereich"
@@ -9706,6 +9809,10 @@ msgstr "USB Einheit %s wird bereits verwendet"
msgid "USB host device is missing bus/device information"
msgstr "USB-Host-Gerät besitzt keine Bus/Geräte-Informationen"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr ""
"USB Start-Umleitung wird durch diese Version von QEMU nicht unterstützt"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr ""
"USB Umleitungs-Filter wird von dieser Version von QEMU nicht unterstützt"
@@ -9893,12 +10000,6 @@ msgstr "Konnte Socket-Datei-Handles nicht kopieren"
msgid "Unable to create %s"
msgstr "Erstellen von %s fehlgeschlagen"
msgid "Unable to create JSON formatter"
msgstr "JSON Formatter kann nicht erstellt werden"
msgid "Unable to create JSON parser"
msgstr "JSON Parser kann nicht erstellt werden"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "LPAR konnte nicht erstellt werden. Grund: »%s«"
@@ -9928,6 +10029,10 @@ msgstr "Kann Bridge-Einheit nicht erstellen"
msgid "Unable to create device %s"
msgstr "Kann Einheit %s nicht erstellen"
#, c-format
msgid "Unable to create directory %s"
msgstr "Konnte Verzeichnis %s nicht erstellen"
msgid "Unable to create epoll fd"
msgstr "Kann epoll fd nicht erstellen"
@@ -10377,9 +10482,6 @@ msgstr "%s kann nicht geöffnet werden (%d)"
msgid "Unable to open '%s'"
msgstr "'%s' kann nicht geöffnet werden"
msgid "Unable to open /proc/mounts"
msgstr "/proc/mounts kann nicht geöffnet werden"
msgid "Unable to open UNIX socket"
msgstr "UNIX Socket kann nicht geöffnet werden"
@@ -10671,6 +10773,10 @@ msgstr "Kann STP auf %s auf dieser Plattform nicht setzen"
msgid "Unable to set VM logfile close-on-exec flag"
msgstr "Kann das close-on-exec-Flag der VM-Log-Datei nicht setzen"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "Bridge %s %s kann nicht gesetzt werden"
msgid "Unable to set cloexec flag"
msgstr "Kann cloexec Flag nicht setzen"
@@ -10733,6 +10839,10 @@ msgstr "Kann Bind-Quelle %s nicht statistisch erfassen"
msgid "Unable to stat bind target %s"
msgstr "Konnte stat für Bind-Ziel %s nicht erhalten"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "Erstellen Symbolisches Link-Verzeichniss %s zu %s fehlgeschlagen"
#, c-format
msgid "Unable to truncate %s"
msgstr "Kann %s nicht kürzen"
@@ -10863,6 +10973,9 @@ msgstr "Unerwarteter dconnuri Parameter bei Non-Peer2Peer Migration"
msgid "Unexpected disk sgio mode '%d'"
msgstr "Unerwarteter Festplatten sgio Modus '%d'"
msgid "Unexpected error"
msgstr "Unerwarteter Fehler"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "Unerwarteter Dateisystem Typ %s"
@@ -11357,6 +11470,9 @@ msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
msgstr ""
"VMX Eintragung 'sched.cpu.affinity' enthält ein %d, dieser Wert ist zu groß"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "VNC WebSockets werden von dieser QEMU-Programmdatei nicht unterstützt"
msgid "VNC supports connected='keep' only"
msgstr "VNC unterstützt nur connected='keep'"
@@ -11976,6 +12092,31 @@ msgstr "Boot-Reihenfolge '%s' für mehr als eine Einheit verwendet"
msgid "booted"
msgstr "gestartet"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr ""
"Starten von PCI-Einheiten, die mit VFIO zugewiesen sind, wird durch diese "
"Version von QEMU nicht unterstützt"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr ""
"Booten von zugewiesenen PCI-Geräten ist mit dieser Version von QEMU "
"unterstützt nicht"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr ""
"Starten von zugewiesenen SCSI-Einheiten wird durch diese Version von QEMU "
"nicht unterstützt"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr ""
"Starten von zugewiesenen USB-Einheiten wird durch diese Version von QEMU "
"nicht unterstützt"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr ""
@@ -12505,6 +12646,9 @@ msgstr "Kann Sicherheits-Props %d (%s) nicht erhalten"
msgid "cannot get the host uuid"
msgstr "Kann Host UUID nicht ermitteln"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "Kann den Pfad des MEMORY cgroup Controllers nicht erhalten"
msgid "cannot get vCPU placement & pCPU time"
msgstr "Kann vCPU-Platzierung & pCPU-Zeit nicht ermitteln"
@@ -12665,6 +12809,10 @@ msgstr "Kann Datenträger '%s' nicht öffnen"
msgid "cannot parse %s version number in '%.*s'"
msgstr "Kann nicht %s Versions-Number in '%.*s' analysieren"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "CPU-Map für %s-Architektur kann nicht geparst werden"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "Kann CPU-Topologie '%s' nicht parsen"
@@ -12757,10 +12905,6 @@ msgstr "kann interfaceid Parameter nicht als ein uuid analysieren"
msgid "cannot parse io mode '%s'"
msgstr "E/A-Modus »%s« kann nicht verarbeitet werden"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "Kann json %s: %s nicht parsen"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "NBD-Dateiname »%s« kann nicht verarbeitet werden"
@@ -13199,6 +13343,14 @@ msgstr "cellNum in %s muss kleiner oder gleich sein zu %d"
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "cellNum in %s akzeptiert nur %d als einen negativen Wert"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' muss im Bereich (1000, 1000000) sein"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' muss im Bereich (1000, %llu) sein"
msgid "cgroup CPU controller is not mounted"
msgstr "cgroup CPU Controller ist nicht angeschlossen"
@@ -13347,6 +13499,10 @@ msgstr "Konfig"
msgid "config data file to import from"
msgstr "Konfigurationsdatendatei, aus der importiert werden soll"
#, c-format
msgid "config value %s not a string"
msgstr "Konfigurationswert %s kein String"
#, c-format
msgid "config value %s was malformed"
msgstr "Konfigurationswert %s war fehlerhaft"
@@ -13355,6 +13511,10 @@ msgstr "Konfigurationswert %s war fehlerhaft"
msgid "config value %s was missing"
msgstr "Konfigurationswert %s fehlte"
#, c-format
msgid "config value %s was not a string"
msgstr "Konfigurationswert %s war kein String"
msgid "configuration file syntax error"
msgstr "Syntaxfehler in der Konfigurationsdatei"
@@ -15052,6 +15212,9 @@ msgstr "Konnte QEMU Einheiten-Liste nicht analysieren"
msgid "failed to parse value of %s"
msgstr "Analyse des Wertes von %s fehlgeschlagen"
msgid "failed to parse xml document"
msgstr "Parsen des XML-Dokuments fehlgeschlagen"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "Job auf Disk %s konnte nicht gedreht werden"
@@ -15123,6 +15286,9 @@ msgid "failed to retrieve decision to accept host key"
msgstr ""
"Entscheidung, den Hostschlüssel zu akzeptieren, konnte nicht abgerufen werden"
msgid "failed to retrieve password"
msgstr "Abrufen von Passwort fehlgeschlagen"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr ""
"Private Schlüssel-Passphrase konnte nicht abgerufen werden: Rückruf ist "
@@ -15619,6 +15785,9 @@ msgstr "Hub Typ %s nicht unterstützt"
msgid "hypervisor connection URI"
msgstr "Hypervisor Verbindungs-URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "Hypervisor fehlt deviceboot Funktion"
msgid "iSCSI storage pool does not support volume creation"
msgstr "ISCSI Speicherpool unterstützt keine Datenträger-Erstellung"
@@ -16776,6 +16945,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "memballoon nicht unterstützt mit Adressen Typ '%s'"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "Speicher Attribute: [file=]Name[,snapshot=Typ]"
@@ -17693,6 +17866,9 @@ msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr ""
"Kein Anruf wartet auf Antwort mit Program %d Version %d Seriennummer %d"
msgid "no callback provided"
msgstr "kein Callback zur Verfügung gestellt"
msgid "no client username was found"
msgstr "kein Client-Benutzername gefunden"
@@ -17719,6 +17895,10 @@ msgstr "Keine Einheit gefunden mit Alias %s"
msgid "no disk format for %s and probing is disabled"
msgstr "kein Datenträger-Format für %s und Sondieren ist deaktiviert"
#, c-format
msgid "no disk found with alias %s"
msgstr "Kein Laufwerk gefunden mit Alias %s"
#, c-format
msgid "no disk named '%s'"
msgstr "Keine Disk namens '%s'"
@@ -19864,6 +20044,9 @@ msgstr "nicht in der Lage Snapshots Filterung durchzuführen"
msgid "unable to poll on child"
msgstr "konnte nicht auf Unterelement abfragen"
msgid "unable to probe for add-fd"
msgstr "Konnte nicht für add-fd sondieren"
msgid "unable to read child stderr"
msgstr "konnte stderr des Unterelements nicht lesen"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: German (Switzerland)\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -7,9 +7,9 @@
# Pierros Papadeas <pierros@papadeas.gr>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-27 04:41+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/fedora/language/"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
#, c-format
msgid "Bridge generation exceeded max id %d"
@@ -258,6 +258,9 @@ msgstr "η σύνδεση είναι ήδη ανοικτή"
msgid "connection not open"
msgstr "η σύνδεση δεν είναι ανοικτή"
msgid "failed to parse xml document"
msgstr "αδυναμία ερμηνείας του εγγράφου XML"
msgid "interface has no name"
msgstr "η διεπαφή/προσαρμογέας (interface) δεν έχει όνομα"

View File

@@ -9,9 +9,9 @@
# readmanr <robert_readman@hotmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-24 06:05+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -283,6 +283,9 @@ msgstr " Networking:"
msgid " Storage:"
msgstr " Storage:"
msgid " block_io_throttle reply was missing device list"
msgstr " block_io_throttle reply was missing device list"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -580,6 +583,9 @@ msgstr "'logical-id' missing in reply of guest-get-vcpus"
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "'online' missing in reply of guest-get-vcpus"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr "'parent' for vHBA not specified, and cannot find one on this host"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'peak' and 'burst' require 'average' attribute"
@@ -916,6 +922,9 @@ msgstr "Attempted to NAT '%s'. NAT is only supported for IPv4."
msgid "Attribute mode is only allowed for guest CPU"
msgstr "Attribute mode is only allowed for guest CPU"
msgid "Authentication Credentials not found"
msgstr "Authentication Credentials not found"
msgid "Authentication failed"
msgstr "Authentication failed"
@@ -1383,6 +1392,9 @@ msgstr "Cannot determine balloon device path"
msgid "Cannot determine free memory"
msgstr "Cannot determine free memory"
msgid "Cannot determine system clock HZ"
msgstr "Cannot determine system clock HZ"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "Cannot directly attach floppy %s"
@@ -1590,6 +1602,14 @@ msgstr "Cannot parse socket address '%s': %s"
msgid "Cannot parse start time %s in %s"
msgstr "Cannot parse start time %s in %s"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "Cannot parse sys stat '%s'"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "Cannot parse user stat '%s'"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1730,6 +1750,10 @@ msgstr "Cannot share uninitialised CURL handle"
msgid "Cannot specify a label if relabelling is turned off. model=%s"
msgstr "Cannot specify a label if relabelling is turned off. model=%s"
#, c-format
msgid "Cannot stat %s"
msgstr "Cannot stat %s"
#, c-format
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
msgstr "Cannot undefine HostVirtualSwitch that has a '%s' port"
@@ -1901,6 +1925,10 @@ msgstr ""
msgid "Command %s too long for destination"
msgstr "Command %s too long for destination"
#, c-format
msgid "Command '%s' is not found"
msgstr "Command '%s' is not found"
msgid "Commit aborted"
msgstr "Commit aborted"
@@ -2011,6 +2039,26 @@ msgstr "Container is not defined"
msgid "Control groups not supported on this platform"
msgstr "Control groups not supported on this platform"
#, c-format
msgid "Controller %d out of range"
msgstr "Controller %d out of range"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "Controller '%s' is not enabled for group"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "Controller '%s' is not mounted"
#, c-format
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
msgstr "Controller '%s' is not wanted, but '%s' is co-mounted"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "Controller '%s' not mounted"
msgid "Controllers must use the 'ccid' address type"
msgstr "Controllers must use the 'ccid' address type"
@@ -2205,6 +2253,9 @@ msgstr "Could not find PhysicalNic with name '%s'"
msgid "Could not find any 'network' element in status file"
msgstr "Could not find any 'network' element in status file"
msgid "Could not find any mounted controllers"
msgstr "Could not find any mounted controllers"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "Could not find compute resource specified in '%s'"
@@ -2221,6 +2272,10 @@ msgstr "Could not find datastore containing absolute path '%s'"
msgid "Could not find datastore with name '%s'"
msgstr "Could not find datastore with name '%s'"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "Could not find directory separator in %s"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr "Could not find domain snapshot with internal name '%s'"
@@ -2256,6 +2311,10 @@ msgstr "Could not find physical NIC with MAC address '%s'"
msgid "Could not find physical NIC with name '%s'"
msgstr "Could not find physical NIC with name '%s'"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "Could not find placement for controller %s at %s"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "Could not find snapshot with name '%s'"
@@ -2935,6 +2994,10 @@ msgstr "Device %s already exists"
msgid "Device %s detached\n"
msgstr "Device %s detached\n"
#, c-format
msgid "Device %s in use"
msgstr "Device %s in use"
#, c-format
msgid "Device %s is already in use"
msgstr "Device %s is already in use"
@@ -3781,6 +3844,10 @@ msgstr "Failed to begin network config change transaction"
msgid "Failed to bind PCI device '%s' to %s"
msgstr "Failed to bind PCI device '%s' to %s"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "Failed to bind cgroup '%s' on '%s'"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "Failed to bind mount directory %s to %s"
@@ -3936,6 +4003,10 @@ msgstr "Failed to create bind target %s"
msgid "Failed to create bridge node in xml document"
msgstr "Failed to create bridge node in xml document"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "Failed to create controller %s for group"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "Failed to create directory for '%s' dev '%s'"
@@ -4219,6 +4290,9 @@ msgstr "Failed to generate new name for interface %s"
msgid "Failed to get %s minor number"
msgstr "Failed to get %s minor number"
msgid "Failed to get PCI Config Address String"
msgstr "Failed to get PCI Config Address String"
msgid "Failed to get PCI SYSFS file"
msgstr "Failed to get PCI SYSFS file"
@@ -4488,6 +4562,10 @@ msgstr "Failed to mark domain %s as autostarted"
msgid "Failed to mkdir %s"
msgstr "Failed to mkdir %s"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "Failed to mount %s on %s type %s"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "Failed to mount %s on /dev"
@@ -6419,6 +6497,13 @@ msgstr "Max memory, as scaled integer (default KiB)"
msgid "Max memory:"
msgstr "Max memory:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr "Maximum CPUs greater than specified machine type limit"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "Memory '%llu' must be less than %llu"
msgid "Memory allocation failure"
msgstr "Memory allocation failure"
@@ -6524,6 +6609,10 @@ msgstr "Missing '%s' property"
msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr "Missing '%s' property while looking for ManagedEntityStatus"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "Missing '/' separator in cgroup mount '%s'"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "Missing 'cores' attribute in CPU topology"
@@ -6578,6 +6667,9 @@ msgstr "Missing CPU feature name"
msgid "Missing CPU model name"
msgstr "Missing CPU model name"
msgid "Missing CPU vendor name"
msgstr "Missing CPU vendor name"
msgid "Missing ID parameter for domain object"
msgstr "Missing ID parameter for domain object"
@@ -6717,6 +6809,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "Missing or invalid PVR value in CPU model %s"
msgid "Missing or invalid auth pointer"
msgstr "Missing or invalid auth pointer"
msgid "Missing ownerId data in JSON document"
msgstr "Missing ownerId data in JSON document"
@@ -7135,6 +7230,9 @@ msgstr "No args present for signature %s"
msgid "No authentication callback available"
msgstr "No authentication callback available"
msgid "No authentication callback provided."
msgstr "No authentication callback provided."
msgid "No authentication methods and credentials provided"
msgstr "No authentication methods and credentials provided"
@@ -8252,6 +8350,9 @@ msgstr "SCSI disk index (parsed from '%s') is too large"
msgid "SCSI host device doesn't support managed mode"
msgstr "SCSI host device doesn't support managed mode"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "SCSI passthrough is not supported by this version of qemu"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr "SCSI unit index %d out of [0..6,8..15] range"
@@ -9519,6 +9620,9 @@ msgstr "USB device %s is already in use"
msgid "USB host device is missing bus/device information"
msgstr "USB host device is missing bus/device information"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr "USB redirection booting is not supported by this version of QEMU"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr "USB redirection filter is not supported by this version of QEMU"
@@ -9703,12 +9807,6 @@ msgstr "Unable to copy socket file handle"
msgid "Unable to create %s"
msgstr "Unable to create %s"
msgid "Unable to create JSON formatter"
msgstr "Unable to create JSON formatter"
msgid "Unable to create JSON parser"
msgstr "Unable to create JSON parser"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "Unable to create LPAR. Reason: '%s'"
@@ -9738,6 +9836,10 @@ msgstr "Unable to create bridge device"
msgid "Unable to create device %s"
msgstr "Unable to create device %s"
#, c-format
msgid "Unable to create directory %s"
msgstr "Unable to create directory %s"
msgid "Unable to create epoll fd"
msgstr "Unable to create epoll fd"
@@ -10190,9 +10292,6 @@ msgstr "Unable to open '%s'"
msgid "Unable to open /dev/loop-control"
msgstr "Unable to open /dev/loop-control"
msgid "Unable to open /proc/mounts"
msgstr "Unable to open /proc/mounts"
msgid "Unable to open UNIX socket"
msgstr "Unable to open UNIX socket"
@@ -10479,6 +10578,10 @@ msgstr "Unable to set STP on %s on this platform"
msgid "Unable to set VM logfile close-on-exec flag"
msgstr "Unable to set VM logfile close-on-exec flag"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "Unable to set bridge %s %s"
msgid "Unable to set cloexec flag"
msgstr "Unable to set cloexec flag"
@@ -10541,6 +10644,10 @@ msgstr "Unable to stat bind source %s"
msgid "Unable to stat bind target %s"
msgstr "Unable to stat bind target %s"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "Unable to symlink directory %s to %s"
#, c-format
msgid "Unable to truncate %s"
msgstr "Unable to truncate %s"
@@ -10665,6 +10772,9 @@ msgstr "Unexpected dconnuri parameter with non-peer2peer migration"
msgid "Unexpected disk sgio mode '%d'"
msgstr "Unexpected disk sgio mode '%d'"
msgid "Unexpected error"
msgstr "Unexpected error"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "Unexpected filesystem type %s"
@@ -11148,6 +11258,9 @@ msgstr "VMX entry 'name' contains invalid escape sequence"
msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
msgstr "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "VNC WebSockets are not supported with this QEMU binary"
msgid "VNC supports connected='keep' only"
msgstr "VNC supports connected='keep' only"
@@ -11744,6 +11857,28 @@ msgstr "boot order '%s' used for more than one device"
msgid "booted"
msgstr "booted"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr ""
"booting from assigned USB devices is not supported with this version of qemu"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr ""
@@ -12272,6 +12407,9 @@ msgstr "cannot get security props %d (%s)"
msgid "cannot get the host uuid"
msgstr "cannot get the host uuid"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "cannot get the path of MEMORY cgroup controller"
msgid "cannot get vCPU placement & pCPU time"
msgstr "cannot get vCPU placement & pCPU time"
@@ -12438,6 +12576,10 @@ msgstr "cannot open volume '%s'"
msgid "cannot parse %s version number in '%.*s'"
msgstr "cannot parse %s version number in '%.*s'"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "cannot parse CPU map for %s architecture"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "cannot parse CPU topology '%s'"
@@ -12529,10 +12671,6 @@ msgstr "cannot parse interfaceid parameter as a uuid"
msgid "cannot parse io mode '%s'"
msgstr "cannot parse io mode '%s'"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "cannot parse json %s: %s"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "cannot parse nbd filename '%s'"
@@ -12969,6 +13107,14 @@ msgstr "cellNum in %s must be less than or equal to %d"
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "cellNum in %s only accepts %d as a negative value"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' must be in range (1000, 1000000)"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' must be in range (1000, %llu)"
msgid "cgroup CPU controller is not mounted"
msgstr "cgroup CPU controller is not mounted"
@@ -13111,6 +13257,10 @@ msgstr "config"
msgid "config data file to import from"
msgstr "config data file to import from"
#, c-format
msgid "config value %s not a string"
msgstr "config value %s not a string"
#, c-format
msgid "config value %s was malformed"
msgstr "config value %s was malformed"
@@ -13119,6 +13269,10 @@ msgstr "config value %s was malformed"
msgid "config value %s was missing"
msgstr "config value %s was missing"
#, c-format
msgid "config value %s was not a string"
msgstr "config value %s was not a string"
msgid "configuration file syntax error"
msgstr "configuration file syntax error"
@@ -14802,6 +14956,9 @@ msgstr "failed to parse qemu device list"
msgid "failed to parse value of %s"
msgstr "failed to parse value of %s"
msgid "failed to parse xml document"
msgstr "failed to parse xml document"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "failed to pivot job for disk %s"
@@ -14875,6 +15032,9 @@ msgstr "failed to retrieve credentials"
msgid "failed to retrieve decision to accept host key"
msgstr "failed to retrieve decision to accept host key"
msgid "failed to retrieve password"
msgstr "failed to retrieve password"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr "failed to retrieve private key passphrase: callback has failed"
@@ -15358,6 +15518,9 @@ msgstr "hub type %s not supported"
msgid "hypervisor connection URI"
msgstr "hypervisor connection URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "hypervisor lacks deviceboot feature"
msgid "iSCSI storage pool does not support volume creation"
msgstr "iSCSI storage pool does not support volume creation"
@@ -16518,6 +16681,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "memballoon unsupported with address type '%s'"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "memory attributes: [file=]name[,snapshot=type]"
@@ -17419,6 +17586,9 @@ msgstr "no block device path supplied for '%s'"
msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr "no call waiting for reply with prog %d vers %d serial %d"
msgid "no callback provided"
msgstr "no callback provided"
msgid "no client username was found"
msgstr "no client username was found"
@@ -17445,6 +17615,10 @@ msgstr "no device found with alias %s"
msgid "no disk format for %s and probing is disabled"
msgstr "no disk format for %s and probing is disabled"
#, c-format
msgid "no disk found with alias %s"
msgstr "no disk found with alias %s"
#, c-format
msgid "no disk named '%s'"
msgstr "no disk named '%s'"
@@ -19538,6 +19712,9 @@ msgstr "unable to perform snapshot filtering"
msgid "unable to poll on child"
msgstr "unable to poll on child"
msgid "unable to probe for add-fd"
msgstr "unable to probe for add-fd"
msgid "unable to read child stderr"
msgstr "unable to read child stderr"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Esperanto\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -26,7 +26,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-03-10 04:16+0000\n"
"Last-Translator: Javier Blanco <javi.deb@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/libvirt/language/"
@@ -36,7 +36,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -228,6 +228,9 @@ msgstr "Red:"
msgid " Storage:"
msgstr "Almacenaje:"
msgid " block_io_throttle reply was missing device list"
msgstr "A la lista de dispositivo le falta block_io_throttle"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -507,6 +510,11 @@ msgstr "'logical-id' falta en respuesta de guest-get-vcpus"
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "'online' falta en respuesta de guest-get-vcpus"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr ""
"'parent' para vHBA no está especificado, y no puede encontrar uno en este "
"host"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'peak' y 'burst' requieren atributo 'average'"
@@ -832,6 +840,9 @@ msgstr "Intentó NAT '%s'. NAT solamente tiene soporte para IPv4."
msgid "Attribute mode is only allowed for guest CPU"
msgstr "El modo de atributo solo es permitido para la CPU del huésped"
msgid "Authentication Credentials not found"
msgstr "No se han encontrado credenciales de autenticación"
msgid "Authentication failed"
msgstr "Falló la autenticación"
@@ -1322,6 +1333,9 @@ msgstr "No se puede determinar ruta de dispositivo de globo"
msgid "Cannot determine free memory"
msgstr "No se puede determinar memoria libre"
msgid "Cannot determine system clock HZ"
msgstr "No se puede determinar el reloj del sistema HZ"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "No es posible asociar directamente disquetera %s"
@@ -1532,6 +1546,14 @@ msgstr "No se puede leer dirección de socket '%s': %s "
msgid "Cannot parse start time %s in %s"
msgstr "No se puede analizar tiempo de inicio %s en %s"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "No se puede analizar el estado del sistema '%s'"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "No se puede analizar el estatus del usuario '%s'"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1679,6 +1701,10 @@ msgstr ""
"No se puede especificar una etiqueta si el reetiquetado es turned off. model="
"%s"
#, c-format
msgid "Cannot stat %s"
msgstr "No se puede obtener el estado de %s"
#, c-format
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
msgstr ""
@@ -1854,6 +1880,10 @@ msgstr "Close callback para dominio %s ya está registrada con otra conexión %p
msgid "Command %s too long for destination"
msgstr "El comando %s es demasiado extenso para el destino"
#, c-format
msgid "Command '%s' is not found"
msgstr "No se halló comando '%s'"
msgid "Commit aborted"
msgstr "Envío interrumpido"
@@ -1969,6 +1999,26 @@ msgstr "El contenedor no está definido"
msgid "Control groups not supported on this platform"
msgstr "Los grupos de control no tienen soporte en esta plataforma"
#, c-format
msgid "Controller %d out of range"
msgstr "El controlador %d está fuera de rango"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "El controlador '%s' no está habilitado para grupo"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "El controlador '%s' no está montado"
#, c-format
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
msgstr "El controlador '%s' no se necesita, pero '%s' se co-montó"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "El controlador '%s' no está montado"
msgid "Controllers must use the 'ccid' address type"
msgstr "Los controladores deben utilizar el tipo de dirección 'ccid'"
@@ -2161,6 +2211,9 @@ msgstr "No se encontró PhysicalNic con nombre '%s'"
msgid "Could not find any 'network' element in status file"
msgstr "No se pudo encontrar ningún elemento 'network' en archivo de estatus"
msgid "Could not find any mounted controllers"
msgstr "No se pudo encontrar ningún controlador montado"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "No se pudo hallar el recurso 'compute' especificado en '%s'"
@@ -2178,6 +2231,10 @@ msgstr ""
msgid "Could not find datastore with name '%s'"
msgstr "No se pudo encontrar un almacenamiento de datos cuyo nombre sea '%s'"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "No se pudo encontrar directorio para separador en %s"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr ""
@@ -2215,6 +2272,10 @@ msgstr "No se encontró NIC físico con dirección MAC '%s'"
msgid "Could not find physical NIC with name '%s'"
msgstr "No se encontró NIC físico con nombre '%s'"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "No es posible encontrar lugar para el controlador %s en %s "
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "No se pudo encontrar una captura instantánea con el nombre '%s'"
@@ -2924,6 +2985,10 @@ msgstr "Dispositivo %s ya existe"
msgid "Device %s detached\n"
msgstr "Dispositivo %s desconectado\n"
#, c-format
msgid "Device %s in use"
msgstr "Dispositivo %s en uso"
#, c-format
msgid "Device %s is already in use"
msgstr "el nombre del puente '%s' ya está siendo utilizado."
@@ -3810,6 +3875,10 @@ msgstr "Falló al iniciar transacción de cambio de network config"
msgid "Failed to bind PCI device '%s' to %s"
msgstr "Falló al asociar dispositivo PCI '%s' con %s"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "No se pudo vincular cgroup '%s' en '%s'"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "Falló al vincular el directorio de montaje %s a %s"
@@ -3964,6 +4033,10 @@ msgstr "Falló al crear destino de vinculación %s"
msgid "Failed to create bridge node in xml document"
msgstr "Falló al crear nodo de puente en documento XML"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "No se pudo crear controlador %s para grupo"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "No se pudo crear directorio para '%s' dev '%s'"
@@ -4252,6 +4325,9 @@ msgstr "No se pudo generar un nuevo nombre para la interfaz %s"
msgid "Failed to get %s minor number"
msgstr "Falló al obtener el número menor de %s"
msgid "Failed to get PCI Config Address String"
msgstr "Falló al obtener cadena de dirección de configuración PCI"
msgid "Failed to get PCI SYSFS file"
msgstr "Falló al obtener el archivo PCI SYSFS"
@@ -4525,6 +4601,10 @@ msgstr "Falló al marcar el dominio %s como iniciado automáticamente"
msgid "Failed to mkdir %s"
msgstr "Falló al crear el directorio %s"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "No se pudo montar %s en %s tipo %s"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "No se pudo montar %s en /dev"
@@ -6450,6 +6530,15 @@ msgstr "Memoria máxima, como entero escalado (predeterminado Kib)"
msgid "Max memory:"
msgstr "Memoria máxima:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr ""
"El número máximo de CPU es mayor que el límite de tipo de máquina "
"especificado"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "La memoria '%llu' debe ser menor que %llu"
msgid "Memory allocation failure"
msgstr "Falla en en alojamiento de la memoria"
@@ -6554,6 +6643,10 @@ msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr ""
"No se ha encontrado la propiedad '%s' cuando se buscaba ManagedEntityStatus"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "Falta el separadro '/' en montaje de cgroup mount '%s'"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "No se encuentra atributo 'cores' en la topología de CPU "
@@ -6608,6 +6701,9 @@ msgstr "No se encuentra nombre de funcionalidad de CPU"
msgid "Missing CPU model name"
msgstr "No se encuentra el nombre del modelo de la CPU"
msgid "Missing CPU vendor name"
msgstr "No se encuentra el nombre del vendedor de la CPU"
msgid "Missing ID parameter for domain object"
msgstr "Falta parámetro de ID para objeto de domain"
@@ -6752,6 +6848,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "Falta el valor PVR o el valor es inválido en el modelo de CPU %s"
msgid "Missing or invalid auth pointer"
msgstr "Falta o es inválido el apuntador auth"
msgid "Missing ownerId data in JSON document"
msgstr "Faltan datos de ownerId en documento JSON"
@@ -7191,6 +7290,9 @@ msgstr "No hay argumentos presentes para firma %s"
msgid "No authentication callback available"
msgstr "No se ha suministrado una retrollamada de autenticación."
msgid "No authentication callback provided."
msgstr "No se ha suministrado una retrollamada de autenticación."
msgid "No authentication methods and credentials provided"
msgstr "No se han provisto métodos de autenticación y credenciales"
@@ -8341,6 +8443,9 @@ msgstr "El índice de disco SCSI (analizado desde '%s') es demasiado extenso"
msgid "SCSI host device doesn't support managed mode"
msgstr "Dispositivo de host SCSI no soporta modo administrado"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "Paso SCSI no tiene soporte para esta versión de QEMU"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr ""
@@ -9642,6 +9747,11 @@ msgstr "El dispositivo de USB %s ya está en uso"
msgid "USB host device is missing bus/device information"
msgstr "El dispositivo de equipo USB no posee información bus/dispositivo"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr ""
"El arranque de redirección de USB no está soportado por la versión de este "
"QEMU"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr "Este QEMU no soporta filtro de redirección USB "
@@ -9822,12 +9932,6 @@ msgstr "No es posible copiar manejo de archivo de socket"
msgid "Unable to create %s"
msgstr "No se puede crear %s"
msgid "Unable to create JSON formatter"
msgstr "No se puede crear formateador de JSON"
msgid "Unable to create JSON parser"
msgstr "No se puede crear lector de JSON"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "No es posible crear LPAR. El motivo: '%s'"
@@ -9857,6 +9961,10 @@ msgstr "No se puede crear dispositivo de puente "
msgid "Unable to create device %s"
msgstr "No se puede crear dispositivo %s"
#, c-format
msgid "Unable to create directory %s"
msgstr "No se puede crear directorio %s"
msgid "Unable to create epoll fd"
msgstr "No se puede crear FD epoll"
@@ -10302,9 +10410,6 @@ msgstr "No es posible abrir %s (%d)"
msgid "Unable to open '%s'"
msgstr "No es posible abrir '%s'"
msgid "Unable to open /proc/mounts"
msgstr "No es posible abrir /proc/mounts"
msgid "Unable to open UNIX socket"
msgstr "Incapaz de abrir el socket UNIX"
@@ -10599,6 +10704,10 @@ msgid "Unable to set VM logfile close-on-exec flag"
msgstr ""
"No es posible establecer marca de archivo de registro de MV close-on-exec"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "No se puede establecer puente %s %s"
msgid "Unable to set cloexec flag"
msgstr "No se pudo establecer indicador cloexec"
@@ -10661,6 +10770,10 @@ msgstr "No se puede 'stat bind' source %s"
msgid "Unable to stat bind target %s"
msgstr "No se puede 'stat bind' target %s"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "No se puede 'symlink' el directorio %s a %s"
#, c-format
msgid "Unable to truncate %s"
msgstr "No es posible truncar %s"
@@ -10790,6 +10903,9 @@ msgstr "Parámetro dconnuri inesperado con migración non-peer2peer"
msgid "Unexpected disk sgio mode '%d'"
msgstr "No se esperaba modo sgio de disco '%d' "
msgid "Unexpected error"
msgstr "Error inesperado"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "Tipo de sistema de archivos inesperado %s"
@@ -11279,6 +11395,9 @@ msgstr ""
"La entrada VMX 'sched.cpu.affinity' contiene un %d, y este valor es "
"demasiado extenso"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "VNC WebSockets no tienen soporte con este binario QEMU"
msgid "VNC supports connected='keep' only"
msgstr "VNC solo tiene soporta para connected='keep'"
@@ -11894,6 +12013,31 @@ msgstr "orden de arranque '%s' se utiliza más que una de dispositivo"
msgid "booted"
msgstr "iniciado"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr ""
"El arranque desde dispositivos PCI asignado con VFIO no tiene soporte con "
"esta versión de QEMU"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr ""
"El arranque desde los dispositivos PCI no es compatible con la versión de "
"qemu"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr ""
"Arranque desde dispositivos asignados SCSI solo tiene soporte con esta "
"versión de QEMU"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr ""
"Arranque desde dispositivos USB asignados no tiene soporte con esta versión "
"de QEMU"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr ""
@@ -12439,6 +12583,9 @@ msgstr "No se pueden obtener ayuda de seguridad %d (%s)"
msgid "cannot get the host uuid"
msgstr "no es posible obtener el uuid del equipo"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "No se puede obtener ruta de controlador de MEMORY cgroup"
msgid "cannot get vCPU placement & pCPU time"
msgstr "no es posible obtener el lugar de vCPU ni la hora pCPU"
@@ -12602,6 +12749,10 @@ msgstr "no e posible abrir el volumen '%s'"
msgid "cannot parse %s version number in '%.*s'"
msgstr "No se puede analizar el número de la versión %s en '%.*s'"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "No es posible analizar el mapa de la CPU para la arquitectura %s"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "No es posible analizar la topología '%s' de la CPU"
@@ -12694,10 +12845,6 @@ msgstr "No se puede leer parámetro interfaceid como un UUID"
msgid "cannot parse io mode '%s'"
msgstr "No se puede leer modo io '%s'"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "no es posible analizar json %s: %s"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "No se puede leer nombre de archivo nbd '%s'"
@@ -13141,6 +13288,14 @@ msgstr "cellNum en %s debe ser menor que o igual a %d"
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "cellNum en %s únicamente acepta %d como un valor negativo"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' debe estar en el rango (1000, 1000000)"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' debe estar en el rango (1000, %llu)"
msgid "cgroup CPU controller is not mounted"
msgstr "No está montado el controlador de CPU cgroup "
@@ -13289,6 +13444,10 @@ msgstr "Configuración"
msgid "config data file to import from"
msgstr "configuración de datos de archivo desde donde importar"
#, c-format
msgid "config value %s not a string"
msgstr "config value %s not a string"
#, c-format
msgid "config value %s was malformed"
msgstr "el valor de configuración %s había sido creado erróneamente"
@@ -13297,6 +13456,10 @@ msgstr "el valor de configuración %s había sido creado erróneamente"
msgid "config value %s was missing"
msgstr "no se encontraba el valor de configuración %s"
#, c-format
msgid "config value %s was not a string"
msgstr "el valor de configuración %s no era una cadena"
msgid "configuration file syntax error"
msgstr "error de sintaxis en el archivo de configuración"
@@ -14999,6 +15162,9 @@ msgstr "No se pudo analizar lista de dispositivo QEMU"
msgid "failed to parse value of %s"
msgstr "No se pudo leer valor de %s"
msgid "failed to parse xml document"
msgstr "Falló al intentar analizar el documento XML"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "Falló al restablecer dispositivo de bloque '%s'"
@@ -15069,6 +15235,9 @@ msgstr "Falló la recuperación de credenciales"
msgid "failed to retrieve decision to accept host key"
msgstr "Falló la recuperación de decisión para aceptar clave de host"
msgid "failed to retrieve password"
msgstr "No se pudo recuperar contraseña"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr ""
"Falló la recuperación de frase de paso de llave privada: falló retrollamada"
@@ -15567,6 +15736,9 @@ msgstr "Tipo de concentrador %s no tiene soporte"
msgid "hypervisor connection URI"
msgstr "conexión URI del hipervisor"
msgid "hypervisor lacks deviceboot feature"
msgstr "Hipervisor carece de función deviceboot"
msgid "iSCSI storage pool does not support volume creation"
msgstr "Grupo de almacenaje iSCSI no soporta la creación de volumen"
@@ -16732,6 +16904,10 @@ msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr ""
"mem(Suspender para RAM), disk(Suspender para Disk), hybrid(Suspensión Hybrid)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "memballoon no tiene soporte con tipo de dirección '%s'"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "atributos de memoria: [file=]name[,snapshot=type]"
@@ -17660,6 +17836,9 @@ msgstr "No se ha suministrado una ruta de dispositivo de bloque para '%s'"
msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr "No hay llamada esperando respuesta con prog %d vers %d serial %d"
msgid "no callback provided"
msgstr "no se ha suministrado una retrollamada"
msgid "no client username was found"
msgstr "No se ha encontrado un nombre de usuario de cliente"
@@ -17687,6 +17866,10 @@ msgid "no disk format for %s and probing is disabled"
msgstr ""
"no existe un formato de disco para %s y la comprobación está deshabilitada"
#, c-format
msgid "no disk found with alias %s"
msgstr "no se ha encontrado un disco con el apodo %s"
#, c-format
msgid "no disk named '%s'"
msgstr "No hay disco llamado '%s'"
@@ -19830,6 +20013,9 @@ msgstr "No se puede realizar filtraje de instantánea"
msgid "unable to poll on child"
msgstr "No se pudo sondear en hijo"
msgid "unable to probe for add-fd"
msgstr "No se puede sondear para add-fd"
msgid "unable to read child stderr"
msgstr "No se puede leer stderr de hijo"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:15+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Estonian (http://www.transifex.com/projects/p/fedora/language/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:19+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/fedora/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Persian\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,9 +8,9 @@
# Toni Rantala <trantalafilo@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2017-03-26 10:24+0000\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/fedora/language/"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Filipino\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -21,9 +21,9 @@
# Thomas Canniot <thomas.canniot@laposte.net>, 2007
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-26 09:47+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: French <trans-fr@lists.fedoraproject.org>\n"
@@ -32,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Friulian\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Irish\n"
@@ -17,4 +17,4 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
"4\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:22+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/fedora/language/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -12,9 +12,9 @@
# sweta <swkothar@redhat.com>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-23 06:16+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Gujarati (http://www.transifex.com/projects/p/libvirt/"
@@ -24,7 +24,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -286,6 +286,9 @@ msgstr " નેટવર્કીંગ:"
msgid " Storage:"
msgstr " સંગ્રહ:"
msgid " block_io_throttle reply was missing device list"
msgstr " block_io_throttle જવાબ એ ગુમ થયેલ ઉપકરણ યાદી હતી"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -586,6 +589,9 @@ msgstr "guest-get-vcpus નાં જવાબમાં 'logical-id' ગેર
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "guest-get-vcpus નાં જવાબમાં 'ઓનલાઇન' ગેરહાજર"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr "vHBA માટે 'મુખ્ય' સ્પષ્ટ થયેલ નથી, અને આ યજમાન પર એકને શોધી શકાતુ નથી"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'પીક' અને 'બર્સ્ટ' ને 'સરેરાશ' ગુણધર્મની જરૂર છે"
@@ -923,6 +929,9 @@ msgstr "NAT '%s' નો પ્રયત્ન થયેલ છે. NAT ફક્
msgid "Attribute mode is only allowed for guest CPU"
msgstr "ગુણધર્મ સ્થિતિની ફક્ત મહેમાન CPU માટે પરવાનગી મળેલ છે"
msgid "Authentication Credentials not found"
msgstr "સત્તાધિકરણ શ્રેય મળ્યો નથી"
msgid "Authentication failed"
msgstr "સત્તાધિકરણ નિષ્ફળ"
@@ -1400,6 +1409,9 @@ msgstr "બલુન ઉપકરણ પાથને નક્કી કરી
msgid "Cannot determine free memory"
msgstr "મુક્ત મેમરી નક્કી કરી શકાતી નથી"
msgid "Cannot determine system clock HZ"
msgstr "સિસ્ટમ ઘડિયાળ HZ ને નક્કી કરી શકાતુ નથી"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "ફ્લોપી %s ને સીધુ જ જોડી શકાતુ નથી"
@@ -1607,6 +1619,14 @@ msgstr "સોકેટ સરનામાં '%s' નુ પદચ્છેદ
msgid "Cannot parse start time %s in %s"
msgstr "%s માં શરૂઆત સમય %s નું પદચ્છેદન કરી શકાતુ નથી"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "સિસ્ટમ સ્થિતિ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "વપરાશકર્તા સ્થિતિ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1746,6 +1766,10 @@ msgstr "પ્રારંભ ન થયેલ CURL સંચાલનને વ
msgid "Cannot specify a label if relabelling is turned off. model=%s"
msgstr "લેબલને સ્પષ્ટ કરી શકાતુ નથી જો પુન:લેબલ કરવાનું બંધ હોય તો. મોડલ=%s"
#, c-format
msgid "Cannot stat %s"
msgstr "સ્થિતિ %s ને કરી શકાતી નથી"
#, c-format
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
msgstr "HostVirtualSwitch ને અવ્યાખ્યાયિત કરી શકાતુ નથી કે જેની પાસે '%s' પોર્ટ છે"
@@ -1919,6 +1943,10 @@ msgstr "ડોમેઇન %s માટે બંધ કોલબેક બી
msgid "Command %s too long for destination"
msgstr "આદેશ %s એ લક્ષ્ય માટે ઘણું લાંબુ છે"
#, c-format
msgid "Command '%s' is not found"
msgstr "આદેશ '%s' મળ્યુ નથી"
msgid "Commit aborted"
msgstr "મોકલવાનું અટકાવેલ છે"
@@ -2028,6 +2056,26 @@ msgstr "પાત્ર એ વ્યાખ્યાયિત થયેલ ન
msgid "Control groups not supported on this platform"
msgstr "આ પ્લેટફોર્મ પર નિયંત્રણ જૂથ આધારભૂત નથી"
#, c-format
msgid "Controller %d out of range"
msgstr "નિયંત્રક %d એ સીમાની બહાર છે"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "નિયંત્રક '%s' એ જૂથ માટે સક્રિય થયેલ નથી"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "નિયંત્રક '%s' માઉન્ટ થયેલ નથી"
#, c-format
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
msgstr "નિયંત્રક '%s' જોઇતુ નથી, પરંતુ '%s' સહ માઉન્ટ થયેલ છે"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "નિયંત્રક '%s' માઉન્ટ થયેલ નથી"
msgid "Controllers must use the 'ccid' address type"
msgstr "નિયંત્રકોને 'ccid' સરનામાં પ્રકારને વાપરવુ જ જોઇએ"
@@ -2221,6 +2269,9 @@ msgstr "નામ '%s' સાથે PhysicalNic ને શોધી શક્ય
msgid "Could not find any 'network' element in status file"
msgstr "સ્થિતિ ફાઇલમાં કોઇપણ 'નેટવર્ક' ઘટકને શોધી શક્યા નહિં"
msgid "Could not find any mounted controllers"
msgstr "કોઇપણ માઉન્ટ થયેલ નિયંત્રકોને શોધી શક્યા નહિં"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "'%s' માં સ્પષ્ટ થયેલ સ્ત્રોતની ગણતરી કરી શક્યા નહિં"
@@ -2237,6 +2288,10 @@ msgstr "ચોક્કસ પાથ '%s' ને સમાવતુ માહિ
msgid "Could not find datastore with name '%s'"
msgstr "નામ '%s' સાથે datastore ને શોધી શક્યા નહિં"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "%s માં ડિરેક્ટરી વિભાજક શોધી શક્યા નહિં"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr "ઇન્ટરનેટ નામ '%s' સાથે ડોમેઇન સ્નેપશોટને શોધી શક્યા નહિં"
@@ -2272,6 +2327,10 @@ msgstr "MAC સરનામાં '%s' સાથે ભૌતિક NIC ને
msgid "Could not find physical NIC with name '%s'"
msgstr "નામ '%s' સાથે ભૌતિક NIC ને શોધી શક્યા નહિં"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "%s પર નિયંત્રક %s માટે સ્થાનને શોધી શક્યા નહિં"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "નામ '%s' સાથે સ્નેપશોટને શોધી શક્યા નહિં"
@@ -2951,6 +3010,10 @@ msgstr "ઉપકરણ %s પહેલેથી અસ્તિત્વમા
msgid "Device %s detached\n"
msgstr "ઉપકરણ %s અલગ કરાયેલ છે\n"
#, c-format
msgid "Device %s in use"
msgstr "વપરાશમાં ઉપકરણ %s"
#, c-format
msgid "Device %s is already in use"
msgstr "ઉપકરણ %s પહેલેથી જ વપરાશમાં છે"
@@ -3817,6 +3880,10 @@ msgstr "નેટવર્ક રૂપરેખાંકન બદલાવ સ
msgid "Failed to bind PCI device '%s' to %s"
msgstr "'%s' માટે PCI ઉપકરણ '%s' ને બાંધવામાં નિષ્ફળતા"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "'%s' પર cgroup '%s' બાઇન્ડ કરવામાં નિષ્ફળતા"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "%s માં માઉન્ટ ડિરેક્ટરી %s ને બાંધવામાં નિષ્ફળતા"
@@ -3975,6 +4042,10 @@ msgstr "બાઇન્ડ લક્ષ્ય %s ને બનાવવામા
msgid "Failed to create bridge node in xml document"
msgstr "xml દસ્તાવેજમાં બ્રિજ નોડને બનાવવામાં નિષ્ફળતા"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "જૂથ માટે નિયંત્રક %s ને બનાવવામાં નિષ્ફળતા"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "'%s' dev '%s' માટે ડિરેક્ટરીને બનાવવામાં નિષ્ફળતા"
@@ -4258,6 +4329,9 @@ msgstr "ઇન્ટરફેસ %s માટે નવું નામ પે
msgid "Failed to get %s minor number"
msgstr "%s ગૌણ સંખ્યાને મેળવવામાં નિષ્ફળતા"
msgid "Failed to get PCI Config Address String"
msgstr "PCI રૂપરેખા સરનામુ શબ્દમાળાને મેળવવામાં નિષ્ફળતા"
msgid "Failed to get PCI SYSFS file"
msgstr "PCI SYSFS ફાઇલને મેળવવામાં નિષ્ફળતા"
@@ -4533,6 +4607,10 @@ msgstr "ડોમેઈન %s ને આપોઆપ શરૂથયેલ ત
msgid "Failed to mkdir %s"
msgstr "mkdir %s કરવામાં નિષ્ફળ"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "%s પ્રકાર %s પર %s ને માઉન્ટ કરવામાં નિષ્ફળ"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "/dev પર %s ને માઉન્ટ કરવામાં નિષ્ફળતા"
@@ -6493,9 +6571,16 @@ msgstr "મહત્તમ મેમરી, માપાંકિત પૂર
msgid "Max memory:"
msgstr "મહત્તમ મેમરી:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr "ખાસ મશીન પ્રકાર મર્યાદા કરતા વધારે મહત્તમ CPUs"
msgid "Memory"
msgstr "મેમરી"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "મેમરી '%llu' એ %llu કરતા ઓછી હોવી જ જોઇએ"
msgid "Memory allocation failure"
msgstr "મેમરી સોંપણી નિષ્ફળ"
@@ -6599,6 +6684,10 @@ msgstr "ગેરહાજર '%s' ગુણધર્મ"
msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr "ગુમ થયેલ '%s' ગુણધર્મ જ્યારે ManagedEntityStatus માટે જોઇ રહ્યા છે"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "cgroup માઉન્ટ '%s' માં ગુમ થયેલ '/' વિભાજક"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "CPU ટોપૉલોજી માં ગેરહાજર 'cores' ગુણધર્મ"
@@ -6653,6 +6742,9 @@ msgstr "ગુમ થયેલ CPU લક્ષણ નામ"
msgid "Missing CPU model name"
msgstr "ગેરહાજર CPU મોડલ નામ"
msgid "Missing CPU vendor name"
msgstr "ગુમ થયેલ CPU વિક્રેતા નામ"
msgid "Missing ID parameter for domain object"
msgstr "ડોમેઇન ઑબ્જેક્ટ માટે ગેરહાજર ID પરિમાણ"
@@ -6793,6 +6885,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "CPU મોડલ %s માં ગુમ થયેલ અથવા અયોગ્ય PVR કિંમત"
msgid "Missing or invalid auth pointer"
msgstr "ગેરહાજર અથવા અયોગ્ય સત્તાધિકરણ નિર્દેશક"
msgid "Missing ownerId data in JSON document"
msgstr "JSON દસ્તાવેજમાં ગેરહાજર ownerId માહિતી"
@@ -7203,6 +7298,9 @@ msgstr "હસ્તાક્ષર %s માચે દલીલો હાજર
msgid "No authentication callback available"
msgstr "સત્તાધિકરણ કોલબેક ઉપલબ્ધ નથી"
msgid "No authentication callback provided."
msgstr "સત્તાધિકરણ કોલબેક પૂરુ પાડેલ નથી."
msgid "No authentication methods and credentials provided"
msgstr "સત્તાધિકરણ પદ્દતિઓ અને શ્રેય પૂરો પાડેલ નથી"
@@ -8312,6 +8410,9 @@ msgstr "SCSI ડિસ્ક અનુક્રમણિકા ('%s' માં
msgid "SCSI host device doesn't support managed mode"
msgstr "SCSI યજમાન ઉપકરણ એ સંચાલિત થયેલ સ્થિતિને આધાર આપતુ નથી"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "SCSI પાસથ્રુ એ qemu ની આવૃત્તિ દ્દારા આધારભૂત નથી"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr "[..૬,૮..૧૫] સીમાની બહાર SCSI એકમ અનુક્રમણિકા %d"
@@ -9577,6 +9678,9 @@ msgstr "USB ઉપકરણ %s પહેલેથી વપરાશમાં
msgid "USB host device is missing bus/device information"
msgstr "USB યજમાન ઉપકરણ એ ગુમ થયેલ બસ/ઉપકરણ જાણકારી છે"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr "USB દિશામાન બુટીંગ QEMU ની આ આવૃત્તિ દ્દારા આધારભૂત નથી"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr "USB દિશામાન ફિલ્ટર આ QEMU ની આવૃત્તિ દ્દારા આધારભૂત નથી"
@@ -9764,12 +9868,6 @@ msgstr "સોકેટ ફાઇલ સંચાલનની નકલ કર
msgid "Unable to create %s"
msgstr "%s ને બનાવવાનું અસમર્થ"
msgid "Unable to create JSON formatter"
msgstr "JSON ફોર્મેટરને બનાવવાનું અસમર્થ"
msgid "Unable to create JSON parser"
msgstr "JSON પાર્સરને બનાવવાનું અસમર્થ"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "LPAR ને બનાવવાનું અસમર્થ. કારણ: '%s'"
@@ -9799,6 +9897,10 @@ msgstr "બ્રિજ ઉપકરણને બનાવવાનું અસ
msgid "Unable to create device %s"
msgstr "ઉપકરણ %s ને બનાવવાનું અસમર્થ"
#, c-format
msgid "Unable to create directory %s"
msgstr "ડિરેક્ટરી %s ને બનાવવાનું અસમર્થ"
msgid "Unable to create epoll fd"
msgstr "epoll fd ને બનાવવાનું અસમર્થ"
@@ -10277,9 +10379,6 @@ msgstr "'%s' ખોલવામાં અસમર્થ"
msgid "Unable to open /dev/loop-control"
msgstr "/dev/loop-control ખોલવામાં અસમર્થ"
msgid "Unable to open /proc/mounts"
msgstr "/proc/mounts ખોલવાનું અસમર્થ"
msgid "Unable to open UNIX socket"
msgstr "UNIX સોકેટને ખોલવાનુ અસમર્થ"
@@ -10584,6 +10683,10 @@ msgstr "આ પ્લેટફોર્મ પર %s પર STP ને સુય
msgid "Unable to set VM logfile close-on-exec flag"
msgstr "VM લોગફાઇલ close-on-exec flag ને સુયોજિત કરવામાં નિષ્ફળ"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "બ્રિજ %s %s ને સુયોજિત કરવાનું અસમર્થ"
msgid "Unable to set cloexec flag"
msgstr "cloexec ફ્લેગ સુયોજિત કરવાનું અસમર્થ"
@@ -10646,6 +10749,10 @@ msgstr "બાઇન્ડ સ્ત્રોત %s નાં આંકડા
msgid "Unable to stat bind target %s"
msgstr "બાઇન્ડ લક્ષ્ય %s નાં આંકડા મેળવવાનું અસમર્થ"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "%s માટે ઉપકરણ %s ને પરવાનગી આપવાનું અસમર્થ"
#, c-format
msgid "Unable to truncate %s"
msgstr "%s ખોલવામાં નિષ્ફળ"
@@ -10777,6 +10884,13 @@ msgstr "non-peer2peer સ્થળાંતર સાથે અનિચ્છ
msgid "Unexpected disk sgio mode '%d'"
msgstr "અનિચ્છનીય ડિસ્ક sgio સ્થિતિ '%d'"
msgid "Unexpected error"
msgstr "અનિચ્છનીય ભૂલ"
#, c-format
msgid "Unexpected error: (%s) '%s'"
msgstr "અનિચ્છનીય ભૂલ: (%s) '%s'"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "અનિચ્છનીય ફાઇલસિસ્ટમ પ્રકાર %s"
@@ -11290,6 +11404,9 @@ msgstr "VMX નોંધણી 'sched.cpu.affinity' એ %d ને સમાવ
msgid "VNC"
msgstr "VNC"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "VNC વેબસોકેટ એ આ QEMU બાઇનરી સાથે આધારભૂત નથી"
msgid "VNC supports connected='keep' only"
msgstr "VNC ફક્ત જોડાયેલ='keep' ને આધાર આપે છે"
@@ -11900,6 +12017,23 @@ msgstr "એક ઉપકરણ કરતા વધારે માટે વા
msgid "booted"
msgstr "બુટ થયેલ"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr "VFIO સાથે સોંપેલ PCI ઉપકરણોમાંથી બુટીંગ એ આ qemu ની આવૃત્તિ સાથે આધારભૂત નથી"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr "સોંપેલ PCI ઉપકરણોને બુટ કરવાનું આ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr "સોંપેલ SCSI ઉપકરણોમાંથી બુટીંગ એ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr "સોંપેલ USB ઉપકરણો માંથી બુટ કરવાનું આ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr "સોંપેલ ઉપકરણોમાંથી બુટીંગ એ ફક્ત PCI, USB અને SCSI ઉપકરણો માટે આધારભૂત છે"
@@ -12458,6 +12592,9 @@ msgstr "સ્નેપશોટ ids ને મેળવી શકાતુ ન
msgid "cannot get the host uuid"
msgstr "યજમાન uuid ને મેળવી શકાતુ નથી"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "MEMORY cgroup નિયંત્રકનો પાથ મેળવી શકાતો નથી"
msgid "cannot get vCPU placement & pCPU time"
msgstr "vCPU સ્થાન અને pCPU સમયને મેળવી શકાતુ નથી"
@@ -12632,6 +12769,10 @@ msgstr " %s આવૃત્તિ નંબર નું '%.*s'માં પદ
msgid "cannot parse CPU data"
msgstr "CPU માહિતીનું પદચ્છેદન કરી શકાતુ નથી"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "%s આર્કિટેક્ચર માટે CPU મેપ નું પદચ્છેજન કરી શકાતુ નથી"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "CPU ગણતરી '%s' નું પદચ્છેદન કરી શકાતુ નથી"
@@ -12723,10 +12864,6 @@ msgstr "uuid તરીકે interfaceid પરિમાણનુ પદચ્
msgid "cannot parse io mode '%s'"
msgstr "io સ્થિતિ '%s' નુ પદચ્છેદન કરી શકાતુ નથી"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "json %s નું પદચ્છેદન કરી શકાતુ નથી: %s"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "nbd ફાઇલનામ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
@@ -13162,6 +13299,14 @@ msgstr "%s માં cellNum એ %d કરતા ઓછુ અથવા સર
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "%s માં cellNum એ ફક્ત નકારાત્મક કિંમત તરીકે %d ને સ્વીકારે છે"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' એ સીમામાં હોવુ જ જોઇએ (1000, 1000000)"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' એ સીમાંમા હોવુ જ જોઇએ (1000, %llu)"
msgid "cgroup CPU controller is not mounted"
msgstr "cgroup CPU નિયંત્રક માઉન્ટ થયેલ નથી"
@@ -13313,6 +13458,10 @@ msgstr "રૂપરેખાંકન"
msgid "config data file to import from"
msgstr "તેમાંથી આયાત કરવા માટે રૂપરેખાંકન માહિતી ફાઇલ"
#, c-format
msgid "config value %s not a string"
msgstr "રૂપરેખાંકન કિંમત %s શબ્દમાળા નથી"
#, c-format
msgid "config value %s was malformed"
msgstr "રૂપરેખાંકન કિંમત %s મેલફોર્મ થયેલ છે"
@@ -13321,6 +13470,10 @@ msgstr "રૂપરેખાંકન કિંમત %s મેલફોર્
msgid "config value %s was missing"
msgstr "રૂપરેખાંકન કિંમત %s ગુમ થયેલ હતી"
#, c-format
msgid "config value %s was not a string"
msgstr "રૂપરેખાંકન કિંમત %s એ શબ્દમાળા ન હતી"
msgid "configuration file syntax error"
msgstr "રૂપરેખાંકન ફાઈલ વાક્યરચના ભૂલ"
@@ -15019,6 +15172,9 @@ msgstr "qemu ઉપકરણ યાદીનું પદચ્છેદન ક
msgid "failed to parse value of %s"
msgstr "%s ની કિંમતને પદચ્છેદન કરવામાં નિષ્ફળતા"
msgid "failed to parse xml document"
msgstr "xml દસ્તાવેજનું પદચ્છેદન કરવામાં નિષ્ફળ"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "ડિસ્ક %s માટે પિવોટ જોબ કરવામાં નિષ્ફળતા"
@@ -15100,6 +15256,9 @@ msgstr "શ્રેયને પ્રાપ્ત કરવામાં નિ
msgid "failed to retrieve decision to accept host key"
msgstr "યજમાનનામને નક્કી કરવામાં નિષ્ફળ"
msgid "failed to retrieve password"
msgstr "પાસવર્ડને પ્રાપ્ત કરવામાં નિષ્ફળતા"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr "ખાનગી કી પાસફ્રેજને પ્રાપ્ત કરવામાં નિષ્ફળતા: કોલબૅક નિષ્ફળ થયેલ છે"
@@ -15592,6 +15751,9 @@ msgstr "hub પ્રકાર %s આધારભૂત નથી"
msgid "hypervisor connection URI"
msgstr "હાયપરવિઝર જોડાણ URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "હાઇપરવિઝરમાં ઉપકરણબુટ લક્ષણનો અભાવ છે"
msgid "iSCSI storage pool does not support volume creation"
msgstr "iSCSI સંગ્રહ pool એ વોલ્યુમ બનાવવા માટે આધાર આપતુ નથી"
@@ -16039,6 +16201,10 @@ msgstr "અયોગ્ય કડી સ્થિતિ '%s'"
msgid "invalid logical block size '%s'"
msgstr "અયોગ્ય લૉજિકલ બ્લોક માપ '%s'"
#, c-format
msgid "invalid lxc.id_map: '%s'"
msgstr "અયોગ્ય lxc.id_map: '%s'"
msgid "invalid mode"
msgstr "અયોગ્ય સ્થિતિ"
@@ -16767,6 +16933,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "memballoon એ સરનામાં પ્રકાર '%s' સાથે બિનઆધારભૂત છે"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "મેમરી ગુણધર્મો: [file=]name[,snapshot=type]"
@@ -17675,6 +17845,9 @@ msgstr "'%s' માટે બ્લોક ઉપકરણ પાથ પૂરી
msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr "prog %d vers %d serial %d સાથે જવાબ માટે કોલ રાહ જોતુ "
msgid "no callback provided"
msgstr "કોલબેક પૂરુ પાડેલ નથી"
msgid "no client username was found"
msgstr "ક્લાઇન્ટ વપરાશકર્તાનામ શોધાયુ ન હતુ"
@@ -17704,6 +17877,10 @@ msgstr "ઉપસર્ગ %s સાથે ઉપકરણ મળ્યુ ન
msgid "no disk format for %s and probing is disabled"
msgstr "%s માટે ડિસ્ક બંધારણ નથી અને પ્રોબિંગ નિષ્ક્રિય થયેલ છે"
#, c-format
msgid "no disk found with alias %s"
msgstr "ઉપસર્ગ %s સાથે ડિસ્ક મળ્યુ નથી"
#, c-format
msgid "no disk named '%s'"
msgstr "નામ થયેલ ડિસ્ક '%s' નથી"
@@ -19848,6 +20025,9 @@ msgstr "સ્નેપશોટ ફિલ્ટરીંગને ચલાવ
msgid "unable to poll on child"
msgstr "બાળ પર પોલ કરવાનું અસમર્થ"
msgid "unable to probe for add-fd"
msgstr "add-fd માટે પ્રોબ કરવાનું અસમર્થ"
#, c-format
msgid "unable to read '%s'"
msgstr "'%s' ને વાંચવાનુ અસમર્થ"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:25+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/fedora/language/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -17,9 +17,9 @@
# sandeep shedmake <sandeep.shedmake@gmail.com>, 2007
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-23 12:39+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/fedora/language/"
@@ -29,7 +29,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -191,6 +191,9 @@ msgstr "संजालन"
msgid " Storage:"
msgstr "भंडारण"
msgid " block_io_throttle reply was missing device list"
msgstr "block_io_throttle उत्तर डिवाइस सूची गुम "
#, c-format
msgid "%s\n"
msgstr "%s\n"
@@ -1104,6 +1107,10 @@ msgstr "क्लाइंट सॉकेट पहचान उपलब्ध
msgid "Command %s too long for destination"
msgstr "कमांड %s गंतव्य के लिए काफी बड़ा है"
#, c-format
msgid "Command '%s' is not found"
msgstr "कमांड '% s' नहीं मिली"
msgid "Completed with no error"
msgstr "कोई त्रुटि के साथ पूरा हो गया"
@@ -1333,6 +1340,10 @@ msgstr "मैक पते '%s' के साथ शारीरिक एन
msgid "Could not find physical NIC with name '%s'"
msgstr "नाम '%s' के साथ शारीरिक एनआईसी नहीं मिल सका"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "नियंत्रक %s के लिए %s पर नियुक्ति नहीं पा सका"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "नाम '%s' के साथ स्नैपशॉट नहीं ढूँढ सका"
@@ -1842,6 +1853,10 @@ msgstr "संजाल अंतरफलक अलग करें."
msgid "Device"
msgstr "युक्ति"
#, c-format
msgid "Device %s in use"
msgstr "डिवाइस %s उपयोग में है"
#, c-format
msgid "Device %s is already in use"
msgstr "युक्ति %s पहले से प्रयोग में है"
@@ -2683,6 +2698,10 @@ msgstr "%s डोमेन का स्वतः आरंभन चिह्
msgid "Failed to mkdir %s"
msgstr "%s को mkdir करने में विफल"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "%s प्रकार %s पर %s को माउंट करने में विफल "
#, c-format
msgid "Failed to mount %s on /proc/meminfo"
msgstr "/proc/meminfo को %s पर आरोहित करने में विफल"
@@ -3898,6 +3917,9 @@ msgstr "गुम सीपीयू विशेषता नाम"
msgid "Missing CPU model name"
msgstr "अनुपस्थित CPU मॉडल नाम"
msgid "Missing CPU vendor name"
msgstr "अनुपस्थित CPU विक्रेता नाम"
msgid "Missing ID parameter for domain object"
msgstr "डोमेन ऑब्जेक्ट के लिए गुम आईडी पैरामीटर"
@@ -3971,6 +3993,9 @@ msgid ""
"network %s"
msgstr "संजाल %s में गुम या <forward> में <nat> में <port> में अवैध 'शुरुआत' विशेषता"
msgid "Missing or invalid auth pointer"
msgstr "गुम या अवैध auth संकेतक "
msgid "Missing ownerId data in JSON document"
msgstr "JSON के दस्तावेज़ में ownerId डेटा गुम"
@@ -4234,6 +4259,9 @@ msgstr "होस्टनाम के साथ कोई पता संब
msgid "No authentication callback available"
msgstr "कोई प्रमाणीकरण कॉलबैक नहीं उपलब्ध हैं "
msgid "No authentication callback provided."
msgstr "कोई सत्यापन कॉलबैक नहीं दिया गया."
msgid "No bridge name specified"
msgstr "कोई ब्रिज नाम निर्दिष्ट नहीं"
@@ -5919,9 +5947,6 @@ msgstr "%s को खोलने में विफल"
msgid "Unable to open %s (%d)"
msgstr "%s (%d) खोलने में असमर्थ"
msgid "Unable to open /proc/mounts"
msgstr "/proc/mounts को खोलने में असमर्थ"
msgid "Unable to open UNIX socket"
msgstr "UNIX सॉकेट खोलने में असमर्थ"
@@ -6130,6 +6155,9 @@ msgstr "गैर peer2peer माइग्रेशन के साथ अन
msgid "Unexpected disk sgio mode '%d'"
msgstr "अप्रत्याशित डिस्क sgio मोड '%d'"
msgid "Unexpected error"
msgstr "अप्रत्याशित त्रुटि"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "अप्रत्याशित filesystem प्रकार %s"
@@ -6801,6 +6829,10 @@ msgstr "बूल"
msgid "boot order '%s' used for more than one device"
msgstr "बूट क्रम '%s' एक से अधिक उपकरण के लिए उपयोग होना चाहिए"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr "सौपे गए PCI युक्ति से बूटिंग qemu के इस संस्करण से समर्थित नहीं है"
#, c-format
msgid "bridge '%s' has an invalid netmask or IP address"
msgstr "ब्रिज '%s' एक अवैध netmask या आईपी पता है"
@@ -7199,6 +7231,9 @@ msgstr "सुरक्षा प्रस्ताव %d (%s) पा नही
msgid "cannot get the host uuid"
msgstr "होस्ट uuid नहीं मिल पाया "
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "मेमोरी cgroup नियंत्रक का का रास्ता नहीं मिल सकता है"
msgid "cannot get vCPU placement & pCPU time"
msgstr "vCPU स्थापन व pCPU समय नहीं पा सकता है"
@@ -7295,6 +7330,10 @@ msgstr "वॉल्यूम '%s' खोल नहीं सकता है"
msgid "cannot parse %s version number in '%.*s'"
msgstr "%s संस्करण संख्या का विश्लेषण नहीं कर सकता है '%.*s' में "
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "CPU मानचित्र %s ऑर्किटेक्चर के लिए विश्लेषित नहीं कर सकता है"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "CPU टोपोलॉजी '%s' का विश्लेषण नहीं कर सकता है"
@@ -7371,10 +7410,6 @@ msgstr "uuid के रूप में इंटरफेस आईडी प
msgid "cannot parse io mode '%s'"
msgstr "IO मोड '%s' को विश्लेषित नहीं कर सकते"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "json %s विश्लेषित नहीं कर सकता है: %s"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "nbd फ़ाइलनाम '%s' को विश्लेषित नहीं कर सकता है"
@@ -7810,6 +7845,10 @@ msgstr "कान्फिग मान %s विरूपित था"
msgid "config value %s was missing"
msgstr "कान्फिग मान %s गुम था"
#, c-format
msgid "config value %s was not a string"
msgstr "कॉन्फिग मान %s एक स्ट्रिंग नहीं था"
msgid "configuration file syntax error"
msgstr "विन्यास फाइल वाक्य रचना त्रुटि"
@@ -8863,6 +8902,9 @@ msgstr "%s विन्यास फाइल के विश्लेषण
msgid "failed to parse qemu capabilities flags"
msgstr "qemu क्षमता वाले ध्वजों का विश्लेषण करने में विफल रहा"
msgid "failed to parse xml document"
msgstr "xml दस्तावेज़ विश्लेषण में असमर्थ"
msgid "failed to read AppArmor template"
msgstr "AppArmor प्रोफाइल टेम्पलेट पढ़ने में विफल"
@@ -9175,6 +9217,9 @@ msgstr "हब प्रकार %s समर्थित नहीं"
msgid "hypervisor connection URI"
msgstr "हाइपरविजर कनेक्शन URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "हाइपरविजर deviceboot सुविधा का अभाव है"
msgid "iSCSI storage pool does not support volume creation"
msgstr "iSCSI भंडारण पूल मात्रा निर्माण का समर्थन नहीं करता है"
@@ -10553,6 +10598,9 @@ msgstr "'%s' के लिए कोई ब्लॉक युक्ति प
msgid "no call waiting for reply with prog %d vers %d serial %d"
msgstr " prog %d vers %d serial %d के साथ उत्तर के लिए कोई कॉल प्रतीक्षारत नहीं"
msgid "no callback provided"
msgstr "कोई कॉलबैक नहीं दिया गया"
msgid "no client username was found"
msgstr "कोई क्लाइंट उपयोक्तानाम नहीं मिला था"
@@ -10572,6 +10620,10 @@ msgstr "%s उपनाम के साथ कोई युक्ति नह
msgid "no disk format for %s and probing is disabled"
msgstr "%s के लिए कोई डिस्क प्रारूप नहीं और जाँच निष्क्रिय है"
#, c-format
msgid "no disk found with alias %s"
msgstr "%s उपनाम के साथ कोई डिस्क नहीं मिला"
#, c-format
msgid "no disk named '%s'"
msgstr "कोई %s नाम का डिस्क नहीं "

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Croatian\n"
@@ -17,4 +17,4 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,9 +8,9 @@
# Gabor Egry <gaba@freemail.hu>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-27 04:56+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/fedora/"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Interlingua\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,9 +8,9 @@
# Teguh DC <dheche@songolimo.net>, 2007.
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-27 05:03+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/libvirt/"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Iloko\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:27+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/fedora/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -10,9 +10,9 @@
# Silvio Pierro <perplesso82@gmail.com>, 2009
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-27 05:14+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/libvirt/language/"
@@ -22,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -1712,6 +1712,9 @@ msgstr "Nome feature della CPU mancante"
msgid "Missing CPU model name"
msgstr "Nome modello della CPU mancante"
msgid "Missing CPU vendor name"
msgstr "Nome produttore della CPU mancante"
#, c-format
msgid "Missing IP address in static host definition for network '%s'"
msgstr "Indirizzo IP mancante nella definizione host statico per la rete '%s'"
@@ -1875,6 +1878,9 @@ msgstr "Nessun indirizzo IP trovato per l'host '%s': %s"
msgid "No authentication callback available"
msgstr "Nessun callback per l'autenticazione disponibile"
msgid "No authentication callback provided."
msgstr "Nessun callback per l'autenticazione fornito."
#, c-format
msgid "No device with bus '%s' and target '%s'"
msgstr "Nessun dispositivo con bus '%s' e target '%s'"
@@ -3059,6 +3065,10 @@ msgstr "impossibile aprire il socket"
msgid "cannot open volume '%s'"
msgstr "impossibile aprire il volume '%s'"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "errore nel parsing della CPU map per l'architettura %s"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "impossibile analizzare la tipologia della CPU '%s'"
@@ -3399,6 +3409,10 @@ msgstr "il valore di configurazione %s era malformato"
msgid "config value %s was missing"
msgstr "il valore di configurazione %s era mancante"
#, c-format
msgid "config value %s was not a string"
msgstr "il valore di config %s non è una stringa"
msgid "configuration file syntax error"
msgstr "errore di sintassi del file di configurazione"
@@ -3879,6 +3893,9 @@ msgstr "errore nel parsing del file di configurazione"
msgid "failed to parse configuration file %s"
msgstr "errore nel parsing del file di configurazione %s"
msgid "failed to parse xml document"
msgstr "errore nel parsing del documento xml"
msgid "failed to read XML"
msgstr "impossibile leggere XML"
@@ -4782,6 +4799,9 @@ msgstr "non avviare automaticamente"
msgid "no block device path supplied for '%s'"
msgstr "nessun percorso di dispositivo a blocchi fornito per '%s'"
msgid "no callback provided"
msgstr "nessun callback specificato"
msgid "no client username was found"
msgstr "nessun username client trovato"
@@ -4797,6 +4817,10 @@ msgstr "nessuna funzionalità del dispositivo per '%s'"
msgid "no disk format for %s and probing is disabled"
msgstr "nessun formato disco per %s e il probing è disabilitato"
#, c-format
msgid "no disk found with alias %s"
msgstr "nessun disco trovato con alias %s"
msgid "no domain XML passed"
msgstr "nessun dominio XML fornito"

View File

@@ -17,9 +17,9 @@
# Tomoyuki KATO <tomo@dream.daynight.jp>, 2011-2014
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2015-02-23 06:48+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Japanese (http://www.transifex.com/projects/p/libvirt/"
@@ -29,7 +29,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"
msgid ""
"\n"
@@ -291,6 +291,9 @@ msgstr "ネットワーク:"
msgid " Storage:"
msgstr "ストレージ:"
msgid " block_io_throttle reply was missing device list"
msgstr " block_io_throttle reply に device list がありませんでした"
#, c-format
msgid ""
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
@@ -615,6 +618,11 @@ msgstr "guest-get-vcpus の応答に 'logical-id' がありません"
msgid "'online' missing in reply of guest-get-vcpus"
msgstr "guest-get-vcpus の応答に 'online' がありません"
msgid "'parent' for vHBA not specified, and cannot find one on this host"
msgstr ""
"vHBA の 'parent' が指定されていません。また、このホストにおいて見つけられませ"
"ん"
msgid "'peak' and 'burst' require 'average' attribute"
msgstr "'peak' および 'burst' は 'average' 属性が必要です"
@@ -949,6 +957,9 @@ msgstr "NAT '%s' を試行しました。NAT は IPv4 に対してのみサポ
msgid "Attribute mode is only allowed for guest CPU"
msgstr "mode 属性はゲストの CPU に対してのみ許可されます。"
msgid "Authentication Credentials not found"
msgstr "認証情報が見つかりません"
msgid "Authentication failed"
msgstr "認証に失敗しました"
@@ -1434,6 +1445,9 @@ msgstr "バルーンデバイスパスがわかりませんでした"
msgid "Cannot determine free memory"
msgstr "空きメモリーがわかりません"
msgid "Cannot determine system clock HZ"
msgstr "システムのクロック周波数がわかりません"
#, c-format
msgid "Cannot directly attach floppy %s"
msgstr "フロッピー %s を直接接続できません"
@@ -1644,6 +1658,14 @@ msgstr "socket address '%s': %s を構文解析できません"
msgid "Cannot parse start time %s in %s"
msgstr "開始時間 %s (%s) を構文解析できません"
#, c-format
msgid "Cannot parse sys stat '%s'"
msgstr "sys 統計情報 '%s' を構文解析できません"
#, c-format
msgid "Cannot parse user stat '%s'"
msgstr "user 統計情報 '%s' を構文解析できません"
#, c-format
msgid ""
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
@@ -1785,6 +1807,10 @@ msgstr "初期化していない CURL ハンドルを共有できません"
msgid "Cannot specify a label if relabelling is turned off. model=%s"
msgstr "再ラベルが無効にされていると、ラベルを指定できません。model=%s"
#, c-format
msgid "Cannot stat %s"
msgstr "%s を統計できません"
#, c-format
msgid "Cannot stat '%s'"
msgstr "'%s' を統計できません"
@@ -1960,6 +1986,10 @@ msgstr ""
msgid "Command %s too long for destination"
msgstr "コマンド %s が宛先にとって長すぎます"
#, c-format
msgid "Command '%s' is not found"
msgstr "コマンド '%s' が見つかりません"
msgid "Commit aborted"
msgstr "コミットが中断されました"
@@ -2072,6 +2102,22 @@ msgstr "コンテナは定義されていません"
msgid "Control groups not supported on this platform"
msgstr "Control groups がこのプラットフォームにおいてサポートされません"
#, c-format
msgid "Controller %d out of range"
msgstr "コントローラー %d が範囲外です"
#, c-format
msgid "Controller '%s' is not enabled for group"
msgstr "コントローラー '%s' がグループに対して有効化されていません"
#, c-format
msgid "Controller '%s' is not mounted"
msgstr "コントローラー '%s' がマウントされていません"
#, c-format
msgid "Controller '%s' not mounted"
msgstr "コントローラー '%s' がマウントされていません"
msgid "Controllers must use the 'ccid' address type"
msgstr "コントローターは 'ccid' アドレス形式を使用しなければいけません"
@@ -2260,6 +2306,9 @@ msgstr "名前 '%s' を持つ物理 NIC を見つけられませんでした"
msgid "Could not find any 'network' element in status file"
msgstr "状態ファイルに何も 'network' 要素が見つかりませんでした"
msgid "Could not find any mounted controllers"
msgstr "マウントされたコントローラーを何も見つけられませんでした"
#, c-format
msgid "Could not find compute resource specified in '%s'"
msgstr "'%s' に指定されているコンピュートリソースを見つけられません"
@@ -2276,6 +2325,10 @@ msgstr "絶対パス '%s' を含んでいるデータストアを見つけられ
msgid "Could not find datastore with name '%s'"
msgstr "名前 '%s' を持つデータストアを見つけられませんでした"
#, c-format
msgid "Could not find directory separator in %s"
msgstr "%s にディレクトリのセパレーターを見つけられませんでした"
#, c-format
msgid "Could not find domain snapshot with internal name '%s'"
msgstr "内部名 '%s' を持つドメインスナップショットを見つけられませんでした"
@@ -2311,6 +2364,10 @@ msgstr "MAC アドレス '%s' を持つ物理 NIC を見つけられませんで
msgid "Could not find physical NIC with name '%s'"
msgstr "名前 '%s' を持つ物理 NIC を見つけられませんでした"
#, c-format
msgid "Could not find placement for controller %s at %s"
msgstr "コントローラー %s (%s) の配置を見つけられません"
#, c-format
msgid "Could not find snapshot with name '%s'"
msgstr "名前 '%s' を持つスナップショットを見つけられませんでした"
@@ -3000,6 +3057,10 @@ msgstr "デバイス %s がすでに存在します"
msgid "Device %s detached\n"
msgstr "デバイス %s が切断されました\n"
#, c-format
msgid "Device %s in use"
msgstr "デバイス %s は使用中です"
#, c-format
msgid "Device %s is already in use"
msgstr "デバイス %s がすでに使用中です"
@@ -3874,6 +3935,10 @@ msgstr "ネットワーク設定変更トランザクションを開始できま
msgid "Failed to bind PCI device '%s' to %s"
msgstr "PCI デバイス '%s' を %s にバインドするのに失敗"
#, c-format
msgid "Failed to bind cgroup '%s' on '%s'"
msgstr "cgroup '%s' を '%s' にバインドできませんでした"
#, c-format
msgid "Failed to bind mount directory %s to %s"
msgstr "マウントディレクトリー %s を %s にバインドできませんでした"
@@ -4029,6 +4094,10 @@ msgstr "バインドターゲット %s の作成に失敗しました"
msgid "Failed to create bridge node in xml document"
msgstr "XML 文書にブリッジノードを作成できません"
#, c-format
msgid "Failed to create controller %s for group"
msgstr "グループ用のコントローラー %s の作成に失敗しました"
#, c-format
msgid "Failed to create directory for '%s' dev '%s'"
msgstr "'%s' dev '%s' 用のディレクトリの作成に失敗しました。"
@@ -4329,6 +4398,9 @@ msgstr "インターフェース %s に対する新しい名前の生成に失
msgid "Failed to get %s minor number"
msgstr "%s のマイナー番号の取得に失敗しました"
msgid "Failed to get PCI Config Address String"
msgstr "PCI の設定アドレス文字列の取得に失敗しました"
msgid "Failed to get PCI SYSFS file"
msgstr "PCI SYSFS ファイルの取得に失敗しました"
@@ -4616,6 +4688,10 @@ msgstr "ドメイン %s の自動起動の設定に失敗しました"
msgid "Failed to mkdir %s"
msgstr "ディレクトリー %s の作成に失敗しました"
#, c-format
msgid "Failed to mount %s on %s type %s"
msgstr "%s を %s に %s 形式でマウントできませんでした"
#, c-format
msgid "Failed to mount %s on /dev"
msgstr "%s の /dev へのマウントに失敗しました"
@@ -6578,6 +6654,13 @@ msgstr "メモリーの最大値、単位付き整数 (初期値 KiB)"
msgid "Max memory:"
msgstr "最大メモリー:"
msgid "Maximum CPUs greater than specified machine type limit"
msgstr "最大 CPU が指定されたマシン形式の制限値より大きいです"
#, c-format
msgid "Memory '%llu' must be less than %llu"
msgstr "メモリ '%llu' は %llu より小さくなければいけません"
msgid "Memory allocation failure"
msgstr "メモリーの割り当てに失敗しました"
@@ -6689,6 +6772,10 @@ msgstr "'%s' プロパティがありません"
msgid "Missing '%s' property while looking for ManagedEntityStatus"
msgstr "ManagedEntityStatus を検索中に '%s' プロパティがありませんでした"
#, c-format
msgid "Missing '/' separator in cgroup mount '%s'"
msgstr "cgroup のマウント '%s' に区切り文字 '/' がありません"
msgid "Missing 'cores' attribute in CPU topology"
msgstr "CPU トポロジーに 'cores' 属性がありません"
@@ -6743,6 +6830,9 @@ msgstr "CPU 機能名がありません"
msgid "Missing CPU model name"
msgstr "CPU モデル名がありません"
msgid "Missing CPU vendor name"
msgstr "CPU ベンダー名がありません"
msgid "Missing ID parameter for domain object"
msgstr "ドメインオブジェクト向けの ID パラメーターがありません"
@@ -6883,6 +6973,9 @@ msgstr ""
msgid "Missing or invalid PVR value in CPU model %s"
msgstr "CPU モデル %s に PVR 値が見つからないか無効です。"
msgid "Missing or invalid auth pointer"
msgstr "認証ポインターが無いか無効です"
msgid "Missing ownerId data in JSON document"
msgstr "JSON ドキュメントに ownerId データがありません"
@@ -7319,6 +7412,9 @@ msgstr "シグネチャー %s 用の引数が存在しません"
msgid "No authentication callback available"
msgstr "認証のコールバックが利用可能ではありません"
msgid "No authentication callback provided."
msgstr "認証コールバックがありません"
msgid "No authentication methods and credentials provided"
msgstr "認証方式と認証情報が指定されていません"
@@ -8477,6 +8573,9 @@ msgstr "('%s' から構文解析された) SCSI ディスクのインデック
msgid "SCSI host device doesn't support managed mode"
msgstr "SCSI ホストデバイスが管理済みモードをサポートしません"
msgid "SCSI passthrough is not supported by this version of qemu"
msgstr "SCSI パススルーはこのバージョンの QEMU によりサポートされません"
#, c-format
msgid "SCSI unit index %d out of [0..6,8..15] range"
msgstr "SCSI ユニットのインデックス %d が [0..6,8..15] の範囲にありません"
@@ -9752,6 +9851,9 @@ msgstr "USB デバイス %s はすでに使用中です"
msgid "USB host device is missing bus/device information"
msgstr "USB ホストデバイスにバス/デバイス情報がありません"
msgid "USB redirection booting is not supported by this version of QEMU"
msgstr "USB リダイレクトブートはこのバージョンの QEMU によりサポートされません"
msgid "USB redirection filter is not supported by this version of QEMU"
msgstr ""
"USB リダイレクションフィルターはこのバージョンの QEMU によりサポートされませ"
@@ -9938,12 +10040,6 @@ msgstr "ソケットのファイルハンドルをコピーできません"
msgid "Unable to create %s"
msgstr "%s を作成できません"
msgid "Unable to create JSON formatter"
msgstr "JSON フォーマッターを作成できません"
msgid "Unable to create JSON parser"
msgstr "JSON パーサーを作成できません"
#, c-format
msgid "Unable to create LPAR. Reason: '%s'"
msgstr "LPAR を作成できません。理由: '%s'"
@@ -9973,6 +10069,10 @@ msgstr "ブリッジデバイスを作成できません"
msgid "Unable to create device %s"
msgstr "デバイス %s を作成できません"
#, c-format
msgid "Unable to create directory %s"
msgstr "ディレクトリー %s を作成できません"
msgid "Unable to create epoll fd"
msgstr "epoll ファイルディスクリプターを作成できません"
@@ -10433,9 +10533,6 @@ msgstr "'%s' を開けません"
msgid "Unable to open /dev/loop-control"
msgstr "/dev/loop-control を開けません"
msgid "Unable to open /proc/mounts"
msgstr "/proc/mounts を開けません"
msgid "Unable to open UNIX socket"
msgstr "UNIX ソケットを開けません"
@@ -10725,6 +10822,10 @@ msgstr "このプラットフォームにおいて %s における STP を設定
msgid "Unable to set VM logfile close-on-exec flag"
msgstr "VM ログファイルの close-on-exec フラグをセットできません"
#, c-format
msgid "Unable to set bridge %s %s"
msgstr "ブリッジ %s %s を設定できません"
msgid "Unable to set cloexec flag"
msgstr "cloexec フラグを設定できません"
@@ -10787,6 +10888,10 @@ msgstr "バインドソース %s の統計を取得できません"
msgid "Unable to stat bind target %s"
msgstr "バインドターゲット %s の統計を取得できません"
#, c-format
msgid "Unable to symlink directory %s to %s"
msgstr "ディレクトリー %s を %s にシンボリックリンクできません"
#, c-format
msgid "Unable to truncate %s"
msgstr "%s を切り詰められません"
@@ -10912,6 +11017,9 @@ msgstr "非ピアツーピアマイグレーションで予期しない dconnuri
msgid "Unexpected disk sgio mode '%d'"
msgstr "予期しないディスク sgio モード '%d'"
msgid "Unexpected error"
msgstr "予期しないエラー"
#, c-format
msgid "Unexpected filesystem type %s"
msgstr "予期しないファイルシステム形式 %s"
@@ -11415,6 +11523,9 @@ msgstr ""
msgid "VNC"
msgstr "VNC"
msgid "VNC WebSockets are not supported with this QEMU binary"
msgstr "VNC WebSockets はこの QEMU バイナリーでサポートされません"
msgid "VNC supports connected='keep' only"
msgstr "VNC は connected='keep' のみがサポートされます"
@@ -11879,6 +11990,12 @@ msgstr "認証が取り消されました: %s"
msgid "authentication failed"
msgstr "認証に失敗しました"
msgid "authentication failed when asking for password"
msgstr "の要求中に認証に失敗しました"
msgid "authentication failed when asking for username"
msgstr "ユーザー名の要求中に認証に失敗しました"
msgid "authentication failed, see test XML for the correct username/password"
msgstr ""
"認証に失敗しました。正しいユーザー名とパスワードはテスト XML を参照してくださ"
@@ -12024,6 +12141,31 @@ msgstr "ブート順序 '%s' が複数のデバイスに使用されています
msgid "booted"
msgstr "起動済み"
msgid ""
"booting from PCI devices assigned with VFIO is not supported with this "
"version of qemu"
msgstr ""
"VFIO で割り当てられた PCI デバイスからのブートはこのバージョンの QEMU でサ"
"ポートされません"
msgid ""
"booting from assigned PCI devices is not supported with this version of qemu"
msgstr ""
"予約済み PCI デバイスからのブートはこのバージョンの QEMU ではサポートされませ"
"ん"
msgid ""
"booting from assigned SCSI devices is not supported with this version of qemu"
msgstr ""
"予約済み SCSI デバイスからのブートはこのバージョンの QEMU ではサポートされま"
"せん"
msgid ""
"booting from assigned USB devices is not supported with this version of qemu"
msgstr ""
"予約済み USB デバイスからのブートはこのバージョンの QEMU ではサポートされませ"
"ん"
msgid ""
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
msgstr ""
@@ -12565,6 +12707,9 @@ msgstr "セキュリティプロパティ %d (%s) を取得できません"
msgid "cannot get the host uuid"
msgstr "ホストの UUID を取得できません"
msgid "cannot get the path of MEMORY cgroup controller"
msgstr "MEMORY cgroup controller のパスを取得できません"
msgid "cannot get vCPU placement & pCPU time"
msgstr "仮想 CPU 配置と物理 CPU 時間を取得できません"
@@ -12728,6 +12873,10 @@ msgstr "%s バージョン番号を '%.*s' において構文解析できませ
msgid "cannot parse CPU data"
msgstr "CPU データを構文解析できません"
#, c-format
msgid "cannot parse CPU map for %s architecture"
msgstr "%s アーキテクチャーの CPU マップを構文解析できません"
#, c-format
msgid "cannot parse CPU topology '%s'"
msgstr "CPU topology '%s' を構文解析できません"
@@ -12819,14 +12968,6 @@ msgstr "interfaceid パラメーターを UUID として構文解析できませ
msgid "cannot parse io mode '%s'"
msgstr "io mode '%s' を構文解析できません"
#, c-format
msgid "cannot parse json %s: %s"
msgstr "JSON %s を構文解析できません: %s"
#, c-format
msgid "cannot parse json %s: unterminated string/map/array"
msgstr "JSON %s を構文解析できません: 未終了の string/map/array"
#, c-format
msgid "cannot parse nbd filename '%s'"
msgstr "nbd filename '%s' を構文解析できません"
@@ -13260,6 +13401,14 @@ msgstr "%s の cellNum は %d より小さいか同じである必要があり
msgid "cellNum in %s only accepts %d as a negative value"
msgstr "%s の cellNum は負の値として %d のみを受け付けます"
#, c-format
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
msgstr "cfs_period '%llu' は (1000, 1000000) の範囲にある必要があります"
#, c-format
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
msgstr "cfs_quota '%lld' は (1000, %llu) の範囲にある必要があります"
msgid "cgroup CPU controller is not mounted"
msgstr "cgroup CPU コントローラーがマウントされていません"
@@ -13403,6 +13552,10 @@ msgstr "設定"
msgid "config data file to import from"
msgstr "インポートする設定データファイル"
#, c-format
msgid "config value %s not a string"
msgstr "設定値 %s が文字列ではありません"
#, c-format
msgid "config value %s was malformed"
msgstr "設定値 %s は不正な形式です"
@@ -13411,6 +13564,10 @@ msgstr "設定値 %s は不正な形式です"
msgid "config value %s was missing"
msgstr "設定値 %s がありませんでした"
#, c-format
msgid "config value %s was not a string"
msgstr "設定値 %s が文字列ではありませんでした"
msgid "configuration file syntax error"
msgstr "設定ファイルの構文エラー"
@@ -15162,6 +15319,9 @@ msgstr "QEMU のデバイス一覧の構文解析に失敗しました"
msgid "failed to parse value of %s"
msgstr "%s の値を構文解析できません"
msgid "failed to parse xml document"
msgstr "xml ドキュメントの構文解析に失敗しました"
#, c-format
msgid "failed to pivot job for disk %s"
msgstr "ディスク %s のジョブの並び替えに失敗しました"
@@ -15235,6 +15395,9 @@ msgstr "認証情報の取得に失敗しました"
msgid "failed to retrieve decision to accept host key"
msgstr "ホスト鍵を受け取るかどうかの取得に失敗しました"
msgid "failed to retrieve password"
msgstr "パスワードの取得に失敗しました"
msgid "failed to retrieve private key passphrase: callback has failed"
msgstr "秘密鍵のパスフレーズの取得に失敗しました: コールバックに失敗しました"
@@ -15748,6 +15911,9 @@ msgstr "ハブの形式 %s はサポートされません"
msgid "hypervisor connection URI"
msgstr "ハイパーバイザーの接続 URI"
msgid "hypervisor lacks deviceboot feature"
msgstr "ハイパーバイザーがデバイスブートの機能はありません"
msgid "iSCSI storage pool does not support volume creation"
msgstr "iSCSI ストレージプールはボリュームの作成をサポートしません"
@@ -16929,6 +17095,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
msgstr "mem(メモリーに), disk(ディスクに), hybrid(ハイブリッド)"
#, c-format
msgid "memballoon unsupported with address type '%s'"
msgstr "メモリーバルーンはアドレス形式 '%s' でサポートされません"
msgid "memory attributes: [file=]name[,snapshot=type]"
msgstr "memory 属性: [file=]name[,snapshot=type]"
@@ -17869,6 +18039,9 @@ msgstr ""
"プログラム %d バージョン %d シリアル %d を持つ応答に対して待ち合わせている"
"コールがありません"
msgid "no callback provided"
msgstr "コールバックが提供されていません"
msgid "no client username was found"
msgstr "クライアントのユーザー名が見付かりません"
@@ -17895,6 +18068,10 @@ msgstr "エイリアス %s を持つディスクが見つかりません"
msgid "no disk format for %s and probing is disabled"
msgstr "%s のディスクフォーマットがなく、かつプローブが無効です"
#, c-format
msgid "no disk found with alias %s"
msgstr "エイリアス %s を持つディスクが見つかりません"
#, c-format
msgid "no disk named '%s'"
msgstr "'%s' という名前のディスクがありません"
@@ -20016,6 +20193,9 @@ msgstr "スナップショットのフィルターを実行できません"
msgid "unable to poll on child"
msgstr "子においてポーリングできません"
msgid "unable to probe for add-fd"
msgstr "add-fd に対してプローブできません"
#, c-format
msgid "unable to read '%s'"
msgstr "'%s' を読み込めません"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.3.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: 2018-04-24 06:29+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Georgian (http://www.transifex.com/projects/p/fedora/language/"
@@ -18,4 +18,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

View File

@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: libvirt 4.10.0\n"
"Project-Id-Version: libvirt 4.6.0\n"
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: Kazakh\n"
@@ -16,4 +16,4 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Zanata 4.6.2\n"
"X-Generator: Zanata 4.5.0\n"

Some files were not shown because too many files have changed in this diff Show More