1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-09-23 17:45:17 +03:00

Compare commits

..

116 Commits

Author SHA1 Message Date
Cole Robinson
3e070c81ab Prep for release 1.0.5.6 2013-09-20 16:30:44 -04:00
Guannan Ren
ff165c6a92 virsh: fix change-media bug on disk block type
Resolves:https://bugzilla.redhat.com/show_bug.cgi?id=923053
When cdrom is block type, the virsh change-media failed to insert
source info because virsh uses "<source block='/dev/sdb'/>" while
the correct name of the attribute for block disks is "dev".

(cherry picked from commit 7729a16814)
2013-09-20 15:54:53 -04:00
Daniel P. Berrange
118d26dc1f Fix crash in remoteDispatchDomainMemoryStats (CVE-2013-4296)
The 'stats' variable was not initialized to NULL, so if some
early validation of the RPC call fails, it is possible to jump
to the 'cleanup' label and VIR_FREE an uninitialized pointer.
This is a security flaw, since the API can be called from a
readonly connection which can trigger the validation checks.

This was introduced in release v0.9.1 onwards by

  commit 158ba8730e
  Author: Daniel P. Berrange <berrange@redhat.com>
  Date:   Wed Apr 13 16:21:35 2011 +0100

    Merge all returns paths from dispatcher into single path

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit e7f400a110)

Conflicts:
	daemon/remote.c - context
2013-09-18 14:03:38 -06:00
Daniel P. Berrange
85ca41529d Add support for using 3-arg pkcheck syntax for process (CVE-2013-4311)
With the existing pkcheck (pid, start time) tuple for identifying
the process, there is a race condition, where a process can make
a libvirt RPC call and in another thread exec a setuid application,
causing it to change to effective UID 0. This in turn causes polkit
to do its permission check based on the wrong UID.

To address this, libvirt must get the UID the caller had at time
of connect() (from SO_PEERCRED) and pass a (pid, start time, uid)
triple to the pkcheck program.

Signed-off-by: Colin Walters <walters@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 922b7fda77)

Conflicts:
	src/access/viraccessdriverpolkit.c

Resolution:
  Dropped file that does not exist in this branch.
2013-09-18 12:22:38 -06:00
Daniel P. Berrange
4407b19b83 Include process start time when doing polkit checks
Since PIDs can be reused, polkit prefers to be given
a (PID,start time) pair. If given a PID on its own,
it will attempt to lookup the start time in /proc/pid/stat,
though this is subject to races.

It is safer if the client app resolves the PID start
time itself, because as long as the app has the client
socket open, the client PID won't be reused.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 979e9c56a7)
Signed-off-by: Eric Blake <eblake@redhat.com>

Conflicts:
	src/rpc/virnetsocket.h - context
	src/util/virprocess.c - needed #include "virstring.h"
	src/util/virstring.c - context
	src/util/virstring.h - context
2013-09-18 12:22:25 -06:00
Michal Privoznik
073812898a qemuDomainChangeGraphics: Check listen address change by listen type
https://bugzilla.redhat.com/show_bug.cgi?id=1006697

Currently, we have a bug when updating a graphics device. A graphics device can
have a listen address set. This address is either defined by user (in which case
it's type is VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) or it can be inherited
from a network (in which case it's type is
VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK). However, in both cases we have a
listen address to process (e.g. during migration, as I've tried to fix in
7f15ebc7).
Later, when a user tries to update the graphics device (e.g. set a password),
we check if listen addresses match the original as qemu doesn't know how to
change listen address yet. Hence, users are required to not change the listen
address. The implementation then just dumps listen addresses and compare them.
Previously, while dumping the listen addresses, NULL was returned for NETWORK.
After my patch, this is no longer true, and we get a listen address for olddev
even if it is a type of NETWORK. So we have a real string on one side, the NULL
from user's XML on the other side and hence we think user wants to change the
listen address and we refuse it.

Therefore, we must take the type of listen address into account as well.

(cherry picked from commit 752596b5dd)
2013-09-11 20:27:22 -06:00
Eric Blake
9a1145a987 security: provide supplemental groups even when parsing label (CVE-2013-4291)
Commit 29fe5d7 (released in 1.1.1) introduced a latent problem
for any caller of virSecurityManagerSetProcessLabel and where
the domain already had a uid:gid label to be parsed.  Such a
setup would collect the list of supplementary groups during
virSecurityManagerPreFork, but then ignores that information,
and thus fails to call setgroups() to adjust the supplementary
groups of the process.

Upstream does not use virSecurityManagerSetProcessLabel for
qemu (it uses virSecurityManagerSetChildProcessLabel instead),
so this problem remained latent until backporting the initial
commit into v0.10.2-maint (commit c061ff5, released in 0.10.2.7),
where virSecurityManagerSetChildProcessLabel has not been
backported.  As a result of using a different code path in the
backport, attempts to start a qemu domain that runs as qemu:qemu
will end up with supplementary groups unchanged from the libvirtd
parent process, rather than the desired supplementary groups of
the qemu user.  This can lead to failure to start a domain
(typical Fedora setup assigns user 107 'qemu' to both group 107
'qemu' and group 36 'kvm', so a disk image that is only readable
under kvm group rights is locked out).  Worse, it is a security
hole (the qemu process will inherit supplemental group rights
from the parent libvirtd process, which means it has access
rights to files owned by group 0 even when such files should
not normally be visible to user qemu).

LXC does not use the DAC security driver, so it is not vulnerable
at this time.  Still, it is better to plug the latent hole on
the master branch first, before cherry-picking it to the only
vulnerable branch v0.10.2-maint.

* src/security/security_dac.c (virSecurityDACGetIds): Always populate
groups and ngroups, rather than only when no label is parsed.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 745aa55fbf)
2013-08-29 09:17:31 -06:00
Guannan Ren
c43e7e20fc python: return dictionary without value in case of no blockjob
https://bugzilla.redhat.com/show_bug.cgi?id=999077

Currently, when there is no blockjob, dom.blockJobInfo('vda')
still reports error because it doesn't distinguish return value 0 from -1.
libvirt.libvirtError: virDomainGetBlockJobInfo() failed

virDomainGetBlockJobInfo() API return value:
 -1 in case of failure, 0 when nothing found, 1 found.

And use PyDict_SetItemString instead of PyDict_SetItem when key is
of string type. PyDict_SetItemString increments key/value reference
count, so call Py_DECREF() for value. For key, we don't need to
do this, because PyDict_SetItemString will handle it internally.

(cherry picked from commit 0f9e67bfad)
2013-08-20 11:44:55 -06:00
Peter Krempa
1ffdaced5b virbitmap: Refactor virBitmapParse to avoid access beyond bounds of array
The virBitmapParse function was calling virBitmapIsSet() function that
requires the caller to check the bounds of the bitmap without checking
them. This resulted into crashes when parsing a bitmap string that was
exceeding the bounds used as argument.

This patch refactors the function to use virBitmapSetBit without
checking if the bit is set (this function does the checks internally)
and then counts the bits in the bitmap afterwards (instead of keeping
track while parsing the string).

This patch also changes the "parse_error" label to a more common
"error".

The refactor should also get rid of the need to call sa_assert on the
returned variable as the callpath should allow coverity to infer the
possible return values.

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

Thanks to Alex Jia for tracking down the issue. This issue is introduced
by commit 0fc8909.

(cherry picked from commit 47b9127e88)
2013-08-20 14:13:43 +02:00
Cole Robinson
ed5274ca2e Prep for release 1.0.5.5 2013-08-01 17:48:53 -04:00
Ján Tomko
f32ea9937f Set the number of elements 0 in virNetwork*Clear
Decrementing it when it was already 0 causes an invalid free
in virNetworkDefUpdateDNSHost if virNetworkDNSHostDefParseXML
fails and virNetworkDNSHostDefClear gets called twice.

virNetworkForwardDefClear left the number untouched even if it
freed all the elements.
(cherry picked from commit c4e23388e6)
2013-08-01 17:14:41 +02:00
Ján Tomko
80fffee94b Don't check validity of missing attributes in DNS SRV XML
This fixes a crash if one of them is missing.

https://bugzilla.redhat.com/show_bug.cgi?id=988718
(cherry picked from commit 461fd86a66)
2013-08-01 17:14:27 +02:00
Ján Tomko
90688b148c cgroup: reuse buffer for getline
Reuse the buffer for getline and track buffer allocation
separately from the string length to prevent unlikely
out-of-bounds memory access.

This fixes the following leak that happened when zero bytes were read:

==404== 120 bytes in 1 blocks are definitely lost in loss record 1,344 of 1,671
==404==    at 0x4C2C71B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==404==    by 0x906F862: getdelim (iogetdelim.c:68)
==404==    by 0x52A48FB: virCgroupPartitionNeedsEscaping (vircgroup.c:1136)
==404==    by 0x52A0FB4: virCgroupPartitionEscape (vircgroup.c:1171)
==404==    by 0x52A0EA4: virCgroupNewDomainPartition (vircgroup.c:1450)
(cherry picked from commit cc7329317f)
2013-08-01 17:14:14 +02:00
Wido den Hollander
c636c41af7 rbd: Do not free the secret if it is not set
Not all RBD (Ceph) storage pools have cephx authentication turned on,
so "secret" might not be initialized.

It could also be that the secret couldn't be located.

Only call virSecretFree() if "secret" is initialized earlier.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
(cherry picked from commit d58c847844)
2013-08-01 17:13:58 +02:00
Guannan Ren
146d12c6cc caps: use -device for primary video when qemu >=1.6
libvirt: https://bugzilla.redhat.com/show_bug.cgi?id=986384

qemu: https://bugzilla.redhat.com/show_bug.cgi?id=981094
The commit 0ad9025ef introduce qemu flag QEMU_CAPS_DEVICE_VIDEO_PRIMARY
for using -device VGA, -device cirrus-vga, -device vmware-svga and
-device qxl-vga. In use, for -device qxl-vga, mouse doesn't display
in guest window like the desciption in above bug.
This patch try to use -device for primary video when qemu >=1.6 which
contains the bug fix patch

(cherry picked from commit e3f2686bdf)

Conflicts:
	src/qemu/qemu_capabilities.c - context with other new capabilities not backported
2013-07-29 16:43:05 -06:00
Eric Blake
ad4e7f90b4 examples: fix mingw build vs. printf
Mingw *printf is a moving target; newer mingw now provides a version
of asprintf() that fails to understand %lld:

  CC       event_test-event-test.o
../../../../examples/domain-events/events-c/event-test.c: In function 'myDomainEventRTCChangeCallback':
../../../../examples/domain-events/events-c/event-test.c:270:18: error: unknown conversion type character 'l' in format [-Werror=format=]
                  virDomainGetID(dom), offset) < 0)
                  ^

But since our examples already admitted that they were hacking around
a mingw deficiency, it is easier to just use printf() directly, coupled
with <inttypes.h> macros, for a more portable work-around.

* examples/domain-events/events-c/event-test.c
(myDomainEventRTCChangeCallback): Use PRIdMAX instead of asprintf.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 6f4458a017)
2013-07-29 16:20:29 -06:00
Eric Blake
ec15df4e85 build: fix virutil build on mingw
https://bugzilla.redhat.com/show_bug.cgi?id=964358

On platforms without decent group support, the build failed:

Cannot export virGetGroupList: symbol not defined
./.libs/libvirt_security_manager.a(libvirt_security_manager_la-security_dac.o): In function `virSecurityDACPreFork':
/home/eblake/libvirt-tmp/build/src/../../src/security/security_dac.c:248: undefined reference to `virGetGroupList'
collect2: error: ld returned 1 exit status

* src/util/virutil.c (virGetGroupList): Provide dummy implementation.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit cd725c7a93)
2013-07-29 16:17:40 -06:00
Eric Blake
aa11d6888f build: work around mingw header pollution
On Fedora 18, when cross-compiling to mingw with the mingw*-dbus
packages installed, compilation fails with:

  CC       libvirt_net_rpc_server_la-virnetserver.lo
In file included from /usr/i686-w64-mingw32/sys-root/mingw/include/dbus-1.0/dbus/dbus-connection.h:32:0,
                 from /usr/i686-w64-mingw32/sys-root/mingw/include/dbus-1.0/dbus/dbus-bus.h:30,
                 from /usr/i686-w64-mingw32/sys-root/mingw/include/dbus-1.0/dbus/dbus.h:31,
                 from ../../src/util/virdbus.h:26,
                 from ../../src/rpc/virnetserver.c:39:
/usr/i686-w64-mingw32/sys-root/mingw/include/dbus-1.0/dbus/dbus-message.h:74:58: error: expected ';', ',' or ')' before 'struct'

I have reported this as a bug against two packages:
- mingw-headers, for polluting the namespace
https://bugzilla.redhat.com/show_bug.cgi?id=980270
- dbus, for not dealing with the pollution
https://bugzilla.redhat.com/show_bug.cgi?id=980278

At least dbus has agreed that a future version of dbus headers will
do s/interface/iface/, regardless of what happens in mingw. But it
is also easy to workaround in libvirt in the meantime, without having
to wait for either mingw or dbus to upgrade.

* src/util/virdbus.h (includes): Undo mingw's pollution so that
dbus doesn't fail.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 1528e8b23a)
2013-07-29 16:13:48 -06:00
Eric Blake
543e5adf05 build: configure must not affect tarball contents
On mingw, configure sets the name of the lxc symfile to
libvirt_lxc.defs rather than libvirt_lxc.syms.  But tarballs
must be arch-independent, regardless of the configure options
used for the tree where we ran 'make dist'.  This led to the
following failure in autobuild.sh:

  CCLD     libvirt-lxc.la
  CCLD     libvirt-qemu.la
/usr/lib64/gcc/i686-w64-mingw32/4.7.2/../../../../i686-w64-mingw32/bin/ld: cannot find libvirt_lxc.def: No such file or directory
collect2: error: ld returned 1 exit status
make[3]: *** [libvirt-lxc.la] Error 1
make[3]: *** Waiting for unfinished jobs....

We were already doing the right thing with libvirt_qemu.syms.

* src/Makefile.am (EXTRA_DIST): Don't ship a built file which
depends on configure for its final name.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit d79c9273b0)
2013-07-29 16:13:44 -06:00
Eric Blake
ef10647e2e build: avoid build failure without gnutls
Found while trying to cross-compile to mingw:

  CC       libvirt_driver_remote_la-remote_driver.lo
../../src/remote/remote_driver.c: In function 'doRemoteOpen':
../../src/remote/remote_driver.c:487:23: error: variable 'verify' set but not used [-Werror=unused-but-set-variable]

* src/remote/remote_driver.c (doRemoteOpen): Also ignore 'verify'.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 4e6a78e712)
2013-07-29 16:10:55 -06:00
Ján Tomko
15bde978da Fix build with clang
Partially revert cdd703f's revert of c163410, as linking with clang
with --param=ssp-buffer-size=4 still fails with:
"argument unused during compilation".

(cherry picked from commit 4b91dc24d1)
2013-07-29 15:59:21 -06:00
Eric Blake
ab9ff9ed37 maint: update to latest gnulib
Upstream gnulib recently patched a bug in bootstrap, for projects
that use a different name than build-aux for a subdirectory.  We
don't, but it doesn't hurt to update.

* .gnulib: Update, for bootstrap fix.
* bootstrap: Sync to upstream.
* bootstrap.conf: Match upstream bug fix.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit ac0852c72a)
2013-07-29 15:59:14 -06:00
Eric Blake
4a10d56125 maint: update to latest gnulib
Future patches need LGPLv2+ versions of some modules that had
recent license changes; but separating the gnulib update from
the actual use of the modules makes it easier to backport to
an older version while avoiding a submodule update (assuming,
of course, that the backport is to a system where glibc provides
adequate functionaliy without needing the gnulib module).

* .gnulib: Update to latest, for modules needed in later patches.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 7961ad2107)
2013-07-29 15:59:08 -06:00
Eric Blake
29e57f770b build: honor autogen.sh --no-git
Based on a report by Chandrashekar Shastri, at
https://bugzilla.redhat.com/show_bug.cgi?id=979360

On systems where git cannot access the outside world, a developer
can instead arrange to get a copy of gnulib at the right commit
via side channels (such as NFS share drives), set GNULIB_SRCDIR,
then use ./autogen.sh --no-git.  In this setup, we will now
avoid direct use of git.  Of course, this means no automatic
gnulib updates when libvirt.git updates its submodule, but it
is expected that any developer in such a situation is already
prepared to deal with the fallout.

* .gnulib: Update to latest, for bootstrap.
* bootstrap: Synchronize from gnulib.
* autogen.sh (no_git): Avoid git when requested.
* cfg.mk (_update_required): Skip automatic rerun of bootstrap if
we can't use git.
* docs/compiling.html.in: Document this setup.
* docs/hacking.html.in: Mention this.
* HACKING: Regenerate.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 1e503ee534)
2013-07-29 15:58:59 -06:00
Eric Blake
ed3a0d830f maint: update to latest gnulib
The latest mingw headers on Fedora 19 fail to build with gnulib
without an update.

Meanwhile, now that upstream gnulib has better handling of -W
probing for clang, we can drop some of our own solutions in
favor of upstream; thus this reverts commit c1634100, "Correctly
detect warning flags with clang".

* .gnulib: Update to latest, for mingw and clang.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit cdd703f475)
2013-07-29 15:58:36 -06:00
Roman Bogorodskiy
f3b9bb7d4e FreeBSD: disable buggy -fstack-protector-all
FreeBSD ships an old gcc 4.2.1 which generates
bogus code, e.g. getsockopt() call returns
struct xucred with bogus values, which doesn't even
allow to connect to libvirtd:

error: Failed to find group record for gid '1284660778': No error: 0

So roll back to just -fstack-protector on FreeBSD.

(cherry picked from commit cc7cd6232e)
2013-07-29 15:58:34 -06:00
Eric Blake
6fd56b7e20 build: update to latest gnulib, for syntax-check
This picks up a fix for a syntax-check weakness mentioned here:
https://www.redhat.com/archives/libvir-list/2013-May/msg00811.html

* .gnulib: Update to latest, for maint.mk improvement.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 12bd22c70d)
2013-07-29 15:55:05 -06:00
Eric Blake
a2d23560d0 maint: update to latest gnulib
Among others, this fixes a cosmetic bug where bootstrap stated:

./bootstrap: Bootstrapping from checked-out http://libvirt.org sources...

instead of the intended:

./bootstrap: Bootstrapping from checked-out libvirt sources...

* .gnulib: Update to latest, for bootstrap improvement.
* bootstrap: Resync from gnulib.

(cherry picked from commit 3dfc2b71aa)
2013-07-29 15:54:47 -06:00
Eric Blake
a10d077ef2 lxc: correctly backport /dev/tty fix
https://bugzilla.redhat.com/show_bug.cgi?id=982317

maint-only patch; reported by Geert Jansen

Commit 17cdc298 tried to backport upstream 90a0c6d, but in
resolving conflicts, failed to account that upstream commit
e1d32bb refactored code to leave off a leading /dev.

* src/lxc/lxc_container.c (lxcContainerPopulateDevices): Use
correct device name.

Signed-off-by: Eric Blake <eblake@redhat.com>
2013-07-29 15:49:22 -06:00
Eric Blake
6598510159 security: fix deadlock with prefork
https://bugzilla.redhat.com/show_bug.cgi?id=964358

Attempts to start a domain with both SELinux and DAC security
modules loaded will deadlock; latent problem introduced in commit
fdb3bde and exposed in commit 29fe5d7.  Basically, when recursing
into the security manager for other driver's prefork, we have to
undo the asymmetric lock taken at the manager level.

Reported by Jiri Denemark, with diagnosis help from Dan Berrange.

* src/security/security_stack.c (virSecurityStackPreFork): Undo
extra lock grabbed during recursion.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit bfc183c1e3)
2013-07-22 14:04:22 -06:00
Eric Blake
00c2003e25 security_dac: compute supplemental groups before fork
https://bugzilla.redhat.com/show_bug.cgi?id=964358

Commit 75c1256 states that virGetGroupList must not be called
between fork and exec, then commit ee777e99 promptly violated
that for lxc's use of virSecurityManagerSetProcessLabel.  Hoist
the supplemental group detection to the time that the security
manager needs to fork.  Qemu is safe, as it uses
virSecurityManagerSetChildProcessLabel which in turn uses
virCommand to determine supplemental groups.

This does not fix the fact that virSecurityManagerSetProcessLabel
calls virSecurityDACParseIds calls parseIds which eventually
calls getpwnam_r, which also violates fork/exec async-signal-safe
safety rules, but so far no one has complained of hitting
deadlock in that case.

* src/security/security_dac.c (_virSecurityDACData): Track groups
in private data.
(virSecurityDACPreFork): New function, to set them.
(virSecurityDACClose): Clean up new fields.
(virSecurityDACGetIds): Alter signature.
(virSecurityDACSetSecurityHostdevLabelHelper)
(virSecurityDACSetChardevLabel, virSecurityDACSetProcessLabel)
(virSecurityDACSetChildProcessLabel): Update callers.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 29fe5d745f)

Conflicts:
	src/security/security_dac.c - virSecurityDACSetSecurityUSBLabel needed similar treatment
2013-07-22 14:00:57 -06:00
Eric Blake
689d014686 security: framework for driver PreFork handler
https://bugzilla.redhat.com/show_bug.cgi?id=964358

A future patch wants the DAC security manager to be able to safely
get the supplemental group list for a given uid, but at the time
of a fork rather than during initialization so as to pick up on
live changes to the system's group database.  This patch adds the
framework, including the possibility of a pre-fork callback
failing.

For now, any driver that implements a prefork callback must be
robust against the possibility of being part of a security stack
where a later element in the chain fails prefork.  This means
that drivers cannot do any action that requires a call to postfork
for proper cleanup (no grabbing a mutex, for example).  If this
is too prohibitive in the future, we would have to switch to a
transactioning sequence, where each driver has (up to) 3 callbacks:
PreForkPrepare, PreForkCommit, and PreForkAbort, to either clean
up or commit changes made during prepare.

* src/security/security_driver.h (virSecurityDriverPreFork): New
callback.
* src/security/security_manager.h (virSecurityManagerPreFork):
Change signature.
* src/security/security_manager.c (virSecurityManagerPreFork):
Optionally call into driver, and allow returning failure.
* src/security/security_stack.c (virSecurityDriverStack):
Wrap the handler for the stack driver.
* src/qemu/qemu_process.c (qemuProcessStart): Adjust caller.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit fdb3bde31c)
2013-07-22 11:41:50 -06:00
Eric Blake
7d24a0a226 util: make virSetUIDGID async-signal-safe
https://bugzilla.redhat.com/show_bug.cgi?id=964358

POSIX states that multi-threaded apps should not use functions
that are not async-signal-safe between fork and exec, yet we
were using getpwuid_r and initgroups.  Although rare, it is
possible to hit deadlock in the child, when it tries to grab
a mutex that was already held by another thread in the parent.
I actually hit this deadlock when testing multiple domains
being started in parallel with a command hook, with the following
backtrace in the child:

 Thread 1 (Thread 0x7fd56bbf2700 (LWP 3212)):
 #0  __lll_lock_wait ()
     at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136
 #1  0x00007fd5761e7388 in _L_lock_854 () from /lib64/libpthread.so.0
 #2  0x00007fd5761e7257 in __pthread_mutex_lock (mutex=0x7fd56be00360)
     at pthread_mutex_lock.c:61
 #3  0x00007fd56bbf9fc5 in _nss_files_getpwuid_r (uid=0, result=0x7fd56bbf0c70,
     buffer=0x7fd55c2a65f0 "", buflen=1024, errnop=0x7fd56bbf25b8)
     at nss_files/files-pwd.c:40
 #4  0x00007fd575aeff1d in __getpwuid_r (uid=0, resbuf=0x7fd56bbf0c70,
     buffer=0x7fd55c2a65f0 "", buflen=1024, result=0x7fd56bbf0cb0)
     at ../nss/getXXbyYY_r.c:253
 #5  0x00007fd578aebafc in virSetUIDGID (uid=0, gid=0) at util/virutil.c:1031
 #6  0x00007fd578aebf43 in virSetUIDGIDWithCaps (uid=0, gid=0, capBits=0,
     clearExistingCaps=true) at util/virutil.c:1388
 #7  0x00007fd578a9a20b in virExec (cmd=0x7fd55c231f10) at util/vircommand.c:654
 #8  0x00007fd578a9dfa2 in virCommandRunAsync (cmd=0x7fd55c231f10, pid=0x0)
     at util/vircommand.c:2247
 #9  0x00007fd578a9d74e in virCommandRun (cmd=0x7fd55c231f10, exitstatus=0x0)
     at util/vircommand.c:2100
 #10 0x00007fd56326fde5 in qemuProcessStart (conn=0x7fd53c000df0,
     driver=0x7fd55c0dc4f0, vm=0x7fd54800b100, migrateFrom=0x0, stdin_fd=-1,
     stdin_path=0x0, snapshot=0x0, vmop=VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
     flags=1) at qemu/qemu_process.c:3694
 ...

The solution is to split the work of getpwuid_r/initgroups into the
unsafe portions (getgrouplist, called pre-fork) and safe portions
(setgroups, called post-fork).

* src/util/virutil.h (virSetUIDGID, virSetUIDGIDWithCaps): Adjust
signature.
* src/util/virutil.c (virSetUIDGID): Add parameters.
(virSetUIDGIDWithCaps): Adjust clients.
* src/util/vircommand.c (virExec): Likewise.
* src/util/virfile.c (virFileAccessibleAs, virFileOpenForked)
(virDirCreate): Likewise.
* src/security/security_dac.c (virSecurityDACSetProcessLabel):
Likewise.
* src/lxc/lxc_container.c (lxcContainerSetID): Likewise.
* configure.ac (AC_CHECK_FUNCS_ONCE): Check for setgroups, not
initgroups.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit ee777e9949)

Conflicts:
	src/lxc/lxc_container.c - did not use setUIDGID before 1.1.0
	src/util/virutil.c - oom handling changes not backported
	src/util/virfile.c - functions still lived in virutil.c this far back
	configure.ac - context with previous commit
2013-07-22 11:40:26 -06:00
Eric Blake
fcdaa3df33 util: add virGetGroupList
https://bugzilla.redhat.com/show_bug.cgi?id=964358

Since neither getpwuid_r() nor initgroups() are safe to call in
between fork and exec (they obtain a mutex, but if some other
thread in the parent also held the mutex at the time of the fork,
the child will deadlock), we have to split out the functionality
that is unsafe.  At least glibc's initgroups() uses getgrouplist
under the hood, so the ideal split is to expose getgrouplist for
use before a fork.  Gnulib already gives us a nice wrapper via
mgetgroups; we wrap it once more to look up by uid instead of name.

* bootstrap.conf (gnulib_modules): Add mgetgroups.
* src/util/virutil.h (virGetGroupList): New declaration.
* src/util/virutil.c (virGetGroupList): New function.
* src/libvirt_private.syms (virutil.h): Export it.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 75c125641a)

Conflicts:
	bootstrap.conf - not updating gnulib submodule...
	configure.ac - ...so checking for getgrouplist by hand...
	src/util/virutil.c - ...and copying only the getgrouplist implementation rather than calling the gnulib function
2013-07-22 10:25:48 -06:00
Eric Blake
3a2d5e7e70 util: improve user lookup helper
https://bugzilla.redhat.com/show_bug.cgi?id=964358

A future patch needs to look up pw_gid; but it is wasteful
to crawl through getpwuid_r twice for two separate pieces
of information, and annoying to copy that much boilerplate
code for doing the crawl.  The current internal-only
virGetUserEnt is also a rather awkward interface; it's easier
to just design it to let callers request multiple pieces of
data as needed from one traversal.

And while at it, I noticed that virGetXDGDirectory could deref
NULL if the getpwuid_r lookup fails.

* src/util/virutil.c (virGetUserEnt): Alter signature.
(virGetUserDirectory, virGetXDGDirectory, virGetUserName): Adjust
callers.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit c1983ba4e3)

Conflicts:
	src/util/virutil.c - oom reporting/strdup changes not backported
2013-07-19 17:14:34 -06:00
Cole Robinson
b5ed23b7d1 Prep for release 1.0.5.4 2013-07-12 08:56:21 -04:00
Ján Tomko
efa2739be6 qemu: fix double free in qemuMigrationPrepareDirect
Remove assignment of the string freed by virURIFree
to hostname, since it's not used anywhere.

Double free introduced by ddf8ad8, useless code
introduced by f03dcc5.

https://bugzilla.redhat.com/show_bug.cgi?id=977961
(cherry picked from commit 5744d96f21)
2013-07-12 09:27:04 +02:00
Cole Robinson
508a7a7523 Prep for release 1.0.5.3 2013-07-11 18:12:46 -04:00
Laine Stump
b5b269cbc5 pci: initialize virtual_functions array pointer to avoid segfault
This fixes https://bugzilla.redhat.com/show_bug.cgi?id=971325

The problem was that if virPCIGetVirtualFunctions was given the name
of a non-existent interface, it would return to its caller without
initializing the pointer to the array of virtual functions to NULL,
and the caller (virNetDevGetVirtualFunctions) would try to VIR_FREE()
the invalid pointer.

The final error message before the crash would be:

 virPCIGetVirtualFunctions:2088 :
  Failed to open dir '/sys/class/net/eth2/device':
  No such file or directory

In this patch I move the initialization in virPCIGetVirtualFunctions()
to the begining of the function, and also do an explicit
initialization in virNetDevGetVirtualFunctions, just in case someone
in the future adds code into that function prior to the call to
virPCIGetVirtualFunctions.

(cherry picked from commit 2c2525ab6a)
2013-07-11 17:49:19 -04:00
Ján Tomko
a717d7ba0f qemu: check if block I/O limits fit into long long
We can only pass values up to LLONG_MAX through JSON
and QEMU checks if the int64_t number is not negative
at startup since 1.5.0.

https://bugzilla.redhat.com/show_bug.cgi?id=974010
(cherry picked from commit d3c8788492)
2013-07-11 17:48:44 -04:00
Laine Stump
22d9d9a28f network: increase max number of routes
This fixes the problem reported in:

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

When checking for a collision of a new libvirt network's subnet with
any existing routes, we read all of /proc/net/route into memory, then
parse all the entries. The function that we use to read this file
requires a "maximum length" parameter, which had previously been set
to 64*1024. As each line in /proc/net/route is 128 bytes, this would
allow for a maximum of 512 entries in the routing table.

This patch increases that number to 128 * 100000, which allows for
100,000 routing table entries. This means that it's possible that 12MB
would be allocated, but that would only happen if there really were
100,000 route table entries on the system, it's only held for a very
short time.

Since there is no method of specifying and unlimited max (and that
would create a potential denial of service anyway) hopefully this
limit is large enough to accomodate everyone.

(cherry picked from commit 2bdf548f5f)
2013-07-11 17:47:58 -04:00
Ján Tomko
0943603d9e qemu: allow restore with non-migratable XML input
Convert input XML to migratable before using it in
qemuDomainSaveImageOpen.

XML in the save image is migratable, i.e. doesn't contain implicit
controllers. If these controllers were in a non-default order in the
input XML, the ABI check would fail. Removing and re-adding these
controllers fixes it.

https://bugzilla.redhat.com/show_bug.cgi?id=834196
(cherry picked from commit 07966f6a8b)
2013-07-11 17:47:39 -04:00
Michal Privoznik
ca305a756d qemu_migrate: Dispose listen address if set from config
https://bugzilla.redhat.com/show_bug.cgi?id=971485

As of d7f9d82753 we copy the listen
address from the qemu.conf config file in case none has been provided
via XML. But later, when migrating, we should not include such listen
address in the migratable XML as it is something autogenerated, not
requested by user. Moreover, the binding to the listen address will
likely fail, unless the address is '0.0.0.0' or its IPv6 equivalent.
This patch introduces a new boolean attribute to virDomainGraphicsListenDef
to distinguish autofilled listen addresses. However, we must keep the
attribute over libvirtd restarts, so it must be kept within status XML.

(cherry picked from commit 6546017c50)
2013-07-11 17:47:18 -04:00
Ján Tomko
3b6bc5eda6 iscsi: pass hostnames to iscsiadm instead of resolving them
iscsiadm now supports specifying hostnames in the portal argument [1]

Instead of resolving the hostname to a single IPv4 address, pass the
hostname to isciadm, allowing IPv6 targets to work.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=624437

(cherry picked from commit cbdb3c7326)
2013-07-11 17:46:53 -04:00
Osier Yang
818a933141 qemu: Report the offset from host UTC for RTC_CHANGE event
https://bugzilla.redhat.com/show_bug.cgi?id=964177

Though both libvirt and QEMU's document say RTC_CHANGE returns
the offset from the host UTC, qemu actually returns the offset
from the specified date instead when specific date is provided
(-rtc base=$date).

It's not safe for qemu to fix it in code, it worked like that
for 3 years, changing it now may break other QEMU use cases.
What qemu tries to do is to fix the document:

http://lists.gnu.org/archive/html/qemu-devel/2013-05/msg04782.html

And in libvirt side, instead of replying on the value from qemu,
this converts the offset returned from qemu to the offset from
host UTC, by:

  /*
   * a: the offset from qemu RTC_CHANGE event
   * b: The specified date (-rtc base=$date)
   * c: the host date when libvirt gets the RTC_CHANGE event
   * offset: What libvirt will report
   */

  offset = a + (b - c);

The specified date (-rtc base=$date) is recorded in clock's def as
an internal only member (may be useful to exposed outside?).

Internal only XML tag "basetime" is introduced to not lose the
guest's basetime after libvirt restarting/reloading:

<clock offset='variable' adjustment='304' basis='utc' basetime='1370423588'/>

(cherry picked from commit e31b5cf393)
2013-07-11 17:46:45 -04:00
Peter Krempa
44758cea54 storage: Provide better error message if metadata pre-alloc is unsupported
Instead of a unknown flag error report that metadata pre-allocation is
not supported with the requested volume creation method.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=969982
(cherry picked from commit 77e7f69c3b)
2013-07-11 17:46:32 -04:00
Martin Kletzander
ffe68a85c9 usb: don't spoil decimal addresses
For USB devices, dev->name gets formated as %.3o:%.3o even though the
numbers are decimal.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=967712
(cherry picked from commit dc0c791569)
2013-07-11 17:45:55 -04:00
John Ferlan
e01eedf9bf Check for existence of interface prior to setting terminate flag
https://bugzilla.redhat.com/show_bug.cgi?id=903480

During domain destruction it's possible that the learnIPAddressThread has
already removed the interface prior to the teardown filter path being run.
The teardown code would only be telling the thread to terminate.

(cherry picked from commit 64919d978e)
2013-07-11 17:45:32 -04:00
Peter Krempa
b14ced3932 qemu: snapshot: Don't kill access to disk if snapshot creation fails
If snapshot creation failed for example due to invalid use of the
"REUSE_EXTERNAL" flag, libvirt killed access to the original image file
instead of the new image file. On machines with selinux this kills the
whole VM as the selinux context is enforced immediately.

* qemu_driver.c:qemuDomainSnapshotUndoSingleDiskActive():
    - Kill access to the new image file instead of the old one.

Partially resolves: https://bugzilla.redhat.com/show_bug.cgi?id=906639

(cherry picked from commit 177046753f)
2013-07-11 17:45:22 -04:00
Martin Kletzander
b2c2dd60f1 Fix blkdeviotune for shutoff domain
Function qemuDomainSetBlockIoTune() was checking QEMU capabilities
even when !(flags & VIR_DOMAIN_AFFECT_LIVE) and the domain was
shutoff, resulting in the following problem:

 virsh # domstate asdf; blkdeviotune asdf vda --write-bytes-sec 100
 shut off

 error: Unable to change block I/O throttle
 error: unsupported configuration: block I/O throttling not supported with this QEMU binary

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=965016
(cherry picked from commit 5af3ce8277)
2013-07-11 17:45:08 -04:00
Daniel P. Berrange
1a6333f842 Ensure non-root can read /proc/meminfo file in LXC containers
By default files in a FUSE mount can only be accessed by the
user which created them, even if the file permissions would
otherwise allow it. To allow other users to access the FUSE
mount the 'allow_other' mount option must be used. This bug
prevented non-root users in an LXC container from reading
the /proc/meminfo file.

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

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 922ebe4ead)
2013-07-11 17:42:26 -04:00
Richard Weinberger
17cdc298ac LXC: Create /dev/tty within a container
Many applications use /dev/tty to read from stdin.
e.g. zypper on openSUSE.

Let's create this device node to unbreak those applications.
As /dev/tty is a synonym for the current controlling terminal
it cannot harm the host or any other containers.

Signed-off-by: Richard Weinberger <richard@nod.at>
(cherry picked from commit 9a0ac6d9c2)

Conflicts:
	src/lxc/lxc_controller.c
2013-07-11 17:38:47 -04:00
Peter Krempa
6cdff51fb3 qemu: Implement new QMP command for cpu hotplug
This patch implements support for the "cpu-add" QMP command that plugs
CPUs into a live guest. The "cpu-add" command was introduced in QEMU
1.5. For the hotplug to work machine type "pc-i440fx-1.5" is required.

(cherry picked from commit c12b2be516)
2013-07-11 17:29:48 -04:00
Ján Tomko
ad02b24871 udev: fix crash in libudev logging
Call virLogVMessage instead of virLogMessage, since libudev
called us with a va_list object, not a list of arguments.

Honor message priority and strip the trailing newline.

https://bugzilla.redhat.com/show_bug.cgi?id=969152
(cherry picked from commit f753dd62f9)
2013-07-11 17:29:33 -04:00
Daniel P. Berrange
647156870e Don't mount selinux fs in LXC if selinux is disabled
Before trying to mount the selinux filesystem in a container
use is_selinux_enabled() to check if the machine actually
has selinux support (eg not booted with selinux=0)

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 95c6cc344b)
2013-07-11 10:52:04 -06:00
Daniel P. Berrange
269dfa0e08 Re-add selinux/selinux.h to lxc_container.c
Re-add the selinux header to lxc_container.c since other
functions now use it, beyond the patch that was just
reverted.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 63ea1e5432)
2013-07-11 10:51:32 -06:00
Daniel P. Berrange
0616172bdf Fix failure to detect missing cgroup partitions
Change bbe97ae968 caused the
QEMU driver to ignore ENOENT errors from cgroups, in order
to cope with missing /proc/cgroups. This is not good though
because many other things can cause ENOENT and should not
be ignored. The callers expect to see ENXIO when cgroups
are not present, so adjust the code to report that errno
when /proc/cgroups is missing

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit c2cf5f1c2a)
2013-07-11 10:39:45 -06:00
Jim Fehlig
68d92eea16 Fix starting domains when kernel has no cgroups support
Found that I was unable to start existing domains after updating
to a kernel with no cgroups support

  # zgrep CGROUP /proc/config.gz
  # CONFIG_CGROUPS is not set
  # virsh start test
  error: Failed to start domain test
  error: Unable to initialize /machine cgroup: Cannot allocate memory

virCgroupPartitionNeedsEscaping() correctly returns errno (ENOENT) when
attempting to open /proc/cgroups on such a system, but it was being
dropped in virCgroupSetPartitionSuffix().

Change virCgroupSetPartitionSuffix() to propagate errors returned by
its callees.  Also check for ENOENT in qemuInitCgroup() when determining
if cgroups support is available.
(cherry picked from commit bbe97ae968)
2013-07-11 10:38:45 -06:00
Daniel P. Berrange
e0dd41e564 Escaping leading '.' in cgroup names
Escaping a leading '.' with '_' in the cgroup names

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 0ced83dcfb)
2013-07-11 10:37:49 -06:00
Daniel P. Berrange
fdaa5c825c Add docs about cgroups layout and usage
Describe the new cgroups layout, how to customize placement
of guests and what virsh commands are used to access the
parameters.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 486a86eb18)
2013-07-11 10:37:09 -06:00
Daniel P. Berrange
4769d2ae9f Cope with missing swap cgroup controls
It is possible to build a kernel without swap cgroup controls
present. This causes a fatal error when querying memory
parameters. Treat missing swap controls as meaning "unlimited".
The fatal error remains if the user tries to actually change
the limit.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit f493d83fbd)
2013-07-11 10:36:17 -06:00
Jim Fehlig
8c4faa9044 libxl: fix build with Xen4.3
Xen 4.3 fixes a mistake in the libxl event handler signature where the
event owned by the application was defined as const.  Detect this and
define the libvirt libxl event handler signature appropriately.
(cherry picked from commit 43b0ff5b1e)
2013-07-11 10:27:35 -06:00
Ján Tomko
233a616bda qemu: fix return value of qemuDomainBlockPivot on errors
If qemuMonitorBlockJob returned 0, qemuDomainBlockPivot
might return 0 even if an error occured.

https://bugzilla.redhat.com/show_bug.cgi?id=977678
(cherry picked from commit c34107dfd3)
2013-07-11 14:34:16 +02:00
Ján Tomko
14ce155a3a storage: return -1 when fs pool can't be mounted
Don't reuse the return value of virStorageBackendFileSystemIsMounted.
If it's 0, we'd return it even if the mount command failed.

Also, don't report another error if it's -1, since one has already
been reported.

Introduced by 258e06c.

https://bugzilla.redhat.com/show_bug.cgi?id=981251
(cherry picked from commit 13fde7ceab)
2013-07-11 14:33:44 +02:00
Dennis Chen
4d21d84532 Fix vPort management: FC vHBA creation
When creating a virtual FC HBA with virsh/libvirt API, an error message
will be returned: "error: Node device not found",
also the 'nodedev-dumpxml' shows wrong information of wwpn & wwnn
for the new created device.

Signed-off-by: xschen@tnsoft.com.cn

This reverts f90af69 which switched wwpn & wwwn in the wrong place.

https://www.kernel.org/doc/Documentation/scsi/scsi_fc_transport.txt
(cherry picked from commit 3c0d5e224c)
2013-07-01 11:54:22 +02:00
Ján Tomko
0347e778ca bridge: don't crash on bandwidth unplug with no bandwidth
If networkUnplugBandwidth is called on a network which has
no bandwidth defined, print a warning instead of crashing.

This can happen when destroying a domain with bandwidth if
bandwidth was removed from the network after the domain was
started.

https://bugzilla.redhat.com/show_bug.cgi?id=975359
(cherry picked from commit 658c932ab4)
2013-07-01 11:54:11 +02:00
Ján Tomko
1b4cd1e5f0 Fix invalid read in virCgroupGetValueStr
Don't check for '\n' at the end of file if zero bytes were read.

Found by valgrind:
==404== Invalid read of size 1
==404==    at 0x529B09F: virCgroupGetValueStr (vircgroup.c:540)
==404==    by 0x529AF64: virCgroupMoveTask (vircgroup.c:1079)
==404==    by 0x1EB475: qemuSetupCgroupForEmulator (qemu_cgroup.c:1061)
==404==    by 0x1D9489: qemuProcessStart (qemu_process.c:3801)
==404==    by 0x18557E: qemuDomainObjStart (qemu_driver.c:5787)
==404==    by 0x190FA4: qemuDomainCreateWithFlags (qemu_driver.c:5839)

Introduced by 0d0b409.

https://bugzilla.redhat.com/show_bug.cgi?id=978356
(cherry picked from commit 306c49ffd5)
2013-06-26 17:31:28 +02:00
Ján Tomko
c93aef4946 virsh: edit: don't leak XML string on reedit or redefine
Free the old XML strings before overwriting them if the user
has chosen to reedit the file or force the redefinition.

Found by Alex Jia trying to reproduce another bug:
https://bugzilla.redhat.com/show_bug.cgi?id=977430#c3
(cherry picked from commit 1e3a252974)
2013-06-26 17:31:16 +02:00
John Ferlan
f1e454457d lxc: Resolve issue with GetScheduler APIs for non running domain
Cherry-picked from 38ada092d1

As a consequence of the cgroup layout changes from commit 'cfed9ad4', the
lxcDomainGetSchedulerParameters[Flags]()' and lxcGetSchedulerType() APIs
failed to return data for a non running domain.  This can be seen through
a 'virsh schedinfo <domain>' command which returns:

Scheduler      : Unknown
error: Requested operation is not valid: cgroup CPU controller is not mounted

Prior to that change a non running domain would return:

Scheduler      : posix
cpu_shares     : 0
vcpu_period    : 0
vcpu_quota     : 0
emulator_period: 0
emulator_quota : 0

This patch will restore the capability to return configuration only data
for a non running domain regardless of whether cgroups are available.

NOTE: Needed to change the VIR_STRDUP(ret, "posix"); to ret = strdup("posix");
      and added the virReportOOMError(); on failure.
2013-06-20 09:38:51 -04:00
John Ferlan
f1729409fb qemu: Resolve issue with GetScheduler APIs for non running domain
Cherry-picked from b237545341

As a consequence of the cgroup layout changes from commit '632f78ca', the
qemuDomainGetSchedulerParameters[Flags]()' and qemuGetSchedulerType() APIs
failed to return data for a non running domain.  This can be seen through
a 'virsh schedinfo <domain>' command which returns:

Scheduler      : Unknown
error: Requested operation is not valid: cgroup CPU controller is not mounted

Prior to that change a non running domain would return:

Scheduler      : posix
cpu_shares     : 0
vcpu_period    : 0
vcpu_quota     : 0
emulator_period: 0
emulator_quota : 0

This patch will restore the capability to return configuration only data
for a non running domain regardless of whether cgroups are available.

NOTE: Needed to change the VIR_STRDUP(ret, "posix"); to ret = strdup("posix");
      and added the virReportOOMError(); on failure.
2013-06-20 09:37:54 -04:00
Ján Tomko
a06bf7b287 conf: fix use after free in virChrdevOpen
Don't free the stream on error if we've successfully added it
to the hash table, since it will be freed by virChrdevHashEntryFree
callback.

Preserve the error message before calling virStreamFree, since it
resets the error.

Introduced by 4716138, crashing since 6921892.

Reported by Sergey Fionov on libvir-list.
(cherry picked from commit a32b41746c)
2013-06-18 15:30:23 +02:00
Jiri Denemark
067e9988a2 qemu: Avoid leaking uri in qemuMigrationPrepareDirect
(cherry picked from commit ddf8ad82eb)
2013-06-18 15:30:03 +02:00
Ján Tomko
1fc28a4743 virtlockd: fix socket path
Change the socket path to match the one used by lockd driver.

https://bugzilla.redhat.com/show_bug.cgi?id=968128
(cherry picked from commit 70fe129546)
2013-06-18 15:29:54 +02:00
Ján Tomko
7e0b15f2f0 nodedev: fix vport detection for FC HBA
Use the host number as the host number when constructing the sysfs path
instead of the variable we are trying to fill.

https://bugzilla.redhat.com/show_bug.cgi?id=973543
(cherry picked from commit 371c15517c)
2013-06-18 15:29:42 +02:00
Cole Robinson
419605b3a0 Prep for release 1.0.5.2 2013-06-12 16:50:01 -04:00
Cole Robinson
feb2d3375c virsh: migrate: Don't disallow --p2p and --migrateuri
Because it's a valid combination. p2p still uses a separate channel
for qemu migration, so there's value in letting the user specify a manual
migrate URI for overriding auto-port, or libvirt's FQDN lookup.

What _isn't_ allowed is --migrateuri and TUNNELLED, since there is
no separate migration channel. Disallow that instead
(cherry picked from commit 5e1de4fcdd)
2013-06-12 16:37:55 -04:00
Cole Robinson
12b0af5905 qemu: migration: error if tunnelled + storage specified
Since as the code indicates it doesn't work yet, so let's be
explicit about it.
(cherry picked from commit 98bbda00cf)
2013-06-12 16:37:55 -04:00
Cole Robinson
69de4ce80d qemu: migration: Improve p2p error if we can't open conn
By actually showing the Open() error to the user
(cherry picked from commit 5751fc4f4e)
2013-06-12 16:37:55 -04:00
Daniel P. Berrange
9b3455cb78 Add a virGetLastErrorMessage() function
Apps using libvirt will often have code like

   if (virXXXX() < 0) {
      virErrorPtr err = virGetLastError();
      fprintf(stderr, "Something failed: %s\n",
              err && err->message ? err->message :
              "unknown error");
      return -1;
   }

Checking for a NULL error object or message leads to very
verbose code. A virGetLastErrorMessage() helper from libvirt
can simplify this to

   if (virXXXX() < 0) {
      fprintf(stderr, "Something failed: %s\n",
              virGetLastErrorMessage());
      return -1;
   }

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 69c6a58a1d)
2013-06-12 16:37:55 -04:00
Cole Robinson
bdb5808173 qemu: Don't report error on successful media eject
If we are just ejecting media, ret == -1 even after the retry loop
determines that the tray is open, as requested. This means media
disconnect always report's error.

Fix it, and fix some other mini issues:

- Don't overwrite the 'eject' error message if the retry loop fails
- Move the retries decrement inside the loop, otherwise the final loop
  might succeed, yet retries == 0 and we will raise error
- Setting ret = -1 in the disk->src check is unneeded
- Fix comment typos

cc: mprivozn@redhat.com
(cherry picked from commit 406d8a9809)
2013-06-12 15:25:08 -04:00
Michal Privoznik
dc0efacb6f qemuDomainChangeEjectableMedia: Unlock domain while waiting for event
In 84c59ffa I've tried to fix changing ejectable media process. The
process should go like this:

1) we need to call 'eject' on the monitor
2) we should wait for 'DEVICE_TRAY_MOVED' event
3) now we can issue 'change' command

However, while waiting in step 2) the domain monitor was locked. So
even if qemu reported the desired event, the proper callback was not
called immediately. The monitor handling code needs to lock the
monitor in order to read the event. So that's the first lock we must
not hold while waiting. The second one is the domain lock. When
monitor handling code reads an event, the appropriate callback is
called then. The first thing that each callback does is locking the
corresponding domain as a domain or its device is about to change
state. So we need to unlock both monitor and VM lock. Well, holding
any lock while sleep()-ing is not the best thing to do anyway.
(cherry picked from commit 543af79a14)
2013-06-12 15:24:44 -04:00
Christophe Fergeau
0e6aa8fcd2 storage: Ensure 'qemu-img resize' size arg is a 512 multiple
qemu-img resize will fail with "The new size must be a multiple of 512"
if libvirt doesn't round it first.
This fixes rhbz#951495

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
(cherry picked from commit 9a8f39d097)
2013-06-12 15:11:50 -04:00
Stefan Berger
12f18158c7 nwfilter: grab driver lock earlier during init (bz96649)
This patch is in relation to Bug 966449:

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

This is a patch addressing the coredump.

Thread 1 must be calling  nwfilterDriverRemoveDBusMatches(). It does so with
nwfilterDriverLock held. In the patch below I am now moving the
nwfilterDriverLock(driverState) further up so that the initialization, which
seems to either take a long time or is entirely stuck, occurs with the lock
held and the shutdown cannot occur at the same time.

Remove the lock in virNWFilterDriverIsWatchingFirewallD to avoid
double-locking.

(cherry picked from commit 0ec376c20a)
2013-06-11 18:40:43 -04:00
Doug Goldstein
ab7e3039e0 Fix use of VIR_STRDUP vs strdup
Commit 894f784948 broke the v1.0.5-maint
branch because VIR_STRDUP() didn't exist in the v1.0.5 release so the
resulting build is missing that symbol.

This patch is only for the v1.0.5-maint branch.
2013-06-10 09:36:06 -04:00
Viktor Mihajlovski
dc200aa851 qemu: Fix crash in migration of graphics-less guests.
Commit 7f15ebc7a2 introduced a bug
happening when guests without a <graphics> element are migrated.
The initialization of listenAddress happens unconditionally
from the cookie even if the cookie->graphics pointer was NULL.
Moved the initialization to where it is safe.

Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
(cherry picked from commit 9684bb11fd)
2013-05-31 22:36:32 +02:00
Laine Stump
2f2ed992c0 qemu: prevent termination of guests w/hostdev on driver reconnect
This should resolve:

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

The problem was that qemuUpdateActivePciHostdevs was returning 0
(success) when no hostdevs were present, but would otherwise return -1
(failure) even when it completed successfully. It is only called from
qemuProcessReconnect(), and when qemuProcessReconnect got back an
error, it would not only stop reconnecting, but would terminate the
guest qemu process "to remove danger of it ending up running twice if
user tries to start it again later".

(This bug was introduced in commit 011cf7ad, which was pushed between
v1.0.2 and v1.0.3, so all maintenance branches from v1.0.3 up to 1.0.5
will need this one line patch applied.)
(cherry picked from commit 2ea45647bc)
2013-05-31 15:16:06 -04:00
Ján Tomko
894f784948 qemu: escape literal IPv6 address in NBD migration
A literal IPv6 must be escaped, otherwise migration fails with:
unable to execute QEMU command 'drive-mirror': address resolution failed
for f0::0d:5901: Servname not supported for ai_socktype
since QEMU treats everything after the first ':' as the port.
(cherry picked from commit 2136327e23)
2013-05-31 17:28:31 +02:00
Eric Blake
0ecc5ad70d build: fix build with older gcc
gcc 4.1.2 (hello, RHEL 5!) fails to build on 32-bit platforms with:

conf/domain_conf.c: In function 'virDomainDefParseXML':
conf/domain_conf.c:10581: warning: integer constant is too large for 'long' type

Problem introduced in commit f8e3221f9.

* src/conf/domain_conf.c (virDomainDefParseXML): Mark large constants.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit f6817c70b4)
2013-05-28 20:21:50 -06:00
Ján Tomko
3accd7eb25 qemu: fix NBD migration to hosts with IPv6 enabled
Since f03dcc5 we use [::] as the listening address both on qemu
command line in -incoming and in nbd-server-start QMP command.
However the latter requires just :: without the braces.
(cherry picked from commit 2326006410)
2013-05-25 16:55:19 -04:00
Eric Blake
b4541a2f3d cgroup: be robust against cgroup movement races
https://bugzilla.redhat.com/show_bug.cgi?id=965169 documents a
problem starting domains when cgroups are enabled; I was able
to reliably reproduce the race about 5% of the time when I added
hooks to domain startup by 3 seconds (as that seemed to be about
the length of time that qemu created and then closed a temporary
thread, probably related to aio handling of initially opening
a disk image).  The problem has existed since we introduced
virCgroupMoveTask in commit 9102829 (v0.10.0).

There are some inherent TOCTTOU races when moving tasks between
kernel cgroups, precisely because threads can be created or
completed in the window between when we read a thread id from the
source and when we write to the destination.  As the goal of
virCgroupMoveTask is merely to move ALL tasks into the new
cgroup, it is sufficient to iterate until no more threads are
being created in the old group, and ignoring any threads that
die before we can move them.

It would be nicer to start the threads in the right cgroup to
begin with, but by default, all child threads are created in
the same cgroup as their parent, and we don't want vcpu child
threads in the emulator cgroup, so I don't see any good way
of avoiding the move.  It would also be nice if the kernel were
to implement something like rename() as a way to atomically move
a group of threads from one cgroup to another, instead of forcing
a window where we have to read and parse the source, then format
and write back into the destination.

* src/util/vircgroup.c (virCgroupAddTaskStrController): Ignore
ESRCH, because a thread ended between read and write attempts.
(virCgroupMoveTask): Loop until all threads have moved.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 83e4c77547)
2013-05-21 11:57:07 -06:00
Cole Robinson
6bf4e0e0d0 Prep for release 1.0.5.1 2013-05-19 18:01:21 -04:00
Eric Blake
6a7ae990e7 tests: use portable shell code
'make check' fails since commit 470d5c46 on any system with dash
as /bin/sh, because '<<<' is a bash extension.  For example:

nwfilterschematest: 23: /home/eblake/libvirt/tests/schematestutils.sh: Syntax error: redirection unexpected

Also, there is no need to spawn a grep process when shell globbing
can do the same.

* tests/schematestutils.sh: Replace bashism and subprocess with a
faster and portable construct.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 1d21b884a3)
2013-05-17 21:40:49 -06:00
Martin Kletzander
3efa02e3ed qemu: Fix cgroup handling when setting VCPU BW
Commit 632f78c introduced a regression which causes schedinfo being
unable to set some parameters.  When migrating to priv->cgroup there
was missing variable left out and due to passed NULL to underlying
function, the setting failed.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=963592
2013-05-16 22:16:09 +02:00
Ján Tomko
71e7f1392b daemon: fix leak after listing all volumes
CVE-2013-1962

remoteDispatchStoragePoolListAllVolumes wasn't freeing the pool.
The pool also held a reference to the connection, preventing it from
getting freed and closing the netcf interface driver, which held two
sockets open.
(cherry picked from commit ca697e90d5)
2013-05-16 16:07:43 +02:00
Daniel P. Berrange
a36dbe6475 Fix iohelper usage with streams opened for read
bz #960879

In b2878ed860 we added the O_NOCTTY
flag when opening files in the stream code. Unfortunately a later
piece of code was comparing the flags == O_RDONLY, without masking
out the non-access mode flags. This broke the iohelper when used
with streams for read, since it caused us to attach the stream
output pipe to the stream input FD instead of output FD :-(

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit a2214c5257)
2013-05-14 16:02:29 -06:00
Laine Stump
ce902dcaf0 util: fix virFileOpenAs return value and resulting error logs
This resolves:

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

The first problem was that virFileOpenAs was returning fd (-1) in one
of the error cases rather than ret (-errno), so the caller thought
that the error was EPERM rather than ENOENT.

The second problem was that some log messages in the general purpose
qemuOpenFile() function would always say "Failed to create" even if
the caller hadn't included O_CREAT (i.e. they were trying to open an
existing file).

This fixes virFileOpenAs to jump down to the error return (which
returns ret instead of fd) in the previously mentioned incorrect
failure case of virFileOpenAs(), removes all error logging from
virFileOpenAs() (since the callers report it), and modifies
qemuOpenFile to appropriately use "open" or "create" in its log
messages.

NB: I seriously considered removing logging from all callers of
virFileOpenAs(), but there is at least one case where the caller
doesn't want virFileOpenAs() to log any errors, because it's just
going to try again (qemuOpenFile()). We can't simply make a silent
variation of virFileOpenAs() though, because qemuOpenFile() can't make
the decision about whether or not it wants to retry until after
virFileOpenAs() has already returned an error code.

Likewise, I also considered changing virFileOpenAs() to return -1 with
errno set on return, and may still do that, but only as a separate
patch, as it obscures the intent of this patch too much.
(cherry picked from commit a2c1bedbd8)
2013-05-10 13:10:07 -04:00
Ján Tomko
a4f45888ce iscsi: don't leak portal string when starting a pool
(cherry picked from commit 413274f63b)
2013-05-09 15:05:07 +02:00
Ján Tomko
c12dc47c27 don't mention disk controllers in generic controller errors
The controller element supports non-disk controller types too.

https://bugzilla.redhat.com/show_bug.cgi?id=960958
(cherry picked from commit c075f89fa2)
2013-05-09 15:04:48 +02:00
Ján Tomko
9fc6618e74 conf: don't crash on a tpm device with no backends
Print an error instead of crashing when a TPM device without
a backend is specified.

Add a test for tpm device with no backend, which should fail
with a parse error.

https://bugzilla.redhat.com/show_bug.cgi?id=961252
(cherry picked from commit 1d96440a06)
2013-05-09 14:57:00 +02:00
Ján Tomko
a3f71eb908 tests: files named '.*-invalid.xml' should fail validation
Currently, using an invalid XML in tests fails, because
the schema test expects all of them to be valid.

Treat files with -invalid.xml suffix as invalid and expect
them to fail validation.
(cherry picked from commit 470d5c4654)
2013-05-09 14:56:36 +02:00
Laine Stump
6597cc25a1 qemu: allocate network connections sooner during domain startup
VFIO device assignment requires a cgroup ACL to be setup for access to
the /dev/vfio/nn "group" device for any devices that will be assigned
to a guest. In the case of a host device that is allocated from a
pool, it was being allocated during qemuBuildCommandLine(), which is
called by qemuProcessStart() *after* the all-encompassing
qemuSetupCgroup() was called, meaning that the standard Cgroup ACL
setup wasn't creating ACLs for these devices allocated from pools.

One possible solution was to manually add a single ACL down inside
qemuBuildCommandLine() when networkAllocateActualDevice() is called,
but that has two problems: 1) the function that adds the cgroup ACL
requires a virDomainObjPtr, which isn't available in
qemuBuildCommandLine(), and 2) we really shouldn't be doing network
device setup inside qemuBuildCommandLine() anyway.

Instead, I've created a new function called
qemuNetworkPrepareDevices() which is called just before
qemuPrepareHostDevices() during qemuProcessStart() (explanation of
ordering in the comments), i.e. well before the call to
qemuSetupCgroup(). To minimize code churn in a patch that will be
backported to 1.0.5-maint, qemuNetworkPrepareDevices only does
networkAllocateActualDevice() and the bare amount of setup required
for type='hostdev network devices, but it eventually should do *all*
device setup for guest network devices.

Note that some of the code that was previously needed in
qemuBuildCommandLine() is no longer required when
networkAllocateActualDevice() is called earlier:

 * qemuAssignDeviceHostdevAlias() is already done further down in
   qemuProcessStart().

 * qemuPrepareHostdevPCIDevices() is called by
   qemuPrepareHostDevices() which is called after
   qemuNetworkPrepareDevices() in qemuProcessStart().

As hinted above, this new function should be moved into a separate
qemu_network.c (or similarly named) file along with
qemuPhysIfaceConnect(), qemuNetworkIfaceConnect(), and
qemuOpenVhostNet(), and expanded to call those functions as well, then
the nnets loop in qemuBuildCommandLine() should be reduced to only
build the commandline string (which itself can be in a separate
qemuInterfaceBuilldCommandLine() function as suggested by
Michal). However, this will require storing away an array of tapfd and
vhostfd that are needed for the commandline, so I would rather do that
in a separate patch and leave this patch at the minimum to fix the
bug.
(cherry picked from commit 8cd40e7e0d)
2013-05-07 12:46:09 -04:00
Guido Günther
3b8f6e5fd6 Make detect_scsi_host_caps a function on all architectures
In the non linux case some callers like gather_scsi_host_caps needed the
return code of -1 while others like update_caps needed an empty
statement (to avoid a "statement without effect" warning). This is much
simpler solved by using a function instead of a define.
(cherry picked from commit 58662f4416)
2013-05-06 14:20:33 -06:00
Guido Günther
4a4d2300ff Fixup rpcgen code on kFreeBSD too
since it uses glibc's rpcgen.
(cherry picked from commit b562d7b7e4)
2013-05-06 14:20:18 -06:00
Daniel P. Berrange
14ba72b640 Fix release of resources with lockd plugin
The lockd plugin for the lock manager was not correctly
handling the release of resource locks. This meant that
during migration, or when pausing a VM, the locks would
not get released. This in turn made it impossible to
resume the domain, or finish migration
(cherry picked from commit 8dc93ffadc)
2013-05-06 14:19:47 -06:00
Eric Blake
fc8a231018 build: avoid non-portable cast of pthread_t
POSIX says pthread_t is opaque.  We can't guarantee if it is scaler
or a pointer, nor what size it is; and BSD differs from Linux.
We've also had reports of gcc complaining on attempts to cast it,
if we use a cast to the wrong type (for example, pointers have to be
cast to void* or intptr_t before being narrowed; while casting a
function return of scalar pthread_t to void* triggers a different
warning).

Give up on casts, and use unions to get at decent bits instead.  And
rather than futz around with figuring which 32 bits of a potentially
64-bit pointer are most likely to be unique, convert the rest of
the code base to use 64-bit values when using a debug id.

Based on a report by Guido Günther against kFreeBSD, but with a
fix that doesn't regress commit 4d970fd29 for FreeBSD.

* src/util/virthreadpthread.c (virThreadSelfID, virThreadID): Use
union to get at a decent bit representation of thread_t bits.
* src/util/virthread.h (virThreadSelfID, virThreadID): Alter
signature.
* src/util/virthreadwin32.c (virThreadSelfID, virThreadID):
Likewise.
* src/qemu/qemu_domain.h (qemuDomainJobObj): Alter type of owner.
* src/qemu/qemu_domain.c (qemuDomainObjTransferJob)
(qemuDomainObjSetJobPhase, qemuDomainObjReleaseAsyncJob)
(qemuDomainObjBeginNestedJob, qemuDomainObjBeginJobInternal): Fix
clients.
* src/util/virlog.c (virLogFormatString): Likewise.
* src/util/vireventpoll.c (virEventPollInterruptLocked):
Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 22d12905e6)
2013-05-06 14:19:35 -06:00
Daniel P. Berrange
832049ca29 Fix potential use of undefined variable in remote dispatch code
If an early dispatch check caused a jump to the 'cleanup' branch
then virTypeParamsFree() would be called with an uninitialized
'nparams' variable. Fortunately 'params' is initialized to NULL,
so the uninitialized 'nparams' variable would not be used.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 31dbbb667f)
2013-05-06 14:18:23 -06:00
Eric Blake
6381c1c130 build: fix mingw build of virprocess.c
Commit 776d49f4 added a static function that is only called
conditionally; leading to this compile error on mingw:

  CC       libvirt_util_la-virprocess.lo
../../src/util/virprocess.c:624:26: error: 'struct rlimit' declared inside parameter list [-Werror]
../../src/util/virprocess.c:624:26: error: its scope is only this definition or declaration, which is probably not what you want [-Werror]
../../src/util/virprocess.c:622:1: error: 'virProcessPrLimit' defined but not used [-Werror=unused-function]

* src/util/virprocess.c (virProcessPrLimit): Only declare
virProcessPrLimit when used.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 05f79a3894)
2013-05-06 14:17:35 -06:00
Daniel P. Berrange
3b9243e018 Fix F_DUPFD_CLOEXEC operation args
The F_DUPFD_CLOEXEC operation with fcntl() expects a single
int argument, specifying the minimum FD number for the newly
dup'd file descriptor. We were not specifying that causing
random stack data to be accessed as the FD number. Sometimes
that worked, sometimes it didn't.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit d6670a64e1)
2013-05-06 14:16:14 -06:00
Eric Blake
fa8692cd2e spec: proper soft static allocation of qemu uid
https://bugzilla.redhat.com/show_bug.cgi?id=924501 tracks a
problem that occurs if uid 107 is already in use at the time
libvirt is first installed.  In response that problem, Fedora
packaging guidelines were recently updated.  This fixes the
spec file to comply with the new guidelines:
https://fedoraproject.org/wiki/Packaging:UsersAndGroups

* libvirt.spec.in (daemon): Follow updated Fedora guidelines.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit a2584d58f6)
2013-05-06 14:09:13 -06:00
Eric Blake
c0431c10ee build: clean up stray files found by 'make distcheck'
'make distcheck' complained:

ERROR: files left in build directory after distclean:
./python/libvirt.pyc
./tests/commandhelper.log

Problems introduced in commits f015495 and 25ea8e4 (both v1.0.3).

* tests/commandtest.c (test21): Check (and clean) log file.
* tests/commanddata/test21.log: New file.
* python/Makefile.am (CLEANFILES): Clean up compiled python files.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit c21c38d71b)
2013-05-06 14:09:11 -06:00
Eric Blake
343ab629cf build: always include libvirt_lxc.syms in tarball
On a mingw build, 'make distcheck' fails with:

  GEN      libvirt_qemu.def
make[3]: *** No rule to make target `../../src/libvirt_lxc.syms', needed by `libvirt_lxc.def'.  Stop.

I traced it to a missing entry in EXTRA_DIST.  But rather than keep
the entire list in sync, it is easier to list the three syms files
that drive .so files directly, and then reuse existing makefile
variables for the remaining files (that is, I validated that all
remaining files are added to SYM_FILES, possibly via USED_SYM_FILES,
according to makefile conditionals).

Problem introduced in commit 3d1596b (v1.0.2).

* src/Makefile.am (EXTRA_DIST): Ensure all syms files are shipped.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit ed11ab93fa)
2013-05-06 14:09:10 -06:00
Laine Stump
97633c8682 qemu: fix stupid typos in VFIO cgroup setup/teardown
I must have looked at this a couple dozen times before I noticed it
had "!=" instead of "==". Not doing this setup prevented qemu from
doing anything with the vfio group device.
(cherry picked from commit 52ba0f6e1c)
2013-05-03 14:49:51 -04:00
Eric Blake
3e7adcf682 build: always include sanitytest in tarball
The libvirt 1.0.5 tarball is missing a file which renders 'make
check' broken; first reported on list by Guido Günther.

* python/Makefile.am (EXTRA_DIST): Hoist sanitytest.py out of
HAVE_PYTHON conditional.

Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 5a3487dadb)
2013-05-03 11:26:38 -04:00
Guido Günther
2b9bf71b6c virInitctlRequest: unbreak make syntax check
introduced by dcf97846d5

To trigger this cppi needs to be installed.
(cherry picked from commit ca75c44310)
2013-05-03 11:26:25 -04:00
Guido Günther
c2de882f32 virInitctlRequest: unbreak make syntax check
introduced by dcf97846d5
(cherry picked from commit a1365d7351)
2013-05-03 11:26:07 -04:00
Laine Stump
d2686140e1 network: fix network driver startup for qemu:///session
This should resolve https://bugzilla.redhat.com/show_bug.cgi?id=958907

Recent new addition of code to read/write active network state to the
NETWORK_STATE_DIR in the network driver broke startup for
qemu:///session. The network driver had several state file paths
hardcoded to /var, which could never possibly work in session mode.

This patch modifies *all* state files to use a variable string that is
set differently according to whether or not we're running
privileged. (It turns out that logDir was never used, so it's been
completely eliminated.)

There are very definitely other problems preventing dnsmasq and radvd
from running in non-privileged mode, but it's more consistent to have
the directories used by them be determined in the same fashion.

NB: I've noted before that the network driver is storing its state
(including dnsmasq and radvd state) in /var/lib, while qemu stores its
state in /var/run. It would probably have been better if the two
matched, but it's been this way for a long time, and changing it would
break running installations during an upgrade, so it's best to just
leave it as it is.
(cherry picked from commit 2ffd87d820)

Conflicts:
	src/network/bridge_driver.c - code removed by this patch had
                                      been modified upstream.
2013-05-03 11:06:20 -04:00
830 changed files with 584750 additions and 681064 deletions

5
.ctags
View File

@@ -1,5 +0,0 @@
--recurse
--exclude=*.orig
--exclude=*.html
--exclude=*.html.in
--langmap=c:+.h.in

16
.gitignore vendored
View File

@@ -28,6 +28,7 @@
.sc-start-sc_*
/ABOUT-NLS
/AUTHORS
/COPYING
/ChangeLog
/GNUmakefile
/INSTALL
@@ -103,20 +104,10 @@
/run
/sc_*
/src/.*.stamp
/src/access/org.libvirt.api.policy
/src/access/viraccessapicheck.c
/src/access/viraccessapicheck.h
/src/access/viraccessapichecklxc.c
/src/access/viraccessapichecklxc.h
/src/access/viraccessapicheckqemu.c
/src/access/viraccessapicheckqemu.h
/src/esx/*.generated.*
/src/hyperv/*.generated.*
/src/libvirt*.def
/src/libvirt.syms
/src/libvirt_access.syms
/src/libvirt_access_lxc.syms
/src/libvirt_access_qemu.syms
/src/libvirt_*.stp
/src/libvirt_*helper
/src/libvirt_*probes.h
@@ -153,8 +144,6 @@
/tests/domainsnapshotxml2xmltest
/tests/esxutilstest
/tests/eventtest
/tests/fchosttest
/tests/fdstreamtest
/tests/hashtest
/tests/jsontest
/tests/libvirtdconftest
@@ -167,7 +156,6 @@
/tests/openvzutilstest
/tests/qemuargv2xmltest
/tests/qemuhelptest
/tests/qemuhotplugtest
/tests/qemumonitorjsontest
/tests/qemumonitortest
/tests/qemuxmlnstest
@@ -191,7 +179,6 @@
/tests/virbitmaptest
/tests/virbuftest
/tests/vircgrouptest
/tests/virdbustest
/tests/virdrivermoduletest
/tests/virendiantest
/tests/virhashtest
@@ -204,7 +191,6 @@
/tests/virshtest
/tests/virstoragetest
/tests/virstringtest
/tests/virsystemdtest
/tests/virtimetest
/tests/viruritest
/tests/vmx2xmltest

339
COPYING
View File

@@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

85
HACKING
View File

@@ -104,8 +104,11 @@ and run the tests:
make syntax-check
make -C tests valgrind
Valgrind <http://valgrind.org/> is a test that checks for memory management
issues, such as leaks or use of uninitialized variables.
Valgrind
http://valgrind.org/is a test that checks for memory management issues, such as leaks or use of
uninitialized variables.
If you encounter any failing tests, the VIR_TEST_DEBUG environment variable
may provide extra information to debug the failures. Larger values of
@@ -184,8 +187,11 @@ In this instance, it is acceptible to modify the "tests/.valgrind.supp" file
in order to add a suppression filter. The filter should be unique enough to
not suppress real leaks, but it should be generic enough to cover multiple
code paths. The format of the entry can be found in the documentation found at
the Valgrind home page <http://valgrind.org/>. The following trace was added
to "tests/.valgrind.supp" in order to suppress the warning:
the
Valgrind home page.
http://valgrind.org/The following trace was added to "tests/.valgrind.supp" in order to suppress
the warning:
{
dlInitMemoryLeak1
@@ -206,8 +212,10 @@ feature or changing the output of a program.
There is more on this subject, including lots of links to background reading
on the subject, on Richard Jones' guide to working with open source projects
<http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/>.
on the subject, on
Richard Jones' guide to working with open source projects
http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/
Code indentation
@@ -311,29 +319,6 @@ immediately prior to any closing bracket. E.g.
int foo(int wizz); // Good
Semicolons
==========
Semicolons should never have a space beforehand. Inside the condition of a
"for" loop, there should always be a space or line break after each semicolon,
except for the special case of an infinite loop (although more infinite loops
use "while"). While not enforced, loop counters generally use post-increment.
for (i = 0 ;i < limit ; ++i) { // Bad
for (i = 0; i < limit; i++) { // Good
for (;;) { // ok
while (1) { // Better
Empty loop bodies are better represented with curly braces and a comment,
although use of a semicolon is not currently rejected.
while ((rc = waitpid(pid, &st, 0) == -1) &&
errno == EINTR); // ok
while ((rc = waitpid(pid, &st, 0) == -1) &&
errno == EINTR) { // Better
/* nothing */
}
Curly braces
============
Omit the curly braces around an "if", "while", "for" etc. body only when that
@@ -434,11 +419,6 @@ But if negating a complex condition is too ugly, then at least add braces:
Preprocessor
============
Macros defined with an ALL_CAPS name should generally be assumed to be unsafe
with regards to arguments with side-effects (that is, MAX(a++, b--) might
increment a or decrement b too many or too few times). Exceptions to this rule
are explicitly documented for macros in viralloc.h and virstring.h.
For variadic macros, stick with C99 syntax:
#define vshPrint(_ctl, ...) fprintf(stdout, __VA_ARGS__)
@@ -522,14 +502,16 @@ Low level memory management
Use of the malloc/free/realloc/calloc APIs is deprecated in the libvirt
codebase, because they encourage a number of serious coding bugs and do not
enable compile time verification of checks for NULL. Instead of these
routines, use the macros from viralloc.h.
routines, use the macros from memory.h.
- To allocate a single object:
virDomainPtr domain;
if (VIR_ALLOC(domain) < 0)
if (VIR_ALLOC(domain) < 0) {
virReportOOMError();
return NULL;
}
@@ -538,8 +520,10 @@ routines, use the macros from viralloc.h.
virDomainPtr domains;
size_t ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) < 0)
if (VIR_ALLOC_N(domains, ndomains) < 0) {
virReportOOMError();
return NULL;
}
@@ -548,8 +532,10 @@ routines, use the macros from viralloc.h.
virDomainPtr *domains;
size_t ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) < 0)
if (VIR_ALLOC_N(domains, ndomains) < 0) {
virReportOOMError();
return NULL;
}
@@ -560,8 +546,10 @@ recommended only for smaller arrays):
virDomainPtr domains;
size_t ndomains = 0;
if (VIR_EXPAND_N(domains, ndomains, 1) < 0)
if (VIR_EXPAND_N(domains, ndomains, 1) < 0) {
virReportOOMError();
return NULL;
}
domains[ndomains - 1] = domain;
@@ -573,8 +561,10 @@ scales better, but requires tracking allocation separately from usage)
size_t ndomains = 0;
size_t ndomains_max = 0;
if (VIR_RESIZE_N(domains, ndomains_max, ndomains, 1) < 0)
if (VIR_RESIZE_N(domains, ndomains_max, ndomains, 1) < 0) {
virReportOOMError();
return NULL;
}
domains[ndomains++] = domain;
@@ -730,17 +720,6 @@ sizeof(dest) returns something meaningful). Note that this is a macro, so
arguments could be evaluated more than once. This is equivalent to
virStrncpy(dest, src, strlen(src), sizeof(dest)).
VIR_STRDUP(char *dst, const char *src);
VIR_STRNDUP(char *dst, const char *src, size_t n);
You should avoid using strdup or strndup directly as they do not report
out-of-memory error, and do not allow a NULL source. Use VIR_STRDUP or
VIR_STRNDUP macros instead, which return 0 for NULL source, 1 for successful
copy, and -1 for allocation failure with the error already reported. In very
specific cases, when you don't want to report the out-of-memory error, you can
use VIR_STRDUP_QUIET or VIR_STRNDUP_QUIET, but such usage is very rare and
usually considered a flaw.
Variable length string buffer
=============================
@@ -876,7 +855,9 @@ logic would be better pulled out into a helper function.
Although libvirt does not encourage the Linux kernel wind/unwind style of
multiple labels, there's a good general discussion of the issue archived at
KernelTrap <http://kerneltrap.org/node/553/2131>
KernelTrap
http://kerneltrap.org/node/553/2131
When using goto, please use one of these standard labels if it makes sense:

View File

@@ -1,20 +1,7 @@
## Process this file with automake to produce Makefile.in
## Copyright (C) 2005-2013 Red Hat, Inc.
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library. If not, see
## <http://www.gnu.org/licenses/>.
## Copyright (C) 2005-2012 Red Hat, Inc.
## See COPYING.LIB for the License of this software
LCOV = lcov
GENHTML = genhtml
@@ -55,13 +42,10 @@ NEWS: $(top_srcdir)/docs/news.xsl $(top_srcdir)/docs/news.html.in
| perl -pe 's/[ \t]+$$//' \
> $@-t && mv $@-t $@ ; fi
$(top_srcdir)/HACKING: $(top_srcdir)/docs/hacking1.xsl \
$(top_srcdir)/docs/hacking2.xsl \
$(top_srcdir)/docs/wrapstring.xsl \
$(top_srcdir)/docs/hacking.html.in
$(top_srcdir)/HACKING: $(top_srcdir)/docs/hacking1.xsl $(top_srcdir)/docs/hacking2.xsl \
$(top_srcdir)/docs/wrapstring.xsl $(top_srcdir)/docs/hacking.html.in
$(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \
$(XSLTPROC) --nonet $(top_srcdir)/docs/hacking1.xsl \
$(top_srcdir)/docs/hacking.html.in | \
$(XSLTPROC) --nonet $(top_srcdir)/docs/hacking1.xsl $(top_srcdir)/docs/hacking.html.in | \
$(XSLTPROC) --nonet $(top_srcdir)/docs/hacking2.xsl - \
| perl -0777 -pe 's/\n\n+$$/\n/' \
> $@-t && mv $@-t $@ ; fi;

View File

@@ -1,18 +1,3 @@
## Copyright (C) 2009-2010, 2013 Red Hat, Inc.
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library. If not, see
## <http://www.gnu.org/licenses/>.
#
# Generated by running the following on Fedora 9:

View File

@@ -69,7 +69,6 @@ fi
if test -x /usr/bin/i686-w64-mingw32-gcc ; then
make distclean
PKG_CONFIG_LIBDIR="/usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig:/usr/i686-w64-mingw32/sys-root/mingw/share/pkgconfig" \
PKG_CONFIG_PATH="$AUTOBUILD_INSTALL_ROOT/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig" \
CC="i686-w64-mingw32-gcc" \
../configure \
@@ -89,7 +88,6 @@ fi
if test -x /usr/bin/x86_64-w64-mingw32-gcc ; then
make distclean
PKG_CONFIG_LIBDIR="/usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig:/usr/x86_64-w64-mingw32/sys-root/mingw/share/pkgconfig" \
PKG_CONFIG_PATH="$AUTOBUILD_INSTALL_ROOT/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig" \
CC="x86_64-w64-mingw32-gcc" \
../configure \

View File

@@ -64,7 +64,7 @@ bootstrap_hash()
# like to run 'git clean -x -f po' to fix it; but only ./bootstrap regenerates
# the required file po/Makevars.
# Only run bootstrap from a git checkout, never from a tarball.
if test -d .git || -f .git; then
if test -d .git; then
curr_status=.git-module-status t=
if test "$no_git"; then
t=no-git

View File

@@ -71,8 +71,6 @@ listen
localeconv
maintainer-makefile
manywarnings
mgetgroups
mkdtemp
mkostemp
mkostemps
mktempd

View File

@@ -1,7 +1,6 @@
#!/usr/bin/perl
#
# bracket-spacing.pl: Report any usage of 'function (..args..)'
# Also check for other syntax issues, such as correct use of ';'
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -32,11 +31,8 @@ foreach my $file (@ARGV) {
while (defined (my $line = <FILE>)) {
my $data = $line;
# Kill any quoted ; or "
$data =~ s,'[";]','X',g;
# Kill any quoted strings
$data =~ s,"([^\\\"]|\\.)*","XXX",g;
# Kill any quoted strongs
$data =~ s,".*?","XXX",g;
# Kill any C++ style comments
$data =~ s,//.*$,//,;
@@ -92,8 +88,8 @@ foreach my $file (@ARGV) {
# Require whitespace immediately after keywords,
# but none after the opening bracket
while ($data =~ /\b(if|for|while|switch|return)\(/ ||
$data =~ /\b(if|for|while|switch|return)\s+\(\s/) {
while ($data =~ /(if|for|while|switch|return)\(/ ||
$data =~ /(if|for|while|switch|return)\s+\(\s/) {
print "$file:$.: $line";
$ret = 1;
last;
@@ -113,30 +109,6 @@ foreach my $file (@ARGV) {
$ret = 1;
last;
}
# Forbid whitespace before ";". Things like below are allowed:
#
# 1) The expression is empty for "for" loop. E.g.
# for (i = 0; ; i++)
#
# 2) An empty statement. E.g.
# while (write(statuswrite, &status, 1) == -1 &&
# errno == EINTR)
# ;
#
while ($data =~ /[^;\s]\s+;/) {
print "$file:$.: $line";
$ret = 1;
last;
}
# Require EOL, macro line continuation, or whitespace after ";".
# Allow "for (;;)" as an exception.
while ($data =~ /;[^ \\\n;)]/) {
print "$file:$.: $line";
$ret = 1;
last;
}
}
close FILE;
}

96
cfg.mk
View File

@@ -165,7 +165,6 @@ useless_free_options = \
--name=virNodeDeviceObjFree \
--name=virObjectUnref \
--name=virObjectFreeCallback \
--name=virPCIDeviceFree \
--name=virSecretDefFree \
--name=virStorageEncryptionFree \
--name=virStorageEncryptionSecretFree \
@@ -379,19 +378,10 @@ sc_prohibit_strtol:
$(_sc_search_regexp)
# Use virAsprintf rather than as'printf since *strp is undefined on error.
# But for plain %s, virAsprintf is overkill compared to strdup.
sc_prohibit_asprintf:
@prohibit='\<v?a[s]printf\>' \
halt='use virAsprintf, not as'printf \
$(_sc_search_regexp)
@prohibit='virAsprintf.*, *"%s",' \
halt='use VIR_STRDUP instead of virAsprintf with "%s"' \
$(_sc_search_regexp)
sc_prohibit_strdup:
@prohibit='\<strn?dup\> *\(' \
halt='use VIR_STRDUP, not strdup' \
$(_sc_search_regexp)
# Prefer virSetUIDGID.
sc_prohibit_setuid:
@@ -450,11 +440,6 @@ sc_prohibit_nonreentrant:
done ; \
exit $$fail
sc_prohibit_select:
@prohibit="\\<select *\\(" \
halt="use poll(), not se""lect()" \
$(_sc_search_regexp)
# Prohibit the inclusion of <ctype.h>.
sc_prohibit_ctype_h:
@prohibit='^# *include *<ctype\.h>' \
@@ -501,11 +486,6 @@ sc_prohibit_virBufferAdd_with_string_literal:
halt='use virBufferAddLit, not virBufferAdd, with a string literal' \
$(_sc_search_regexp)
sc_prohibit_virBufferAsprintf_with_string_literal:
@prohibit='\<virBufferAsprintf *\([^,]+, *"([^%"\]|\\.|%%)*"\)' \
halt='use virBufferAddLit, not virBufferAsprintf, with a string literal' \
$(_sc_search_regexp)
# Not only do they fail to deal well with ipv6, but the gethostby*
# functions are also not thread-safe.
sc_prohibit_gethostby:
@@ -545,17 +525,6 @@ sc_avoid_attribute_unused_in_header:
halt='use ATTRIBUTE_UNUSED in .c rather than .h files' \
$(_sc_search_regexp)
sc_prohibit_int_ijk:
@prohibit='\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' \
halt='use size_t, not int/unsigned int for loop vars i, j, k' \
$(_sc_search_regexp)
sc_prohibit_loop_iijjkk:
@prohibit='\<(int|unsigned) ([^=]+ )*(ii|jj|kk)(\s|,|;)' \
halt='use i, j, k for loop iterators, not ii, jj, kk' \
$(_sc_search_regexp)
# Many of the function names below came from this filter:
# git grep -B2 '\<_('|grep -E '\.c- *[[:alpha:]_][[:alnum:]_]* ?\(.*[,;]$' \
# |sed 's/.*\.c- *//'|perl -pe 's/ ?\(.*//'|sort -u \
@@ -686,19 +655,6 @@ sc_spec_indentation:
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
fi
# Long lines can be harder to diff; too long, and git send-email chokes.
# For now, only enforce line length on files where we have intentionally
# fixed things and don't want to regress.
sc_prohibit_long_lines:
@prohibit='.{90}' \
in_vc_files='\.arg[sv]' \
halt='Wrap long lines in expected output files' \
$(_sc_search_regexp)
@prohibit='.{80}' \
in_vc_files='Makefile\.am' \
halt='Wrap long lines in Makefiles' \
$(_sc_search_regexp)
sc_copyright_format:
@require='Copyright .*Red 'Hat', Inc\.' \
containing='Copyright .*Red 'Hat \
@@ -712,22 +668,11 @@ sc_copyright_format:
$(_sc_search_regexp)
# Prefer the new URL listing over the old street address listing when
# calling out where to get a copy of the [L]GPL. Also, while we have
# to ship COPYING (GPL) alongside COPYING.LESSER (LGPL), we want any
# source file that calls out a top-level file to call out the LGPL
# version. Note that our typical copyright boilerplate refers to the
# license by name, not by reference to a top-level file.
sc_copyright_usage:
# calling out where to get a copy of the [L]GPL.
sc_copyright_address:
@prohibit=Boston,' MA' \
halt='Point to <http://www.gnu.org/licenses/>, not an address' \
$(_sc_search_regexp)
@require='COPYING\.LESSER' \
containing='COPYING' \
halt='Refer to COPYING.LESSER for LGPL' \
$(_sc_search_regexp)
@prohibit='COPYING\.LIB' \
halt='Refer to COPYING.LESSER for LGPL' \
$(_sc_search_regexp)
# Some functions/macros produce messages intended solely for developers
# and maintainers. Do not mark them for translation.
@@ -804,7 +749,7 @@ sc_prohibit_duplicate_header:
}' $$i || fail=1; \
done; \
if test $$fail -eq 1; then \
{ echo '$(ME): avoid duplicate headers' 1>&2; exit 1; } \
{ echo "$(ME)": avoid duplicate headers >&2; exit 1; } \
fi;
# Don't include "libvirt/*.h" in "" form.
@@ -822,15 +767,6 @@ sc_prohibit_include_public_headers_brackets:
halt='Do not include libvirt/*.h in internal source' \
$(_sc_search_regexp)
# <config.h> is only needed in .c files; .h files do not need it since
# .c files must include config.h before any other .h.
sc_prohibit_config_h_in_headers:
@prohibit='^# *include\>.*config\.h' \
in_vc_files='\.h$$' \
halt='headers should not include <config.h>' \
$(_sc_search_regexp)
# We don't use this feature of maint.mk.
prev_version_file = /dev/null
@@ -880,8 +816,7 @@ syntax-check: $(top_srcdir)/HACKING bracket-spacing-check
bracket-spacing-check:
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.c$$'`; \
$(PERL) $(top_srcdir)/build-aux/bracket-spacing.pl $$files || \
{ echo '$(ME): incorrect whitespace, see HACKING for rules' 1>&2; \
exit 1; }
(echo $(ME): incorrect whitespace around brackets, see HACKING for rules && exit 1)
# sc_po_check can fail if generated files are not built first
sc_po_check: \
@@ -898,15 +833,15 @@ $(srcdir)/src/remote/remote_client_bodies.h: $(srcdir)/src/remote/remote_protoco
# List all syntax-check exemptions:
exclude_file_name_regexp--sc_avoid_strcase = ^tools/virsh\.h$$
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(vircommand|virfile)|xen/xend_internal|rpc/virnetsocket|lxc/lxc_controller|locking/lock_daemon
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(vircommand|virutil)|xen/xend_internal|rpc/virnetsocket|lxc/lxc_controller|locking/lock_daemon
_test1=shunloadtest|virnettlscontexttest|vircgroupmock
exclude_file_name_regexp--sc_avoid_write = \
^(src/($(_src1))|daemon/libvirtd|tools/console|tests/($(_test1)))\.c$$
exclude_file_name_regexp--sc_bindtextdomain = ^(tests|examples)/
exclude_file_name_regexp--sc_copyright_usage = \
^COPYING(|\.LESSER)$$
exclude_file_name_regexp--sc_copyright_address = \
^COPYING\.LIB$$
exclude_file_name_regexp--sc_flags_usage = ^(docs/|src/util/virnetdevtap\.c$$|tests/vircgroupmock\.c$$)
@@ -924,10 +859,7 @@ exclude_file_name_regexp--sc_prohibit_always_true_header_tests = \
^python/(libvirt-(lxc-|qemu-)?override|typewrappers)\.c$$
exclude_file_name_regexp--sc_prohibit_asprintf = \
^(bootstrap.conf$$|src/util/virstring\.[ch]$$|examples/domain-events/events-c/event-test\.c$$|tests/vircgroupmock\.c$$)
exclude_file_name_regexp--sc_prohibit_strdup = \
^(docs/|examples/|python/|src/util/virstring\.c$$)
^(bootstrap.conf$$|src/util/virutil\.c$$|examples/domain-events/events-c/event-test\.c$$|tests/vircgroupmock\.c$$)
exclude_file_name_regexp--sc_prohibit_close = \
(\.p[yl]$$|^docs/|^(src/util/virfile\.c|src/libvirt\.c|tests/vircgroupmock\.c)$$)
@@ -961,7 +893,7 @@ exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/virutil\.c$$
exclude_file_name_regexp--sc_prohibit_sprintf = \
^(docs/hacking\.html\.in)|(examples/systemtap/.*stp)|(src/dtrace2systemtap\.pl)|(src/rpc/gensystemtap\.pl)$$
exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virstring\.c$$
exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virutil\.c$$
exclude_file_name_regexp--sc_prohibit_strtol = \
^src/(util/virsexpr|(vbox|xen|xenxs)/.*)\.c$$
@@ -972,11 +904,10 @@ exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
exclude_file_name_regexp--sc_require_config_h = \
^(examples/|tools/virsh-edit\.c$$)
_virsh_includes=(edit|domain-monitor|domain|volume|pool|network|interface|nwfilter|secret|snapshot|host|nodedev)
exclude_file_name_regexp--sc_require_config_h = ^(examples/|tools/virsh-$(_virsh_includes)\.c$$)
exclude_file_name_regexp--sc_require_config_h_first = \
^(examples/|tools/virsh-edit\.c$$)
exclude_file_name_regexp--sc_require_config_h_first = ^(examples/|tools/virsh-$(_virsh_includes)\.c$$)
exclude_file_name_regexp--sc_trailing_blank = \
(/qemuhelpdata/|/sysinfodata/.*\.data|\.(fig|gif|ico|png)$$)
@@ -996,6 +927,3 @@ exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \
exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \
^(python/|tools/|examples/|include/libvirt/(virterror|libvirt-(qemu|lxc))\.h$$)
exclude_file_name_regexp--sc_prohibit_int_ijk = \
^(src/remote_protocol-structs|src/remote/remote_protocol.x|cfg.mk|include/)$

View File

@@ -1,22 +1,9 @@
dnl Process this file with autoconf to produce a configure script.
dnl Copyright (C) 2005-2013 Red Hat, Inc.
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 See COPYING.LIB for the License of this software
AC_INIT([libvirt], [1.1.0], [libvir-list@redhat.com], [], [http://libvirt.org])
AC_INIT([libvirt], [1.0.5.6], [libvir-list@redhat.com], [], [http://libvirt.org])
AC_CONFIG_SRCDIR([src/libvirt.c])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
@@ -205,7 +192,7 @@ 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 geteuid getgid getgrnam_r getmntent_r \
AC_CHECK_FUNCS_ONCE([cfmakeraw geteuid getgid getgrnam_r getgrouplist getmntent_r \
getpwuid_r getuid kill mmap newlocale posix_fallocate posix_memalign \
prlimit regexec sched_getaffinity setgroups setns setrlimit symlink])
@@ -318,6 +305,8 @@ AC_PATH_PROG([DNSMASQ], [dnsmasq], [dnsmasq],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([RADVD], [radvd], [radvd],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([BRCTL], [brctl], [brctl],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([TC], [tc], [tc],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([UDEVADM], [udevadm], [],
@@ -893,14 +882,13 @@ if test "$with_libvirtd" = "no" ; then
with_lxc=no
fi
if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[
AC_TRY_LINK([
#include <sched.h>
#include <linux/loop.h>
#include <sys/epoll.h>
]], [[
unshare(!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
]])], [
], [
unshare (!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
], [
with_lxc=yes
AC_DEFINE([HAVE_DECL_LO_FLAGS_AUTOCLEAR], [1],
[Define to 1 if you have the declaration of `LO_FLAGS_AUTOCLEAR',
@@ -1102,15 +1090,6 @@ if test "x$with_gnutls" != "xno"; then
dnl it explicitly for the calls to gcry_control/check_version
GNUTLS_LIBS="$GNUTLS_LIBS -lgcrypt"
dnl We're not using gcrypt deprecated features so define
dnl GCRYPT_NO_DEPRECATED to avoid deprecated warnings
GNUTLS_CFLAGS="$GNUTLS_CFLAGS -DGCRYPT_NO_DEPRECATED"
dnl gnutls 3.x moved some declarations to a new header
AC_CHECK_HEADERS([gnutls/crypto.h], [], [], [[
#include <gnutls/gnutls.h>
]])
with_gnutls=yes
fi
@@ -1143,6 +1122,14 @@ if test "x$with_polkit" = "xyes" || test "x$with_polkit" = "xcheck"; then
AC_PATH_PROG([PKCHECK_PATH],[pkcheck], [], [/usr/sbin:$PATH])
if test "x$PKCHECK_PATH" != "x" ; then
AC_DEFINE_UNQUOTED([PKCHECK_PATH],["$PKCHECK_PATH"],[Location of pkcheck program])
AC_MSG_CHECKING([whether pkcheck supports uid value])
pkcheck_supports_uid=`$PKG_CONFIG --variable pkcheck_supports_uid polkit-gobject-1`
if test "x$pkcheck_supports_uid" = "xtrue"; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED([PKCHECK_SUPPORTS_UID], 1, [Pass uid to pkcheck])
else
AC_MSG_RESULT([no])
fi
AC_DEFINE_UNQUOTED([WITH_POLKIT], 1,
[use PolicyKit for UNIX socket access checks])
AC_DEFINE_UNQUOTED([WITH_POLKIT1], 1,
@@ -2175,7 +2162,7 @@ if test "$with_driver_modules" = "yes" || test "$with_driver_modules" = "check";
fi
if test "$with_driver_modules" = "yes" ; then
DRIVER_MODULE_LDFLAGS="-export-dynamic"
DRIVER_MODULE_CFLAGS="-export-dynamic"
case $ac_cv_search_dlopen in
no*) DRIVER_MODULE_LIBS= ;;
*) DRIVER_MODULE_LIBS=$ac_cv_search_dlopen ;;
@@ -2183,7 +2170,7 @@ if test "$with_driver_modules" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_DRIVER_MODULES], 1, [whether to build drivers as modules])
fi
AM_CONDITIONAL([WITH_DRIVER_MODULES], [test "$with_driver_modules" != "no"])
AC_SUBST([DRIVER_MODULE_LDFLAGS])
AC_SUBST([DRIVER_MODULE_CFLAGS])
AC_SUBST([DRIVER_MODULE_LIBS])
@@ -2393,30 +2380,12 @@ AC_CHECK_MEMBERS([struct ifreq.ifr_newname,
#include <net/if.h>
])
# Check for BSD approach for setting MAC addr
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if_dl.h>
]],
[[
link_addr(NULL, NULL)]])],
[AC_DEFINE([HAVE_DECL_LINK_ADDR],
[1],
[whether link_addr is available])])
# Check for BSD approach for bridge management
AC_CHECK_DECLS([BRDGSFD, BRDGADD, BRDGDEL],
[AC_DEFINE([HAVE_BSD_BRIDGE_MGMT],
[1],
[whether BSD style bridge management is available])],
[],
[#include <stdint.h>
#include <net/if.h>
#include <net/ethernet.h>
#include <net/if_bridgevar.h>
])
# Only COPYING.LIB is under version control, yet COPYING
# is included as part of the distribution tarball.
# Copy one to the other, but only if this is a srcdir-build.
# You are unlikely to be doing distribution-related things in a non-srcdir build
test "x$srcdir" = x. && ! test -f COPYING &&
cp -f COPYING.LIB COPYING
# Detect when running under the clang static analyzer's scan-build driver
# or Coverity-prevent's cov-build. Define STATIC_ANALYSIS accordingly.

View File

@@ -1,20 +1,7 @@
## Process this file with automake to produce Makefile.in
## Copyright (C) 2005-2013 Red Hat, Inc.
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library. If not, see
## <http://www.gnu.org/licenses/>.
## See COPYING.LIB for the License of this software
INCLUDES = \
-I$(top_builddir)/gnulib/lib -I$(top_srcdir)/gnulib/lib \
@@ -24,7 +11,6 @@ INCLUDES = \
-I$(top_srcdir)/src/conf \
-I$(top_srcdir)/src/rpc \
-I$(top_srcdir)/src/remote \
-I$(top_srcdir)/src/access \
$(GETTEXT_CPPFLAGS)
CLEANFILES =
@@ -125,6 +111,7 @@ libvirtd_CFLAGS = \
-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\""
libvirtd_LDFLAGS = \
$(WARN_LDFLAGS) \
$(PIE_LDFLAGS) \
$(RELRO_LDFLAGS) \
$(COVERAGE_LDFLAGS)
@@ -169,10 +156,6 @@ if WITH_UML
libvirtd_LDADD += ../src/libvirt_driver_uml.la
endif
if WITH_VBOX
libvirtd_LDADD += ../src/libvirt_driver_vbox.la
endif
if WITH_STORAGE
libvirtd_LDADD += ../src/libvirt_driver_storage.la
endif
@@ -217,16 +200,14 @@ libvirtd.policy: libvirtd.policy.in $(top_builddir)/config.status
mv $@-t $@
BUILT_SOURCES += libvirtd.policy
install-data-local: install-init-redhat install-init-systemd \
install-init-upstart \
install-data-local: install-init-redhat install-init-systemd install-init-upstart \
install-data-sasl install-data-polkit \
install-logrotate install-sysctl
$(MKDIR_P) $(DESTDIR)$(localstatedir)/log/libvirt \
$(DESTDIR)$(localstatedir)/run/libvirt \
$(DESTDIR)$(localstatedir)/lib/libvirt
uninstall-local:: uninstall-init-redhat uninstall-init-systemd \
uninstall-init-upstart \
uninstall-local:: uninstall-init-redhat uninstall-init-systemd uninstall-init-upstart \
uninstall-data-sasl uninstall-data-polkit \
uninstall-logrotate uninstall-sysctl
rmdir $(DESTDIR)$(localstatedir)/log/libvirt || :
@@ -282,14 +263,10 @@ install-logrotate: $(LOGROTATE_CONFS)
$(DESTDIR)$(localstatedir)/log/libvirt/lxc/ \
$(DESTDIR)$(localstatedir)/log/libvirt/uml/ \
$(DESTDIR)$(sysconfdir)/logrotate.d/
$(INSTALL_DATA) libvirtd.logrotate \
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd
$(INSTALL_DATA) libvirtd.qemu.logrotate \
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu
$(INSTALL_DATA) libvirtd.lxc.logrotate \
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc
$(INSTALL_DATA) libvirtd.uml.logrotate \
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
$(INSTALL_DATA) libvirtd.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd
$(INSTALL_DATA) libvirtd.qemu.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu
$(INSTALL_DATA) libvirtd.lxc.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc
$(INSTALL_DATA) libvirtd.uml.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
uninstall-logrotate:
rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd \
@@ -429,8 +406,7 @@ $(srcdir)/libvirtd.8.in: libvirtd.pod.in $(top_srcdir)/configure.ac
if WITH_SASL
install-data-sasl:
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sasl2/
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl \
$(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
uninstall-data-sasl:
rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf

View File

@@ -32,8 +32,6 @@
#include "configmake.h"
#include "remote/remote_protocol.h"
#include "remote/remote_driver.h"
#include "virstring.h"
#include "virutil.h"
#define VIR_FROM_THIS VIR_FROM_CONF
@@ -59,16 +57,19 @@ remoteConfigGetStringList(virConfPtr conf, const char *key, char ***list_arg,
key);
return -1;
}
if (VIR_STRDUP(list[0], p->str) < 0) {
list[0] = strdup(p->str);
list[1] = NULL;
if (list[0] == NULL) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("failed to allocate memory for %s config list value"),
key);
VIR_FREE(list);
return -1;
}
list[1] = NULL;
break;
case VIR_CONF_LIST: {
int len = 0;
size_t i;
int i, len = 0;
virConfValuePtr pp;
for (pp = p->list; pp; pp = pp->next)
len++;
@@ -87,11 +88,15 @@ remoteConfigGetStringList(virConfPtr conf, const char *key, char ***list_arg,
VIR_FREE(list);
return -1;
}
if (VIR_STRDUP(list[i], pp->str) < 0) {
size_t j;
for (j = 0; j < i; j++)
list[i] = strdup(pp->str);
if (list[i] == NULL) {
int j;
for (j = 0 ; j < i ; j++)
VIR_FREE(list[j]);
VIR_FREE(list);
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("failed to allocate memory for %s config list value"),
key);
return -1;
}
@@ -129,8 +134,8 @@ checkType(virConfValuePtr p, const char *filename,
}
/* If there is no config data for the key, #var_name, then do nothing.
If there is valid data of type VIR_CONF_STRING, and VIR_STRDUP succeeds,
store the result in var_name. Otherwise, (i.e. invalid type, or VIR_STRDUP
If there is valid data of type VIR_CONF_STRING, and strdup succeeds,
store the result in var_name. Otherwise, (i.e. invalid type, or strdup
failure), give a diagnostic and "goto" the cleanup-and-fail label. */
#define GET_CONF_STR(conf, filename, var_name) \
do { \
@@ -139,8 +144,10 @@ checkType(virConfValuePtr p, const char *filename,
if (checkType(p, filename, #var_name, VIR_CONF_STRING) < 0) \
goto error; \
VIR_FREE(data->var_name); \
if (VIR_STRDUP(data->var_name, p->str) < 0) \
if (!(data->var_name = strdup(p->str))) { \
virReportOOMError(); \
goto error; \
} \
} \
} while (0)
@@ -191,8 +198,8 @@ int
daemonConfigFilePath(bool privileged, char **configfile)
{
if (privileged) {
if (VIR_STRDUP(*configfile, SYSCONFDIR "/libvirt/libvirtd.conf") < 0)
goto error;
if (!(*configfile = strdup(SYSCONFDIR "/libvirt/libvirtd.conf")))
goto no_memory;
} else {
char *configdir = NULL;
@@ -201,13 +208,15 @@ daemonConfigFilePath(bool privileged, char **configfile)
if (virAsprintf(configfile, "%s/libvirtd.conf", configdir) < 0) {
VIR_FREE(configdir);
goto error;
goto no_memory;
}
VIR_FREE(configdir);
}
return 0;
no_memory:
virReportOOMError();
error:
return -1;
}
@@ -219,15 +228,18 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
char *localhost;
int ret;
if (VIR_ALLOC(data) < 0)
if (VIR_ALLOC(data) < 0) {
virReportOOMError();
return NULL;
}
data->listen_tls = 1;
data->listen_tcp = 0;
if (VIR_STRDUP(data->tls_port, LIBVIRTD_TLS_PORT) < 0 ||
VIR_STRDUP(data->tcp_port, LIBVIRTD_TCP_PORT) < 0)
goto error;
if (!(data->tls_port = strdup(LIBVIRTD_TLS_PORT)))
goto no_memory;
if (!(data->tcp_port = strdup(LIBVIRTD_TCP_PORT)))
goto no_memory;
/* Only default to PolicyKit if running as root */
#if WITH_POLKIT
@@ -242,10 +254,14 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
}
#endif
if (VIR_STRDUP(data->unix_sock_rw_perms,
data->auth_unix_rw == REMOTE_AUTH_POLKIT ? "0777" : "0700") < 0 ||
VIR_STRDUP(data->unix_sock_ro_perms, "0777") < 0)
goto error;
if (data->auth_unix_rw == REMOTE_AUTH_POLKIT)
data->unix_sock_rw_perms = strdup("0777"); /* Allow world */
else
data->unix_sock_rw_perms = strdup("0700"); /* Allow user only */
data->unix_sock_ro_perms = strdup("0777"); /* Always allow world */
if (!data->unix_sock_ro_perms ||
!data->unix_sock_rw_perms)
goto no_memory;
#if WITH_SASL
data->auth_tcp = REMOTE_AUTH_SASL;
@@ -274,13 +290,13 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
data->keepalive_count = 5;
data->keepalive_required = 0;
localhost = virGetHostname();
localhost = virGetHostname(NULL);
if (localhost == NULL) {
/* we couldn't resolve the hostname; assume that we are
* running in disconnected operation, and report a less
* useful Avahi string
*/
ret = VIR_STRDUP(data->mdns_name, "Virtualization Host");
ret = virAsprintf(&data->mdns_name, "Virtualization Host");
} else {
char *tmp;
/* Extract the host part of the potentially FQDN */
@@ -291,11 +307,12 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
}
VIR_FREE(localhost);
if (ret < 0)
goto error;
goto no_memory;
return data;
error:
no_memory:
virReportOOMError();
daemonConfigFree(data);
return NULL;
}
@@ -311,12 +328,6 @@ daemonConfigFree(struct daemonConfig *data)
VIR_FREE(data->listen_addr);
VIR_FREE(data->tls_port);
VIR_FREE(data->tcp_port);
tmp = data->access_drivers;
while (tmp && *tmp) {
VIR_FREE(*tmp);
tmp++;
}
VIR_FREE(data->access_drivers);
VIR_FREE(data->unix_sock_ro_perms);
VIR_FREE(data->unix_sock_rw_perms);
@@ -369,8 +380,10 @@ daemonConfigLoadOptions(struct daemonConfig *data,
*/
if (data->auth_unix_rw == REMOTE_AUTH_POLKIT) {
VIR_FREE(data->unix_sock_rw_perms);
if (VIR_STRDUP(data->unix_sock_rw_perms, "0777") < 0)
if (!(data->unix_sock_rw_perms = strdup("0777"))) {
virReportOOMError();
goto error;
}
}
#endif
if (remoteConfigGetAuth(conf, "auth_unix_ro", &data->auth_unix_ro, filename) < 0)
@@ -380,10 +393,6 @@ daemonConfigLoadOptions(struct daemonConfig *data,
if (remoteConfigGetAuth(conf, "auth_tls", &data->auth_tls, filename) < 0)
goto error;
if (remoteConfigGetStringList(conf, "access_drivers",
&data->access_drivers, filename) < 0)
goto error;
GET_CONF_STR(conf, filename, unix_sock_group);
GET_CONF_STR(conf, filename, unix_sock_ro_perms);
GET_CONF_STR(conf, filename, unix_sock_rw_perms);

View File

@@ -45,8 +45,6 @@ struct daemonConfig {
int auth_tcp;
int auth_tls;
char **access_drivers;
int mdns_adv;
char *mdns_name;

View File

@@ -51,7 +51,6 @@ module Libvirtd =
| bool_entry "tls_no_sanity_certificate"
| str_array_entry "tls_allowed_dn_list"
| str_array_entry "sasl_allowed_username_list"
| str_array_entry "access_drivers"
let processing_entry = int_entry "min_workers"
| int_entry "max_workers"

View File

@@ -43,6 +43,7 @@
#include "libvirtd.h"
#include "libvirtd-config.h"
#include "virutil.h"
#include "viruuid.h"
#include "remote_driver.h"
#include "viralloc.h"
@@ -52,9 +53,7 @@
#include "remote.h"
#include "virhook.h"
#include "viraudit.h"
#include "virstring.h"
#include "locking/lock_manager.h"
#include "viraccessmanager.h"
#ifdef WITH_DRIVER_MODULES
# include "driver.h"
@@ -74,9 +73,6 @@
# ifdef WITH_UML
# include "uml/uml_driver.h"
# endif
# ifdef WITH_VBOX
# include "vbox/vbox_driver.h"
# endif
# ifdef WITH_NETWORK
# include "network/bridge_driver.h"
# endif
@@ -245,8 +241,8 @@ daemonPidFilePath(bool privileged,
char **pidfile)
{
if (privileged) {
if (VIR_STRDUP(*pidfile, LOCALSTATEDIR "/run/libvirtd.pid") < 0)
goto error;
if (!(*pidfile = strdup(LOCALSTATEDIR "/run/libvirtd.pid")))
goto no_memory;
} else {
char *rundir = NULL;
mode_t old_umask;
@@ -263,7 +259,7 @@ daemonPidFilePath(bool privileged,
if (virAsprintf(pidfile, "%s/libvirtd.pid", rundir) < 0) {
VIR_FREE(rundir);
goto error;
goto no_memory;
}
VIR_FREE(rundir);
@@ -271,6 +267,8 @@ daemonPidFilePath(bool privileged,
return 0;
no_memory:
virReportOOMError();
error:
return -1;
}
@@ -283,15 +281,16 @@ daemonUnixSocketPaths(struct daemonConfig *config,
{
if (config->unix_sock_dir) {
if (virAsprintf(sockfile, "%s/libvirt-sock", config->unix_sock_dir) < 0)
goto error;
goto no_memory;
if (privileged &&
virAsprintf(rosockfile, "%s/libvirt-sock-ro", config->unix_sock_dir) < 0)
goto error;
goto no_memory;
} else {
if (privileged) {
if (VIR_STRDUP(*sockfile, LOCALSTATEDIR "/run/libvirt/libvirt-sock") < 0 ||
VIR_STRDUP(*rosockfile, LOCALSTATEDIR "/run/libvirt/libvirt-sock-ro") < 0)
goto error;
if (!(*sockfile = strdup(LOCALSTATEDIR "/run/libvirt/libvirt-sock")))
goto no_memory;
if (!(*rosockfile = strdup(LOCALSTATEDIR "/run/libvirt/libvirt-sock-ro")))
goto no_memory;
} else {
char *rundir = NULL;
mode_t old_umask;
@@ -308,7 +307,7 @@ daemonUnixSocketPaths(struct daemonConfig *config,
if (virAsprintf(sockfile, "%s/libvirt-sock", rundir) < 0) {
VIR_FREE(rundir);
goto error;
goto no_memory;
}
VIR_FREE(rundir);
@@ -316,6 +315,8 @@ daemonUnixSocketPaths(struct daemonConfig *config,
}
return 0;
no_memory:
virReportOOMError();
error:
return -1;
}
@@ -400,9 +401,6 @@ static void daemonInitialize(void)
# ifdef WITH_UML
virDriverLoadModule("uml");
# endif
# ifdef WITH_VBOX
virDriverLoadModule("vbox");
# endif
#else
# ifdef WITH_NETWORK
networkRegister();
@@ -437,9 +435,6 @@ static void daemonInitialize(void)
# ifdef WITH_UML
umlRegister();
# endif
# ifdef WITH_VBOX
vboxRegister();
# endif
#endif
}
@@ -662,7 +657,7 @@ daemonSetupLogging(struct daemonConfig *config,
char *tmp;
if (access("/run/systemd/journal/socket", W_OK) >= 0) {
if (virAsprintf(&tmp, "%d:journald", virLogGetDefaultPriority()) < 0)
goto error;
goto no_memory;
virLogParseOutputs(tmp);
VIR_FREE(tmp);
}
@@ -680,7 +675,7 @@ daemonSetupLogging(struct daemonConfig *config,
if (virAsprintf(&tmp, "%d:file:%s/log/libvirt/libvirtd.log",
virLogGetDefaultPriority(),
LOCALSTATEDIR) == -1)
goto error;
goto no_memory;
} else {
char *logdir = virGetUserCacheDirectory();
mode_t old_umask;
@@ -698,13 +693,13 @@ daemonSetupLogging(struct daemonConfig *config,
if (virAsprintf(&tmp, "%d:file:%s/libvirtd.log",
virLogGetDefaultPriority(), logdir) == -1) {
VIR_FREE(logdir);
goto error;
goto no_memory;
}
VIR_FREE(logdir);
}
} else {
if (virAsprintf(&tmp, "%d:stderr", virLogGetDefaultPriority()) < 0)
goto error;
goto no_memory;
}
virLogParseOutputs(tmp);
VIR_FREE(tmp);
@@ -718,31 +713,13 @@ daemonSetupLogging(struct daemonConfig *config,
return 0;
no_memory:
virReportOOMError();
error:
return -1;
}
static int
daemonSetupAccessManager(struct daemonConfig *config)
{
virAccessManagerPtr mgr;
const char *none[] = { "none", NULL };
const char **driver = (const char **)config->access_drivers;
if (!driver ||
!driver[0])
driver = none;
if (!(mgr = virAccessManagerNewStack(driver)))
return -1;
virAccessManagerSetDefault(mgr);
virObjectUnref(mgr);
return 0;
}
/* Display version information. */
static void
daemonVersion(const char *argv0)
@@ -887,9 +864,6 @@ handleSystemMessageFunc(DBusConnection *connection ATTRIBUTE_UNUSED,
static void daemonRunStateInit(void *opaque)
{
virNetServerPtr srv = opaque;
virIdentityPtr sysident = virIdentityGetSystem();
virIdentitySetCurrent(sysident);
/* Since driver initialization can take time inhibit daemon shutdown until
we're done so clients get a chance to connect */
@@ -932,8 +906,6 @@ static void daemonRunStateInit(void *opaque)
cleanup:
daemonInhibitCallback(false, srv);
virObjectUnref(srv);
virObjectUnref(sysident);
virIdentitySetCurrent(NULL);
}
static int daemonStateInit(virNetServerPtr srv)
@@ -989,8 +961,7 @@ static int migrateProfile(void)
config_home = getenv("XDG_CONFIG_HOME");
if (config_home && config_home[0] != '\0') {
if (VIR_STRDUP(xdg_dir, config_home) < 0)
goto cleanup;
xdg_dir = strdup(config_home);
} else {
if (virAsprintf(&xdg_dir, "%s/.config", home) < 0) {
goto cleanup;
@@ -1147,7 +1118,7 @@ int main(int argc, char **argv) {
}
*tmp = '\0';
char *driverdir;
if (virAsprintfQuiet(&driverdir, "%s/../../src/.libs", argv[0]) < 0) {
if (virAsprintf(&driverdir, "%s/../../src/.libs", argv[0]) < 0) {
fprintf(stderr, _("%s: initialization failed\n"), argv[0]);
exit(EXIT_FAILURE);
}
@@ -1201,7 +1172,7 @@ int main(int argc, char **argv) {
case 'p':
VIR_FREE(pid_file);
if (VIR_STRDUP_QUIET(pid_file, optarg) < 0) {
if (!(pid_file = strdup(optarg))) {
VIR_ERROR(_("Can't allocate memory"));
exit(EXIT_FAILURE);
}
@@ -1209,7 +1180,7 @@ int main(int argc, char **argv) {
case 'f':
VIR_FREE(remote_config_file);
if (VIR_STRDUP_QUIET(remote_config_file, optarg) < 0) {
if (!(remote_config_file = strdup(optarg))) {
VIR_ERROR(_("Can't allocate memory"));
exit(EXIT_FAILURE);
}
@@ -1280,11 +1251,6 @@ int main(int argc, char **argv) {
exit(EXIT_FAILURE);
}
if (daemonSetupAccessManager(config) < 0) {
VIR_ERROR(_("Can't initialize access manager"));
exit(EXIT_FAILURE);
}
if (!pid_file &&
daemonPidFilePath(privileged,
&pid_file) < 0) {
@@ -1321,10 +1287,7 @@ int main(int argc, char **argv) {
/* Ensure the rundir exists (on tmpfs on some systems) */
if (privileged) {
if (VIR_STRDUP_QUIET(run_dir, LOCALSTATEDIR "/run/libvirt") < 0) {
VIR_ERROR(_("Can't allocate memory"));
goto cleanup;
}
run_dir = strdup(LOCALSTATEDIR "/run/libvirt");
} else {
run_dir = virGetUserRuntimeDirectory();
@@ -1333,6 +1296,11 @@ int main(int argc, char **argv) {
goto cleanup;
}
}
if (!run_dir) {
virReportOOMError();
goto cleanup;
}
if (privileged)
old_umask = umask(022);
else

View File

@@ -155,15 +155,6 @@
#auth_tls = "none"
# Change the API access control scheme
#
# By default an authenticated user is allowed access
# to all APIs. Access drivers can place restrictions
# on this. By default the 'nop' driver is enabled,
# meaning no access control checks are done once a
# client has authenticated with libvirtd
#
#access_drivers = [ "polkit" ]
#################################################################
#

View File

@@ -1,7 +1,7 @@
/*
* libvirtd.h: daemon data structure definitions
*
* Copyright (C) 2006-2013 Red Hat, Inc.
* Copyright (C) 2006-2012 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@@ -27,6 +27,8 @@
# define VIR_ENUM_SENTINELS
# include <config.h>
# include <rpc/types.h>
# include <rpc/xdr.h>
# include "remote_protocol.h"

View File

@@ -27,5 +27,5 @@ mech_list: digest-md5
# If using digest-md5 for username/passwds, then this is the file
# containing the passwds. Use 'saslpasswd2 -a libvirt [username]'
# to add entries, and 'sasldblistusers2 -f [sasldb_path]' to browse it
# to add entries, and 'sasldblistusers2 -a libvirt' to browse it
sasldb_path: /etc/libvirt/passwd.db

File diff suppressed because it is too large Load Diff

View File

@@ -325,8 +325,10 @@ daemonCreateClientStream(virNetServerClientPtr client,
VIR_DEBUG("client=%p, proc=%d, serial=%d, st=%p",
client, header->proc, header->serial, st);
if (VIR_ALLOC(stream) < 0)
if (VIR_ALLOC(stream) < 0) {
virReportOOMError();
return NULL;
}
stream->refs = 1;
stream->priv = priv;

View File

@@ -17,9 +17,6 @@ module Test_libvirtd =
{ "auth_unix_rw" = "none" }
{ "auth_tcp" = "sasl" }
{ "auth_tls" = "none" }
{ "access_drivers"
{ "1" = "polkit" }
}
{ "key_file" = "/etc/pki/libvirt/private/serverkey.pem" }
{ "cert_file" = "/etc/pki/libvirt/servercert.pem" }
{ "ca_file" = "/etc/pki/CA/cacert.pem" }

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>404 page not found</h1>

View File

@@ -1,20 +1,7 @@
## Process this file with automake to produce Makefile.in
## Copyright (C) 2005-2013 Red Hat, Inc.
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library. If not, see
## <http://www.gnu.org/licenses/>.
## Copyright (C) 2005-2012 Red Hat, Inc.
## See COPYING.LIB for the License of this software
SUBDIRS= schemas
@@ -162,23 +149,17 @@ todo.html.in: todo.pl
|| { rm $@ && exit 1; }; \
else \
echo "Stubbing $@"; \
printf "%s\n" \
"<html xmlns=\"http://www.w3.org/1999/xhtml\">" \
"<body>" \
"<h1>Todo list unavailable: no config file</h1>" \
"</body></html>" > $@ ; \
echo "<html><body><h1>Todo list</h1></body></html>" > $@ ; \
fi
todo:
rm -f todo.html.in
$(MAKE) todo.html
hvsupport.html.in: $(srcdir)/hvsupport.pl \
$(srcdir)/../src/libvirt_public.syms \
hvsupport.html.in: $(srcdir)/hvsupport.pl $(srcdir)/../src/libvirt_public.syms \
$(srcdir)/../src/libvirt_qemu.syms $(srcdir)/../src/libvirt_lxc.syms \
$(srcdir)/../src/driver.h
$(AM_V_GEN)$(PERL) $(srcdir)/hvsupport.pl $(srcdir)/../src > $@ \
|| { rm $@ && exit 1; }
$(AM_V_GEN)$(PERL) $(srcdir)/hvsupport.pl $(srcdir)/../src > $@ || { rm $@ && exit 1; }
.PHONY: todo
@@ -190,7 +171,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in
echo "Generating $@"; \
$(MKDIR_P) internals; \
name=`echo $@ | sed -e 's/.tmp//'`; \
$(XSLTPROC) --stringparam pagename $$name --nonet \
$(XSLTPROC) --stringparam pagename $$name --nonet --html \
$(top_srcdir)/docs/subsite.xsl $< > $@ \
|| { rm $@ && exit 1; }; fi
@@ -198,7 +179,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in
@if [ -x $(XSLTPROC) ] ; then \
echo "Generating $@"; \
name=`echo $@ | sed -e 's/.tmp//'`; \
$(XSLTPROC) --stringparam pagename $$name --nonet \
$(XSLTPROC) --stringparam pagename $$name --nonet --html \
$(top_srcdir)/docs/site.xsl $< > $@ \
|| { rm $@ && exit 1; }; fi
@@ -215,7 +196,7 @@ internals/%.html.tmp: internals/%.html.in subsite.xsl page.xsl sitemap.html.in
%.php.tmp: %.php.in site.xsl page.xsl sitemap.html.in
@if [ -x $(XSLTPROC) ] ; then \
echo "Generating $@"; \
$(XSLTPROC) --stringparam pagename $(@:.tmp=) --nonet \
$(XSLTPROC) --stringparam pagename $(@:.tmp=) --nonet --html \
$(top_srcdir)/docs/site.xsl $< > $@ \
|| { rm $@ && exit 1; }; fi
@@ -283,8 +264,7 @@ clean-local:
rm -f *~ *.bak *.hierarchy *.signals *-unused.txt *.html
maintainer-clean-local: clean-local
rm -rf $(srcdir)/libvirt-api.xml $(srcdir)/libvirt-refs.xml \
todo.html.in hvsupport.html.in
rm -rf $(srcdir)/libvirt-api.xml $(srcdir)/libvirt-refs.xml todo.html.in hvsupport.html.in
rm -rf $(srcdir)/libvirt-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
rm -rf $(srcdir)/libvirt-lxc-api.xml $(srcdir)/libvirt-lxc-refs.xml
rm -rf $(APIBUILD_STAMP)

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>The libvirt API concepts</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Implementing a new API in Libvirt</h1>

View File

@@ -64,18 +64,9 @@ ignored_functions = {
"virDomainMigrateConfirm3": "private function for migration",
"virDomainMigratePrepareTunnel3": "private function for tunnelled migration",
"DllMain": "specific function for Win32",
"virTypedParamsValidate": "internal function in virtypedparam.c",
"virTypedParameterArrayValidate": "internal function in virtypedparam.c",
"virTypedParameterAssign": "internal function in virtypedparam.c",
"virTypedParameterAssignFromStr": "internal function in virtypedparam.c",
"virTypedParameterToString": "internal function in virtypedparam.c",
"virTypedParamsCheck": "internal function in virtypedparam.c",
"virTypedParamsCopy": "internal function in virtypedparam.c",
"virDomainMigrateBegin3Params": "private function for migration",
"virDomainMigrateFinish3Params": "private function for migration",
"virDomainMigratePerform3Params": "private function for migration",
"virDomainMigratePrepare3Params": "private function for migration",
"virDomainMigrateConfirm3Params": "private function for migration",
"virDomainMigratePrepareTunnel3Params": "private function for tunnelled migration",
}
ignored_macros = {

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Applications using <strong>libvirt</strong></h1>
@@ -204,13 +202,6 @@
<h2><a name="iaas">Infrastructure as a Service (IaaS)</a></h2>
<dl>
<dt><a href="http://cc1.ifj.edu.pl">Cracow Cloud One</a></dt>
<dd>The CC1 system provides a complete solution for Private
Cloud Computing. An intuitive web access interface with an
administration module and simple installation procedure make
it easy to benefit from private Cloud Computing technology.
</dd>
<dt><a href="http://www.emotivecloud.net">EMOTIVE Cloud</a></dt>
<dd>The EMOTIVE (Elastic Management Of Tasks In Virtualized
Environments) middleware allows executing tasks and providing
@@ -349,7 +340,6 @@
<li>Shows you Systems Inventory (based on Facter) and
provides real time information about hosts status based on
Puppet reports.</li>
</ul>
</dd>
</dl>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Domain management architecture</h1>
</body>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >libvirt architecture</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Network management architecture</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Node device management architecture</h1>
</body>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Storage management architecture</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Authentication &amp; access control</h1>
<p>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Bindings for other languages</h1>

View File

@@ -1,24 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Bug reporting</h1>
<ul id="toc"></ul>
<h2><a name="security">Security Issues</a></h2>
<p>
If you think that an issue with libvirt may have security
implications, <strong>please do not</strong> publically
report it in the bug tracker, mailing lists, or irc. Libvirt
has <a href="securityprocess.html">a dedicated process for handling (potential) security issues</a>
that should be used instead. So if your issue has security
implications, ignore the rest of this page and follow the
<a href="securityprocess.html">security process</a> instead.
</p>
<h2><a name="bugzilla">Bug Tracking</a></h2>
<p>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1><a name="installation">libvirt Installation</a></h1>

View File

@@ -1,23 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Contacting the development team</h1>
<ul id="toc"></ul>
<h2><a name="security">Security Issues</a></h2>
<p>
If you think that an issue with libvirt may have security
implications, <strong>please do not</strong> publically
report it in the bug tracker, mailing lists, or irc. Libvirt
has <a href="securityprocess.html">a dedicated process for handling (potential) security issues</a>
that should be used instead. So if your issue has security
implications, ignore the rest of this page and follow the
<a href="securityprocess.html">security process</a> instead.
</p>
<h2><a name="email">Mailing lists</a></h2>
<p>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>C# API bindings</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Deployment</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>libvirt Application Development Guide</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Documentation</h1>
</body>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Downloads</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Internal drivers</h1>

View File

@@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<html><body>
<h1>VMware ESX hypervisor driver</h1>
<ul id="toc"></ul>
<p>

View File

@@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<html><body>
<h1>Microsoft Hyper-V hypervisor driver</h1>
<ul id="toc"></ul>
<p>

View File

@@ -1,102 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>LXC container driver</h1>
<ul id="toc"></ul>
<p>
The libvirt LXC driver manages "Linux Containers". At their simplest, containers
can just be thought of as a collection of processes, separated from the main
host processes via a set of resource namespaces and constrained via control
groups resource tunables. The libvirt LXC driver has no dependency on the LXC
userspace tools hosted on sourceforge.net. It directly utilizes the relevant
kernel features to build the container environment. This allows for sharing
of many libvirt technologies across both the QEMU/KVM and LXC drivers. In
particular sVirt for mandatory access control, auditing of operations,
integration with control groups and many other features.
The libvirt LXC driver manages "Linux Containers". Containers are sets of processes
with private namespaces which can (but don't always) look like separate machines, but
do not have their own OS. Here are two example configurations. The first is a very
light-weight "application container" which does not have its own root image.
</p>
<h2><a name="cgroups">Control groups Requirements</a></h2>
<h2><a name="project">Project Links</a></h2>
<ul>
<li>
The <a href="http://lxc.sourceforge.net/">LXC</a> Linux
container system
</li>
</ul>
<h2>Cgroups Requirements</h2>
<p>
In order to control the resource usage of processes inside containers, the
libvirt LXC driver requires that certain cgroups controllers are mounted on
the host OS. The minimum required controllers are 'cpuacct', 'memory' and
'devices', while recommended extra controllers are 'cpu', 'freezer' and
'blkio'. Libvirt will not mount the cgroups filesystem itself, leaving
this up to the init system to take care of. Systemd will do the right thing
in this respect, while for other init systems the <code>cgconfig</code>
init service will be required. For further information, consult the general
libvirt <a href="cgroups.html">cgroups documentation</a>.
</p>
<h2><a name="namespaces">Namespace requirements</a></h2>
<p>
In order to separate processes inside a container from those in the
primary "host" OS environment, the libvirt LXC driver requires that
certain kernel namespaces are compiled in. Libvirt currently requires
the 'mount', 'ipc', 'pid', and 'uts' namespaces to be available. If
separate network interfaces are desired, then the 'net' namespace is
required. In the near future, the 'user' namespace will optionally be
supported.
</p>
<p>
<strong>NOTE: In the absence of support for the 'user' namespace,
processes inside containers cannot be securely isolated from host
process without the use of a mandatory access control technology
such as SELinux or AppArmor.</strong>
</p>
<h2><a name="init">Default container setup</a></h2>
<h3><a name="cliargs">Command line arguments</a></h3>
<p>
When the container "init" process is started, it will typically
not be given any command line arguments (eg the equivalent of
the bootloader args visible in <code>/proc/cmdline</code>). If
any arguments are desired, then must be explicitly set in the
container XML configuration via one or more <code>initarg</code>
elements. For example, to run <code>systemd --unit emergency.service</code>
would use the following XML
The libvirt LXC driver requires that certain cgroups controllers are
mounted on the host OS. The minimum required controllers are 'cpuacct',
'memory' and 'devices', while recommended extra controllers are
'cpu', 'freezer' and 'blkio'. The /etc/cgconfig.conf &amp; cgconfig
init service used to mount cgroups at host boot time. To manually
mount them use:
</p>
<pre>
&lt;os&gt;
&lt;type arch='x86_64'&gt;exe&lt;/type&gt;
&lt;init&gt;/bin/systemd&lt;/init&gt;
&lt;initarg&gt;--unit&lt;/initarg&gt;
&lt;initarg&gt;emergency.service&lt;/initarg&gt;
&lt;/os&gt;
# mount -t cgroup cgroup /dev/cgroup -o cpuacct,memory,devices,cpu,freezer,blkio
</pre>
<h3><a name="envvars">Environment variables</a></h3>
<p>
NB, the blkio controller in some kernels will not allow creation of nested
sub-directories which will prevent correct operation of the libvirt LXC
driver. On such kernels, it may be necessary to unmount the blkio controller.
</p>
<h2>Environment setup for the container init</h2>
<p>
When the container "init" process is started, it will be given several useful
environment variables. The following standard environment variables are mandated
by <a href="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface">systemd container interface</a>
to be provided by all container technologies on Linux.
</p>
<dl>
<dt>container</dt>
<dd>The fixed string <code>libvirt-lxc</code> to identify libvirt as the creator</dd>
<dt>container_uuid</dt>
<dd>The UUID assigned to the container by libvirt</dd>
<dt>PATH</dt>
<dd>The fixed string <code>/bin:/usr/bin</code></dd>
<dt>TERM</dt>
<dd>The fixed string <code>linux</code></dd>
</dl>
<p>
In addition to the standard variables, the following libvirt specific
environment variables are also provided
environment variables.
</p>
<dl>
@@ -105,152 +52,9 @@ environment variables are also provided
<dt>LIBVIRT_LXC_UUID</dt>
<dd>The UUID assigned to the container by libvirt</dd>
<dt>LIBVIRT_LXC_CMDLINE</dt>
<dd>The unparsed command line arguments specified in the container configuration.
Use of this is discouraged, in favour of passing arguments directly to the
container init process via the <code>initarg</code> config element.</dd>
<dd>The unparsed command line arguments specified in the container configuration</dd>
</dl>
<h3><a name="fsmounts">Filesystem mounts</a></h3>
<p>
In the absence of any explicit configuration, the container will
inherit the host OS filesystem mounts. A number of mount points will
be made read only, or re-mounted with new instances to provide
container specific data. The following special mounts are setup
by libvirt
</p>
<ul>
<li><code>/dev</code> a new "tmpfs" pre-populated with authorized device nodes</li>
<li><code>/dev/pts</code> a new private "devpts" instance for console devices</li>
<li><code>/sys</code> the host "sysfs" instance remounted read-only</li>
<li><code>/proc</code> a new instance of the "proc" filesystem</li>
<li><code>/proc/sys</code> the host "/proc/sys" bind-mounted read-only</li>
<li><code>/sys/fs/selinux</code> the host "selinux" instance remounted read-only</li>
<li><code>/sys/fs/cgroup/NNNN</code> the host cgroups controllers bind-mounted to
only expose the sub-tree associated with the container</li>
<li><code>/proc/meminfo</code> a FUSE backed file reflecting memory limits of the container</li>
</ul>
<h3><a name="devnodes">Device nodes</a></h3>
<p>
The container init process will be started with <code>CAP_MKNOD</code>
capability removed and blocked from re-acquiring it. As such it will
not be able to create any device nodes in <code>/dev</code> or anywhere
else in its filesystems. Libvirt itself will take care of pre-populating
the <code>/dev</code> filesystem with any devices that the container
is authorized to use. The current devices that will be made available
to all containers are
</p>
<ul>
<li><code>/dev/zero</code></li>
<li><code>/dev/null</code></li>
<li><code>/dev/full</code></li>
<li><code>/dev/random</code></li>
<li><code>/dev/urandom</code></li>
<li><code>/dev/stdin</code> symlinked to <code>/proc/self/fd/0</code></li>
<li><code>/dev/stdout</code> symlinked to <code>/proc/self/fd/1</code></li>
<li><code>/dev/stderr</code> symlinked to <code>/proc/self/fd/2</code></li>
<li><code>/dev/fd</code> symlinked to <code>/proc/self/fd</code></li>
<li><code>/dev/ptmx</code> symlinked to <code>/dev/pts/ptmx</code></li>
<li><code>/dev/console</code> symlinked to <code>/dev/pts/0</code></li>
</ul>
<p>
In addition, for every console defined in the guest configuration,
a symlink will be created from <code>/dev/ttyN</code> symlinked to
the corresponding <code>/dev/pts/M</code> pseudo TTY device. The
first console will be <code>/dev/tty1</code>, with further consoles
numbered incrementally from there.
</p>
<p>
Further block or character devices will be made available to containers
depending on their configuration.
</p>
<!--
<h2>Container configuration</h2>
<h3>Init process</h3>
<h3>Console devices</h3>
<h3>Filesystem devices</h3>
<h3>Disk devices</h3>
<h3>Block devices</h3>
<h3>USB devices</h3>
<h3>Character devices</h3>
<h3>Network devices</h3>
-->
<h2>Container security</h2>
<h3>sVirt SELinux</h3>
<p>
In the absence of the "user" namespace being used, containers cannot
be considered secure against exploits of the host OS. The sVirt SELinux
driver provides a way to secure containers even when the "user" namespace
is not used. The cost is that writing a policy to allow execution of
arbitrary OS is not practical. The SELinux sVirt policy is typically
tailored to work with an simpler application confinement use case,
as provided by the "libvirt-sandbox" project.
</p>
<h3>Auditing</h3>
<p>
The LXC driver is integrated with libvirt's auditing subsystem, which
causes audit messages to be logged whenever there is an operation
performed against a container which has impact on host resources.
So for example, start/stop, device hotplug will all log audit messages
providing details about what action occurred and any resources
associated with it. There are the following 3 types of audit messages
</p>
<ul>
<li><code>VIRT_MACHINE_ID</code> - details of the SELinux process and
image security labels assigned to the container.</li>
<li><code>VIRT_CONTROL</code> - details of an action / operation
performed against a container. There are the following types of
operation
<ul>
<li><code>op=start</code> - a container has been started. Provides
the machine name, uuid and PID of the <code>libvirt_lxc</code>
controller process</li>
<li><code>op=init</code> - the init PID of the container has been
started. Provides the machine name, uuid and PID of the
<code>libvirt_lxc</code> controller process and PID of the
init process (in the host PID namespace)</li>
<li><code>op=stop</code> - a container has been stopped. Provides
the machine name, uuid</li>
</ul>
</li>
<li><code>VIRT_RESOURCE</code> - details of a host resource
associated with a container action.</li>
</ul>
<h3>Device access</h3>
<p>
All containers are launched with the CAP_MKNOD capability cleared
and removed from the bounding set. Libvirt will ensure that the
/dev filesystem is pre-populated with all devices that a container
is allowed to use. In addition, the cgroup "device" controller is
configured to block read/write/mknod from all devices except those
that a container is authorized to use.
</p>
<h2><a name="exconfig">Example configurations</a></h2>
<h3>Example config version 1</h3>
<p></p>
@@ -315,158 +119,21 @@ debootstrap, whatever) under /opt/vm-1-root:
&lt;/domain&gt;
</pre>
<h2><a name="usage">Container usage / management</a></h2>
<p>
As with any libvirt virtualization driver, LXC containers can be
managed via a wide variety of libvirt based tools. At the lowest
level the <code>virsh</code> command can be used to perform many
tasks, by passing the <code>-c lxc:///</code> argument. As an
alternative to repeating the URI with every command, the <code>LIBVIRT_DEFAULT_URI</code>
environment variable can be set to <code>lxc:///</code>. The
examples that follow outline some common operations with virsh
and LXC. For further details about usage of virsh consult its
manual page.
</p>
<h3><a name="usageSave">Defining (saving) container configuration></a></h3>
<p>
The <code>virsh define</code> command takes an XML configuration
document and loads it into libvirt, saving the configuration on disk
</p>
In both cases, you can define and start a container using:</p>
<pre>
# virsh -c lxc:/// define myguest.xml
virsh --connect lxc:/// define v1.xml
virsh --connect lxc:/// start vm1
</pre>
<h3><a name="usageView">Viewing container configuration</a></h3>
<p>
The <code>virsh dumpxml</code> command can be used to view the
current XML configuration of a container. By default the XML
output reflects the current state of the container. If the
container is running, it is possible to explicitly request the
persistent configuration, instead of the current live configuration
using the <code>--inactive</code> flag
</p>
and then get a console using:
<pre>
# virsh -c lxc:/// dumpxml myguest
virsh --connect lxc:/// console vm1
</pre>
<h3><a name="usageStart">Starting containers</a></h3>
<p>
The <code>virsh start</code> command can be used to start a
container from a previously defined persistent configuration
<p>Now doing 'ps -ef' will only show processes in the container, for
instance. You can undefine it using
</p>
<pre>
# virsh -c lxc:/// start myguest
virsh --connect lxc:/// undefine vm1
</pre>
<p>
It is also possible to start so called "transient" containers,
which do not require a persistent configuration to be saved
by libvirt, using the <code>virsh create</code> command.
</p>
<pre>
# virsh -c lxc:/// create myguest.xml
</pre>
<h3><a name="usageStop">Stopping containers</a></h3>
<p>
The <code>virsh shutdown</code> command can be used
to request a graceful shutdown of the container. By default
this command will first attempt to send a message to the
init process via the <code>/dev/initctl</code> device node.
If no such device node exists, then it will send SIGTERM
to PID 1 inside the container.
</p>
<pre>
# virsh -c lxc:/// shutdown myguest
</pre>
<p>
If the container does not respond to the graceful shutdown
request, it can be forceably stopped using the <code>virsh destroy</code>
</p>
<pre>
# virsh -c lxc:/// destroy myguest
</pre>
<h3><a name="usageReboot">Rebooting a container</a></h3>
<p>
The <code>virsh reboot</code> command can be used
to request a graceful shutdown of the container. By default
this command will first attempt to send a message to the
init process via the <code>/dev/initctl</code> device node.
If no such device node exists, then it will send SIGHUP
to PID 1 inside the container.
</p>
<pre>
# virsh -c lxc:/// reboot myguest
</pre>
<h3><a name="usageDelete">Undefining (deleting) a container configuration</a></h3>
<p>
The <code>virsh undefine</code> command can be used to delete the
persistent configuration of a container. If the guest is currently
running, this will turn it into a "transient" guest.
</p>
<pre>
# virsh -c lxc:/// undefine myguest
</pre>
<h3><a name="usageConnect">Connecting to a container console</a></h3>
<p>
The <code>virsh console</code> command can be used to connect
to the text console associated with a container. If the container
has been configured with multiple console devices, then the
<code>--devname</code> argument can be used to choose the
console to connect to
</p>
<pre>
# virsh -c lxc:/// console myguest
</pre>
<h3><a name="usageEnter">Running commands in a container</a></h3>
<p>
The <code>virsh lxc-enter-namespace</code> command can be used
to enter the namespaces and security context of a container
and then execute an arbitrary command.
</p>
<pre>
# virsh -c lxc:/// lxc-enter-namespace myguest -- /bin/ls -al /dev
</pre>
<h3><a name="usageTop">Monitoring container utilization</a></h3>
<p>
The <code>virt-top</code> command can be used to monitor the
activity and resource utilization of all containers on a
host
</p>
<pre>
# virt-top -c lxc:///
</pre>
</body>
</html>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html> <!-- -*- html -*- -->
<body>
<h1>OpenVZ container driver</h1>

View File

@@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<html><body>
<h1>Parallels Cloud Server driver</h1>
<ul id="toc"></ul>
<p>

View File

@@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<html><body>
<h1>IBM PowerVM hypervisor driver (phyp)</h1>
<ul id="toc"></ul>
<p>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>KVM/QEMU hypervisor driver</h1>
@@ -19,7 +17,6 @@
<li>
The <a href="http://www.linux-kvm.org/">KVM</a> Linux
hypervisor
</li>
<li>
The <a href="http://wiki.qemu.org/Index.html">QEMU</a> emulator
</li>
@@ -560,7 +557,6 @@ $ virsh domxml-to-native qemu-argv demo.xml
possible to add an element <code>&lt;qemu:commandline&gt;</code>
under <code>driver</code>, with the following sub-elements
repeated as often as needed:
</p>
<dl>
<dt><code>qemu:arg</code></dt>
<dd>Add an additional command-line argument to the qemu
@@ -573,6 +569,7 @@ $ virsh domxml-to-native qemu-argv demo.xml
pair recorded in the attributes <code>name</code>
and optional <code>value</code>.</dd>
</dl>
<p>Example:</p><pre>
&lt;domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'&gt;
&lt;name&gt;QEmu-fedora-i686&lt;/name&gt;

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Remote management driver</h1>
</body>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Test "mock" driver</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>User Mode Linux driver</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>VirtualBox hypervisor driver</h1>
<p>
@@ -31,18 +29,6 @@ vbox+tcp://user@example.com/session (remote access, SASl/Kerberos)
vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
</pre>
<p>
<strong>NOTE: as of libvirt 1.0.6, the VirtualBox driver will always
run inside the libvirtd daemon, instead of being built-in to the
libvirt.so library directly. This change was required due to the
fact that VirtualBox code is LGPLv2-only licensed, which is not
compatible with the libvirt.so license of LGPLv2-or-later. The
daemon will be auto-started when the first connection to VirtualBox
is requested. This change also means that it will not be possible
to use VirtualBox URIs on the Windows platform, until additional
work is completed to get the libvirtd daemon working there.</strong>
</p>
<h2><a name="xmlconfig">Example domain XML config</a></h2>
<pre>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>VMware Workstation / Player hypervisors driver</h1>
<p>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Xen hypervisor driver</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Handling of errors</h1>
<p>The main goals of libvirt when it comes to error handling are:</p>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Firewall and network filtering in libvirt</h1>
<p>There are three pieces of libvirt functionality which do network

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1 >XML Format</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Driver capabilities XML format</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Domain XML format</h1>
@@ -146,7 +144,7 @@
configure in the desired way, which is why per-device boot elements
(see <a href="#elementsDisks">disks</a>,
<a href="#elementsNICS">network interfaces</a>, and
<a href="#elementsHostDev">USB and PCI devices</a> sections below) were
<a href="#elementsUSB">USB and PCI devices</a> sections below) were
introduced and they are the preferred way providing full control over
booting order. The <code>boot</code> element and per-device boot
elements are mutually exclusive. <span class="since">Since 0.1.3,
@@ -184,7 +182,6 @@
again in case the boot fails (according to BIOS). The value is
in milliseconds with maximum of <code>65535</code> and special
value <code>-1</code> disables the reboot.
</dd>
</dl>
<h4><a name="elementsOSBootloader">Host bootloader</a></h4>
@@ -285,29 +282,6 @@
</pre>
<p>
If you want to enable user namespace,set the <code>idmap</code> element.
the <code>uid</code> and <code>gid</code> elements have three attributes:
</p>
<dl>
<dt><code>start</code></dt>
<dd>First user id in container.</dd>
<dt><code>target</code></dt>
<dd>The first user id in container will be mapped to this target user
id in host.</dd>
<dt><code>count</code></dt>
<dd>How many users in container being allowed to map to host's user.</dd>
</dl>
<pre>
&lt;idmap&gt;
&lt;uid start='0' target='1000' count='10'/&gt;
&lt;gid start='0' target='1000' count='10'/&gt;
&lt;/idmap&gt;
</pre>
<h3><a name="elementsSysinfo">SMBIOS System Information</a></h3>
<p>
@@ -331,8 +305,7 @@
&lt;/bios&gt;
&lt;system&gt;
&lt;entry name='manufacturer'&gt;Fedora&lt;/entry&gt;
&lt;entry name='product'&gt;Virt-Manager&lt;/entry&gt;
&lt;entry name='version'&gt;0.9.4&lt;/entry&gt;
&lt;entry name='vendor'&gt;Virt-Manager&lt;/entry&gt;
&lt;/system&gt;
&lt;/sysinfo&gt;
...</pre>
@@ -356,49 +329,17 @@
<dl>
<dt><code>bios</code></dt>
<dd>
This is block 0 of SMBIOS, with entry names drawn from:
<dl>
<dt><code>vendor</code></dt>
<dd>BIOS Vendor's Name</dd>
<dt><code>version</code></dt>
<dd>BIOS Version</dd>
<dt><code>date</code></dt>
<dd>BIOS release date. If supplied, is in either mm/dd/yy or
mm/dd/yyyy format. If the year portion of the string is
two digits, the year is assumed to be 19yy.</dd>
<dt><code>release</code></dt>
<dd>System BIOS Major and Minor release number values
concatenated together as one string separated by
a period, for example, 10.22.</dd>
</dl>
This is block 0 of SMBIOS, with entry names drawn from
"vendor", "version", "date", and "release".
</dd>
<dt><code>system</code></dt>
<dd>
This is block 1 of SMBIOS, with entry names drawn from:
<dl>
<dt><code>manufacturer</code></dt>
<dd>Manufacturer of BIOS</dd>
<dt><code>product</code></dt>
<dd>Product Name</dd>
<dt><code>version</code></dt>
<dd>Version of the product</dd>
<dt><code>serial</code></dt>
<dd>Serial number</dd>
<dt><code>uuid</code></dt>
<dd>Universal Unique ID number. If this entry is provided
alongside a top-level
<a href="#elementsMetadata"><code>uuid</code></a> element,
then the two values must match.</dd>
<dt><code>sku</code></dt>
<dd>SKU number to identify a particular configuration.</dd>
<dt><code>family</code></dt>
<dd>Identify the family a particular computer belongs to.</dd>
</dl>
NB: Incorrectly supplied entries in either the <code>bios</code>
or <code>system</code> blocks will be ignored without error.
Other than <code>uuid</code> validation and <code>date</code>
format checking, all values are passed as strings to the
hypervisor driver.
This is block 1 of SMBIOS, with entry names drawn from
"manufacturer", "product", "version", "serial", "uuid",
"sku", and "family". If a "uuid" entry is provided
alongside a
top-level <a href="#elementsMetadata"><code>uuid</code>
element</a>, the two values must match.
</dd>
</dl>
</dd>
@@ -617,29 +558,17 @@
...
&lt;memoryBacking&gt;
&lt;hugepages/&gt;
&lt;nosharepages/&gt;
&lt;locked/&gt;
&lt;/memoryBacking&gt;
...
&lt;/domain&gt;
</pre>
<p>The optional <code>memoryBacking</code> element may contain several
elements that influence how virtual memory pages are backed by host
pages.</p>
<dl>
<dt><code>hugepages</code></dt>
<dd>This tells the hypervisor that the guest should have its memory
allocated using hugepages instead of the normal native page size.</dd>
<dt><code>nosharepages</code></dt>
<dd>Instructs hypervisor to disable shared pages (memory merge, KSM) for
this domain. <span class="since">Since 1.0.6</span></dd>
<dt><code>locked</code></dt>
<dd>When set and supported by the hypervisor, memory pages belonging
to the domain will be locked in host's memory and the host will not
be allowed to swap them out.
<span class="since">Since 1.0.6</span></dd>
<dt><code>memoryBacking</code></dt>
<dd>The optional <code>memoryBacking</code> element, may have an
<code>hugepages</code> element set within it. This tells the
hypervisor that the guest should have its memory allocated using
hugepages instead of the normal native page size.</dd>
</dl>
@@ -712,7 +641,6 @@
how to tune the performance of a NUMA host via controlling NUMA policy
for domain process. NB, only supported by QEMU driver.
<span class='since'>Since 0.9.3</span>
</dd>
<dt><code>memory</code></dt>
<dd>
The optional <code>memory</code> element specifies how to allocate memory
@@ -901,15 +829,11 @@
copying host CPU definition from capabilities XML into domain XML.
Since the CPU definition is copied just before starting a domain,
exactly the same XML can be used on different hosts while still
providing the best guest CPU each host supports. The
<code>match</code> attribute can't be used in this mode. Specifying
CPU model is not supported either, but <code>model</code>'s
<code>fallback</code> attribute may still be used. Using the
<code>feature</code> element, specific flags may be enabled or
disabled specifically in addition to the host model. This may be
used to fine tune features that can be emulated.
<span class="since">(Since 1.1.1)</span>.
Libvirt does not model every aspect of each CPU so
providing the best guest CPU each host supports. Neither
<code>match</code> attribute nor any <code>feature</code> elements
can be used in this mode. Specifying CPU model is not supported
either, but <code>model</code>'s <code>fallback</code> attribute may
still be used. Libvirt does not model every aspect of each CPU so
the guest CPU will not match the host CPU exactly. On the other
hand, the ABI provided to the guest is reproducible. During
migration, complete CPU model definition is transferred to the
@@ -1033,13 +957,7 @@
<p>
It is sometimes necessary to override the default actions taken
on various events. Not all hypervisors support all events and actions.
The actions may be taken as a result of calls to libvirt APIs
<code class='docref'>virDomainReboot</code>,
<code class='docref'>virDomainShutdown</code>, or
<code class='docref'>virDomainShutdownFlags</code>.
Using <code>virsh reboot</code> or <code>virsh shutdown</code> would
also trigger the event.
on various events.
</p>
<pre>
@@ -1076,29 +994,20 @@
<dl>
<dt><code>destroy</code></dt>
<dd>The domain will be terminated completely and all resources
released.</dd>
released</dd>
<dt><code>restart</code></dt>
<dd>The domain will be terminated and then restarted with
the same configuration.</dd>
<dd>The domain will be terminated, and then restarted with
the same configuration</dd>
<dt><code>preserve</code></dt>
<dd>The domain will be terminated and its resource preserved
<dd>The domain will be terminated, and its resource preserved
to allow analysis.</dd>
<dt><code>rename-restart</code></dt>
<dd>The domain will be terminated and then restarted with
a new name.</dd>
<dd>The domain will be terminated, and then restarted with
a new name</dd>
</dl>
<p>
QEMU/KVM supports the <code>on_poweroff</code> and <code>on_reboot</code>
events handling the <code>destroy</code> and <code>restart</code> actions.
The <code>preserve</code> action for an <code>on_reboot</code> event
is treated as a <code>destroy</code> and the <code>rename-restart</code>
action for an <code>on_poweroff</code> event is treated as a
<code>restart</code> event.
</p>
<p>
The <code>on_crash</code> event supports these additional
on_crash supports these additional
actions <span class="since">since 0.8.4</span>.
</p>
@@ -1174,8 +1083,6 @@
&lt;privnet/&gt;
&lt;hyperv&gt;
&lt;relaxed state='on'/&gt;
&lt;vapic state='on'/&gt;
&lt;spinlocks state='on' retries='4096'&lt;/spinlocks&gt;
&lt;/hyperv&gt;
&lt;/features&gt;
@@ -1226,27 +1133,14 @@
<th>Feature</th>
<th>Description</th>
<th>Value</th>
<th>Since</th>
</tr>
<tr>
<td>relaxed</td>
<td>Relax contstraints on timers</td>
<td> on, off</td>
<td><span class="since">1.0.0 (QEMU only)</span></td>
</tr>
<tr>
<td>vapic</td>
<td>Enable virtual APIC</td>
<td>on, off</td>
<td><span class="since">1.1.0 (QEMU only)</span></td>
</tr>
<tr>
<td>spinlocks</td>
<td>Enable spinlock support</td>
<td>on, off; retries - at least 4095</td>
<td><span class="since">1.1.0 (QEMU only)</span></td>
</tr>
</table>
<span class="since">Since 1.0.0 (QEMU only)</span>
</dd>
</dl>
@@ -1337,10 +1231,8 @@
<dt><code>name</code></dt>
<dd>
The <code>name</code> attribute selects which timer is
being modified, and can be one of
"platform" (currently unsupported),
"hpet" (libxl, xen, qemu), "kvmclock" (qemu),
"pit" (qemu), "rtc" (qemu), or "tsc" (libxl).
being modified, and can be one of "platform", "hpet",
"kvmclock", "pit", "rtc", or "tsc".
</dd>
<dt><code>track</code></dt>
<dd>
@@ -1601,16 +1493,7 @@
<code>pool</code> and <code>volume</code>. Attribute <code>pool</code>
specifies the name of storage pool (managed by libvirt) where the disk
source resides, and attribute <code>volume</code> specifies the name of
storage volume (managed by libvirt) used as the disk source. For a
"volume" type disk, if the underlying storage pool is "iscsi", attribute
<code>mode</code> (<span class="since">since 1.1.1</span>) can be used
to indicate how to represent the LUN as the disk source. The value
"host" indicates to use the LUN's path as it shows up on host, e.g.
/dev/disk/by-path/ip-10.11.12.9:3260-iscsi-iqn.2013-06.fc:iscsi.iscsi0-lun-1).
The value "direct" indicates to use the storage pool's
<code>source</code> element <code>host</code> attribute as the
disk source for the libiscsi URI, e.g.
file=iscsi://demo.org:6000/iqn.1992-01.com.example/1.
storage volume (managed by libvirt) used as the disk source.
<span class="since">Since 0.0.3; <code>type='dir'</code> since
0.7.5; <code>type='network'</code> since
0.8.7; <code>protocol='iscsi'</code> since 1.0.4;
@@ -1705,7 +1588,6 @@
<dd>The optional <code>write_iops_sec</code> element is the
write I/O operations per second.</dd>
</dl>
</dd>
<dt><code>driver</code></dt>
<dd>
The optional driver element allows specifying further details
@@ -1794,14 +1676,6 @@
network. By default copy-on-read is off.
<span class='since'>Since 0.9.10 (QEMU and KVM only)</span>
</li>
<li>
The optional <code>discard</code> attribute controls whether
to discard (also known as "trim" or "unmap") requests are
ignored or passed to the filesystem. The value can be either
"unmap" (allow the discard request to be passed) or "ignore"
(ignore the discard request).
<span class='since'>Since 1.0.6 (QEMU and KVM only)</span>
</li>
</ul>
</dd>
<dt><code>boot</code></dt>
@@ -1973,13 +1847,11 @@
OS. For Linux this would be the value returned by the
BLKSSZGET ioctl and describes the smallest units for disk
I/O.
</dd>
<dt><code>physical_block_size</code></dt>
<dd>The physical block size the disk will report to the guest
OS. For Linux this would be the value returned by the
BLKPBSZGET ioctl and describes the disk's hardware sector
size which can be relevant for the alignment of disk data.
</dd>
</dl>
</dd>
</dl>
@@ -2004,13 +1876,6 @@
&lt;target dir='/import/from/host'/&gt;
&lt;readonly/&gt;
&lt;/filesystem&gt;
&lt;filesystem type='file' accessmode='passthrough'&gt;
&lt;driver name='loop' type='raw'/&gt;
&lt;driver type='path' wrpolicy='immediate'/&gt;
&lt;source file='/export/to/guest.img'/&gt;
&lt;target dir='/import/from/host'/&gt;
&lt;readonly/&gt;
&lt;/filesystem&gt;
...
&lt;/devices&gt;
...</pre>
@@ -2102,24 +1967,6 @@
</dd>
<dt><code>driver</code></dt>
<dd>
The optional driver element allows specifying further details
related to the hypervisor driver used to provide the filesystem.
<span class="since">Since 1.0.6</span>
<ul>
<li>
If the hypervisor supports multiple backend drivers, then
the <code>type</code> attribute selects the primary
backend driver name, while the <code>format</code>
attribute provides the format type. For example, LXC
supports a type of "loop", with a format of "raw" or
"nbd" with any format. QEMU supports a type of "path"
or "handle", but no formats.
</li>
</ul>
</dd>
<dt><code>source</code></dt>
<dd>
The resource on the host that is being accessed in the guest. The
@@ -2220,7 +2067,6 @@
additional attributes: <code>bus</code> (a 2-digit bus
number), and <code>slot</code> attribute (a 2-digit slot
within the bus). <span class="since">Since 0.8.8.</span>
</dd>
<dt><code>type='usb'</code></dt>
<dd>USB addresses have the following additional
attributes: <code>bus</code> (a hex value between 0 and 0xfff,
@@ -2403,13 +2249,13 @@
<h4><a name="elementsHostDev">Host device assignment</a></h4>
<h5><a name="elementsHostDevSubsys">USB / PCI / SCSI devices</a></h5>
<h5><a href="elementsHostDevSubsys">USB / PCI devices</a></h5>
<p>
USB, PCI and SCSI devices attached to the host can be passed through
USB and PCI 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 and 0.6.0 for PCI
(KVM only)</span>:
</p>
<pre>
@@ -2438,31 +2284,14 @@
&lt;rom bar='on' file='/etc/fake/boot.bin'/&gt;
&lt;/hostdev&gt;
&lt;/devices&gt;
...</pre>
<p>or:</p>
<pre>
...
&lt;devices&gt;
&lt;hostdev mode='subsystem' type='scsi'&gt;
&lt;source&gt;
&lt;adapter name='scsi_host0'/&gt;
&lt;address type='scsi' bus='0' target='0' unit='0'/&gt;
&lt;/source&gt;
&lt;readonly/&gt;
&lt;address type='drive' controller='0' bus='0' target='0' unit='0'/&gt;
&lt;/hostdev&gt;
&lt;/devices&gt;
...</pre>
<dl>
<dt><code>hostdev</code></dt>
<dd>The <code>hostdev</code> element is the main container for describing
host devices. For usb device passthrough <code>mode</code> is always
"subsystem" and <code>type</code> is "usb" for a USB device, "pci"
for a PCI device and "scsi" for a SCSI device. When
<code>managed</code> is "yes" for a PCI
"subsystem" and <code>type</code> is "usb" for a USB device and "pci"
for a PCI device. When <code>managed</code> is "yes" for a PCI
device, it is detached from the host before being passed on to
the guest, and reattached to the host after the guest exits.
If <code>managed</code> is omitted or "no", and for USB
@@ -2472,21 +2301,13 @@
hot-plugging the device,
and <code>virNodeDeviceReAttach</code> (or <code>virsh
nodedev-reattach</code>) after hot-unplug or stopping the
guest. For SCSI device, user is responsible to make sure the device
is not used by host.
The optional <code>sgio</code> (<span class="since">since 1.0.6</span>)
attribute indicates whether the kernel will filter unprivileged
SG_IO commands for the disk, valid settings are "filtered" or
"unfiltered". Defaults to "filtered".
</dd>
guest.</dd>
<dt><code>source</code></dt>
<dd>The source element describes the device as seen from the host.
The USB device can either be addressed by vendor / product id using the
<code>vendor</code> and <code>product</code> elements or by the device's
address on the hosts using the <code>address</code> element. PCI devices
on the other hand can only be described by their <code>address</code>.
SCSI devices are described by both the <code>adapter</code> and
<code>address</code> elements.
<span class="since">Since 1.0.0</span>, the <code>source</code> element
of USB devices may contain <code>startupPolicy</code> attribute which can
@@ -2521,7 +2342,6 @@
<a href="#elementsOSBIOS">BIOS bootloader</a> section.
<span class="since">Since 0.8.8</span> for PCI devices,
<span class="since">Since 1.0.1</span> for USB devices.
</dd>
<dt><code>rom</code></dt>
<dd>The <code>rom</code> element is used to change how a PCI
device's ROM is presented to the guest. The optional <code>bar</code>
@@ -2566,20 +2386,10 @@
could be changed in the future with no impact to domains that
don't specify anything.
</dd>
<dt><code>readonly</code></dt>
<dd>Indicates that the device is readonly, only supported by SCSI host
device now. <span class="since">Since 1.0.6 (QEMU and KVM only)</span>
</dd>
<dt><code>shareable</code></dt>
<dd>If present, this indicates the device is expected to be shared
between domains (assuming the hypervisor and OS support this).
Only supported by SCSI host device.
<span class="since">Since 1.0.6</span>
</dd>
</dl>
<h5><a name="elementsHostDevCaps">Block / character devices</a></h5>
<h5><a href="elementsHostDevCaps">Block / character devices</a></h5>
<p>
Block / character devices from the host can be passed through
@@ -3318,7 +3128,7 @@ qemu-kvm -net nic,model=? /dev/null
&lt;source network='default'/&gt;
&lt;target dev='vnet1'/&gt;
&lt;model type='virtio'/&gt;
<b>&lt;driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'/&gt;</b>
<b>&lt;driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off'/&gt;</b>
&lt;/interface&gt;
&lt;/devices&gt;
...</pre>
@@ -3412,16 +3222,6 @@ qemu-kvm -net nic,model=? /dev/null
<b>In general you should leave this option alone, unless you
are very certain you know what you are doing.</b>
</dd>
<dt><code>queues</code></dt>
<dd>
The optional <code>queues</code> attribute controls the number of
queues to be used for the<a href="http://www.linux-kvm.org/page/Multiqueue">
Multiqueue virtio-net</a> feature. If the interface has <code>&lt;model
type='virtio'/&gt;</code>, multiple packet processing queues can be
created; each queue will potentially be handled by a different
processor, resulting in much higher throughput.
<span class="since">Since 1.0.6 (QEMU and KVM only)</span>
</dd>
</dl>
<h5><a name="elementsNICSTargetOverride">Overriding the target element</a></h5>
@@ -3561,13 +3361,6 @@ qemu-kvm -net nic,model=? /dev/null
&lt;parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&gt;
&lt;/virtualport&gt;
&lt;/interface&gt;
&lt;interface type='bridge'&gt;
<b>&lt;vlan trunk='yes'&gt;</b>
<b>&lt;tag id='42'/&gt;</b>
<b>&lt;tag id='123' nativeMode='untagged'/&gt;</b>
<b>&lt;/vlan&gt;</b>
...
&lt;/interface&gt;
&lt;devices&gt;
...</pre>
@@ -3594,15 +3387,6 @@ qemu-kvm -net nic,model=? /dev/null
vlan element.
</p>
<p>
For network connections using openvswitch it is possible to
configure the 'native-tagged' and 'native-untagged' vlan modes
<span class="since">Since 1.1.0.</span> This uses the optional
<code>nativeMode</code> attribute on the <code>&lt;tag&gt;</code>
element: <code>nativeMode</code> may be set to 'tagged' or
'untagged'. The id atribute of the element sets the native vlan.
</p>
<h5><a name="elementLink">Modifying virtual link state</a></h5>
<pre>
...
@@ -3700,7 +3484,7 @@ qemu-kvm -net nic,model=? /dev/null
...
&lt;devices&gt;
&lt;graphics type='sdl' display=':0.0'/&gt;
&lt;graphics type='vnc' port='5904' sharePolicy='allow-exclusive'&gt;
&lt;graphics type='vnc' port='5904'&gt;
&lt;listen type='address' address='1.2.3.4'/&gt;
&lt;/graphics&gt;
&lt;graphics type='rdp' autoport='yes' multiUser='yes' /&gt;
@@ -3743,25 +3527,10 @@ qemu-kvm -net nic,model=? /dev/null
allows control of connected client during password changes.
VNC accepts <code>keep</code> value only.
<span class="since">since 0.9.3</span>
NB, this may not be supported by all hypervisors.<br/>
The optional <code>sharePolicy</code> attribute specifies vnc server
display sharing policy. "allow-exclusive" allows clients to ask
for exclusive access by dropping other connections. Connecting
multiple clients in parallel requires all clients asking for a
shared session (vncviewer: -Shared switch). This is the default
value. "force-shared" disables exclusive client access, every
connection has to specify -Shared switch for vncviewer. "ignore"
welcomes every connection unconditionally
<span class="since">since 1.0.6</span>. <br/> <br/>
NB, this may not be supported by all hypervisors.<br/> <br/>
Rather than using listen/port, QEMU supports a
<code>socket</code> attribute for listening on a unix
domain socket path.<span class="since">Since 0.8.8</span>
For VNC WebSocket functionality, <code>websocket</code>
attribute may be used to specify port to listen on (with
-1 meaning auto-allocation and <code>autoport</code>
having no effect due to security reasons).
<span class="since">Since 1.0.6</span>
</dd>
<dt><code>"spice"</code></dt>
<dd>
@@ -4230,13 +3999,8 @@ qemu-kvm -net nic,model=? /dev/null
then libvirt can interact with a guest agent installed in the
guest, for actions such as guest shutdown or file system quiescing.
<span class="since">Since 0.7.7, guest agent interaction
since 0.9.10</span> Moreover, <span class="since">since 1.0.6</span>
it is possible to have source path auto generated for virtio unix channels.
This is very useful in case of a qemu guest agent, where users don't
usually care about the source path since it's libvirt who talks to
the guest agent. In case users want to utilize this feature, they should
leave <code>&lt;source&gt;</code> element out.
</dd>
since 0.9.10</span></dd>
<dt><code>spicevmc</code></dt>
<dd>Paravirtualized SPICE channel. The domain must also have a
SPICE server as a <a href="#elementsGraphics">graphics
@@ -4650,7 +4414,6 @@ qemu-kvm -net nic,model=? /dev/null
&lt;devices&gt;
&lt;memballoon model='virtio'&gt;
&lt;address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/&gt;
&lt;stats period='10'/&gt;
&lt;/memballoon&gt;
&lt;/devices&gt;
&lt;/domain&gt;</pre>
@@ -4668,24 +4431,6 @@ qemu-kvm -net nic,model=? /dev/null
<li>'xen' &mdash; default with Xen</li>
</ul>
</dd>
<dt><code>period</code></dt>
<dd>
<p>
The optional <code>period</code> allows the QEMU virtio memory
balloon driver to provide statistics through the <code>virsh
dommemstat [domain]</code> command. By default, collection is
not enabled. In order to enable, use the <code>virsh dommemstat
[domain] --period [number]</code> command or <code>virsh edit</code>
command to add the option to the XML definition.
The <code>virsh dommemstat</code> will accept the options
<code>--live</code>, <code>--current</code>, or <code>--config</code>.
If an option is not provided, the change for a running domain will
only be made to the active guest.
If the QEMU driver is not at the right
revision, the attempt to set the period will fail.
<span class='since'>Since 1.1.1, requires QEMU 1.5</span>
</p>
</dd>
</dl>
<h4><a name="elementsRng">Random number generator device</a></h4>
@@ -4754,7 +4499,7 @@ qemu-kvm -net nic,model=? /dev/null
<dd>
<p>
This backend type expects a non-blocking character device as input.
The only accepted paths are /dev/random and /dev/hwrng. The file
Examples of such devices are /dev/random and /dev/urandom. The file
name is specified as contents of the <code>backend</code> element.
When no file name is specified the hypervisor default is used.
</p>
@@ -4792,7 +4537,7 @@ qemu-kvm -net nic,model=? /dev/null
&lt;devices&gt;
&lt;tpm model='tpm-tis'&gt;
&lt;backend type='passthrough'&gt;
&lt;device path='/dev/tpm0'/&gt;
&lt;backend path='/dev/tpm0'/&gt;
&lt;/backend&gt;
&lt;/tpm&gt;
&lt;/devices&gt;
@@ -4814,7 +4559,7 @@ qemu-kvm -net nic,model=? /dev/null
TPM device. The following types are supported:
</p>
<ul>
<li>'passthrough' &mdash; use the host's TPM device.</li>
<li>'passthrough' &mdash; use the host's TPM device.
</ul>
</dd>
<dt><code>backend type='passthrough'</code></dt>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Network XML format</h1>
@@ -434,24 +432,20 @@
<h5><a name="elementVlanTag">Setting VLAN tag (on supported network types only)</a></h5>
<pre>
&lt;network&gt;
&lt;name&gt;ovs-net&lt;/name&gt;
&lt;forward mode='bridge'/&gt;
&lt;bridge name='ovsbr0'/&gt;
&lt;virtualport type='openvswitch'&gt;
&lt;parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&gt;
&lt;/virtualport&gt;
<b>&lt;vlan trunk='yes'&gt;</b>
<b>&lt;tag id='42' nativeMode='untagged'/&gt;</b>
<b>&lt;tag id='47'/&gt;</b>
<b>&lt;/vlan&gt;</b>
&lt;portgroup name='dontpanic'&gt;
<b>&lt;vlan&gt;</b>
<b>&lt;tag id='42'/&gt;</b>
<b>&lt;/vlan&gt;</b>
&lt;/portgroup&gt;
&lt;/network&gt;
</pre>
...
&lt;devices&gt;
&lt;interface type='bridge'&gt;
<b>&lt;vlan trunk='yes'&gt;</b>
<b>&lt;tag id='42'/&gt;</b>
<b>&lt;tag id='47'/&gt;</b>
<b>&lt;/vlan&gt;</b>
&lt;source bridge='ovsbr0'/&gt;
&lt;virtualport type='openvswitch'&gt;
&lt;parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/&gt;
&lt;/virtualport&gt;
&lt;/interface&gt;
&lt;devices&gt;
...</pre>
<p>
If (and only if) the network type supports vlan tagging
@@ -472,14 +466,6 @@
is desired, the optional attribute <code>trunk='yes'</code> can
be added to the vlan element.
</p>
<p>
For network connections using openvswitch it is possible to
configure the 'native-tagged' and 'native-untagged' vlan modes
<span class="since">Since 1.1.0</span>. This uses the optional
<code>nativeMode</code> attribute on the <code>&lt;tag&gt;</code>
element: <code>nativeMode</code> may be set to 'tagged' or
'untagged'. The id atribute of the element sets the native vlan.
</p>
<p>
<code>&lt;vlan&gt;</code> elements can also be specified in
a <code>&lt;portgroup&gt;</code> element, as well as directly in
@@ -558,62 +544,6 @@
starting.
</p>
<h5><a name="elementsStaticroute">Static Routes</a></h5>
<p>
Static route definitions are used to provide routing information
to the virtualization host for networks which are not directly
reachable from the virtualization host, but *are* reachable from
a guest domain that is itself reachable from the
host <span class="since">since 1.0.6</span>.
</p>
<p>
As shown in <a href="formatnetwork.html#examplesNoGateway">this
example</a>, it is possible to define a virtual network
interface with no IPv4 or IPv6 addresses. Such networks are
useful to provide host connectivity to networks which are only
reachable via a guest. A guest with connectivity both to the
guest-only network and to another network that is directly
reachable from the host can act as a gateway between the
networks. A static route added to the "host-visible" network
definition provides the routing information so that IP packets
can be sent from the virtualization host to guests on the hidden
network.
</p>
<p>
Here is a fragment of a definition which shows the static
route specification as well as the IPv4 and IPv6 definitions
for network addresses which are referred to in the
<code>gateway</code> gateway address specifications. Note
that the third static route specification includes the
<code>metric</code> attribute specification with a value of 2.
This particular route would *not* be preferred if there was
another existing rout on the system with the same address and
prefix but with a lower value for the metric. If there is a
route in the host system configuration that should be overriden
by a route in a virtual network whenever the virtual network is
running, the configuration for the system-defined route should
be modified to have a higher metric, and the route on the
virtual network given a lower metric (for example, the default
metric of "1").
</p>
<pre>
...
&lt;ip address="192.168.122.1" netmask="255.255.255.0"&gt;
&lt;dhcp&gt;
&lt;range start="192.168.122.128" end="192.168.122.254" /&gt;
&lt;/dhcp&gt;
&lt;/ip&gt;
&lt;route address="192.168.222.0" prefix="24" gateway="192.168.122.2" /&gt;
&lt;ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64" /&gt;
&lt;route family="ipv6" address="2001:db8:ca2:3::" prefix="64" gateway="2001:db8:ca2:2::2"/&gt;
&lt;route family="ipv6" address="2001:db9:4:1::" prefix="64" gateway="2001:db8:ca2:2::3" metric='2'&gt;
&lt;/route&gt;
...
</pre>
<h3><a name="elementsAddress">Addressing</a></h3>
<p>
@@ -645,7 +575,6 @@
&lt;/dhcp&gt;
&lt;/ip&gt;
&lt;ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64" /&gt;
&lt;route family="ipv6" address="2001:db9:ca1:1::" prefix="64" gateway="2001:db8:ca2:2::2" /&gt;
&lt;/network&gt;</pre>
<dl>
@@ -895,33 +824,6 @@
&lt;/ip&gt;
&lt;/network&gt;</pre>
<p>
Below is yet another IPv6 variation. This variation has only
IPv6 defined with DHCPv6 on the primary IPv6 network. A static
link if defined for a second IPv6 network which will not be
directly visible on the bridge interface but there will be a
static route defined for this network via the specified
gateway. Note that the gateway address must be directly
reachable via (on the same subnet as) one of the &lt;ip&gt;
addresses defined for this &lt;network&gt;.
<span class="since">Since 1.0.6</span>
</p>
<pre>
&lt;network&gt;
&lt;name&gt;net7&lt;/name&gt;
&lt;bridge name="virbr7" /&gt;
&lt;forward mode="route"/&gt;
&lt;ip family="ipv6" address="2001:db8:ca2:7::1" prefix="64" &gt;
&lt;dhcp&gt;
&lt;range start="2001:db8:ca2:7::100" end="2001:db8:ca2::1ff" /&gt;
&lt;host id="0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63" name="lucas" ip="2001:db8:ca2:2:3::4" /&gt;
&lt;/dhcp&gt;
&lt;/ip&gt;
&lt;route family="ipv6" address="2001:db8:ca2:8::" prefix="64" gateway="2001:db8:ca2:7::4" &gt;
&lt;/route&gt;
&lt;/network&gt;</pre>
<h3><a name="examplesPrivate">Isolated network config</a></h3>
<p>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Node devices XML format</h1>
@@ -13,7 +11,7 @@
prefix <code>virNodeDevice</code>, which deal with management of
host devices that can be handed to guests via passthrough as
&lt;hostdev&gt; elements
in <a href="formatdomain.html#elementsHostDev">the domain XML</a>.
in <a href="formatdomain.html#elementsUSB">the domain XML</a>.
These devices are represented as a hierarchy, where a device on
a bus has a parent of the bus controller device; the root of the
hierarchy is the node named "computer".
@@ -80,36 +78,6 @@
<dd>Vendor details from the device ROM, including an
attribute <code>id</code> with the hexadecimal vendor
id, and an optional text name of that vendor.</dd>
<dt><code>iommuGroup</code></dt>
<dd>
This optional element describes the "IOMMU group" this
device belongs to. If the element exists, it has a
mandatory <code>number</code> attribute which tells
the group number used for management of the group (all
devices in group "n" will be found in
"/sys/kernel/iommu_groups/n"). It will also have a
list of <code>address</code> subelements, each
containing the PCI address of a device in the same
group. The toplevel device will itself be included in
this list.
</dd>
<dt><code>capability</code></dt>
<dd>
This optional element can occur multiple times. If it
exists, it has a mandatory <code>type</code> attribute
which will be set to
either <code>physical_function</code>
or <code>virtual_functions</code>. If the type
is <code>physical_function</code>, there will be a
single <code>address</code> subelement which contains
the PCI address of the SRIOV Physical Function (PF)
that is the parent of this device (and this device is,
by implication, an SRIOV Virtual Function (VF)). If
the type is <code>virtual_functions</code>, then this
device is an SRIOV PF, and the capability element will
have a list of <code>address</code> subelements, one
for each VF on this PF.
</dd>
</dl>
</dd>
<dt><code>usb_device</code></dt>
@@ -262,38 +230,7 @@
&lt;address&gt;00:27:13:6a:fe:00&lt;/address&gt;
&lt;capability type='80203'/&gt;
&lt;/capability&gt;
&lt;/device&gt;
&lt;device&gt;
&lt;name&gt;pci_0000_02_00_0&lt;/name&gt;
&lt;path&gt;/sys/devices/pci0000:00/0000:00:04.0/0000:02:00.0&lt;/path&gt;
&lt;parent&gt;pci_0000_00_04_0&lt;/parent&gt;
&lt;driver&gt;
&lt;name&gt;igb&lt;/name&gt;
&lt;/driver&gt;
&lt;capability type='pci'&gt;
&lt;domain&gt;0&lt;/domain&gt;
&lt;bus&gt;2&lt;/bus&gt;
&lt;slot&gt;0&lt;/slot&gt;
&lt;function&gt;0&lt;/function&gt;
&lt;product id='0x10c9'&gt;82576 Gigabit Network Connection&lt;/product&gt;
&lt;vendor id='0x8086'&gt;Intel Corporation&lt;/vendor&gt;
&lt;capability type='virt_functions'&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x10' function='0x0'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x10' function='0x2'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x10' function='0x4'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x10' function='0x6'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x11' function='0x0'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x11' function='0x2'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x11' function='0x4'/&gt;
&lt;/capability&gt;
&lt;iommuGroup number='12'&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/&gt;
&lt;address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/&gt;
&lt;/iommuGroup&gt;
&lt;/capability&gt;
&lt;/device&gt;
</pre>
&lt;/device&gt;</pre>
</body>
</html>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Network Filters</h1>
@@ -115,7 +113,7 @@
<p>
Filtering rules are organized in filter chains. These chains can be
thought of as having a tree structure with packet
filtering rules as entries in individual chains (branches). <br/>
filtering rules as entries in individual chains (branches). <br>
Packets start their filter evaluation in the <code>root</code> chain
and can then continue their evaluation in other chains, return from
those chains back into the <code>root</code> chain or be
@@ -229,7 +227,7 @@
<p>
A chain with a lower priority value is accessed before one with a
higher value.
<br/>
<br><br>
<span class="since">Since 0.9.8</span> the above listed chains
can be assigned custom priorities by writing a value in the
range [-1000, 1000] into the priority (XML) attribute in the filter
@@ -372,7 +370,7 @@
<p>
Further, the notation of $VARIABLE is short-hand for $VARIABLE[@0]. The
former notation always assumes the iterator with Id '0'.
</p>
<p>
<h3><a name="nwfelemsRulesAdvIPAddrDetection">Automatic IP address detection</a></h3>
<p>
@@ -396,7 +394,7 @@
When a VM is migrated to another host or resumed after a suspend operation,
the first packet sent by the VM will again determine the IP address it can
use on a particular interface.
<br/>
<br/><br>
A value of <code>dhcp</code> specifies that libvirt should only honor DHCP
server-assigned addresses with valid leases. This method supports the detection
and usage of multiple IP address per interface.
@@ -569,7 +567,7 @@
(matching the rule passes this filter, but returns control to
the calling filter for further
analysis) <span class="since">(since 0.9.7)</span>,
or <code>continue</code> (matching the rule goes on to the next
or <code>continue<code> (matching the rule goes on to the next
rule for further analysis) <span class="since">(since
0.9.7)</span>.
</li>
@@ -587,7 +585,7 @@
<span class="since">Since 0.9.8</span> this has been extended to cover
the range of -1000 to 1000. If this attribute is not
provided, priority 500 will automatically be assigned.
<br/>
<br>
Note that filtering rules in the <code>root</code> chain are sorted
with filters connected to the <code>root</code> chain following
their priorities. This allows to interleave filtering rules with

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Secret XML format</h1>
@@ -41,8 +39,8 @@
<dd>
Specifies what this secret is used for. A mandatory
<code>type</code> attribute specifies the usage category, currently
only <code>volume</code>, <code>ceph</code> and <code>iscsi</code>
are defined. Specific usage categories are described below.
only <code>volume</code> and <code>ceph</code> are defined.
Specific usage categories are described below.
</dd>
</dl>
@@ -64,9 +62,8 @@
a single <code>name</code> element that specifies a usage name
for the secret. The Ceph secret can then be used by UUID or by
this usage name via the <code>&lt;auth&gt;</code> element of
a <a href="formatdomain.html#elementsDisks">disk device</a> or
a <a href="formatstorage.html">storage pool (rbd)</a>.
<span class="since">Since 0.9.7</span>.
a <a href="domain.html#elementsDisks">disk
device</a>. <span class="since">Since 0.9.7</span>.
</p>
<h3>Usage type "iscsi"</h3>
@@ -77,9 +74,8 @@
a single <code>target</code> element that specifies a usage name
for the secret. The iSCSI secret can then be used by UUID or by
this usage name via the <code>&lt;auth&gt;</code> element of
a <a href="formatdomain.html#elementsDisks">disk device</a> or
a <a href="formatstorage.html">storage pool (iscsi)</a>.
<span class="since">Since 1.0.4</span>.
a <a href="domain.html#elementsDisks">disk
device</a>. <span class="since">Since 1.0.4</span>.
</p>
<h2><a name="example">Example</a></h2>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Snapshot XML format</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Storage pool and volume XML format</h1>
@@ -17,9 +15,9 @@
<p>
The top level tag for a storage pool document is 'pool'. It has
a single attribute <code>type</code>, which is one of <code>dir</code>,
<code>fs</code>, <code>netfs</code>, <code>disk</code>,
<code>iscsi</code>, <code>logical</code>. This corresponds to the
storage backend drivers listed further along in this document.
<code>fs</code>,<code>netfs</code>,<code>disk</code>,<code>iscsi</code>,
<code>logical</code>. This corresponds to the storage backend drivers
listed further along in this document.
The storage pool XML format is available <span class="since">since 0.4.1</span>
</p>
<h3><a name="StoragePoolFirst">General metadata</a></h3>
@@ -72,9 +70,6 @@
&lt;source&gt;
&lt;host name="iscsi.example.com"/&gt;
&lt;device path="demo-target"/&gt;
&lt;auth type='chap' username='myname'&gt;
&lt;secret type='iscsi' usage='mycluster_myname'/&gt;
&lt;/auth&gt;
&lt;vendor name="Acme"/&gt;
&lt;product name="model"/&gt;
&lt;/source&gt;
@@ -82,6 +77,7 @@
<pre>
...
&lt;source&gt;
&lt;source&gt;
&lt;adapter type='fc_host' parent='scsi_host5' wwnn='20000000c9831b4b' wwpn='10000000c9831b4b'/&gt;
&lt;/source&gt;
@@ -125,27 +121,6 @@
which is the hostname or IP address of the server. May optionally
contain a <code>port</code> attribute for the protocol specific
port number. <span class="since">Since 0.4.1</span></dd>
<dt><code>auth</code></dt>
<dd>If present, the <code>auth</code> element provides the
authentication credentials needed to access the source by the
setting of the <code>type</code> attribute. The <code>type</code>
must be either "chap" or "ceph". Additionally a mandatory attribute
<code>username</code> identifies the username to use during
authentication as well as a sub-element <code>secret</code> with
a mandatory attribute <code>type</code>, to tie back to a
<a href="formatsecret.html">libvirt secret object</a> that
holds the actual password or other credentials. The domain XML
intentionally does not expose the password, only the reference
to the object that manages the password. The secret element
<code>type</code> must be either "ceph" or "iscsi". Use "ceph" for
Ceph RBD (Rados Block Device) network sources and use "iscsi" for CHAP
(Challenge-Handshake Authentication Protocol) iSCSI targets.
The <code>secret</code> element requires either a <code>uuid</code>
attribute with the UUID of the secret object or a <code>usage</code>
attribute matching the key that was specified in the
secret object. <span class="since">Since 0.9.7 for "ceph" and
1.1.1 for "chap"</span>
</dd>
<dt><code>name</code></dt>
<dd>Provides the source for pools backed by storage from a
named element (e.g., a logical volume group name).
@@ -357,10 +332,6 @@
&lt;mode&gt;0744&lt;/mode&gt;
&lt;label&gt;virt_image_t&lt;/label&gt;
&lt;/permissions&gt;
&lt;compat&gt;1.1&lt;/compat&gt;
&lt;features&gt;
&lt;lazy_refcounts/&gt;
&lt;/features&gt;
&lt;/target&gt;</pre>
<dl>
@@ -389,22 +360,6 @@
contains the MAC (eg SELinux) label string.
<span class="since">Since 0.4.1</span>
</dd>
<dt><code>compat</code></dt>
<dd>Specify compatibility level. So far, this is only used for
<code>type='qcow2'</code> volumes. Valid values are <code>0.10</code>
and <code>1.1</code> so far, specifying QEMU version the images should
be compatible with. If the <code>feature</code> element is present,
1.1 is used. If omitted, qemu-img default is used.
<span class="since">Since 1.1.0</span>
</dd>
<dt><code>features</code></dt>
<dd>Format-specific features. Only used for <code>qcow2</code> now.
Valid sub-elements are:
<ul>
<li><code>&lt;lazy_refcounts/&gt;</code> - allow delayed reference
counter updates. <span class="since">Since 1.1.0</span></li>
</ul>
</dd>
</dl>
<h3><a name="StorageVolBacking">Backing store elements</a></h3>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Storage volume encryption XML format</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Terminology and goals</h1>
<p>To avoid ambiguity about the terms used, here are the definitions

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Contributor guidelines</h1>
@@ -213,7 +211,7 @@
not suppress real leaks, but it should be generic enough to
cover multiple code paths. The format of the entry can be
found in the documentation found at the
<a href="http://valgrind.org/">Valgrind home page</a>.
<a href="http://valgrind.org/">Valgrind home page.</a>
The following trace was added to <code>tests/.valgrind.supp</code>
in order to suppress the warning:
</p>
@@ -238,7 +236,7 @@
There is more on this subject, including lots of links to background
reading on the subject, on
<a href="http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/">
Richard Jones' guide to working with open source projects</a>.
Richard Jones' guide to working with open source projects</a>
</p>
@@ -379,35 +377,6 @@
int foo(int wizz); // Good
</pre>
<h2><a name="semicolon">Semicolons</a></h2>
<p>
Semicolons should never have a space beforehand. Inside the
condition of a <code>for</code> loop, there should always be a
space or line break after each semicolon, except for the special
case of an infinite loop (although more infinite loops
use <code>while</code>). While not enforced, loop counters
generally use post-increment.
</p>
<pre>
for (i = 0 ;i &lt; limit ; ++i) { // Bad
for (i = 0; i &lt; limit; i++) { // Good
for (;;) { // ok
while (1) { // Better
</pre>
<p>
Empty loop bodies are better represented with curly braces and a
comment, although use of a semicolon is not currently rejected.
</p>
<pre>
while ((rc = waitpid(pid, &amp;st, 0) == -1) &amp;&amp;
errno == EINTR); // ok
while ((rc = waitpid(pid, &amp;st, 0) == -1) &amp;&amp;
errno == EINTR) { // Better
/* nothing */
}
</pre>
<h2><a name="curly_braces">Curly braces</a></h2>
<p>
@@ -550,13 +519,6 @@
<h2><a name="preprocessor">Preprocessor</a></h2>
<p>Macros defined with an ALL_CAPS name should generally be
assumed to be unsafe with regards to arguments with side-effects
(that is, MAX(a++, b--) might increment a or decrement b too
many or too few times). Exceptions to this rule are explicitly
documented for macros in viralloc.h and virstring.h.
</p>
<p>
For variadic macros, stick with C99 syntax:
</p>
@@ -654,7 +616,7 @@
Use of the malloc/free/realloc/calloc APIs is deprecated in the libvirt
codebase, because they encourage a number of serious coding bugs and do
not enable compile time verification of checks for NULL. Instead of these
routines, use the macros from viralloc.h.
routines, use the macros from memory.h.
</p>
<ul>
@@ -663,8 +625,10 @@
<pre>
virDomainPtr domain;
if (VIR_ALLOC(domain) &lt; 0)
if (VIR_ALLOC(domain) &lt; 0) {
virReportOOMError();
return NULL;
}
</pre>
</li>
@@ -673,8 +637,10 @@
virDomainPtr domains;
size_t ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0)
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
virReportOOMError();
return NULL;
}
</pre>
</li>
@@ -683,8 +649,10 @@
virDomainPtr *domains;
size_t ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0)
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
virReportOOMError();
return NULL;
}
</pre>
</li>
@@ -696,8 +664,10 @@
virDomainPtr domains;
size_t ndomains = 0;
if (VIR_EXPAND_N(domains, ndomains, 1) &lt; 0)
if (VIR_EXPAND_N(domains, ndomains, 1) &lt; 0) {
virReportOOMError();
return NULL;
}
domains[ndomains - 1] = domain;
</pre></li>
@@ -710,8 +680,10 @@
size_t ndomains = 0;
size_t ndomains_max = 0;
if (VIR_RESIZE_N(domains, ndomains_max, ndomains, 1) &lt; 0)
if (VIR_RESIZE_N(domains, ndomains_max, ndomains, 1) &lt; 0) {
virReportOOMError();
return NULL;
}
domains[ndomains++] = domain;
</pre>
</li>
@@ -883,21 +855,6 @@
virStrncpy(dest, src, strlen(src), sizeof(dest)).
</p>
<pre>
VIR_STRDUP(char *dst, const char *src);
VIR_STRNDUP(char *dst, const char *src, size_t n);
</pre>
<p>
You should avoid using strdup or strndup directly as they do not report
out-of-memory error, and do not allow a NULL source. Use
VIR_STRDUP or VIR_STRNDUP macros instead, which return 0 for
NULL source, 1 for successful copy, and -1 for allocation
failure with the error already reported. In very
specific cases, when you don't want to report the out-of-memory error, you
can use VIR_STRDUP_QUIET or VIR_STRNDUP_QUIET, but such usage is very rare
and usually considered a flaw.
</p>
<h2><a name="strbuf">Variable length string buffer</a></h2>
<p>

View File

@@ -1,7 +1,5 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="no"/>
@@ -23,18 +21,8 @@
<!-- resolve b/i/code tags in a first pass, because they interfere with line
wrapping in the second pass -->
<xsl:template match="html:b">*<xsl:apply-templates/>*</xsl:template>
<xsl:template match="html:i">'<xsl:apply-templates/>'</xsl:template>
<xsl:template match="html:code">"<xsl:apply-templates/>"</xsl:template>
<!-- likewise, reformat a tags in first pass -->
<xsl:template match="html:a">
<xsl:text> </xsl:text><xsl:apply-templates/>
<xsl:if test="@href">
<xsl:text> &lt;</xsl:text><xsl:value-of select="@href"/>
<xsl:text>&gt;</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="b">*<xsl:apply-templates/>*</xsl:template>
<xsl:template match="i">'<xsl:apply-templates/>'</xsl:template>
<xsl:template match="code">"<xsl:apply-templates/>"</xsl:template>
</xsl:stylesheet>

View File

@@ -1,7 +1,5 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="wrapstring.xsl"/>
@@ -32,7 +30,7 @@ from docs/hacking.html.in!
<!-- title -->
<xsl:template match="html:h1">
<xsl:template match="h1">
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>
@@ -67,14 +65,14 @@ from docs/hacking.html.in!
<xsl:template match="html:h2">
<xsl:template match="h2">
<xsl:value-of select="$newline"/>
<xsl:call-template name="underline"/>
</xsl:template>
<xsl:template match="html:h3">
<xsl:template match="h3">
<xsl:call-template name="underline">
<xsl:with-param name="char" select="'-'"/>
</xsl:call-template>
@@ -93,13 +91,13 @@ from docs/hacking.html.in!
<xsl:template match="html:ol|html:ul|html:p">
<xsl:template match="ol|ul|p">
<xsl:apply-templates/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
</xsl:template>
<xsl:template match="html:ol/html:li">
<xsl:template match="ol/li">
<xsl:choose>
<xsl:when test=".//node()[position()=last()]/self::pre">(<xsl:value-of select="position()"/>) <xsl:apply-templates/>
</xsl:when>
@@ -111,23 +109,23 @@ from docs/hacking.html.in!
<xsl:template match="html:ul/html:li">- <xsl:apply-templates/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
<xsl:template match="ul/li">- <xsl:apply-templates/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
</xsl:template>
<xsl:template match="html:li/html:ul/html:li">-- <xsl:apply-templates/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
<xsl:template match="li/ul/li">-- <xsl:apply-templates/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
</xsl:template>
<!-- add newline before nested <ul> -->
<xsl:template match="html:li/html:ul"><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/><xsl:apply-templates/>
<xsl:template match="li/ul"><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/><xsl:apply-templates/>
</xsl:template>
<xsl:template match="html:pre">
<xsl:template match="pre">
<xsl:choose>
<xsl:when test="starts-with(.,'&#xA;')"><xsl:value-of select="substring(.,2)"/><xsl:value-of select="$newline"/>
</xsl:when>
@@ -138,4 +136,12 @@ from docs/hacking.html.in!
</xsl:template>
<xsl:template match="a">
<xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
<xsl:text> </xsl:text><xsl:apply-templates/>
<xsl:value-of select="$newline"/>
<xsl:text> </xsl:text><xsl:value-of select="@href"/>
</xsl:template>
</xsl:stylesheet>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Hooks for specific system management</h1>

View File

@@ -169,13 +169,6 @@ $apis{virDomainMigratePerform3} = "0.9.2";
$apis{virDomainMigrateFinish3} = "0.9.2";
$apis{virDomainMigrateConfirm3} = "0.9.2";
$apis{virDomainMigrateBegin3Params} = "1.1.0";
$apis{virDomainMigratePrepare3Params} = "1.1.0";
$apis{virDomainMigratePrepareTunnel3Params} = "1.1.0";
$apis{virDomainMigratePerform3Params} = "1.1.0";
$apis{virDomainMigrateFinish3Params} = "1.1.0";
$apis{virDomainMigrateConfirm3Params} = "1.1.0";
# Now we want to get the mapping between public APIs
@@ -348,9 +341,7 @@ foreach my $drv (keys %{$groups{"virDriver"}->{drivers}}) {
# Finally we generate the HTML file with the tables
print <<EOF;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<title>libvirt API support matrix</title>
</head>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>The virtualization API</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>libvirt internals</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Spawning processes / commands from libvirt drivers</h1>
@@ -258,9 +256,8 @@
<pre>
int sharedfd = open("cmd.log", "w+");
int childfd = open("conf.txt", "r");
virCommandPassFD(cmd, sharedfd, 0);
virCommandPassFD(cmd, childfd,
VIR_COMMAND_PASS_FD_CLOSE_PARENT);
virCommandPreserveFD(cmd, sharedfd);
virCommandTransferFD(cmd, childfd);
if (VIR_CLOSE(sharedfd) &lt; 0)
goto cleanup;
</pre>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Resource Lock Manager</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>libvirt RPC infrastructure</h1>
@@ -154,7 +152,6 @@
<li>continue: for streams this indicates that further data packets
will be following</li>
</ol>
</dd>
</dl>
<h3><a href="protocolpayload">Packet payload</a></h3>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Architecture</h1>
<p>Libvirt is a C toolkit manage the virtualization capabilities

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Java API bindings</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Virtual machine disk locking</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Logging in the library and the daemon</h1>
<p>Libvirt includes logging facilities starting from version 0.6.0,

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Guest migration</h1>
@@ -32,7 +30,7 @@
</p>
<p>
<img class="diagram" src="migration-native.png" alt="Migration native path"/>
<img class="diagram" src="migration-native.png" alt="Migration native path">
</p>
<h3><a name="transporttunnel">libvirt tunnelled transport</a></h3>
@@ -50,7 +48,7 @@
</p>
<p>
<img class="diagram" src="migration-tunnel.png" alt="Migration tunnel path"/>
<img class="diagram" src="migration-tunnel.png" alt="Migration tunnel path">
</p>
<h2><a name="flow">Communication control paths/flows</a></h2>
@@ -77,7 +75,7 @@
</p>
<p>
<img class="diagram" src="migration-managed-direct.png" alt="Migration direct, managed"/>
<img class="diagram" src="migration-managed-direct.png" alt="Migration direct, managed">
</p>
@@ -99,7 +97,7 @@
</p>
<p>
<img class="diagram" src="migration-managed-p2p.png" alt="Migration peer-to-peer"/>
<img class="diagram" src="migration-managed-p2p.png" alt="Migration peer-to-peer">
</p>
@@ -115,7 +113,7 @@
</p>
<p>
<img class="diagram" src="migration-unmanaged-direct.png" alt="Migration direct, unmanaged"/>
<img class="diagram" src="migration-unmanaged-direct.png" alt="Migration direct, unmanaged">
</p>

View File

@@ -6,8 +6,6 @@
Daniel Veillard
-->
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:str="http://exslt.org/strings"

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
@@ -9,691 +8,6 @@
<p>Here is the list of official releases, it is also possible to just use the <a href="downloads.html">GIT version or snapshot</a>, contact the mailing list
and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a> to gauge progress.</p>
<h3>1.1.0: July 1 2013</h3>
<ul>
<li>Features:<br/>
Extensible migration APIs (Jiri Denemark),<br/>
Add a policy kit access control driver (Daniel P. Berrange),<br/>
various improvements in the Xen driver (Jim Fehlig and Marek Marczykowski-Górecki),<br/>
improve networking support on BSD (Roman Bogorodskiy),<br/>
agent based vCPU hotplug support (Peter Krempa)<br/>
</li>
<li>Security:<br/>
CVE-2013-2218: Fix crash listing network interfaces with filters (Daniel P. Berrange)<br/>
</li>
<li>Documentation:<br/>
Document security reporting &amp; handling process (Daniel P. Berrange),<br/>
Fix reference to #elementsUSB (Philipp Hahn),<br/>
Fix sample TPM XML (Stefan Berger),<br/>
correct and update network vlan example (Laine Stump),<br/>
add spaces to formatstorage.html (Ján Tomko)<br/>
</li>
<li>Portability:<br/>
spec: require xen-devel for libxl driver (Eric Blake),<br/>
Conditionalize use of IF_MAXUNIT in virnetdevtap.c (Daniel P. Berrange),<br/>
Replace use of 'in_addr_t' with 'struct in_addr' (Daniel P. Berrange),<br/>
build: Fix VPATH build for access/* (Viktor Mihajlovski),<br/>
util: fix build error on non-Linux systems (Laine Stump),<br/>
conf: Swap order of AddImplicitControllers and DomainDefPostParse (Viktor Mihajlovski),<br/>
S390: Testcase for console default target type (virtio) (Viktor Mihajlovski),<br/>
Fix units in virNetDevBridgeSetSTPDelay on BSD (Roman Bogorodskiy),<br/>
build: Fix check-aclrules in VPATH build (Jiri Denemark),<br/>
build: Fix build with -Werror (Jim Fehlig),<br/>
use net/if.h instead of linux/if.h (Roman Bogorodskiy),<br/>
build: fix build without posix_fallocate (Eric Blake),<br/>
spec: Explicitly require libgcrypt-devel (Jiri Denemark)<br/>
</li>
<li>Bug Fixes:<br/>
pci: initialize virtual_functions array pointer to avoid segfault (Laine Stump),<br/>
node device driver: update driver name during dumpxml (Laine Stump),<br/>
Resolve valgrind errors for nodedev cap parsing (John Ferlan),<br/>
Resolve valgrind error in remoteConfigGetStringList() (John Ferlan),<br/>
Resolve valgrind error in virStorageBackendCreateQemuImgCmd() (John Ferlan),<br/>
Resolve valgrind error in virNetDevVlanParse() (John Ferlan),<br/>
Fix vPort management: FC vHBA creation (Dennis Chen),<br/>
bridge: don't crash on bandwidth unplug with no bandwidth (Ján Tomko),<br/>
Plug leak in virCgroupMoveTask (Ján Tomko),<br/>
Fix invalid read in virCgroupGetValueStr (Ján Tomko),<br/>
qemu: fix infinite loop in OOM error path (Laine Stump),<br/>
pci: fix dangling pointer in qemuDomainReAttachHostdevDevices (Laine Stump),<br/>
pci: eliminate leak in OOM condition (Laine Stump),<br/>
util: fix bug found by Coverity (Laine Stump),<br/>
Fix possible NULL dereference during migration (Jiri Denemark),<br/>
virsh: edit: don't leak XML string on reedit or redefine (Ján Tomko),<br/>
qemu: don't reset PCI devices being assigned with VFIO (Laine Stump),<br/>
pci: eliminate memory leak in virPCIDeviceReattach (Laine Stump),<br/>
qemu: check if block I/O limits fit into long long (Ján Tomko),<br/>
network: increase max number of routes (Laine Stump),<br/>
lxc: Resolve issue with GetScheduler APIs for non running domain (John Ferlan),<br/>
qemu: Resolve issue with GetScheduler APIs for non running domain (John Ferlan),<br/>
qemu: Avoid leaking uri in qemuMigrationPrepareDirect (Jiri Denemark),<br/>
udev: fix crash in libudev logging (Ján Tomko),<br/>
remote: Fix client crash when URI path is empty when using ssh (Peter Krempa),<br/>
remote: Forbid default "/session" connections when using ssh transport (Peter Krempa),<br/>
nodedev: fix vport detection for FC HBA (Ján Tomko),<br/>
qemu: Fix memory leak in Prepare phase (Jiri Denemark),<br/>
virSocketAddrIsWildcard: Use IN6_IS_ADDR_UNSPECIFIED correctly (Michal Privoznik),<br/>
Fix ordering of file open in virProcessGetNamespaces (Richard Weinberger),<br/>
qemuDomainGetVcpusFlags: Initialize ncpuinfo (Michal Privoznik),<br/>
virtlockd: fix socket path (Ján Tomko),<br/>
nwfilter: grab driver lock earlier during init (bz96649) (Stefan Berger),<br/>
Fix a invalid usage of virDomainNetDef in OpenVZ driver (Alvaro Polo),<br/>
use virBitmapFree instead of VIR_FREE for cpumask (Ján Tomko),<br/>
usb: don't spoil decimal addresses (Martin Kletzander)<br/>
</li>
<li>Improvements:<br/>
Allow RO connections to interface udev backend (Doug Goldstein),<br/>
virsh: Add parenthesis into virsh nodedev-detach help (xuzhang),<br/>
nodedev: add iommuGroup to node device object (Laine Stump),<br/>
pci: new iommu_group functions (Laine Stump),<br/>
network: allow &lt;vlan&gt; in type='hostdev' networks (Laine Stump),<br/>
test: include qemuhotplugtest data files in source rpm (Laine Stump),<br/>
pci: virPCIDeviceListAddCopy API (Laine Stump),<br/>
pci: update stubDriver name in virPCIDeviceBindToStub (Laine Stump),<br/>
pci: eliminate repetitive path constructions in virPCIDeviceBindToStub (Laine Stump),<br/>
pci: rename virPCIParseDeviceAddress and make it public (Laine Stump),<br/>
pci: rename virPCIDeviceGetVFIOGroupDev to virPCIDeviceGetIOMMUGroupDev (Laine Stump),<br/>
pci: eliminate unused driver arg from virPCIDeviceDetach (Laine Stump),<br/>
tests: Introduce qemuhotplugtest (Michal Privoznik),<br/>
qemu: Implement support for VIR_MIGRATE_PARAM_GRAPHICS_URI (Jiri Denemark),<br/>
Implement extensible migration APIs in qemu driver (Jiri Denemark),<br/>
qemu: Move internals of Confirm phase to qemu_migration.c (Jiri Denemark),<br/>
qemu: Move common parts of Prepare phase to qemu_migration.c (Jiri Denemark),<br/>
qemu: Move internals of Begin phase to qemu_migration.c (Jiri Denemark),<br/>
Use 1.1.0 everywhere in the documentation (Ján Tomko),<br/>
Add polkit policy for API checks to rpm spec (Daniel Veillard),<br/>
Configure native vlan modes on Open vSwitch ports (james robson),<br/>
Introduce VIR_MIGRATE_PARAM_GRAPHICS_URI parameter (Jiri Denemark),<br/>
virsh: Use extensible migration APIs (Jiri Denemark),<br/>
python: Add bindings for extensible migration APIs (Jiri Denemark),<br/>
Adapt virDomainMigratePeer2Peer for extensible migration APIs (Jiri Denemark),<br/>
Adapt virDomainMigrateVersion3 for extensible migration APIs (Jiri Denemark),<br/>
Implement extensible migration APIs in remote driver (Jiri Denemark),<br/>
New internal migration APIs with extensible parameters (Jiri Denemark),<br/>
Introduce migration parameters (Jiri Denemark),<br/>
Introduce virTypedParamsCopy internal API (Jiri Denemark),<br/>
Log input type parameters in API entry points (Jiri Denemark),<br/>
Introduce VIR_TYPED_PARAMS_DEBUG macro for dumping typed params (Jiri Denemark),<br/>
Introduce virTypedParamsReplaceString internal API (Jiri Denemark),<br/>
Introduce virTypedParamsCheck internal API (Jiri Denemark),<br/>
util: Emit proper error code in virTypedParamsValidate (Jiri Denemark),<br/>
Rename virTypedParameterArrayValidate as virTypedParamsValidate (Jiri Denemark),<br/>
pci: make virPCIDeviceDetach consistent in behavior (Laine Stump),<br/>
pci: new utility functions (Laine Stump),<br/>
pci: change stubDriver from const char* to char* (Laine Stump),<br/>
syntax: virPCIDeviceFree is also a NOP for NULL args (Laine Stump),<br/>
libxl: support qdisk backend (Jim Fehlig),<br/>
libxl: Fix disk format error message (Jim Fehlig),<br/>
Add validation that all APIs contain ACL checks (Daniel P. Berrange),<br/>
Set process ID in system identity (Daniel P. Berrange),<br/>
Add ACL checks into the secrets driver (Daniel P. Berrange),<br/>
Add ACL checks into the nwfilter driver (Daniel P. Berrange),<br/>
Add ACL checks into the node device driver (Daniel P. Berrange),<br/>
Add ACL checks into the interface driver (Daniel P. Berrange),<br/>
Add ACL checks into the network driver (Daniel P. Berrange),<br/>
Add ACL checks into the storage driver (Daniel P. Berrange),<br/>
Add ACL checks into the libxl driver (Daniel P. Berrange),<br/>
Add ACL checks into the Xen driver (Daniel P. Berrange),<br/>
Add ACL checks into the UML driver (Daniel P. Berrange),<br/>
Add ACL checks into the LXC driver (Daniel P. Berrange),<br/>
Add ACL checks into the QEMU driver (Daniel P. Berrange),<br/>
Auto-generate helpers for checking access control rules (Daniel P. Berrange),<br/>
Add ACL annotations to all RPC messages (Daniel P. Berrange),<br/>
Setup default access control manager in libvirtd (Daniel P. Berrange),<br/>
Set conn-&gt;driver before running driver connectOpen method (Daniel P. Berrange),<br/>
Define basic internal API for access control (Daniel P. Berrange),<br/>
netdev: accept NULL in virNetDevSetupControl (Ján Tomko),<br/>
xen: Implement virConnectGetSysinfo (Jim Fehlig),<br/>
libxl: Implement virConnectGetSysinfo (Jim Fehlig),<br/>
libxl: Allow libxl to set NIC devid (Jim Fehlig),<br/>
storage: add support for creating qcow2 images with extensions (Ján Tomko),<br/>
conf: add features to volume target XML (Ján Tomko),<br/>
util: add support for qcow2v3 image detection (Ján Tomko),<br/>
qemu: add hv_vapic and hv_spinlocks support (Ján Tomko),<br/>
conf: add vapic and spinlocks to hyperv features (Ján Tomko),<br/>
BSD: implement bridge add/remove port and set STP (Roman Bogorodskiy),<br/>
BSD: implement virNetDevBridgeCreate() and virNetDevBridgeDelete() (Roman Bogorodskiy),<br/>
conf: Requires either uuid or usage of secret (Osier Yang),<br/>
qemu: Make probing for commands declarative (Jiri Denemark),<br/>
qemu: Make probing for events declarative (Jiri Denemark),<br/>
libxl: support paused domain restore in virDomainRestoreFlags (Marek Marczykowski-Górecki),<br/>
qemuDomainChangeGraphics: Check listen address change by listen type (Michal Privoznik),<br/>
libxl: initialize device structures (Marek Marczykowski-Górecki),<br/>
libxl: populate xenstore memory entries at startup, handle dom0_mem (Marek Marczykowski-Górecki),<br/>
conf: split out snapshot disk XML formatting (Ján Tomko),<br/>
storage: rework qemu-img command line generation (Ján Tomko),<br/>
util: switch virBufferTrim to void (Ján Tomko),<br/>
migration: Don't propagate VIR_MIGRATE_ABORT_ON_ERROR (Peter Krempa),<br/>
migration: Make erroring out on I/O error controllable by flag (Peter Krempa),<br/>
qemu_migration: Move waiting for SPICE migration (Michal Privoznik),<br/>
spec: Enable KVM support on ARM (Cole Robinson),<br/>
virsh: Support SCSI_GENERIC cap flag for nodedev-list (Osier Yang),<br/>
nodedev: Support SCSI_GENERIC cap flag for listAllNodeDevices (Osier Yang),<br/>
nodedev_hal: Enumerate scsi generic device (Osier Yang),<br/>
nodedev_udev: Enumerate scsi generic device (Osier Yang),<br/>
qemu: set QEMU_CAPS_DEVICE_VIDEO_PRIMARY cap flag in QMP detection (Guannan Ren),<br/>
nodedev_udev: changes missed by commit 1aa0ba3cef (Osier Yang),<br/>
nodedev_udev: Refactor udevGetDeviceType (Osier Yang),<br/>
nodedev: Expose sysfs path of device (Osier Yang),<br/>
Move virGetUserEnt() to where its needed (Doug Goldstein),<br/>
BSD: implement virNetDevTapCreate() and virNetDevTapDelete() (Roman Bogorodskiy),<br/>
Make virNetDevSetupControl() public. (Roman Bogorodskiy),<br/>
LXC: s/chroot/chdir in lxcContainerPivotRoot() (Richard Weinberger),<br/>
Implement dispose method for libxlDomainObjPrivate (Frediano Ziglio),<br/>
libxl: allow only 'ethernet' and 'bridge' interfaces, allow script there (Marek Marczykowski-Górecki),<br/>
qemu: allow restore with non-migratable XML input (Ján Tomko),<br/>
libxl: set bootloader for PV domains if not specified (Jim Fehlig),<br/>
libxl: Report connect type as Xen (Jim Fehlig),<br/>
schema: simplify RNG pattern, remove superfluous &lt;optional&gt; (Claudio Bley),<br/>
libvirt_private.syms: add virProcessGetStartTime (Ján Tomko),<br/>
qemu: Forbid migration of machines with I/O errors (Peter Krempa),<br/>
qemu: Cancel migration if guest encoutners I/O error while migrating (Peter Krempa),<br/>
qemu_migrate: Dispose listen address if set from config (Michal Privoznik),<br/>
selinux: assume 's0' if the range is empty (Ján Tomko),<br/>
storage: fix description of versionOffset (Martin Kletzander),<br/>
spec: Drop Requires: vbox (Cole Robinson),<br/>
Prefer VIR_STRDUP over virAsprintf(&amp;dst, "%s", str) (Michal Privoznik),<br/>
qemu: Implement new QMP command for cpu hotplug (Peter Krempa),<br/>
qemu: Implement support for VIR_DOMAIN_VCPU_AGENT in qemuDomainSetVcpusFlags (Peter Krempa),<br/>
qemu: Implement request of vCPU state using the guest agent (Peter Krempa),<br/>
API: Introduce VIR_DOMAIN_VCPU_AGENT, for agent based CPU hot(un)plug (Peter Krempa),<br/>
qemu_agent: Introduce helpers for agent based CPU hot(un)plug (Peter Krempa),<br/>
qemu: Use bool instead of int in qemuMonitorSetCPU APIs (Peter Krempa),<br/>
virsh-domain-monitor: Remove ATTRIBUTE_UNUSED from a argument (Peter Krempa),<br/>
Add support for VirtualBox 4.2 APIs (ryan woodsmall),<br/>
qemuDomainMigrateGraphicsRelocate: Use then new virSocketAddrIsWildcard (Michal Privoznik),<br/>
virsocket: Introduce virSocketAddrIsWildcard (Michal Privoznik),<br/>
iscsi: pass hostnames to iscsiadm instead of resolving them (Ján Tomko),<br/>
qemu: Report the offset from host UTC for RTC_CHANGE event (Osier Yang),<br/>
qemu: simplify CPU command line parsing (Ján Tomko),<br/>
qemu: change two-state int parameters to bool (Ján Tomko),<br/>
nwfilter: change two-state int parameters to bool (Ján Tomko),<br/>
Remove redundant two-state integers (Ján Tomko),<br/>
Replace two-state local integers with bool (Ján Tomko),<br/>
storage: Avoid unnecessary ternary operators and refactor the code (Peter Krempa),<br/>
openvz: Fix code coverage issue in OpenVZ driver (Alvaro Polo),<br/>
qemu: Reformat listen address prior to checking (Michal Privoznik),<br/>
Ensure non-root can read /proc/meminfo file in LXC containers (Daniel P. Berrange),<br/>
storage: Provide better error message if metadata pre-alloc is unsupported (Peter Krempa),<br/>
storage: Clean up function header and reflow error message (Peter Krempa),<br/>
storagevolxml2argvtest: Report better error messages on test failure (Peter Krempa),<br/>
maint: don't use config.h in .h files (Eric Blake),<br/>
qemu: Abstract code for the cpu controller setting into a helper (Osier Yang),<br/>
storage: Forbid to shrink the vol's capacity if no --shrink is specified (Osier Yang),<br/>
storage: Support preallocate the new capacity for vol-resize (Osier Yang),<br/>
snapshot: remove mutually exclusive memory and disk-only duplicate check (Guannan Ren),<br/>
virsh: Allow attach-disk to specify disk wwn (Osier Yang),<br/>
tests: fix typo in securityselinuxtest (Ján Tomko),<br/>
virsh: Obey pool-or-uuid spec when creating volumes (Jiri Denemark),<br/>
libvirt-qemu: Dispatch errors from virDomainQemuAgentCommand() (Peter Krempa),<br/>
qemu: Properly report guest agent errors on command passthrough (Peter Krempa),<br/>
virsh-domain: Report errors and don't deref NULL in qemu-agent-command (Peter Krempa),<br/>
RPC: Support up to 16384 cpus on the host and 4096 in the guest (Peter Krempa),<br/>
virsh iface-bridge: Ignore delay if stp is turned off (Jiri Denemark),<br/>
Fix warning about using an uninitialized next_unit value (Jiri Denemark),<br/>
virsh-domain: Add --live, --config, --current logic to cmdAttachInterface (Peter Krempa),<br/>
virsh-domain: Add --live, --config, --current logic to cmdAttachDisk (Peter Krempa),<br/>
virsh-domain: Add --live, --config, --current logic to cmdAttachDevice (Peter Krempa)<br/>
</li>
<li>Cleanups:<br/>
Get rid of useless VIR_STORAGE_FILE_FEATURE_NONE (Ján Tomko),<br/>
configure: Remove unused brctl check (Cole Robinson),<br/>
storage_backend: Drop unused code (Cole Robinson),<br/>
Remove legacy code for single-instance devpts filesystem (Daniel P. Berrange)<br/>
</li>
</ul>
<h3>1.0.6: June 3 2013</h3>
<ul>
<li>Features:<br/>
Move VirtualBox driver into libvirtd (Daniel P. Berrange),<br/>
Support for static routes on a virtual bridge (Gene Czarcinski),<br/>
Various improvement for hostdev SCSI support (Osier Yang and Han Cheng),<br/>
Switch to VIR_STRDUP and VIR_STRNDUP (Michal Privoznik),<br/>
Various cleanups and improvement in Xen and LXC drivers (Daniel P. Berrange)<br/>
</li>
<li>Documentation:<br/>
Document that runtime changes may be lost after S4 suspend (Jiri Denemark),<br/>
domain: /dev/urandom isn't a valid rng patch (Cole Robinson),<br/>
formatdomain: fix links in the table of contents (Ján Tomko),<br/>
add another user (Eric Blake),<br/>
datatypes: fix virGetStoragePool's comment (Ján Tomko),<br/>
Expand documentation for LXC driver (Daniel P. Berrange),<br/>
Fix/update syntax in Sysinfo/SMBIOS description (John Ferlan),<br/>
Update formatdomain for lifecycle events (John Ferlan),<br/>
Fix the wrong links in secret documentation (Osier Yang),<br/>
Add the missed usage type 'iscsi' (Osier Yang),<br/>
Add docs about cgroups layout and usage (Daniel P. Berrange),<br/>
Point users to Virt-Viewer MSI installers for Windows builds (Daniel P. Berrange),<br/>
Fix namespace bugs in API docs, todo page &amp; hv support page (Daniel P. Berrange),<br/>
Fix a few more docs XSL bugs related to the TOC (Daniel P. Berrange),<br/>
Fix docs generator regression in previous commit (Daniel P. Berrange),<br/>
Fix multiple formatting problems in HTML docs (Daniel P. Berrange),<br/>
fix 'since' for socket path generation (Ján Tomko)<br/>
</li>
<li>Portability:<br/>
vbox: define DYNLIB_NAME for kFreeBSD (Guido Günther),<br/>
build: skip qemu in tests when !WITH_QEMU (Eric Blake),<br/>
build: use correct rpc.h for virtlockd (Eric Blake),<br/>
build: work around cygwin header bug (Eric Blake),<br/>
build: cast [ug]id_t when printing (Eric Blake),<br/>
build: port qemu to cygwin (Eric Blake),<br/>
build: use correct rpc.h for lockd (Eric Blake),<br/>
build: work around broken sasl header (Eric Blake),<br/>
build: fix build without libvirtd (Eric Blake),<br/>
build: fix build with newer gnutls (Eric Blake),<br/>
build: fix build with older gcc (Eric Blake),<br/>
qemu: Fix build without gnutls (Jiri Denemark),<br/>
spec: Build vbox packages only for x86 architectures (Viktor Mihajlovski),<br/>
Add missing c-ctype.h to virfile.c (Daniel P. Berrange),<br/>
test: fix VPATH fchosttest failure (Viktor Mihajlovski),<br/>
libxl: fix build with Xen4.3 (Jim Fehlig),<br/>
build: Fix check-driverimpls in VPATH (Jiri Denemark),<br/>
util: Fix build without devmapper (Jiri Denemark),<br/>
FreeBSD: disable buggy -fstack-protector-all (Roman Bogorodskiy),<br/>
build: avoid gcrypt deprecation warnings (Roman Bogorodskiy),<br/>
build: avoid shadowed variable in fdstreamtest (Eric Blake),<br/>
fix virNetDevSetMAC and virNetDevExists on BSD (Roman Bogorodskiy),<br/>
Disable some URI tests on older libxml2 (Daniel P. Berrange),<br/>
Fix build of python bindings on Python 2.4 (Daniel P. Berrange),<br/>
build: fix build with old polkit0 (Jim Fehlig),<br/>
Fixup rpcgen code on kFreeBSD too (Guido Günther),<br/>
build: avoid non-portable cast of pthread_t (Eric Blake),<br/>
build: Fix build when WITH_HAL is defined (Jim Fehlig),<br/>
build: fix mingw build of vbox (Eric Blake),<br/>
build: fix mingw build of virprocess.c (Eric Blake)<br/>
</li>
<li>Bug Fixes:<br/>
conf: Generate address for scsi host device automatically (Osier Yang),<br/>
qemu: prevent termination of guests w/hostdev on driver reconnect (Laine Stump),<br/>
qemu: escape literal IPv6 address in NBD migration (Ján Tomko),<br/>
Check for existence of interface prior to setting terminate flag (John Ferlan),<br/>
Resolve memory leak found by valgrind (John Ferlan),<br/>
qemu: snapshot: Don't kill access to disk if snapshot creation fails (Peter Krempa),<br/>
virsh: migrate: Don't disallow --p2p and --migrateuri (Cole Robinson),<br/>
qemu: Don't report error on successful media eject (Cole Robinson),<br/>
qemu: save domain state to XML after reboot (Sergey Fionov),<br/>
esx: Fix dynamic VI object type detection (Matthias Bolte),<br/>
storage_conf: Don't leak "uuid" in virStoragePoolDefParseAuthCephx (Osier Yang),<br/>
storage_conf: Fix the wrong error message (Osier Yang),<br/>
Fix blkdeviotune for shutoff domain (Martin Kletzander),<br/>
virsh: Fix regression of vol-resize (Osier Yang),<br/>
xen: Resolve Coverity FORWARD_NULL issue (John Ferlan),<br/>
qemu: fix NBD migration to hosts with IPv6 enabled (Ján Tomko),<br/>
conf: fix use after free in virChrdevOpen (Ján Tomko),<br/>
virNetMessageSaveError: Fix copy and paste error (Michal Privoznik),<br/>
virNWFilterHashTablePut: Free the correct variable (Michal Privoznik),<br/>
umlConnectTapDevice: initialize tapfd variable (Michal Privoznik),<br/>
remote: fix dom-&gt;id after virDomainCreateWithFlags (Marek Marczykowski),<br/>
virsh: Fix virDomainFree for NULL domain in blkdeviotune (Martin Kletzander),<br/>
virNetDevTapCreate: Fail on systems not supporting IFF_MULTI_QUEUE (Michal Privoznik),<br/>
cgroup: be robust against cgroup movement races (Eric Blake),<br/>
shunloadtest: Resolve Coverity CHECKED_RETURN error (John Ferlan),<br/>
xencapstest: Resolve Coverity CHECKED_RETURN error (John Ferlan),<br/>
qemu: fix a typo in qemuAddSharedDevice (Guannan Ren),<br/>
qemuDomainChangeEjectableMedia: Unlock domain while waiting for event (Michal Privoznik),<br/>
LXC: fix memory leak in virLXCControllerSetupDevPTS (Gao feng),<br/>
LXC: remove unnecessary check on root filesystem (Gao feng),<br/>
esx: Fix error reporting in esxVI_LookupManagedObjectHelper (Matthias Bolte),<br/>
Fix failure to detect missing cgroup partitions (Daniel P. Berrange),<br/>
libxl: fix leaking libxl events (Jim Fehlig),<br/>
qemu: Fix cgroup handling when setting VCPU BW (Martin Kletzander),<br/>
Don't mount selinux fs in LXC if selinux is disabled (Daniel P. Berrange),<br/>
Fix LXC startup when /var/run is an absolute symlink (Daniel P. Berrange),<br/>
conf: Fix the bug of disk-&gt;copy_on_read formating (Osier Yang),<br/>
daemon: fix leak after listing all volumes (Ján Tomko),<br/>
qemu: Fix crash in migration of graphics-less guests. (Viktor Mihajlovski),<br/>
Adjust improperly formatted &lt;sysinfo&gt; uuid (John Ferlan),<br/>
storage: Ensure 'qemu-img resize' size arg is a 512 multiple (Christophe Fergeau),<br/>
spec: fix outdated comment (Eric Blake),<br/>
Forbid use of ':' in RBD pool names (Daniel P. Berrange),<br/>
qemu: fix bad free (Eric Blake),<br/>
Fix starting domains when kernel has no cgroups support (Jim Fehlig),<br/>
Fix error handling of readdir() in virFileLoopDeviceOpen (Daniel P. Berrange),<br/>
util: Fix regression introduced by commit 4360a098441 (Osier Yang),<br/>
util: Fix regression of wwn reading (Osier Yang),<br/>
build: fix use of mmap (Eric Blake),<br/>
conf: don't crash on a tpm device with no backends (Ján Tomko),<br/>
don't mention disk controllers in generic controller errors (Ján Tomko),<br/>
iscsi: don't leak portal string when starting a pool (Ján Tomko),<br/>
virsh: Resolve Coverity 'MISSING_BREAK' (John Ferlan),<br/>
lxc: Coverity false positive USE_AFTER_FREE (John Ferlan),<br/>
Don't allow renaming of domains by the backdoor (Daniel P. Berrange),<br/>
qemu: fix stupid typos in VFIO cgroup setup/teardown (Laine Stump),<br/>
Ignore 'uri' parameter in lockd driver (Daniel P. Berrange),<br/>
network: fix network driver startup for qemu:///session (Laine Stump),<br/>
Fix warning about unsupported cookie flags in QEMU driver (Daniel P. Berrange),<br/>
Fix release of resources with lockd plugin (Daniel P. Berrange),<br/>
Fix F_DUPFD_CLOEXEC operation args (Daniel P. Berrange),<br/>
build: fix make rpm failure (Laine Stump),<br/>
Fix potential use of undefined variable in remote dispatch code (Daniel P. Berrange),<br/>
virInitctlRequest: unbreak make syntax check (Guido Günther),<br/>
virInitctlRequest: unbreak make syntax check (Guido Günther)<br/>
</li>
<li>Improvements:<br/>
nodedev_hal: Modernize the function's style (Osier Yang),<br/>
Introduce virFilePrintf() as a portable fprintf() (Daniel P. Berrange),<br/>
qemu: migration: error if tunnelled + storage specified (Cole Robinson),<br/>
qemu: migration: Improve p2p error if we can't open conn (Cole Robinson),<br/>
storage_conf: Use uid_t/gid_t instead of int to cast the value (Osier Yang),<br/>
storage_conf: Improve error messages (Osier Yang),<br/>
storage_conf: Use NULLSTR instead (Osier Yang),<br/>
storage_conf: Improve the memory deallocation of virStorageVolDefParseXML (Osier Yang),<br/>
storage_conf: Improve the memory deallocation of pool def parsing (Osier Yang),<br/>
syntax: fix broken error message in previous patch (Eric Blake),<br/>
util: fix the VIR_STRDUP when src is NULL (yangdongsheng),<br/>
Adapt to new VIR_STRNDUP behavior (Michal Privoznik),<br/>
virStrndup: Accept negative values as string length (Michal Privoznik),<br/>
storage_conf: Fix the error type (Osier Yang),<br/>
storage_conf: Put "%s" at the same line with error type (Osier Yang),<br/>
storage_conf: Use xmlStrEqual instead of STREQ (Osier Yang),<br/>
storage_conf: Remove the useless casting (Osier Yang),<br/>
syntax-check: ignore all quoted strings in bracket-spacing (Ján Tomko),<br/>
nwfilter: Remove error report in virNWFilterDHCPSnoopEnd (Stefan Berger),<br/>
cgroups: Do not enforce nonexistent controllers (Viktor Mihajlovski),<br/>
Introduce syntax-check rule to prefer VIR_STRDUP over strdup (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in tools/virsh.c (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/util/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/util/vircgroup.c (Michal Privoznik),<br/>
virCgroupAddTaskStrController: s/-1/-ENOMEM/ (Michal Privoznik),<br/>
conf: add missing OOM errors (Ján Tomko),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/xenxs/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/xenapi/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/xen/* (Michal Privoznik),<br/>
Fix the build failure (Osier Yang),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/security/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/rpc/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/remote/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/qemu/* (Michal Privoznik),<br/>
virsh: omit OPTION section in 'virsh help' if no option exists (Zhang Xiaohe),<br/>
Change virConnectDomainEventGraphicsCallback signature (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/openvz/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/conf/* (Michal Privoznik),<br/>
qemu: Enable multiqueue network (Michal Privoznik),<br/>
qemu: Adapt qemuBuildInterfaceCommandLine to to multiqueue net (Michal Privoznik),<br/>
qemu: Move interface cmd line construction into a separate function (Michal Privoznik),<br/>
Introduce /domain/devices/interface/driver/@queues attribute (Michal Privoznik),<br/>
qemu: add ', share=&lt;policy&gt;' to qemu commandline (Guannan Ren),<br/>
conf: add 'sharePolicy' attribute to graphics element for vnc (Guannan Ren),<br/>
qemu: new vnc display sharing policy caps flag (Guannan Ren),<br/>
vbox: fix VIR_STRDUP value check (Ján Tomko),<br/>
syntax-check: Add the rule to forbid whitespace before ";" (Osier Yang),<br/>
Fix the syntax-check failure (Osier Yang),<br/>
interface: list all interfaces with flags == 0 (Guannan Ren),<br/>
Convert Xen domain core dump driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain stats/peek driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain scheduler driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain autostart driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain device hotplug driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain VCPU driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain create/define/getxml/migration APIs to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain managed save driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain property driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain lifecycle driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
Convert Xen domain lookup driver methods to use virDomainDefPtr (Daniel P. Berrange),<br/>
qemu: Don't remove the "return 0" (Osier Yang),<br/>
esx: Replace almost all esxVI_String_DeepCopyValue vith VIR_STRDUP (Matthias Bolte),<br/>
vmware: Restore OOM error reporting in vmwareCopyVMXFileName (Matthias Bolte),<br/>
maint: enforce correct copyright usage (Eric Blake),<br/>
maint: refer to correct license file (Eric Blake),<br/>
maint: follow recommended practice for using LGPL (Eric Blake),<br/>
maint: use LGPL correctly (Eric Blake),<br/>
openvzDomainSetNetwork: use virCommand (Michal Privoznik),<br/>
qemu: Add callback struct for qemuBuildCommandLine (Osier Yang),<br/>
storage_conf: Improve the coding style in storage_conf.h (Osier Yang),<br/>
storage_conf: Fix indentions in storage_conf.c (Osier Yang),<br/>
storage_conf: Fix the coding stype in storage_conf.c (Osier Yang),<br/>
qemu: Abstract code for cpuset controller setting into a helper (Osier Yang),<br/>
qemu: Abstract code for devices controller setting into a helper (Osier Yang),<br/>
qemu: Abstract code for memory controller setting into a helper (Osier Yang),<br/>
qemu: Abstract the code for blkio controller setting into a helper (Osier Yang),<br/>
Add libvirt-daemon-vbox &amp; libvirt-daemon-driver-vbox RPMs (Daniel P. Berrange),<br/>
Include GNULIB mkdtemp module (Daniel P. Berrange),<br/>
Set PKG_CONFIG_LIBDIR in autobuild.sh (Daniel P. Berrange),<br/>
qemu: report useful error failling to destroy domain gracefully (Guannan Ren),<br/>
qemu: Check conflicts for shared scsi host device (Osier Yang),<br/>
Re-add selinux/selinux.h to lxc_container.c (Daniel P. Berrange),<br/>
schema: make source optional in volume XML (Ján Tomko),<br/>
schema: require target path in storage pool xml (Ján Tomko),<br/>
qemu: Change values of disk discard (Osier Yang),<br/>
qemu: Implement support for locking domain's memory pages (Jiri Denemark),<br/>
Add support for locking domain's memory pages (Jiri Denemark),<br/>
Fix build with VirtualBox (Jiri Denemark),<br/>
qemu: Set unpriv_sgio for scsi host device (Osier Yang),<br/>
qemu: Refactor qemuSetUnprivSGIO to support scsi host device (Osier Yang),<br/>
qemu: Move qemuSetUnprivSGIO into qemu_conf.c (Osier Yang),<br/>
conf: Introduce sgio for hostdev (Osier Yang),<br/>
Rename virDomainDiskSGIO to virDomainDeviceSGIO (Osier Yang),<br/>
qemu: Manage shared device entry for scsi host device (Osier Yang),<br/>
qemu: Refactor the helpers to track shared scsi host device (Osier Yang),<br/>
utils: Add a helper to get the device name that sg device mapped to (Osier Yang),<br/>
qemu: Rename qemu_driver-&gt;sharedDisks to qemu_driver->sharedDevices (Osier Yang),<br/>
conf: Introduce &lt;shareable&gt; for hostdev (Osier Yang),<br/>
string: test VIR_STRDUP (Eric Blake),<br/>
virsh: lookup interface by name or mac other than one by one (Guannan Ren),<br/>
nwfilter: check for inverted ctdir (Stefan Berger),<br/>
Validate the bios_date format for &lt;sysinfo&gt; (John Ferlan),<br/>
Remove obsolete skipRoot flag in LXC driver (Daniel P. Berrange),<br/>
Stop passing around old root directory prefix (Daniel P. Berrange),<br/>
Remove obsolete pivotRoot flag in LXC driver (Daniel P. Berrange),<br/>
qemu: Support discard for disk (Osier Yang),<br/>
Handle the domain event 'on_reboot' and 'on_poweroff' settings (John Ferlan),<br/>
Adjust comments to describe on_poweroff and on_reboot action (John Ferlan),<br/>
Adjust usage of qemu -no-reboot and -no-shutdown options (John Ferlan),<br/>
qemu: Add VNC WebSocket support (Martin Kletzander),<br/>
Add VNC WebSocket support (Martin Kletzander),<br/>
qemu: New XML to disable memory merge at guest startup (Osier Yang),<br/>
qemu: detect -machine mem-merge capability (Eric Blake),<br/>
Rename rbd-invalid.xml to rbd-no-colon.xml (Daniel P. Berrange),<br/>
tests: Add fchostdata in EXTRA_DIST (Osier Yang),<br/>
virsh: Pretty the output of qemu-agent-command (Osier Yang),<br/>
virsh: Use vshPrint instead of printf (Osier Yang),<br/>
Fix invalid argument reference in virnetdev.h (Martin Kletzander),<br/>
Don't duplicate compiler warning flags when linking (Daniel P. Berrange),<br/>
Only pass -export-dynamic to linker, not compiler (Daniel P. Berrange),<br/>
Correctly detect warning flags with clang (Daniel P. Berrange),<br/>
Ignore cast alignment warnings in inotify code for Xen. (Daniel P. Berrange),<br/>
Workaround issue with clang and inline functions with static vars (Daniel P. Berrange),<br/>
Ensure consistent enablement of gcc 'diagnostic' pragma (Daniel P. Berrange),<br/>
qemu: query command line options in QMP (Eric Blake),<br/>
qemu: simplify string cleanup (Eric Blake),<br/>
qemu: use bool in monitor struct (Eric Blake),<br/>
json: support removing a value from an object (Eric Blake),<br/>
Don't overwrite useful message when creating macvlan fails (Daniel P. Berrange),<br/>
Remove &amp; ban use of select() for waiting for I/O (Daniel P. Berrange),<br/>
qemu: Add hotplug support for scsi host device (Han Cheng),<br/>
.gitignore: add fchosttest (Ján Tomko),<br/>
qemu: Refactor helpers for USB device attachment (Osier Yang),<br/>
Escaping leading '.' in cgroup names (Daniel P. Berrange),<br/>
qemu: Introduce activeScsiHostdevs list for scsi host devices (Han Cheng),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/vbox/* (Michal Privoznik),<br/>
Support NBD backed disks/filesystems in LXC driver (Daniel P. Berrange),<br/>
Add 'nbd' as a valid filesystem driver type (Daniel P. Berrange),<br/>
Add a helper API for setting up a NBD device with qemu-nbd (Daniel P. Berrange),<br/>
Re-arrange code setting up ifs/disk loop devices for LXC (Daniel P. Berrange),<br/>
Add support for storage format in FS &lt;driver&gt; (Daniel P. Berrange),<br/>
security_apparmor.c: Include virscsi.h (Michal Privoznik),<br/>
security: Manage the security label for scsi host device (Osier Yang),<br/>
qemu: Allow the scsi-generic device in cgroup (Han Cheng),<br/>
qemu: Support bootindex for scsi host device (Osier Yang),<br/>
Introduce &lt;readonly&gt; for hostdev (Osier Yang),<br/>
rng: Interleave hostdev elements (Osier Yang),<br/>
qemu: Build qemu command line for scsi host device (Han Cheng),<br/>
utils: util functions for scsi hostdev (Han Cheng),<br/>
qemu: New cap flags for scsi-generic (Han Cheng),<br/>
node_device: Clean up unused macros (Osier Yang),<br/>
conf: Generic XMLs for scsi hostdev (Han Cheng),<br/>
tests: Add tests for fc_host (Osier Yang),<br/>
util: Honor the passed sysfs_prefix (Osier Yang),<br/>
util: Update the comment for virGetFCHostNameByWWN (Osier Yang),<br/>
util: Change virIsCapable* to return bool (Osier Yang),<br/>
util: Don't miss the slash in constructed path (Osier Yang),<br/>
build: update to latest gnulib, for syntax-check (Eric Blake),<br/>
Update hellolibvirt to demo virGetLastErrorMessage() (Daniel P. Berrange),<br/>
Add a test case for the fdstream file read/write code (Daniel P. Berrange),<br/>
Allow the iohelper path to be customized by test programs (Daniel P. Berrange),<br/>
Add a virGetLastErrorMessage() function (Daniel P. Berrange),<br/>
Fix iohelper usage with streams opened for read (Daniel P. Berrange),<br/>
Cope with missing swap cgroup controls (Daniel P. Berrange),<br/>
util: move virFile* functions from virutil.c to virfile.c (Laine Stump),<br/>
util: fix virFileOpenAs return value and resulting error logs (Laine Stump),<br/>
Build breaker - requires VIR_FROM_THIS (John Ferlan),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/test/* (Michal Privoznik),<br/>
virGetStorageVol: Don't ignore NULL pool name (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in tests/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/storage/* (Michal Privoznik),<br/>
dom event example: Add error check to impl call (Jesse J. Cook),<br/>
dom event example: init before register event impl (Jesse J. Cook),<br/>
conf: Fix typo in error message in ABI stability check (Peter Krempa),<br/>
tests: use portable shell code (Eric Blake),<br/>
Replace 'goto clean' with 'goto cleanup' in apparmor code (Daniel P. Berrange),<br/>
Replace list of driver source files with variables (Daniel P. Berrange),<br/>
Fix naming of methods in ESX storage backends to follow public APIs (Daniel P. Berrange),<br/>
Skip virNWFilterTechDriver when validating API naming (Daniel P. Berrange),<br/>
Replace 'goto cleanup' with 'goto error' in udev interface driver (Daniel P. Berrange),<br/>
Replace 'goto err' with 'goto cleanup' in udev interface driver (Daniel P. Berrange),<br/>
tests: files named '.*-invalid.xml' should fail validation (Ján Tomko),<br/>
Simplify the Xen domain stats/peek / node memory driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain autostart driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain scheduler parameter driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain attach/dettach driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain define/undefine driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain start driver method (Daniel P. Berrange),<br/>
Simplify the Xen driver define domain driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain migration driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain get XML driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain VCPU driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain save/restore driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain get info/state driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain get/set (max) memory driver methods (Daniel P. Berrange),<br/>
Remove Xen get hostname driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain get OS type driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain destroy driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain shutdown/reboot driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain suspend/resume driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain is persistent driver method (Daniel P. Berrange),<br/>
Simplify the Xen domain lookup driver methods (Daniel P. Berrange),<br/>
Simplify the Xen domain create driver method (Daniel P. Berrange),<br/>
Simplify the Xen count/list domains driver methods (Daniel P. Berrange),<br/>
Simplify the Xen get max vcpus / node get info driver methods (Daniel P. Berrange),<br/>
Simplify the Xen get version driver method (Daniel P. Berrange),<br/>
Simplify the Xen get type driver method (Daniel P. Berrange),<br/>
Simplify opening of Xen drivers (Daniel P. Berrange),<br/>
Remove pointless GET_PRIVATE macro from Xen driver (Daniel P. Berrange),<br/>
Remove VIR_CONNECT_RO checks from xen drivers (Daniel P. Berrange),<br/>
Remove xen driver checks for priv-&gt;handle &lt; 0 (Daniel P. Berrange),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/vmx/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/vmware/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/uml/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/secret/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/phyp/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/parallels/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/nwfilter/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/interface/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/node_device/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/network/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/lxc/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/locking/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/libxl/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/hyperv/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/esx/* (Michal Privoznik),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in src/cpu/* (Michal Privoznik),<br/>
Delete udevFreeIfaceDef function in udev interface driver (Daniel P. Berrange),<br/>
maint: update to latest gnulib (Eric Blake),<br/>
Unmerge attach/update/modify device APIs in drivers (Daniel P. Berrange),<br/>
Pull parsing of migration xml up into QEMU driver APIs (Daniel P. Berrange),<br/>
Fix naming of some node device APIs (Daniel P. Berrange),<br/>
Separate internal node suspend APIs from public API (Daniel P. Berrange),<br/>
Separate internal node device APIs from public API (Daniel P. Berrange),<br/>
Separate virGetHostname() API contract from driver APIs (Daniel P. Berrange),<br/>
Include process start time when doing polkit checks (Daniel P. Berrange),<br/>
Rename "security context" to "selinux context" (Daniel P. Berrange),<br/>
Fix possible undefined value in check-symsorting.pl (Daniel P. Berrange),<br/>
storage: Skip inactive lv volumes (Osier Yang),<br/>
string: make VIR_STRDUP easier to use (Eric Blake),<br/>
alloc: make VIR_APPEND_ELEMENT safer (Eric Blake),<br/>
syntax-check: forbid virBufferAsprintf with string literals (Ján Tomko),<br/>
get rid of virBufferAsprintf where possible (Ján Tomko),<br/>
qemu: allocate network connections sooner during domain startup (Laine Stump),<br/>
Ensure stub todo.html.in file is HTML5 (Daniel P. Berrange),<br/>
qemu: Enable the capability bit for -no-kvm-pit-reinjection on x86 only (Boris Fiuczynski),<br/>
rpc: message related sizes enlarged (Daniel Hansel),<br/>
qemu: Do fake auto-allocation of ports when generating native command (Peter Krempa),<br/>
spec: proper soft static allocation of qemu uid (Eric Blake),<br/>
build: always include libvirt_lxc.syms in tarball (Eric Blake),<br/>
Adapt to VIR_STRDUP and VIR_STRNDUP in daemon/* (Michal Privoznik),<br/>
virstring: Introduce VIR_STRDUP and VIR_STRNDUP (Michal Privoznik),<br/>
Make detect_scsi_host_caps a function on all architectures (Guido Günther),<br/>
More paranoid initialization of 'nparams' variable in dispatch code (Daniel P. Berrange),<br/>
Fix format string handling in network driver (Daniel P. Berrange),<br/>
esx: Reduce code duplication in generator (Matthias Bolte),<br/>
build: avoid useless virAsprintf (Eric Blake),<br/>
build: always include sanitytest in tarball (Eric Blake),<br/>
util: fix compile errors caused by moving string functions (Laine Stump),<br/>
virutil: Move string related functions to virstring.c (Michal Privoznik),<br/>
qemu: Generate agent socket path if missing (Michal Privoznik),<br/>
build: fix FreeBSD build (Eric Blake)<br/>
</li>
<li>Cleanups:<br/>
Storage: Fix the indention of rbd test file (Osier Yang),<br/>
qemu: Fix damaged whitespace (Peter Krempa),<br/>
Properly indent function's opening bracket (Martin Kletzander),<br/>
build: fix typo in earlier commit (Eric Blake),<br/>
build: drop unused variable (Eric Blake),<br/>
syntax-check: mandate space after mid-line semicolon (Eric Blake),<br/>
syntax: prefer space after semicolon in for loop (Eric Blake),<br/>
security_dac: Fix the coding style (Osier Yang),<br/>
nwfilter: Change the comment style (Osier Yang),<br/>
src/*.[ch]: Remove the whitespace before ";" (Osier Yang),<br/>
src/locking: Remove the whitespace before ";" (Osier Yang),<br/>
python: Remove the whitespace before ";" (Osier Yang),<br/>
examples: Remove the whitespace before ';' (Osier Yang),<br/>
src/lxc: Remove the whitespace before ";" (Osier Yang),<br/>
src/remote: Remove the whitespace before ";" (Osier Yang),<br/>
src/rpc: Remove the whitespace before ";" (Osier Yang),<br/>
src/utils: Remove the whitespace before ";" (Osier Yang),<br/>
tests/: Remove the whitespace before ";" (Osier Yang),<br/>
daemon: Remove the whitespace before ";" (Osier Yang),<br/>
tools: Remove the whitespace before ";" (Osier Yang),<br/>
src/storage: Remove the whitespace before ';' (Osier Yang),<br/>
src/security: Remove the whitespace before ';' (Osier Yang),<br/>
src/xen: Remove the whitespace before ';' (Osier Yang),<br/>
src/vmware: Remove the whitespace before ';' (Osier Yang),<br/>
src/qemu: Remove the whitespace before ';' (Osier Yang),<br/>
src/interface: Remove the whitespace before ';' (Osier Yang),<br/>
src/parallels: Remove the whitespace before ';' (Osier Yang),<br/>
src/uml: Remove the whitespace before ';' (Osier Yang),<br/>
src/openvz: Remove the whitespace before ';' (Osier Yang),<br/>
src/node_device: Remove the whitespace before ';' (Osier Yang),<br/>
src/phyp: Remove the whitespace before ';' (Osier Yang),<br/>
src/nwfilter: Remove the whitespace before ';' (Osier Yang),<br/>
src/xenxs: Remove the whitespace before ';' (Osier Yang),<br/>
src/vbox: Remove the whitespace before ';' (Osier Yang),<br/>
src/test: Remove the whitespace before ';' (Osier Yang),<br/>
src/conf: Remove the whitespace before ';' (Osier Yang),<br/>
src/libxl: Remove the whitespace before ';' (Osier Yang),<br/>
src/network: Remove the whitespace before ';' (Osier Yang),<br/>
LXC: move the comments to the proper place (Gao feng),<br/>
conf: Improve the coding style (Osier Yang),<br/>
tests: Sort the EXTRA_DIST list (Osier Yang),<br/>
libvirt.c: Fix the indention (Osier Yang),<br/>
conf: Remove the unrelated comment (Osier Yang),<br/>
build: clean up stray files found by 'make distcheck' (Eric Blake),<br/>
Remove redundant () in expression (Daniel P. Berrange)<br/>
</li>
</ul>
<h3>1.0.5: May 2 2013</h3>
<ul>
<li>Features:<br/>

View File

@@ -1,16 +1,14 @@
<?xml version="1.0"?>
<xsl:stylesheet
xmlns="http://www.w3.org/1999/xhtml"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="xsl exsl html"
exclude-result-prefixes="xsl exsl"
version="1.0">
<!-- The sitemap.html.in page contains the master navigation structure -->
<xsl:variable name="sitemap" select="document('sitemap.html.in')/html:html/html:body/html:div[@id='sitemap']"/>
<xsl:variable name="sitemap" select="document('sitemap.html.in')/html/body/div[@id='sitemap']"/>
<xsl:template match="html:code[@class='docref']" mode="content">
<xsl:template match="code[@class='docref']" mode="content">
<xsl:variable name="name"><xsl:value-of select="."/></xsl:variable>
<a href="html/libvirt-libvirt.html#{$name}"><code><xsl:value-of select="$name"/></code></a>
</xsl:template>
@@ -22,17 +20,17 @@
</xsl:template>
<xsl:template match="html:ul[@id='toc']" mode="content">
<xsl:template match="ul[@id='toc']" mode="content">
<xsl:call-template name="toc"/>
</xsl:template>
<!-- This processes the sitemap to form a context sensitive
navigation menu for the current page -->
<xsl:template match="html:ul" mode="menu">
<xsl:template match="ul" mode="menu">
<xsl:param name="pagename"/>
<xsl:param name="level"/>
<ul class="{concat('l', $level)}">
<xsl:for-each select="html:li">
<xsl:for-each select="li">
<!-- The extra div tag here works around an IE6 whitespace collapsing problem -->
<li><div>
<!-- A menu is active if there is an 'a' tag with
@@ -40,7 +38,7 @@
or a child menu -->
<xsl:variable name="class">
<xsl:choose>
<xsl:when test="count(.//html:a[@href = $pagename]) > 0">
<xsl:when test="count(.//a[@href = $pagename]) > 0">
<xsl:text>active</xsl:text>
</xsl:when>
<xsl:otherwise>
@@ -53,21 +51,21 @@
the immediate 'a' tag has href matching the
current pagename -->
<xsl:choose>
<xsl:when test="$pagename = html:a/@href">
<span class="{$class}"><xsl:value-of select="html:a"/></span>
<xsl:when test="$pagename = a/@href">
<span class="{$class}"><xsl:value-of select="a"/></span>
</xsl:when>
<xsl:when test="starts-with(html:a/@href, 'http://wiki.libvirt.org')">
<a title="{./html:span}" class="{$class}" href="{html:a/@href}"><xsl:value-of select="html:a"/></a>
<xsl:when test="starts-with(a/@href, 'http://wiki.libvirt.org')">
<a title="{./span}" class="{$class}" href="{a/@href}"><xsl:value-of select="a"/></a>
</xsl:when>
<xsl:otherwise>
<a title="{./html:span}" class="{$class}" href="{concat($href_base, html:a/@href)}"><xsl:value-of select="html:a"/></a>
<a title="{./span}" class="{$class}" href="{concat($href_base, a/@href)}"><xsl:value-of select="a"/></a>
</xsl:otherwise>
</xsl:choose>
<!-- A sub-menu should only be expanded it contains
an 'a' tag with href matching this pagename -->
<xsl:if test="count(.//html:a[@href = $pagename]) > 0">
<xsl:apply-templates select="html:ul" mode="menu">
<xsl:if test="count(.//a[@href = $pagename]) > 0">
<xsl:apply-templates select="ul" mode="menu">
<xsl:with-param name="pagename" select="$pagename"/>
<xsl:with-param name="level" select="$level + 1"/>
</xsl:apply-templates>
@@ -79,33 +77,33 @@
<xsl:template name="toc">
<ul>
<xsl:for-each select="/html:html/html:body/html:h2[count(html:a) = 1]">
<xsl:for-each select="/html/body/h2[count(a) = 1]">
<xsl:variable name="thish2" select="."/>
<li>
<a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
<xsl:if test="count(./following-sibling::html:h3[preceding-sibling::html:h2[1] = $thish2 and count(html:a) = 1]) > 0">
<a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
<xsl:if test="count(./following-sibling::h3[preceding-sibling::h2[1] = $thish2 and count(a) = 1]) > 0">
<ul>
<xsl:for-each select="./following-sibling::html:h3[preceding-sibling::html:h2[1] = $thish2 and count(html:a) = 1]">
<xsl:for-each select="./following-sibling::h3[preceding-sibling::h2[1] = $thish2 and count(a) = 1]">
<xsl:variable name="thish3" select="."/>
<li>
<a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
<xsl:if test="count(./following-sibling::html:h4[preceding-sibling::html:h3[1] = $thish3 and count(html:a) = 1]) > 0">
<a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
<xsl:if test="count(./following-sibling::h4[preceding-sibling::h3[1] = $thish3 and count(a) = 1]) > 0">
<ul>
<xsl:for-each select="./following-sibling::html:h4[preceding-sibling::html:h3[1] = $thish3 and count(html:a) = 1]">
<xsl:for-each select="./following-sibling::h4[preceding-sibling::h3[1] = $thish3 and count(a) = 1]">
<xsl:variable name="thish4" select="."/>
<li>
<a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
<xsl:if test="count(./following-sibling::html:h5[preceding-sibling::html:h4[1] = $thish4 and count(html:a) = 1]) > 0">
<a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
<xsl:if test="count(./following-sibling::h5[preceding-sibling::h4[1] = $thish4 and count(a) = 1]) > 0">
<ul>
<xsl:for-each select="./following-sibling::html:h5[preceding-sibling::html:h4[1] = $thish4 and count(html:a) = 1]">
<xsl:for-each select="./following-sibling::h5[preceding-sibling::h4[1] = $thish4 and count(a) = 1]">
<xsl:variable name="thish5" select="."/>
<li>
<a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
<xsl:if test="count(./following-sibling::html:h6[preceding-sibling::html:h5[1] = $thish5 and count(html:a) = 1]) > 0">
<a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
<xsl:if test="count(./following-sibling::h6[preceding-sibling::h5[1] = $thish5 and count(a) = 1]) > 0">
<ul>
<xsl:for-each select="./following-sibling::html:h6[preceding-sibling::html:h5[1] = $thish5 and count(html:a) = 1]">
<xsl:for-each select="./following-sibling::h6[preceding-sibling::h5[1] = $thish5 and count(a) = 1]">
<li>
<a href="#{html:a/@name}"><xsl:value-of select="html:a/text()"/></a>
<a href="#{a/@name}"><xsl:value-of select="a/text()"/></a>
</li>
</xsl:for-each>
</ul>
@@ -138,7 +136,7 @@
<head>
<link rel="stylesheet" type="text/css" href="{$href_base}main.css"/>
<link rel="SHORTCUT ICON" href="{$href_base}32favicon.png"/>
<title>libvirt: <xsl:value-of select="html:html/html:body/html:h1"/></title>
<title>libvirt: <xsl:value-of select="html/body/h1"/></title>
<meta name="description" content="libvirt, virtualization, virtualization API"/>
</head>
<body>
@@ -155,13 +153,13 @@
</div>
<div id="body">
<div id="menu">
<xsl:apply-templates select="exsl:node-set($sitemap)/html:ul" mode="menu">
<xsl:apply-templates select="exsl:node-set($sitemap)/ul" mode="menu">
<xsl:with-param name="pagename" select="$pagename"/>
<xsl:with-param name="level" select="0"/>
</xsl:apply-templates>
</div>
<div id="content">
<xsl:apply-templates select="/html:html/html:body/*" mode="content"/>
<xsl:apply-templates select="/html/body/*" mode="content"/>
</div>
</div>
<div id="footer">

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Pending patches needing review</h1>
<p> A list of pending patches needing review upstream is available

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>PHP API bindings</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1>Python API bindings</h1>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<body>
<h1>Related links</h1>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?xml version="1.0"?>
<html>
<body>
<h1 >Remote support</h1>
<p>

View File

@@ -1,18 +1,5 @@
## Copyright (C) 2005-2011, 2013 Red Hat, Inc.
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library. If not, see
## <http://www.gnu.org/licenses/>.
## Copyright (C) 2005-2011 Red Hat, Inc.
## See COPYING.LIB for the License of this software
schemadir = $(pkgdatadir)/schemas
schema_DATA = \
@@ -28,7 +15,6 @@ schema_DATA = \
nwfilter.rng \
secret.rng \
storageencryption.rng \
storagefilefeatures.rng \
storagepool.rng \
storagevol.rng

View File

@@ -290,11 +290,6 @@
<text/>
</attribute>
</optional>
<optional>
<attribute name='maxCpus'>
<ref name='unsignedInt'/>
</attribute>
</optional>
<text/>
</element>
</define>

View File

@@ -55,9 +55,6 @@
<optional>
<ref name="pm"/>
</optional>
<optional>
<ref name="idmap"/>
</optional>
<optional>
<ref name="devices"/>
</optional>
@@ -246,9 +243,11 @@
<optional>
<ref name="osbootkernel"/>
</optional>
<zeroOrMore>
<ref name="osbootdev"/>
</zeroOrMore>
<optional>
<zeroOrMore>
<ref name="osbootdev"/>
</zeroOrMore>
</optional>
<optional>
<element name="bootmenu">
<attribute name="enable">
@@ -466,34 +465,6 @@
</optional>
</interleave>
</define>
<define name="idmap">
<zeroOrMore>
<element name="uid">
<attribute name="start">
<ref name="unsignedInt"/>
</attribute>
<attribute name="target">
<ref name="unsignedInt"/>
</attribute>
<attribute name="count">
<ref name="unsignedInt"/>
</attribute>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="gid">
<attribute name="start">
<ref name="unsignedInt"/>
</attribute>
<attribute name="target">
<ref name="unsignedInt"/>
</attribute>
<attribute name="count">
<ref name="unsignedInt"/>
</attribute>
</element>
</zeroOrMore>
</define>
<!--
Resources usage defines the amount of memory (maximum and possibly
current usage) and number of virtual CPUs used by that domain.
@@ -519,23 +490,11 @@
</optional>
<optional>
<element name="memoryBacking">
<interleave>
<optional>
<element name="hugepages">
<empty/>
</element>
</optional>
<optional>
<element name="nosharepages">
<empty/>
</element>
</optional>
<optional>
<element name="locked">
<empty/>
</element>
</optional>
</interleave>
<optional>
<element name="hugepages">
<empty/>
</element>
</optional>
</element>
</optional>
@@ -929,7 +888,7 @@
<define name="diskspec">
<interleave>
<optional>
<ref name="diskDriver"/>
<ref name="driver"/>
</optional>
<optional>
<ref name='diskMirror'/>
@@ -1173,14 +1132,6 @@
<attribute name="volume">
<ref name="volName"/>
</attribute>
<optional>
<attribute name="mode">
<choice>
<value>host</value>
<value>direct</value>
</choice>
</attribute>
</optional>
<optional>
<ref name="startupPolicy"/>
</optional>
@@ -1319,7 +1270,7 @@
<!--
Disk may use a special driver for access.
-->
<define name="diskDriver">
<define name="driver">
<element name="driver">
<choice>
<group>
@@ -1353,9 +1304,6 @@
<optional>
<ref name="copy_on_read"/>
</optional>
<optional>
<ref name="discard"/>
</optional>
<empty/>
</element>
</define>
@@ -1366,13 +1314,13 @@
<optional>
<attribute name='type'>
<choice>
<ref name='storageFormat'/>
<ref name='diskFormat'/>
<value>aio</value> <!-- back-compat for 'raw' -->
</choice>
</attribute>
</optional>
</define>
<define name='storageFormat'>
<define name='diskFormat'>
<choice>
<value>raw</value>
<value>dir</value>
@@ -1451,14 +1399,6 @@
<value>off</value>
</choice>
</attribute>
</define>
<define name="discard">
<attribute name='discard'>
<choice>
<value>unmap</value>
<value>ignore</value>
</choice>
</attribute>
</define>
<define name="controller">
<element name="controller">
@@ -1578,9 +1518,6 @@
<attribute name="type">
<value>file</value>
</attribute>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="file">
@@ -1594,9 +1531,6 @@
<attribute name="type">
<value>block</value>
</attribute>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="dev">
@@ -1613,9 +1547,6 @@
<value>mount</value>
</attribute>
</optional>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="dir">
@@ -1623,6 +1554,22 @@
</attribute>
<empty/>
</element>
<optional>
<element name="driver">
<attribute name="type">
<choice>
<value>path</value>
<value>handle</value>
</choice>
</attribute>
<optional>
<attribute name="wrpolicy">
<value>immediate</value>
</attribute>
</optional>
<empty/>
</element>
</optional>
</interleave>
</group>
<group>
@@ -1631,9 +1578,6 @@
<value>bind</value>
</attribute>
</optional>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="dir">
@@ -1647,9 +1591,6 @@
<attribute name="type">
<value>template</value>
</attribute>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="name">
@@ -1663,9 +1604,6 @@
<attribute name="type">
<value>ram</value>
</attribute>
<optional>
<ref name="fsDriver"/>
</optional>
<interleave>
<element name="source">
<attribute name="usage">
@@ -1723,36 +1661,6 @@
</interleave>
</element>
</define>
<define name="fsDriver">
<element name="driver">
<!-- Annoying inconsistency. 'disk' uses 'name'
for this kind of info, and 'type' for the
storage format. We need the latter too, so
had to invent a new attribute name -->
<optional>
<attribute name="type">
<choice>
<value>path</value>
<value>handle</value>
<value>loop</value>
<value>nbd</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="format">
<ref name="storageFormat"/>
</attribute>
</optional>
<optional>
<attribute name="wrpolicy">
<value>immediate</value>
</attribute>
</optional>
<empty/>
</element>
</define>
<!--
An interface description can either be of type bridge in which case
it will use a bridging source, or of type ethernet which uses a device
@@ -2049,11 +1957,6 @@
</choice>
</attribute>
</optional>
<optional>
<attribute name='queues'>
<ref name="positiveInteger"/>
</attribute>
</optional>
<optional>
<attribute name="txmode">
<choice>
@@ -2167,25 +2070,11 @@
</choice>
</attribute>
</optional>
<optional>
<attribute name="websocket">
<ref name="PortNumber"/>
</attribute>
</optional>
<optional>
<attribute name="listen">
<ref name="addrIPorName"/>
</attribute>
</optional>
<optional>
<attribute name='sharePolicy'>
<choice>
<value>allow-exclusive</value>
<value>force-shared</value>
<value>ignore</value>
</choice>
</attribute>
</optional>
</group>
<group>
<optional>
@@ -2954,13 +2843,6 @@
<optional>
<ref name="address"/>
</optional>
<optional>
<element name="stats">
<attribute name="period">
<ref name="positiveInteger"/>
</attribute>
</element>
</optional>
</element>
</define>
<define name="parallel">
@@ -3172,38 +3054,26 @@
<define name="hostdev">
<element name="hostdev">
<interleave>
<choice>
<group>
<ref name="hostdevsubsys"/>
</group>
<group>
<ref name="hostdevcaps"/>
</group>
</choice>
<optional>
<ref name="alias"/>
</optional>
<optional>
<ref name="deviceBoot"/>
</optional>
<optional>
<ref name="rom"/>
</optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<element name="readonly">
<empty/>
</element>
</optional>
<optional>
<element name="shareable">
<empty/>
</element>
</optional>
</interleave>
<choice>
<group>
<ref name="hostdevsubsys"/>
</group>
<group>
<ref name="hostdevcaps"/>
</group>
</choice>
<optional>
<ref name="alias"/>
</optional>
<optional>
<ref name="deviceBoot"/>
</optional>
<optional>
<ref name="rom"/>
</optional>
<optional>
<ref name="address"/>
</optional>
</element>
</define>
@@ -3224,7 +3094,6 @@
<choice>
<ref name="hostdevsubsyspci"/>
<ref name="hostdevsubsysusb"/>
<ref name="hostdevsubsysscsi"/>
</choice>
</define>
@@ -3293,28 +3162,6 @@
</element>
</define>
<define name="hostdevsubsysscsi">
<attribute name="type">
<value>scsi</value>
</attribute>
<optional>
<attribute name="sgio">
<choice>
<value>filtered</value>
<value>unfiltered</value>
</choice>
</attribute>
</optional>
<element name="source">
<interleave>
<ref name="sourceinfoadapter"/>
<element name="address">
<ref name="scsiaddress"/>
</element>
</interleave>
</element>
</define>
<define name="hostdevcapsstorage">
<attribute name="type">
<value>storage</value>
@@ -3370,17 +3217,6 @@
</attribute>
</element>
</define>
<define name="scsiaddress">
<attribute name="bus">
<ref name="driveBus"/>
</attribute>
<attribute name="target">
<ref name="driveTarget"/>
</attribute>
<attribute name="unit">
<ref name="driveUnit"/>
</attribute>
</define>
<define name="usbportaddress">
<attribute name="bus">
<ref name="usbAddr"/>
@@ -3969,7 +3805,7 @@
</attribute>
<optional>
<attribute name='format'>
<ref name='storageFormat'/>
<ref name='diskFormat'/>
</attribute>
</optional>
<optional>
@@ -4061,21 +3897,6 @@
<ref name="hypervtristate"/>
</element>
</optional>
<optional>
<element name="vapic">
<ref name="hypervtristate"/>
</element>
</optional>
<optional>
<element name="spinlocks">
<ref name="hypervtristate"/>
<optional>
<attribute name="retries">
<data type="unsignedInt"/>
</attribute>
</optional>
</element>
</optional>
</interleave>
</element>
</define>

View File

@@ -128,7 +128,7 @@
<element name='driver'>
<optional>
<attribute name='type'>
<ref name='storageFormat'/>
<ref name='diskFormat'/>
</attribute>
</optional>
<empty/>

View File

@@ -316,28 +316,6 @@
</optional>
</element>
</zeroOrMore>
<!-- <route> element -->
<zeroOrMore>
<!-- The (static) route element specifies a network address and gateway
address to access that network. Both the network address and
the gateway address must be specified. -->
<element name="route">
<optional>
<attribute name="family"><ref name="addr-family"/></attribute>
</optional>
<attribute name="address"><ref name="ipAddr"/></attribute>
<optional>
<choice>
<attribute name="netmask"><ref name="ipv4Addr"/></attribute>
<attribute name="prefix"><ref name="ipPrefix"/></attribute>
</choice>
</optional>
<attribute name="gateway"><ref name="ipAddr"/></attribute>
<optional>
<attribute name="metric"><ref name="unsignedInt"/></attribute>
</optional>
</element>
</zeroOrMore>
</interleave>
</element>
</define>

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