mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-09-22 13:45:17 +03:00
Compare commits
72 Commits
v0.9.10-rc
...
v0.9.6.2
Author | SHA1 | Date | |
---|---|---|---|
|
a1ceef9b42 | ||
|
6cde2d3965 | ||
|
2f809dba2c | ||
|
b50badc5ee | ||
|
85fc04dd1b | ||
|
06e1daac70 | ||
|
fb68e28304 | ||
|
64b8925c37 | ||
|
fcc2893679 | ||
|
b598d0864d | ||
|
2bdc05d1a4 | ||
|
da8ab75e90 | ||
|
a822202d6c | ||
|
c12c765f83 | ||
|
aa041fcef0 | ||
|
0e4efa3d53 | ||
|
26ceca4b02 | ||
|
1a6bad7108 | ||
|
fcf32fc978 | ||
|
0bff012ddc | ||
|
d6f20a2dfa | ||
|
dac6e9a210 | ||
|
b4e9a21c3b | ||
|
8bd5c79224 | ||
|
b0200c81ec | ||
|
8213166b92 | ||
|
3f769afc45 | ||
|
766be49f17 | ||
|
3d8f56d129 | ||
|
f20331c810 | ||
|
0f1bc306d3 | ||
|
4f5f16eea9 | ||
|
24c17ed1ec | ||
|
abf4ab4827 | ||
|
25eeffcb17 | ||
|
96c3c2752e | ||
|
43b7292293 | ||
|
abb78d4ec2 | ||
|
49bc39be66 | ||
|
208d5836c8 | ||
|
5b5b1150cf | ||
|
3cbb1385e9 | ||
|
757316875c | ||
|
a261feba42 | ||
|
cd921a5572 | ||
|
505c99f62e | ||
|
77874a2791 | ||
|
7de869fc03 | ||
|
4e9e178e3c | ||
|
abb78a216c | ||
|
643ac7203a | ||
|
e11aa0262b | ||
|
4744461619 | ||
|
e95df90dbb | ||
|
56fb0c0695 | ||
|
5ede14ef8e | ||
|
f0ba1c096a | ||
|
42419b2891 | ||
|
762801607a | ||
|
d20a6240b3 | ||
|
bf887b8bb5 | ||
|
bf09c64ada | ||
|
dc738b8395 | ||
|
f2b5c5ff22 | ||
|
c6ead37ba1 | ||
|
472e49f558 | ||
|
2ce01ba20f | ||
|
bf540af8b3 | ||
|
fc9a66cfb1 | ||
|
776124e6f0 | ||
|
d20f5421a9 | ||
|
64eadd9a7b |
79
.gitignore
vendored
79
.gitignore
vendored
@@ -1,28 +1,19 @@
|
||||
*#*#
|
||||
*.#*#
|
||||
*.a
|
||||
*.cov
|
||||
*.exe
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.gcov
|
||||
*.html
|
||||
*.i
|
||||
*.la
|
||||
*.lo
|
||||
*.loT
|
||||
*.o
|
||||
*.orig
|
||||
*.pyc
|
||||
*.rej
|
||||
*.s
|
||||
*~
|
||||
.deps
|
||||
.git
|
||||
.git-module-status
|
||||
.libs
|
||||
.lvimrc
|
||||
.memdump
|
||||
.sc-start-sc_*
|
||||
/ABOUT-NLS
|
||||
/COPYING
|
||||
@@ -46,30 +37,12 @@
|
||||
/configure
|
||||
/configure.lineno
|
||||
/daemon/*_dispatch.h
|
||||
/daemon/libvirt_qemud
|
||||
/daemon/libvirtd
|
||||
/daemon/libvirtd.init
|
||||
/daemon/libvirtd.service
|
||||
/daemon/libvirtd*.logrotate
|
||||
/daemon/libvirtd.8
|
||||
/daemon/libvirtd.8.in
|
||||
/daemon/libvirtd.pod
|
||||
/daemon/probes.h
|
||||
/docs/devhelp/libvirt.devhelp
|
||||
/docs/apibuild.py.stamp
|
||||
/docs/hvsupport.html.in
|
||||
/docs/libvirt-api.xml
|
||||
/docs/libvirt-qemu-*.xml
|
||||
/docs/libvirt-refs.xml
|
||||
/docs/todo.html.in
|
||||
/examples/domain-events/events-c/event-test
|
||||
/examples/dominfo/info1
|
||||
/examples/domsuspend/suspend
|
||||
/examples/hellolibvirt/hellolibvirt
|
||||
/examples/openauth/openauth
|
||||
/gnulib/lib/*
|
||||
/gnulib/m4/*
|
||||
/gnulib/tests/*
|
||||
/include/libvirt/libvirt.h
|
||||
/libtool
|
||||
/libvirt-*.tar.gz
|
||||
/libvirt-[0-9]*
|
||||
@@ -83,74 +56,26 @@
|
||||
/mkinstalldirs
|
||||
/po/*
|
||||
/proxy/
|
||||
/python/generated.stamp
|
||||
/python/generator.py.stamp
|
||||
/python/libvirt-export.c
|
||||
/python/libvirt-qemu-export.c
|
||||
/python/libvirt-qemu.[ch]
|
||||
/python/libvirt.[ch]
|
||||
/python/libvirt.py
|
||||
/python/libvirt_qemu.py
|
||||
/sc_*
|
||||
/src/esx/*.generated.*
|
||||
/src/hyperv/*.generated.*
|
||||
/src/libvirt*.def
|
||||
/src/libvirt.syms
|
||||
/src/libvirt_*.stp
|
||||
/src/libvirt_*helper
|
||||
/src/libvirt_lxc
|
||||
/src/libvirt_iohelper
|
||||
/src/locking/qemu-sanlock.conf
|
||||
/src/probes.h
|
||||
/src/remote/*_client_bodies.h
|
||||
/src/remote/*_protocol.[ch]
|
||||
/src/rpc/virkeepaliveprotocol.[ch]
|
||||
/src/rpc/virnetprotocol.[ch]
|
||||
/src/util/virkeymaps.h
|
||||
/src/virt-aa-helper
|
||||
/tests/*.log
|
||||
/tests/*.pid
|
||||
/tests/*xml2*test
|
||||
/tests/commandhelper
|
||||
/tests/conftest
|
||||
/tests/cputest
|
||||
/tests/domainsnapshotxml2xmltest
|
||||
/tests/esxutilstest
|
||||
/tests/eventtest
|
||||
/tests/hashtest
|
||||
/tests/jsontest
|
||||
/tests/networkxml2argvtest
|
||||
/tests/nodeinfotest
|
||||
/tests/nwfilterxml2xmltest
|
||||
/tests/object-locking
|
||||
/tests/object-locking-files.txt
|
||||
/tests/object-locking.cm[ix]
|
||||
/tests/openvzutilstest
|
||||
/tests/qemuargv2xmltest
|
||||
/tests/qemuhelptest
|
||||
/tests/qemuxmlnstest
|
||||
/tests/qparamtest
|
||||
/tests/reconnect
|
||||
/tests/secaatest
|
||||
/tests/seclabeltest
|
||||
/tests/sexpr2xmltest
|
||||
/tests/shunloadtest
|
||||
/tests/sockettest
|
||||
/tests/ssh
|
||||
/tests/statstest
|
||||
/tests/utiltest
|
||||
/tests/virbuftest
|
||||
/tests/virhashtest
|
||||
/tests/virnet*test
|
||||
/tests/virshtest
|
||||
/tests/vmx2xmltest
|
||||
/tests/xencapstest
|
||||
/tests/xmconfigtest
|
||||
/tools/*.[18]
|
||||
/tools/libvirt-guests.init
|
||||
/tools/virsh
|
||||
/tools/virsh-*-edit.c
|
||||
/tools/virt-*-validate
|
||||
/tools/virt-sanlock-cleanup
|
||||
/update.log
|
||||
Makefile
|
||||
Makefile.in
|
||||
|
2
.gnulib
2
.gnulib
Submodule .gnulib updated: e9e8aba12a...dbd914496c
3
.mailmap
3
.mailmap
@@ -26,9 +26,6 @@
|
||||
<fsimonce@redhat.com> <federico.simoncelli@gmail.com>
|
||||
<marcandre.lureau@redhat.com> <marcandre.lureau@gmail.com>
|
||||
<supriyak@linux.vnet.ibm.com> <supriyak@in.ibm.com>
|
||||
<neil@aldur.co.uk> <neil@brightbox.co.uk>
|
||||
<stefanb@us.ibm.com> <stefanb@linux.vnet.ibm.com>
|
||||
<josh.durgin@dreamhost.com> <joshd@hq.newdream.net>
|
||||
|
||||
# Name consolidation:
|
||||
# Preferred author spelling <preferred email>
|
||||
|
34
AUTHORS
34
AUTHORS
@@ -28,8 +28,6 @@ The primary maintainers and people with commit access rights:
|
||||
Osier Yang <jyang@redhat.com>
|
||||
Wen Congyang <wency@cn.fujitsu.com>
|
||||
Michal Prívozník <mprivozn@redhat.com>
|
||||
Peter Krempa <pkrempa@redhat.com>
|
||||
Christophe Fergeau <cfergeau@redhat.com>
|
||||
|
||||
Previous maintainers:
|
||||
Karel Zak <kzak@redhat.com>
|
||||
@@ -73,11 +71,13 @@ Patches have also been contributed by:
|
||||
Itamar Heim <iheim@redhat.com>
|
||||
Markus Armbruster <armbru@redhat.com>
|
||||
Ryota Ozaki <ozaki.ryota@gmail.com>
|
||||
James Morris <jmorris@namei.org>
|
||||
Daniel J Walsh <dwalsh@redhat.com>
|
||||
Maximilian Wilhelm <max@rfc2324.org>
|
||||
Pritesh Kothari <Pritesh.Kothari@Sun.COM>
|
||||
Amit Shah <amit.shah@redhat.com>
|
||||
Florian Vichot <florian.vichot@diateam.net>
|
||||
Takahashi Tomohiro <takatom@jp.fujitsu.com>
|
||||
Serge E. Hallyn <serue@us.ibm.com>
|
||||
Soren Hansen <soren@linux2go.dk>
|
||||
Abel Míguez Rodríguez<amiguezr@pdi.ucm.es>
|
||||
@@ -142,7 +142,7 @@ Patches have also been contributed by:
|
||||
Hu Tao <hutao@cn.fujitsu.com>
|
||||
Laurent Léonard <laurent@open-minds.org>
|
||||
MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
|
||||
Josh Durgin <josh.durgin@dreamhost.com>
|
||||
Josh Durgin <joshd@hq.newdream.net>
|
||||
Roopa Prabhu <roprabhu@cisco.com>
|
||||
Paweł Krześniak <pawel.krzesniak@gmail.com>
|
||||
Kay Schubert <kayegypt@web.de>
|
||||
@@ -156,6 +156,7 @@ Patches have also been contributed by:
|
||||
Zdenek Styblik <stybla@turnovfree.net>
|
||||
Gui Jianfeng <guijianfeng@cn.fujitsu.com>
|
||||
Michal Novotny <minovotn@redhat.com>
|
||||
Christophe Fergeau <cfergeau@redhat.com>
|
||||
Markus Groß <gross@univention.de>
|
||||
Phil Petty <phpetty@cisco.com>
|
||||
Taku Izumi <izumi.taku@jp.fujitsu.com>
|
||||
@@ -184,6 +185,7 @@ Patches have also been contributed by:
|
||||
Michael Santos <michael.santos@gmail.com>
|
||||
Alex Jia <ajia@redhat.com>
|
||||
Oskari Saarenmaa <os@ohmu.fi>
|
||||
Peter Krempa <pkrempa@redhat.com>
|
||||
Nan Zhang <nzhang@redhat.com>
|
||||
Wieland Hoffmann <themineo@googlemail.com>
|
||||
Douglas Schilling Landgraf <dougsland@redhat.com>
|
||||
@@ -193,30 +195,8 @@ Patches have also been contributed by:
|
||||
Xu He Jie <xuhj@linux.vnet.ibm.com>
|
||||
Lei Li <lilei@linux.vnet.ibm.com>
|
||||
Matthias Witte <witte@netzquadrat.de>
|
||||
Tang Chen <tangchen@cn.fujitsu.com>
|
||||
Dan Horák <dan@danny.cz>
|
||||
Sage Weil <sage@newdream.net>
|
||||
David L Stevens <dlstevens@us.ibm.com>
|
||||
Tyler Coumbes <coumbes@gmail.com>
|
||||
Wen Ruo Lv <lvroyce@linux.vnet.ibm.com>
|
||||
Patrice LACHANCE <patlachance@gmail.com>
|
||||
Eli Qiao <taget@linux.vnet.ibm.com>
|
||||
Michael Wood <esiotrot@gmail.com>
|
||||
Bharata B Rao <bharata@linux.vnet.ibm.com>
|
||||
Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
|
||||
Chang Liu <lingjiao.lc@taobao.com>
|
||||
Lorin Hochstein <lorin@isi.edu>
|
||||
Christian Franke <nobody@nowhere.ws>
|
||||
Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||
Michael Ellerman <michael@ellerman.id.au>
|
||||
Rommer <rommer@active.by>
|
||||
Yuri Chornoivan <yurchor@ukr.net>
|
||||
Deepak C Shetty <deepakcs@linux.vnet.ibm.com>
|
||||
Martin Kletzander <mkletzan@redhat.com>
|
||||
Laszlo Ersek <lersek@redhat.com>
|
||||
Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
|
||||
Marcelo Cerri <mhcerri@linux.vnet.ibm.com>
|
||||
Hendrik Schwartke <hendrik@os-t.de>
|
||||
Radu Caragea <dmns_serp@yahoo.com>
|
||||
Stefan Bader <stefan.bader@canonical.com>
|
||||
|
||||
[....send patches to get your name here....]
|
||||
|
||||
|
@@ -882,7 +882,7 @@ Wed May 13 18:06:17 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
||||
Wed May 13 12:34:06 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* src/lxc_container.c: Replace sys/capability.h with
|
||||
linux/capability.h, to avoid unnecessary dependency
|
||||
linux/capability.h, to avoid unneccessary dependancy
|
||||
on the libcap package.
|
||||
|
||||
Tue May 12 16:39:06 EDT 2009 Cole Robinson <crobinso@redhat.com>
|
||||
@@ -3351,7 +3351,7 @@ Tue Jan 20 20:22:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||
Tue Jan 20 19:49:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* .x-sc_prohibit_nonreentrant: Blacklist some places where
|
||||
use of non-threadsafe APIs are not necessary to check
|
||||
use of non-threadsafe APIs are not neccessary to check
|
||||
* Makefile.am, Makefile.maint, Makefile.nonreentrant: Add
|
||||
check for non-reentrant safe API calls
|
||||
* Makefile.cfg: Temporarily disable non-reentrant check
|
||||
@@ -3591,7 +3591,7 @@ Thu Jan 15 19:54:19 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||
* src/Makefile.am, src/threads.c, src/threads.h: Generic internal API for threads
|
||||
* src/threads-pthread.c, src/threads-pthread.h: UNIX pthreads impl
|
||||
* src/threads-win32.c, src/threads-win32.h: Win32 threads impl
|
||||
* src/internal.h: Remove unnecessary pthreads macros
|
||||
* src/internal.h: Remove unnneccessary pthreads macros
|
||||
* src/libvirt_private.syms: Add symbols for internal threads API
|
||||
* po/POTFILES.in: Add node_device_conf.c
|
||||
* proxy/Makefile.am: Add threads.c to build
|
||||
@@ -4262,7 +4262,7 @@ Thu Dec 18 11:50:58 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Misc daemon bug fixes (John Levon)
|
||||
* qemud/qemud.c: Fix conditional for node devices
|
||||
* qemud/remote.c: Remove unnecessary path.h include
|
||||
* qemud/remote.c: Remove unneccessary path.h include
|
||||
|
||||
Thu Dec 18 07:47:58 +0100 2008 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
@@ -5032,7 +5032,7 @@ Tue Nov 25 11:17:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Tue Nov 25 10:49:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* src/Makefile.am: Remove unnecessary $(builddir) usage which
|
||||
* src/Makefile.am: Remove unneccessary $(builddir) usage which
|
||||
breaks on older automake. Remove duplicate CFLAGS from merge
|
||||
error
|
||||
* src/xen_unified.c: Wire up XM driver for autostart
|
||||
@@ -5093,7 +5093,7 @@ Mon Nov 24 19:22:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
* tests/Makefile.am, tests/sexpr2xmltest.c,
|
||||
tests/testutilsxen.c, tests/xencapstest.c,
|
||||
tests/xmconfigtest.c, tests/xml2sexprtest.c: Disable all
|
||||
Xen tests when Xen driver build is disabled. Remove unnecessary
|
||||
Xen tests when Xen driver build is disabled. Remove unneccessary
|
||||
WITH_XEN conditionals from source, since the entire build
|
||||
is disabled in Makefile.am
|
||||
|
||||
@@ -6822,7 +6822,7 @@ Wed Aug 20 21:05:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
src/xen_unified.h, src/xend_internal.c, src/xend_internal.h,
|
||||
src/xm_internal.c, src/xs_internal.c, src/xs_internal.h
|
||||
tests/testutils.h: Remove preprocessor conditions for driver
|
||||
compilation. Remove unnecessary "extern C" declarations.
|
||||
compilation. Remove unneccessary "extern C" declarations.
|
||||
|
||||
Wed Aug 20 20:42:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
@@ -7008,7 +7008,7 @@ Fri Aug 8 16:41:24 BST 2008 Daniel Berrange <berrange@redhat.com>
|
||||
src/storage_backend_fs.c, src/storage_backend_iscsi.c,
|
||||
src/storage_backend_logical.c, src/util.c, src/util.h,
|
||||
src/veth.c, tests/qemuxml2argvtest.c: Fix const-correctness
|
||||
of virRun and virExec, and remove unnecessary casts in callers
|
||||
of virRun and virExec, and remove unneccessary casts in callers
|
||||
|
||||
Fri Aug 8 16:53:24 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
@@ -7530,7 +7530,7 @@ Wed Jul 16 16:44:27 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
Sat Jul 12 14:52:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* src/qemu_conf.c: Remove unnecessary c-ctype.h include
|
||||
* src/qemu_conf.c: Remove unneccessary c-ctype.h include
|
||||
|
||||
Fri Jul 11 20:32:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
@@ -8612,7 +8612,7 @@ Thu May 1 14:10:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Tue Apr 29 12:32:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* configure.in: Remove compatibility macros AC_CHECK_*_ONCE for
|
||||
* configure.in: Remove compatability macros AC_CHECK_*_ONCE for
|
||||
now part of onceonly.m4 in gnulib/m4/
|
||||
|
||||
Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering@redhat.com>
|
||||
@@ -8628,7 +8628,7 @@ Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Tue Apr 29 11:54:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* configure.in: Add compatibility macros AC_CHECK_*_ONCE for
|
||||
* configure.in: Add compatability macros AC_CHECK_*_ONCE for
|
||||
older autoconf (RHEL-5 vintage)
|
||||
|
||||
Tue Apr 29 08:13:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
@@ -10247,7 +10247,7 @@ Fri Jan 25 12:00:00 BST 2008 Richard W.M. Jones <rjones@redhat.com>
|
||||
|
||||
Fri Jan 25 10:46:32 CET 2008 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/xen_internal.c: fix an erroneous use of VIR_DOMAIN_NONE instead
|
||||
* src/xen_internal.c: fix an erronous use of VIR_DOMAIN_NONE instead
|
||||
of VIR_DOMAIN_NOSTATE (both defined as 0, no regression)
|
||||
|
||||
Thu Jan 24 18:08:28 CET 2008 Daniel Veillard <veillard@redhat.com>
|
||||
@@ -10283,8 +10283,8 @@ Tue Jan 22 16:27:47 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* configure.ac: Remove use of PKG_CHECK_EXISTS macro. Avoid
|
||||
lines going over 80 chars wide. Make sasl check automatic
|
||||
enable/disable as necessary.
|
||||
* acinclude.m4: Added compatibility macro for old pkg-config
|
||||
enable/disable as neccessary.
|
||||
* acinclude.m4: Added compatability macro for old pkg-config
|
||||
* src/gnutls_1_0_compat.h: Add compat for gnutls_cipher_algorithm_t
|
||||
|
||||
Mon Jan 21 18:03:47 CET 2008 Jim Meyering <meyering@redhat.com>
|
||||
@@ -11617,7 +11617,7 @@ Tue Oct 23 17:30:52 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
||||
Mon Oct 22 22:33:59 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/xen_internal.c src/xen_unified.c src/xen_unified.h
|
||||
src/xend_internal.c src/xml.c src/xml.h: committed erroneously
|
||||
src/xend_internal.c src/xml.c src/xml.h: commited erronously
|
||||
the NUMA patches sent for review on the list in last commit.
|
||||
But that should not affect non NUMA users so early push should
|
||||
not be a problem.
|
||||
@@ -12117,7 +12117,7 @@ Mon Aug 13 21:18:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
||||
* src/util.h, src/util.c: Allow a file descriptor to be supplied
|
||||
for STDIN when calling virExec(), or if -1, redirect from /dev/null
|
||||
* src/qemu_driver.c, src/openvz_driver.c: Pass in -1 for new stdin
|
||||
parameter above where necessary. Patch from Jim Paris
|
||||
parameter above where neccessary. Patch from Jim Paris
|
||||
|
||||
Mon Aug 13 20:13:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
@@ -15485,7 +15485,7 @@ Fri Aug 4 20:19:23 EDT 2006 Daniel Berrange <berrange@redhat.com>
|
||||
* src/libvirt.c: Fix off-by-one in validated VCPU number (it is
|
||||
zero based, not one based).
|
||||
* include/libvirt/libvirt.h: Add some convenience macros for
|
||||
calculating necessary CPU map lengths & total host CPUs
|
||||
calculating neccessary CPU map lengths & total host CPUs
|
||||
* src/virsh.c: Add 'vcpuinfo' and 'vcpumap' commands
|
||||
|
||||
Fri Aug 4 14:45:25 CEST 2006 Daniel Veillard <veillard@redhat.com>
|
||||
@@ -15708,7 +15708,7 @@ Wed Jun 14 13:10:03 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
||||
Tue Jun 13 14:06:01 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
* src/virsh.c: use 'double' instead of 'float' when calculating
|
||||
'CPU time' field for dominfo command, to ensure no unnecessary
|
||||
'CPU time' field for dominfo command, to ensure no unneccessary
|
||||
loss of precision converting from nanoseconds to seconds.
|
||||
|
||||
Tue Jun 13 18:35:22 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
||||
|
7
HACKING
7
HACKING
@@ -496,13 +496,6 @@ following semantically named macros
|
||||
|
||||
|
||||
|
||||
- To avoid having to check if a or b are NULL:
|
||||
|
||||
STREQ_NULLABLE(a, b)
|
||||
STRNEQ_NULLABLE(a, b)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
21
autobuild.sh
21
autobuild.sh
@@ -15,11 +15,8 @@ rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
# Run with options not normally exercised by the rpm build, for
|
||||
# more complete code coverage.
|
||||
../autogen.sh --prefix="$AUTOBUILD_INSTALL_ROOT" \
|
||||
--enable-test-coverage \
|
||||
--disable-nls \
|
||||
--enable-compile-warnings=error
|
||||
|
||||
# If the MAKEFLAGS envvar does not yet include a -j option,
|
||||
@@ -64,7 +61,6 @@ if [ -f /usr/bin/rpmbuild ]; then
|
||||
-ba --clean libvirt.spec
|
||||
fi
|
||||
|
||||
# Test mingw cross-compile
|
||||
if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
||||
make distclean
|
||||
|
||||
@@ -75,8 +71,21 @@ if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
||||
--host=i686-pc-mingw32 \
|
||||
--prefix="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw" \
|
||||
--enable-compile-warnings=error \
|
||||
--without-libvirtd \
|
||||
--without-python
|
||||
--without-sasl \
|
||||
--without-avahi \
|
||||
--without-polkit \
|
||||
--without-python \
|
||||
--without-xen \
|
||||
--without-qemu \
|
||||
--without-lxc \
|
||||
--without-uml \
|
||||
--without-vbox \
|
||||
--without-openvz \
|
||||
--without-phyp \
|
||||
--without-netcf \
|
||||
--without-audit \
|
||||
--without-dtrace \
|
||||
--without-libvirtd
|
||||
|
||||
make
|
||||
make install
|
||||
|
@@ -41,13 +41,10 @@ fi
|
||||
# is required. The first is just the SHA1 that selects a gnulib snapshot.
|
||||
# The second ensures that whenever we change the set of gnulib modules used
|
||||
# by this package, we rerun bootstrap to pull in the matching set of files.
|
||||
# The third ensures that whenever we change the set of local gnulib diffs,
|
||||
# we rerun bootstrap to pull in those diffs.
|
||||
bootstrap_hash()
|
||||
{
|
||||
git submodule status | sed 's/^[ +-]//;s/ .*//'
|
||||
git hash-object bootstrap.conf
|
||||
git ls-tree -d HEAD gnulib/local | awk '{print $3}'
|
||||
}
|
||||
|
||||
# Ensure that whenever we pull in a gnulib update or otherwise change to a
|
||||
|
269
bootstrap
269
bootstrap
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Print a version string.
|
||||
scriptversion=2012-01-21.16; # UTC
|
||||
scriptversion=2012-07-19.14; # UTC
|
||||
|
||||
# Bootstrap this package from checked-out sources.
|
||||
|
||||
@@ -36,6 +36,10 @@ nl='
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
# Ensure that CDPATH is not set. Otherwise, the output from cd
|
||||
# would cause trouble in at least one use below.
|
||||
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
||||
|
||||
local_gl_dir=gl
|
||||
|
||||
me=$0
|
||||
@@ -73,6 +77,33 @@ Running without arguments will suffice in most cases.
|
||||
EOF
|
||||
}
|
||||
|
||||
# warnf_ FORMAT-STRING ARG1...
|
||||
warnf_ ()
|
||||
{
|
||||
warnf_format_=$1
|
||||
shift
|
||||
nl='
|
||||
'
|
||||
case $* in
|
||||
*$nl*) me_=$(printf "$me"|tr "$nl|" '??')
|
||||
printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;;
|
||||
*) printf "$me: $warnf_format_" "$@" ;;
|
||||
esac >&2
|
||||
}
|
||||
|
||||
# warn_ WORD1...
|
||||
warn_ ()
|
||||
{
|
||||
# If IFS does not start with ' ', set it and emit the warning in a subshell.
|
||||
case $IFS in
|
||||
' '*) warnf_ '%s\n' "$*";;
|
||||
*) (IFS=' '; warn_ "$@");;
|
||||
esac
|
||||
}
|
||||
|
||||
# die WORD1...
|
||||
die() { warn_ "$@"; exit 1; }
|
||||
|
||||
# Configuration.
|
||||
|
||||
# Name of the Makefile.am
|
||||
@@ -126,7 +157,8 @@ extract_package_name='
|
||||
p
|
||||
}
|
||||
'
|
||||
package=`sed -n "$extract_package_name" configure.ac` || exit
|
||||
package=$(sed -n "$extract_package_name" configure.ac) \
|
||||
|| die 'cannot find package name in configure.ac'
|
||||
gnulib_name=lib$package
|
||||
|
||||
build_aux=build-aux
|
||||
@@ -182,6 +214,8 @@ use_git=true
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
#
|
||||
# FIXME: code duplication, see also gnu-web-doc-update.
|
||||
find_tool ()
|
||||
{
|
||||
find_tool_envvar=$1
|
||||
@@ -199,19 +233,15 @@ find_tool ()
|
||||
else
|
||||
find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
fi
|
||||
if test x"$find_tool_res" = x; then
|
||||
echo >&2 "$me: one of these is required: $find_tool_names"
|
||||
exit 1
|
||||
fi
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
|
||||
echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
exit 1
|
||||
}
|
||||
test x"$find_tool_res" != x \
|
||||
|| die "one of these is required: $find_tool_names"
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 \
|
||||
|| die "${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
eval "$find_tool_envvar=\$find_tool_res"
|
||||
eval "export $find_tool_envvar"
|
||||
}
|
||||
|
||||
# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6.
|
||||
# Find sha1sum, named gsha1sum on MacPorts, and shasum on Mac OS X 10.6.
|
||||
find_tool SHA1SUM sha1sum gsha1sum shasum
|
||||
|
||||
# Override the default configuration, if necessary.
|
||||
@@ -226,7 +256,6 @@ esac
|
||||
test -z "${gnulib_extra_files}" && \
|
||||
gnulib_extra_files="
|
||||
$build_aux/install-sh
|
||||
$build_aux/missing
|
||||
$build_aux/mdate-sh
|
||||
$build_aux/texinfo.tex
|
||||
$build_aux/depcomp
|
||||
@@ -252,7 +281,7 @@ do
|
||||
usage
|
||||
exit;;
|
||||
--gnulib-srcdir=*)
|
||||
GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
|
||||
GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
|
||||
--skip-po)
|
||||
SKIP_PO=t;;
|
||||
--force)
|
||||
@@ -266,21 +295,15 @@ do
|
||||
--no-git)
|
||||
use_git=false;;
|
||||
*)
|
||||
echo >&2 "$0: $option: unknown option"
|
||||
exit 1;;
|
||||
die "$option: unknown option";;
|
||||
esac
|
||||
done
|
||||
|
||||
if $use_git || test -d "$GNULIB_SRCDIR"; then
|
||||
:
|
||||
else
|
||||
echo "$0: Error: --no-git requires --gnulib-srcdir" >&2
|
||||
exit 1
|
||||
fi
|
||||
$use_git || test -d "$GNULIB_SRCDIR" \
|
||||
|| die "Error: --no-git requires --gnulib-srcdir"
|
||||
|
||||
if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
|
||||
echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
|
||||
exit 1
|
||||
die "Bootstrapping from a non-checked-out distribution is risky."
|
||||
fi
|
||||
|
||||
# Ensure that lines starting with ! sort last, per gitignore conventions
|
||||
@@ -303,10 +326,10 @@ insert_sorted_if_absent() {
|
||||
file=$1
|
||||
str=$2
|
||||
test -f $file || touch $file
|
||||
echo "$str" | sort_patterns - $file | cmp - $file > /dev/null \
|
||||
echo "$str" | sort_patterns - $file | cmp -s - $file > /dev/null \
|
||||
|| { echo "$str" | sort_patterns - $file > $file.bak \
|
||||
&& mv $file.bak $file; } \
|
||||
|| exit 1
|
||||
|| die "insert_sorted_if_absent $file $str: failed"
|
||||
}
|
||||
|
||||
# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
|
||||
@@ -319,7 +342,7 @@ insert_vc_ignore() {
|
||||
# A .gitignore entry that does not start with '/' applies
|
||||
# recursively to subdirectories, so prepend '/' to every
|
||||
# .gitignore entry.
|
||||
pattern=`echo "$pattern" | sed s,^,/,`;;
|
||||
pattern=$(echo "$pattern" | sed s,^,/,);;
|
||||
esac
|
||||
insert_sorted_if_absent "$vc_ignore_file" "$pattern"
|
||||
}
|
||||
@@ -330,11 +353,8 @@ grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
|
||||
>/dev/null && found_aux_dir=yes
|
||||
grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
|
||||
>/dev/null && found_aux_dir=yes
|
||||
if test $found_aux_dir = no; then
|
||||
echo "$0: expected line not found in configure.ac. Add the following:" >&2
|
||||
echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
|
||||
exit 1
|
||||
fi
|
||||
test $found_aux_dir = yes \
|
||||
|| die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
|
||||
|
||||
# If $build_aux doesn't exist, create it now, otherwise some bits
|
||||
# below will malfunction. If creating it, also mark it as ignored.
|
||||
@@ -423,31 +443,48 @@ check_versions() {
|
||||
$use_git || continue
|
||||
fi
|
||||
# Honor $APP variables ($TAR, $AUTOCONF, etc.)
|
||||
appvar=`echo $app | tr '[a-z]-' '[A-Z]_'`
|
||||
appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
|
||||
test "$appvar" = TAR && appvar=AMTAR
|
||||
case $appvar in
|
||||
GZIP) ;; # Do not use $GZIP: it contains gzip options.
|
||||
*) eval "app=\${$appvar-$app}" ;;
|
||||
esac
|
||||
|
||||
# Handle the still-experimental Automake-NG programs specially.
|
||||
# They remain named as the mainstream Automake programs ("automake",
|
||||
# and "aclocal") to avoid gratuitous incompatibilities with
|
||||
# pre-existing usages (by, say, autoreconf, or custom autogen.sh
|
||||
# scripts), but correctly identify themselves (as being part of
|
||||
# "GNU automake-ng") when asked their version.
|
||||
case $app in
|
||||
automake-ng|aclocal-ng)
|
||||
app=${app%-ng}
|
||||
($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
|
||||
warn_ "Error: '$app' not found or not from Automake-NG"
|
||||
ret=1
|
||||
continue
|
||||
} ;;
|
||||
esac
|
||||
if [ "$req_ver" = "-" ]; then
|
||||
# Merely require app to exist; not all prereq apps are well-behaved
|
||||
# so we have to rely on $? rather than get_version.
|
||||
$app --version >/dev/null 2>&1
|
||||
if [ 126 -le $? ]; then
|
||||
echo "$me: Error: '$app' not found" >&2
|
||||
warn_ "Error: '$app' not found"
|
||||
ret=1
|
||||
fi
|
||||
else
|
||||
# Require app to produce a new enough version string.
|
||||
inst_ver=$(get_version $app)
|
||||
if [ ! "$inst_ver" ]; then
|
||||
echo "$me: Error: '$app' not found" >&2
|
||||
warn_ "Error: '$app' not found"
|
||||
ret=1
|
||||
else
|
||||
latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
|
||||
if [ ! "$latest_ver" = "$inst_ver" ]; then
|
||||
echo "$me: Error: '$app' version == $inst_ver is too old" >&2
|
||||
echo " '$app' version >= $req_ver is required" >&2
|
||||
warnf_ '%s\n' \
|
||||
"Error: '$app' version == $inst_ver is too old" \
|
||||
" '$app' version >= $req_ver is required"
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
@@ -492,10 +529,8 @@ esac
|
||||
|
||||
# When we can deduce that gnulib-tool will require patch,
|
||||
# and when patch is not already listed as a prerequisite, add it, too.
|
||||
if test ! -d "$local_gl_dir" \
|
||||
|| find "$local_gl_dir" -name '*.diff' -exec false {} +; then
|
||||
:
|
||||
else
|
||||
if test -d "$local_gl_dir" \
|
||||
&& ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
|
||||
case $buildreq in
|
||||
*patch*) ;;
|
||||
*) buildreq="patch -
|
||||
@@ -506,11 +541,10 @@ fi
|
||||
if ! printf "$buildreq" | check_versions; then
|
||||
echo >&2
|
||||
if test -f README-prereq; then
|
||||
echo "$0: See README-prereq for how to get the prerequisite programs" >&2
|
||||
die "See README-prereq for how to get the prerequisite programs"
|
||||
else
|
||||
echo "$0: Please install the prerequisite programs" >&2
|
||||
die "Please install the prerequisite programs"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$0: Bootstrapping from checked-out $package sources..."
|
||||
@@ -539,7 +573,7 @@ git_modules_config () {
|
||||
test -f .gitmodules && git config --file .gitmodules "$@"
|
||||
}
|
||||
|
||||
gnulib_path=`git_modules_config submodule.gnulib.path`
|
||||
gnulib_path=$(git_modules_config submodule.gnulib.path)
|
||||
test -z "$gnulib_path" && gnulib_path=gnulib
|
||||
|
||||
# Get gnulib files.
|
||||
@@ -604,7 +638,7 @@ if $bootstrap_sync; then
|
||||
fi
|
||||
|
||||
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
||||
<$gnulib_tool || exit
|
||||
<$gnulib_tool || exit $?
|
||||
|
||||
# Get translations.
|
||||
|
||||
@@ -612,10 +646,10 @@ download_po_files() {
|
||||
subdir=$1
|
||||
domain=$2
|
||||
echo "$me: getting translations into $subdir for $domain..."
|
||||
cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
|
||||
cmd=$(printf "$po_download_command_format" "$domain" "$subdir")
|
||||
eval "$cmd" && return
|
||||
# Fallback to HTTP.
|
||||
cmd=`printf "$po_download_command_format2" "$subdir" "$domain"`
|
||||
cmd=$(printf "$po_download_command_format2" "$subdir" "$domain")
|
||||
eval "$cmd"
|
||||
}
|
||||
|
||||
@@ -638,7 +672,7 @@ update_po_files() {
|
||||
&& ls "$ref_po_dir"/*.po 2>/dev/null |
|
||||
sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
|
||||
|
||||
langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
|
||||
langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
|
||||
test "$langs" = '*' && langs=x
|
||||
for po in $langs; do
|
||||
case $po in x) continue;; esac
|
||||
@@ -675,18 +709,18 @@ symlink_to_dir()
|
||||
|
||||
# If the destination directory doesn't exist, create it.
|
||||
# This is required at least for "lib/uniwidth/cjk.h".
|
||||
dst_dir=`dirname "$dst"`
|
||||
dst_dir=$(dirname "$dst")
|
||||
if ! test -d "$dst_dir"; then
|
||||
mkdir -p "$dst_dir"
|
||||
|
||||
# If we've just created a directory like lib/uniwidth,
|
||||
# tell version control system(s) it's ignorable.
|
||||
# FIXME: for now, this does only one level
|
||||
parent=`dirname "$dst_dir"`
|
||||
parent=$(dirname "$dst_dir")
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
ig=$parent/$dot_ig
|
||||
insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
|
||||
insert_vc_ignore $ig "${dst_dir##*/}"
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -710,10 +744,10 @@ symlink_to_dir()
|
||||
# so that broken tools aren't confused into skipping needed builds. See
|
||||
# <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00326.html>.
|
||||
test -h "$dst" &&
|
||||
src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
|
||||
dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
|
||||
src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
|
||||
dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
|
||||
test "$src_i" = "$dst_i" &&
|
||||
both_ls=`ls -dt "$src" "$dst"` &&
|
||||
both_ls=$(ls -dt "$src" "$dst") &&
|
||||
test "X$both_ls" = "X$dst$nl$src" || {
|
||||
dot_dots=
|
||||
case $src in
|
||||
@@ -721,11 +755,10 @@ symlink_to_dir()
|
||||
*)
|
||||
case /$dst/ in
|
||||
*//* | */../* | */./* | /*/*/*/*/*/)
|
||||
echo >&2 "$me: invalid symlink calculation: $src -> $dst"
|
||||
exit 1;;
|
||||
/*/*/*/*/) dot_dots=../../../;;
|
||||
/*/*/*/) dot_dots=../../;;
|
||||
/*/*/) dot_dots=../;;
|
||||
die "invalid symlink calculation: $src -> $dst";;
|
||||
/*/*/*/*/) dot_dots=../../../;;
|
||||
/*/*/*/) dot_dots=../../;;
|
||||
/*/*/) dot_dots=../;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
@@ -736,6 +769,22 @@ symlink_to_dir()
|
||||
}
|
||||
}
|
||||
|
||||
version_controlled_file() {
|
||||
parent=$1
|
||||
file=$2
|
||||
if test -d .git; then
|
||||
git rm -n "$file" > /dev/null 2>&1
|
||||
elif test -d .svn; then
|
||||
svn log -r HEAD "$file" > /dev/null 2>&1
|
||||
elif test -d CVS; then
|
||||
grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
|
||||
grep '^/[^/]*/[0-9]' > /dev/null
|
||||
else
|
||||
warn_ "no version control for $file?"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
# NOTE: we have to be careful to run both autopoint and libtoolize
|
||||
# before gnulib-tool, since gnulib-tool is likely to provide newer
|
||||
# versions of files "installed" by these two programs.
|
||||
@@ -748,37 +797,54 @@ with_gettext=yes
|
||||
grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
|
||||
with_gettext=no
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
# Released autopoint has the tendency to install macros that have been
|
||||
# obsoleted in current gnulib, so run this before gnulib-tool.
|
||||
echo "$0: $AUTOPOINT --force"
|
||||
$AUTOPOINT --force || exit
|
||||
fi
|
||||
if test $with_gettext = yes || test $use_libtool = 1; then
|
||||
|
||||
# Autoreconf runs aclocal before libtoolize, which causes spurious
|
||||
# warnings if the initial aclocal is confused by the libtoolized
|
||||
# (or worse out-of-date) macro directory.
|
||||
if test $use_libtool = 1; then
|
||||
echo "running: $LIBTOOLIZE --copy --install"
|
||||
$LIBTOOLIZE --copy --install
|
||||
fi
|
||||
tempbase=.bootstrap$$
|
||||
trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15
|
||||
|
||||
version_controlled_file() {
|
||||
dir=$1
|
||||
file=$2
|
||||
found=no
|
||||
if test -d CVS; then
|
||||
grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
|
||||
grep '^/[^/]*/[0-9]' > /dev/null && found=yes
|
||||
elif test -d .git; then
|
||||
git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
elif test -d .svn; then
|
||||
svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
else
|
||||
echo "$me: no version control for $dir/$file?" >&2
|
||||
> $tempbase.0 > $tempbase.1 &&
|
||||
find . ! -type d -print | sort > $tempbase.0 || exit
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
# Released autopoint has the tendency to install macros that have been
|
||||
# obsoleted in current gnulib, so run this before gnulib-tool.
|
||||
echo "$0: $AUTOPOINT --force"
|
||||
$AUTOPOINT --force || exit
|
||||
fi
|
||||
test $found = yes
|
||||
}
|
||||
|
||||
# Autoreconf runs aclocal before libtoolize, which causes spurious
|
||||
# warnings if the initial aclocal is confused by the libtoolized
|
||||
# (or worse out-of-date) macro directory.
|
||||
# libtoolize 1.9b added the --install option; but we support back
|
||||
# to libtoolize 1.5.22, where the install action was default.
|
||||
if test $use_libtool = 1; then
|
||||
install=
|
||||
case $($LIBTOOLIZE --help) in
|
||||
*--install*) install=--install ;;
|
||||
esac
|
||||
echo "running: $LIBTOOLIZE $install --copy"
|
||||
$LIBTOOLIZE $install --copy
|
||||
fi
|
||||
|
||||
find . ! -type d -print | sort >$tempbase.1
|
||||
old_IFS=$IFS
|
||||
IFS=$nl
|
||||
for file in $(comm -13 $tempbase.0 $tempbase.1); do
|
||||
IFS=$old_IFS
|
||||
parent=${file%/*}
|
||||
version_controlled_file "$parent" "$file" || {
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
ig=$parent/$dot_ig
|
||||
insert_vc_ignore "$ig" "${file##*/}"
|
||||
done
|
||||
}
|
||||
done
|
||||
IFS=$old_IFS
|
||||
|
||||
rm -f $tempbase.0 $tempbase.1
|
||||
trap - 1 2 13 15
|
||||
fi
|
||||
|
||||
# Import from gnulib.
|
||||
|
||||
@@ -804,11 +870,12 @@ echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
|
||||
$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
|
||||
|
||||
for file in $gnulib_files; do
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file || exit
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file \
|
||||
|| die "failed to symlink $file"
|
||||
done
|
||||
|
||||
bootstrap_post_import_hook \
|
||||
|| { echo >&2 "$me: bootstrap_post_import_hook failed"; exit 1; }
|
||||
|| die "bootstrap_post_import_hook failed"
|
||||
|
||||
# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
|
||||
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
||||
@@ -836,16 +903,17 @@ echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
|
||||
"$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
|
||||
AUTOPOINT=true LIBTOOLIZE=true \
|
||||
$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
|
||||
|| exit 1
|
||||
|| die "autoreconf failed"
|
||||
|
||||
# Get some extra files from gnulib, overriding existing files.
|
||||
for file in $gnulib_extra_files; do
|
||||
case $file in
|
||||
*/INSTALL) dst=INSTALL;;
|
||||
build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
|
||||
build-aux/*) dst=$build_aux/${file#build-aux/};;
|
||||
*) dst=$file;;
|
||||
esac
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
|
||||
|| die "failed to symlink $file"
|
||||
done
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
@@ -861,7 +929,19 @@ if test $with_gettext = yes; then
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' po/Makevars.template >po/Makevars || exit 1
|
||||
' po/Makevars.template >po/Makevars \
|
||||
|| die 'cannot generate po/Makevars'
|
||||
|
||||
# If the 'gettext' module is in use, grab the latest Makefile.in.in.
|
||||
# If only the 'gettext-h' module is in use, assume autopoint already
|
||||
# put the correct version of this file into place.
|
||||
case $gnulib_modules in
|
||||
*gettext-h*) ;;
|
||||
*gettext*)
|
||||
cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
|
||||
|| die "cannot create po/Makefile.in.in"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -d runtime-po; then
|
||||
# Similarly for runtime-po/Makevars, but not quite the same.
|
||||
@@ -875,7 +955,8 @@ if test $with_gettext = yes; then
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' po/Makevars.template >runtime-po/Makevars || exit 1
|
||||
' po/Makevars.template >runtime-po/Makevars \
|
||||
|| die 'cannot generate runtime-po/Makevars'
|
||||
|
||||
# Copy identical files from po to runtime-po.
|
||||
(cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
|
||||
|
@@ -23,7 +23,6 @@ accept
|
||||
areadlink
|
||||
base64
|
||||
bind
|
||||
bitrotate
|
||||
byteswap
|
||||
c-ctype
|
||||
c-strcase
|
||||
@@ -41,7 +40,6 @@ environ
|
||||
fclose
|
||||
fcntl
|
||||
fcntl-h
|
||||
fdatasync
|
||||
ffs
|
||||
fnmatch
|
||||
fsync
|
||||
@@ -60,6 +58,7 @@ ignore-value
|
||||
inet_pton
|
||||
intprops
|
||||
ioctl
|
||||
isatty
|
||||
largefile
|
||||
listen
|
||||
maintainer-makefile
|
||||
@@ -69,7 +68,6 @@ mkstemps
|
||||
mktempd
|
||||
netdb
|
||||
nonblocking
|
||||
openpty
|
||||
passfd
|
||||
perror
|
||||
physmem
|
||||
@@ -80,6 +78,7 @@ posix-shell
|
||||
pthread
|
||||
pthread_sigmask
|
||||
recv
|
||||
regex
|
||||
random_r
|
||||
sched
|
||||
send
|
||||
@@ -103,7 +102,6 @@ sys_wait
|
||||
termios
|
||||
time_r
|
||||
timegm
|
||||
ttyname_r
|
||||
uname
|
||||
useless-if-before-free
|
||||
usleep
|
||||
@@ -161,10 +159,9 @@ fi
|
||||
|
||||
# Tell gnulib to:
|
||||
# require LGPLv2+
|
||||
# apply any local diffs in gnulib/local/ dir
|
||||
# put *.m4 files in new gnulib/m4/ dir
|
||||
# put *.[ch] files in new gnulib/lib/ dir
|
||||
# import gnulib tests in new gnulib/tests/ dir
|
||||
# put *.[ch] files in new gnulib/lib/ dir.
|
||||
# import gnulib tests in new gnulib/tests/ dir.
|
||||
gnulib_name=libgnu
|
||||
m4_base=gnulib/m4
|
||||
source_base=gnulib/lib
|
||||
@@ -173,9 +170,7 @@ gnulib_tool_option_extras="\
|
||||
--lgpl=2\
|
||||
--with-tests\
|
||||
--makefile-name=gnulib.mk\
|
||||
--avoid=pt_chown\
|
||||
"
|
||||
local_gl_dir=gnulib/local
|
||||
|
||||
# Convince bootstrap to use multiple m4 directories.
|
||||
: ${ACLOCAL=aclocal}
|
||||
@@ -183,12 +178,6 @@ ACLOCAL="$ACLOCAL -I m4"
|
||||
export ACLOCAL
|
||||
|
||||
# Build prerequisites
|
||||
# Note that some of these programs are only required for 'make dist' to
|
||||
# succeed from a fresh git checkout; not all of these programs are
|
||||
# required to run 'make dist' on a tarball. As a special case, we want
|
||||
# to require the equivalent of the Fedora python-devel package, but
|
||||
# RHEL 5 lacks the witness python-config package; we hack around that
|
||||
# old environment below.
|
||||
buildreq="\
|
||||
autoconf 2.59
|
||||
automake 1.9.6
|
||||
@@ -197,22 +186,11 @@ gettext 0.17
|
||||
git 1.5.5
|
||||
gzip -
|
||||
libtool -
|
||||
patch -
|
||||
perl 5.5
|
||||
pkg-config -
|
||||
python-config -
|
||||
rpcgen -
|
||||
tar -
|
||||
xmllint -
|
||||
xsltproc -
|
||||
"
|
||||
# Use rpm as a fallback to bypass the bootstrap probe for python-config,
|
||||
# for the sake of RHEL 5; without requiring it on newer systems that
|
||||
# have python-config to begin with.
|
||||
if `(${PYTHON_CONFIG-python-config} --version;
|
||||
test $? -lt 126 || rpm -q python-devel) >/dev/null 2>&1`; then
|
||||
PYTHON_CONFIG=true
|
||||
fi
|
||||
|
||||
# Automake requires that ChangeLog exist.
|
||||
touch ChangeLog || exit 1
|
||||
@@ -220,7 +198,6 @@ touch ChangeLog || exit 1
|
||||
# Override bootstrap's list - we don't use mdate-sh or texinfo.tex.
|
||||
gnulib_extra_files="
|
||||
$build_aux/install-sh
|
||||
$build_aux/missing
|
||||
$build_aux/depcomp
|
||||
$build_aux/config.guess
|
||||
$build_aux/config.sub
|
||||
|
52
cfg.mk
52
cfg.mk
@@ -1,5 +1,5 @@
|
||||
# Customize Makefile.maint. -*- makefile -*-
|
||||
# Copyright (C) 2008-2012 Red Hat, Inc.
|
||||
# Copyright (C) 2008-2011 Red Hat, Inc.
|
||||
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
@@ -36,9 +36,6 @@ generated_files = \
|
||||
$(srcdir)/src/remote/*_protocol.[ch] \
|
||||
$(srcdir)/gnulib/lib/*.[ch]
|
||||
|
||||
# We haven't converted all scripts to using gnulib's init.sh yet.
|
||||
_test_script_regex = \<\(init\|test-lib\)\.sh\>
|
||||
|
||||
# Tests not to run as part of "make distcheck".
|
||||
local-checks-to-skip = \
|
||||
changelog-check \
|
||||
@@ -76,6 +73,17 @@ local-checks-to-skip = \
|
||||
sc_makefile_check \
|
||||
sc_useless_cpp_parens
|
||||
|
||||
# Most developers don't run 'make distcheck'. We want the official
|
||||
# dist to be secure, but don't want to penalize other developers
|
||||
# using a distro that has not yet picked up the automake fix.
|
||||
# FIXME remove this ifeq (making the syntax check unconditional)
|
||||
# once fixed automake (1.11.6 or 1.12.2+) is more common.
|
||||
ifeq ($(filter dist%, $(MAKECMDGOALS)), )
|
||||
local-checks-to-skip += sc_vulnerable_makefile_CVE-2012-3386
|
||||
else
|
||||
distdir: sc_vulnerable_makefile_CVE-2012-3386
|
||||
endif
|
||||
|
||||
# Files that should never cause syntax check failures.
|
||||
VC_LIST_ALWAYS_EXCLUDE_REGEX = \
|
||||
(^(HACKING|docs/(news\.html\.in|.*\.patch))|\.po)$$
|
||||
@@ -171,7 +179,6 @@ useless_free_options = \
|
||||
--name=xmlBufferFree \
|
||||
--name=xmlFree \
|
||||
--name=xmlFreeDoc \
|
||||
--name=xmlFreeNode \
|
||||
--name=xmlXPathFreeContext \
|
||||
--name=xmlXPathFreeObject
|
||||
|
||||
@@ -316,12 +323,6 @@ sc_prohibit_internal_functions:
|
||||
halt='use VIR_ macros instead of internal functions' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Avoid raw malloc and free, except in documentation comments.
|
||||
sc_prohibit_raw_allocation:
|
||||
@prohibit='^.[^*].*\<((m|c|re)alloc|free) *\([^)]' \
|
||||
halt='use VIR_ macros from memory.h instead of malloc/free' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Avoid functions that can lead to double-close bugs.
|
||||
sc_prohibit_close:
|
||||
@prohibit='([^>.]|^)\<[fp]?close *\(' \
|
||||
@@ -372,11 +373,6 @@ sc_prohibit_sprintf:
|
||||
halt='use snprintf, not s'printf \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_strncpy:
|
||||
@prohibit='strncpy *\(' \
|
||||
halt='use virStrncpy, not strncpy' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_readlink:
|
||||
@prohibit='readlink *\(' \
|
||||
halt='use virFileResolveLink, not readlink' \
|
||||
@@ -419,11 +415,11 @@ sc_prohibit_ctype_h:
|
||||
# Ensure that no C source file, docs, or rng schema uses TABs for
|
||||
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
||||
# files in gnulib, since they're imported.
|
||||
space_indent_files=(\.(rng|s?[ch](\.in)?|html.in|py|syms)|(daemon|tools)/.*\.in)
|
||||
space_indent_files=(\.(rng|s?[ch](\.in)?|html.in|py)|(daemon|tools)/.*\.in)
|
||||
sc_TAB_in_indentation:
|
||||
@prohibit='^ * ' \
|
||||
in_vc_files='$(space_indent_files)$$' \
|
||||
halt='indent with space, not TAB, in C, sh, html, py, syms and RNG schemas' \
|
||||
halt='indent with space, not TAB, in C, sh, html, py, and RNG schemas' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
||||
@@ -617,17 +613,6 @@ sc_prohibit_gettext_markup:
|
||||
halt='do not mark these strings for translation' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# When converting an enum to a string, make sure that we track any new
|
||||
# elements added to the enum by using a _LAST marker.
|
||||
sc_require_enum_last_marker:
|
||||
@grep -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' $$($(VC_LIST_EXCEPT)) \
|
||||
| sed -ne '/VIR_ENUM_IMPL[^,]*,$$/N' \
|
||||
-e '/VIR_ENUM_IMPL[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
||||
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
|
||||
| grep . && \
|
||||
{ echo '$(ME): enum impl needs to use _LAST marker' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# We don't use this feature of maint.mk.
|
||||
prev_version_file = /dev/null
|
||||
|
||||
@@ -648,7 +633,6 @@ ifeq (0,$(MAKELEVEL))
|
||||
test -f po/Makevars || { echo 1; exit; }; \
|
||||
actual=$$(git submodule status | $(_submodule_hash); \
|
||||
git hash-object bootstrap.conf; \
|
||||
git ls-tree -d HEAD gnulib/local | awk '{print $$3}'; \
|
||||
git diff .gnulib); \
|
||||
stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \
|
||||
test "$$stamp" = "$$actual"; echo $$?)
|
||||
@@ -698,7 +682,7 @@ $(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\.c$$
|
||||
|
||||
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(command|util)|xen/xend_internal|rpc/virnetsocket|lxc/lxc_controller
|
||||
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(command|util)|xen/xend_internal|rpc/virnetsocket
|
||||
exclude_file_name_regexp--sc_avoid_write = \
|
||||
^(src/($(_src1))|daemon/libvirtd|tools/console|tests/(shunload|virnettlscontext)test)\.c$$
|
||||
|
||||
@@ -743,15 +727,11 @@ exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
|
||||
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
||||
^((po|tests)/|docs/.*py$$|tools/(virsh|console)\.c$$)
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
||||
^(src/util/memory\.[ch]|examples/.*)$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_readlink = ^src/util/util\.c$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/util\.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_sprintf = ^docs/hacking\.html\.in$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_strncpy = \
|
||||
^(src/util/util|tools/virsh)\.c$$
|
||||
|
124
configure.ac
124
configure.ac
@@ -3,13 +3,13 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
dnl Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
dnl See COPYING.LIB for the License of this software
|
||||
|
||||
AC_INIT([libvirt], [0.9.9], [libvir-list@redhat.com], [], [http://libvirt.org])
|
||||
AC_INIT([libvirt], [0.9.6.2], [libvir-list@redhat.com], [], [http://libvirt.org])
|
||||
AC_CONFIG_SRCDIR([src/libvirt.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
dnl Make automake keep quiet about wildcards & other GNUmake-isms
|
||||
AM_INIT_AUTOMAKE([-Wno-portability])
|
||||
AM_INIT_AUTOMAKE([-Wno-portability tar-ustar])
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
|
||||
# Maintainer note - comment this line out if you plan to rerun
|
||||
@@ -131,15 +131,18 @@ 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 fdatasync geteuid getgid getgrnam_r getmntent_r \
|
||||
getpwuid_r getuid initgroups kill mmap posix_fallocate posix_memalign \
|
||||
regexec sched_getaffinity])
|
||||
if test $ac_cv_func_fdatasync = no; then
|
||||
AC_DEFINE([fdatasync], [fsync], [Define to fsync if you lack fdatasync])
|
||||
fi
|
||||
|
||||
dnl Availability of pthread functions (if missing, win32 threading is
|
||||
dnl assumed). Because of $LIB_PTHREAD, we cannot use AC_CHECK_FUNCS_ONCE.
|
||||
dnl LIB_PTHREAD and LIBMULTITHREAD were set during gl_INIT by gnulib.
|
||||
dnl LIB_PTHREAD was set during gl_INIT by gnulib.
|
||||
old_LIBS=$LIBS
|
||||
LIBS="$LIBS $LIB_PTHREAD $LIBMULTITHREAD"
|
||||
LIBS="$LIBS $LIB_PTHREAD"
|
||||
AC_CHECK_FUNCS([pthread_mutexattr_init])
|
||||
LIBS=$old_libs
|
||||
|
||||
@@ -156,22 +159,7 @@ AC_SUBST(RT_LIBS)
|
||||
dnl Availability of various common headers (non-fatal if missing).
|
||||
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
|
||||
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
|
||||
sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h \
|
||||
net/if.h])
|
||||
|
||||
AC_MSG_CHECKING([for struct ifreq in net/if.h])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <net/if.h>
|
||||
]],
|
||||
[[
|
||||
struct ifreq ifr;
|
||||
]])],[
|
||||
AC_DEFINE([HAVE_STRUCT_IFREQ],[],[Defined if struct ifreq existsin net/if.h])
|
||||
AC_MSG_RESULT([yes])
|
||||
],[
|
||||
AC_MSG_RESULT([yes])
|
||||
])
|
||||
sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h])
|
||||
|
||||
dnl Our only use of libtasn1.h is in the testsuite, and can be skipped
|
||||
dnl if the header is not present. Assume -ltasn1 is present if the
|
||||
@@ -218,6 +206,8 @@ AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
|
||||
[Location or name of the dnsmasq program])
|
||||
AC_DEFINE_UNQUOTED([RADVD],["$RADVD"],
|
||||
[Location or name of the radvd program])
|
||||
AC_DEFINE_UNQUOTED([BRCTL],["$BRCTL"],
|
||||
[Location or name of the brctl program (see bridge-utils)])
|
||||
AC_DEFINE_UNQUOTED([TC],["$TC"],
|
||||
[Location or name of the tc profram (see iproute2)])
|
||||
if test -n "$UDEVADM"; then
|
||||
@@ -265,10 +255,9 @@ if test "$prefix" = "/usr" && test "$sysconfdir" = '${prefix}/etc' ; then
|
||||
fi
|
||||
|
||||
dnl Make some notes about which OS we're compiling for, as the lxc and qemu
|
||||
dnl drivers require linux headers, and storage_mpath, dtrace, and nwfilter
|
||||
dnl are also linux specific. The "network" and storage_fs drivers are known
|
||||
dnl to not work on MacOS X presently, so we also make a note if compiling
|
||||
dnl for that
|
||||
dnl drivers require linux headers, while storage_mpath and nwfilter are also
|
||||
dnl linux specific. The "network" and storage_fs drivers are known to not
|
||||
dnl work on MacOS X presently, so we also make a note if compiling for that
|
||||
|
||||
with_linux=no with_osx=no
|
||||
case $host in
|
||||
@@ -285,7 +274,6 @@ if test $with_linux = no; then
|
||||
then
|
||||
with_qemu=no
|
||||
fi
|
||||
with_dtrace=no
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([WITH_LINUX], [test "$with_linux" = "yes"])
|
||||
@@ -351,41 +339,16 @@ dnl init script flavor
|
||||
dnl
|
||||
AC_MSG_CHECKING([for init script flavor])
|
||||
AC_ARG_WITH([init-script],
|
||||
[AC_HELP_STRING([--with-init-script@<:@=STYLE@:>@],
|
||||
[Style of init script to install: redhat, systemd, systemd+redhat,
|
||||
upstart, auto, none @<:@default=auto@:>@])],[],[with_init_script=check])
|
||||
init_redhat=no
|
||||
init_systemd=no
|
||||
init_upstart=no
|
||||
case "$with_init_script" in
|
||||
systemd+redhat)
|
||||
init_redhat=yes
|
||||
init_systemd=yes
|
||||
;;
|
||||
systemd)
|
||||
init_systemd=yes
|
||||
;;
|
||||
upstart)
|
||||
init_upstart=yes
|
||||
;;
|
||||
redhat)
|
||||
init_redhat=yes
|
||||
;;
|
||||
none)
|
||||
;;
|
||||
check)
|
||||
if test "$cross_compiling" != yes && test -f /etc/redhat-release; then
|
||||
init_redhat=yes
|
||||
with_init_script=redhat
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Unknown initscript flavour $with_init_script])
|
||||
;;
|
||||
esac
|
||||
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_RED_HAT], test "$init_redhat" = "yes")
|
||||
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_UPSTART], test "$init_upstart" = "yes")
|
||||
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_SYSTEMD], test "$init_systemd" = "yes")
|
||||
[AC_HELP_STRING([--with-init-script=@<:@redhat|auto|none@:>@],
|
||||
[Style of init script to install @<:@default=auto@:>@])])
|
||||
if test "x$with_init_script" = "x" || test "x$with_init_script" = "xauto"; then
|
||||
if test "$cross_compiling" = yes || test ! -f /etc/redhat-release; then
|
||||
with_init_script=none
|
||||
else
|
||||
with_init_script=redhat
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_RED_HAT], test x$with_init_script = xredhat)
|
||||
AC_MSG_RESULT($with_init_script)
|
||||
|
||||
dnl RHEL-5 has a peculiar version of Xen, which requires some special casing
|
||||
@@ -733,18 +696,16 @@ fi
|
||||
if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then
|
||||
AC_TRY_LINK([
|
||||
#include <sched.h>
|
||||
#include <linux/loop.h>
|
||||
#include <sys/epoll.h>
|
||||
], [
|
||||
unshare (!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
|
||||
unshare (1);
|
||||
], [
|
||||
with_lxc=yes
|
||||
], [
|
||||
if test "$with_lxc" = "check"; then
|
||||
with_lxc=no
|
||||
AC_MSG_NOTICE([Required kernel features were not found, disabling LXC])
|
||||
AC_MSG_NOTICE([Function unshare() not present in <sched.h> header but required for LXC driver, disabling it])
|
||||
else
|
||||
AC_MSG_ERROR([Required kernel features for LXC were not found])
|
||||
AC_MSG_ERROR([Function unshare() not present in <sched.h> header, but required for LXC driver])
|
||||
fi
|
||||
])
|
||||
fi
|
||||
@@ -1614,9 +1575,6 @@ AC_ARG_WITH([netcf],
|
||||
|
||||
NETCF_CFLAGS=
|
||||
NETCF_LIBS=
|
||||
if test "$with_libvirtd" = "no" ; then
|
||||
with_netcf=no
|
||||
fi
|
||||
if test "$with_netcf" = "yes" || test "$with_netcf" = "check"; then
|
||||
PKG_CHECK_MODULES(NETCF, netcf >= $NETCF_REQUIRED,
|
||||
[with_netcf=yes], [
|
||||
@@ -1741,7 +1699,6 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
||||
AC_PATH_PROG([PVREMOVE], [pvremove], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([VGREMOVE], [vgremove], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([LVREMOVE], [lvremove], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([LVCHANGE], [lvchange], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([VGCHANGE], [vgchange], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([VGSCAN], [vgscan], [], [$PATH:/sbin:/usr/sbin])
|
||||
AC_PATH_PROG([PVS], [pvs], [], [$PATH:/sbin:/usr/sbin])
|
||||
@@ -1755,7 +1712,6 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
||||
if test -z "$PVREMOVE" ; then AC_MSG_ERROR([We need pvremove for LVM storage driver]) ; fi
|
||||
if test -z "$VGREMOVE" ; then AC_MSG_ERROR([We need vgremove for LVM storage driver]) ; fi
|
||||
if test -z "$LVREMOVE" ; then AC_MSG_ERROR([We need lvremove for LVM storage driver]) ; fi
|
||||
if test -z "$LVCHANGE" ; then AC_MSG_ERROR([We need lvchange for LVM storage driver]) ; fi
|
||||
if test -z "$VGCHANGE" ; then AC_MSG_ERROR([We need vgchange for LVM storage driver]) ; fi
|
||||
if test -z "$VGSCAN" ; then AC_MSG_ERROR([We need vgscan for LVM storage driver]) ; fi
|
||||
if test -z "$PVS" ; then AC_MSG_ERROR([We need pvs for LVM storage driver]) ; fi
|
||||
@@ -1768,7 +1724,6 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
||||
if test -z "$PVREMOVE" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$VGREMOVE" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$LVREMOVE" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$LVCHANGE" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$VGCHANGE" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$VGSCAN" ; then with_storage_lvm=no ; fi
|
||||
if test -z "$PVS" ; then with_storage_lvm=no ; fi
|
||||
@@ -1786,7 +1741,6 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
||||
AC_DEFINE_UNQUOTED([PVREMOVE],["$PVREMOVE"],[Location of pvremove program])
|
||||
AC_DEFINE_UNQUOTED([VGREMOVE],["$VGREMOVE"],[Location of vgremove program])
|
||||
AC_DEFINE_UNQUOTED([LVREMOVE],["$LVREMOVE"],[Location of lvremove program])
|
||||
AC_DEFINE_UNQUOTED([LVCHANGE],["$LVCHANGE"],[Location of lvchange program])
|
||||
AC_DEFINE_UNQUOTED([VGCHANGE],["$VGCHANGE"],[Location of vgchange program])
|
||||
AC_DEFINE_UNQUOTED([VGSCAN],["$VGSCAN"],[Location of vgscan program])
|
||||
AC_DEFINE_UNQUOTED([PVS],["$PVS"],[Location of pvs program])
|
||||
@@ -2500,31 +2454,8 @@ AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"])
|
||||
AC_SUBST([LIBNL_CFLAGS])
|
||||
AC_SUBST([LIBNL_LIBS])
|
||||
|
||||
dnl scrub program for different volume wiping algorithms
|
||||
|
||||
AC_ARG_WITH([scrub],
|
||||
AC_HELP_STRING([--with-scrub], [enable different volume wiping algorithms
|
||||
@<:@default=check@:>@]),
|
||||
[with_macvtap=${withval}],
|
||||
[with_scrub=check])
|
||||
|
||||
if test "$with_scrub" != "no"; then
|
||||
AC_PATH_PROG([SCRUB], [scrub])
|
||||
if test -z "$SCRUB" ; then
|
||||
if test "$with_scrub" = "check"; then
|
||||
with_scrub=no
|
||||
else
|
||||
AC_MSG_ERROR([You must install the 'scrub' binary to enable
|
||||
different volume wiping algorithms])
|
||||
fi
|
||||
else
|
||||
with_scrub=yes
|
||||
fi
|
||||
if test "$with_scrub" = "yes"; then
|
||||
AC_DEFINE_UNQUOTED([SCRUB], ["$SCRUB"],
|
||||
[Location of the scrub program])
|
||||
fi
|
||||
fi
|
||||
|
||||
# Only COPYING.LIB is under version control, yet COPYING
|
||||
# is included as part of the distribution tarball.
|
||||
@@ -2758,7 +2689,6 @@ AC_MSG_NOTICE([ Readline: $lv_use_readline])
|
||||
AC_MSG_NOTICE([ Python: $with_python])
|
||||
AC_MSG_NOTICE([ DTrace: $with_dtrace])
|
||||
AC_MSG_NOTICE([ XML Catalog: $XML_CATALOG_FILE])
|
||||
AC_MSG_NOTICE([ Init script: $with_init_script])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([Privileges])
|
||||
AC_MSG_NOTICE([])
|
||||
|
14
daemon/.gitignore
vendored
Normal file
14
daemon/.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
*.la
|
||||
*.lo
|
||||
.deps
|
||||
.libs
|
||||
Makefile
|
||||
Makefile.in
|
||||
libvirt_qemud
|
||||
libvirtd
|
||||
libvirtd.init
|
||||
libvirtd*.logrotate
|
||||
libvirtd.8
|
||||
libvirtd.8.in
|
||||
libvirtd.pod
|
||||
probes.h
|
@@ -1,12 +1,12 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
INCLUDES = \
|
||||
-I$(top_builddir)/gnulib/lib -I$(top_srcdir)/gnulib/lib \
|
||||
-I$(top_builddir)/include -I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/src -I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
|
||||
-I$(top_srcdir)/include -I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/util \
|
||||
-I$(top_srcdir)/src/conf \
|
||||
-I$(top_srcdir)/src/rpc \
|
||||
@@ -38,7 +38,6 @@ EXTRA_DIST = \
|
||||
libvirtd.policy-1 \
|
||||
libvirtd.sasl \
|
||||
libvirtd.sysconf \
|
||||
libvirtd.sysctl \
|
||||
libvirtd.aug \
|
||||
libvirtd.logrotate.in \
|
||||
libvirtd.qemu.logrotate.in \
|
||||
@@ -48,6 +47,7 @@ EXTRA_DIST = \
|
||||
THREADS.txt \
|
||||
libvirtd.pod.in \
|
||||
libvirtd.8.in \
|
||||
libvirtd.stp \
|
||||
$(DAEMON_SOURCES)
|
||||
|
||||
BUILT_SOURCES =
|
||||
@@ -109,11 +109,9 @@ libvirtd_LDADD = \
|
||||
$(SASL_LIBS) \
|
||||
$(POLKIT_LIBS)
|
||||
|
||||
if WITH_DTRACE
|
||||
libvirtd_LDADD += ../src/probes.o
|
||||
endif
|
||||
|
||||
libvirtd_LDADD += \
|
||||
../src/libvirt-net-rpc-server.la \
|
||||
../src/libvirt-net-rpc.la \
|
||||
../src/libvirt-qemu.la
|
||||
|
||||
if ! WITH_DRIVER_MODULES
|
||||
@@ -170,27 +168,41 @@ policyfile = libvirtd.policy-1
|
||||
endif
|
||||
endif
|
||||
|
||||
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
|
||||
if WITH_DTRACE
|
||||
libvirtd_LDADD += probes.o
|
||||
nodist_libvirtd_SOURCES = probes.h
|
||||
|
||||
uninstall-local:: uninstall-init-redhat uninstall-init-systemd uninstall-init-upstart \
|
||||
uninstall-data-sasl uninstall-data-polkit \
|
||||
uninstall-logrotate uninstall-sysctl
|
||||
BUILT_SOURCES += probes.h
|
||||
|
||||
tapsetdir = $(datadir)/systemtap/tapset
|
||||
tapset_DATA = libvirtd.stp
|
||||
|
||||
probes.h: probes.d
|
||||
$(AM_V_GEN)$(DTRACE) -o $@ -h -s $<
|
||||
|
||||
probes.o: probes.d
|
||||
$(AM_V_GEN)$(DTRACE) -o $@ -G -s $<
|
||||
|
||||
CLEANFILES += probes.h probes.o
|
||||
endif
|
||||
|
||||
install-data-local: install-init install-data-sasl install-data-polkit \
|
||||
install-logrotate
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/run/libvirt
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/lib/libvirt
|
||||
|
||||
uninstall-local:: uninstall-init uninstall-data-sasl uninstall-data-polkit
|
||||
rmdir $(DESTDIR)$(localstatedir)/log/libvirt || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/run/libvirt || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
|
||||
|
||||
if HAVE_POLKIT
|
||||
install-data-polkit::
|
||||
$(MKDIR_P) $(DESTDIR)$(policydir)
|
||||
install-data-polkit:: install-init
|
||||
mkdir -p $(DESTDIR)$(policydir)
|
||||
$(INSTALL_DATA) $(srcdir)/$(policyfile) $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
uninstall-data-polkit::
|
||||
uninstall-data-polkit:: install-init
|
||||
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
rmdir $(DESTDIR)$(policydir) || :
|
||||
else
|
||||
install-data-polkit::
|
||||
uninstall-data-polkit::
|
||||
@@ -229,94 +241,29 @@ libvirtd.uml.logrotate: libvirtd.uml.logrotate.in
|
||||
mv $@-t $@
|
||||
|
||||
install-logrotate: $(LOGROTATE_CONFS)
|
||||
$(MKDIR_P) $(DESTDIR)$(localstatedir)/log/libvirt/qemu/ \
|
||||
$(DESTDIR)$(localstatedir)/log/libvirt/lxc/ \
|
||||
$(DESTDIR)$(localstatedir)/log/libvirt/uml/ \
|
||||
$(DESTDIR)$(sysconfdir)/logrotate.d/
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/qemu/
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/lxc/
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/uml/
|
||||
mkdir -p $(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
|
||||
|
||||
uninstall-logrotate:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd \
|
||||
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu \
|
||||
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc \
|
||||
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
|
||||
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/qemu || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/lxc || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/uml || :
|
||||
rmdir $(DESTDIR)$(sysconfdir)/logrotate.d || :
|
||||
|
||||
install-sysconfig:
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sysconfig
|
||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sysconf \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||
uninstall-sysconfig:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||
rmdir $(DESTDIR)$(sysconfdir)/sysconfig || :
|
||||
|
||||
install-sysctl:
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sysctl.d
|
||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sysctl \
|
||||
$(DESTDIR)$(sysconfdir)/sysctl.d/libvirtd
|
||||
|
||||
uninstall-sysctl:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/sysctl.d/libvirtd
|
||||
rmdir $(DESTDIR)$(sysconfdir)/sysctl.d || :
|
||||
|
||||
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
|
||||
BUILT_SOURCES += libvirtd.init
|
||||
|
||||
install-init-redhat: install-sysconfig libvirtd.init
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
||||
install-init: libvirtd.init
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
||||
$(INSTALL_SCRIPT) libvirtd.init \
|
||||
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig
|
||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sysconf \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||
|
||||
uninstall-init-redhat: uninstall-sysconfig
|
||||
rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
||||
rmdir $(DESTDIR)$(sysconfdir)/rc.d/init.d || :
|
||||
else
|
||||
install-init-redhat:
|
||||
uninstall-init-redhat:
|
||||
endif # LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
uninstall-init:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd \
|
||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||
|
||||
|
||||
if LIBVIRT_INIT_SCRIPT_UPSTART
|
||||
|
||||
install-init-upstart: install-sysconfig
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/event.d
|
||||
$(INSTALL_SCRIPT) libvirtd.upstart \
|
||||
$(DESTDIR)$(sysconfdir)/event.d/libvirtd
|
||||
|
||||
uninstall-init-upstart: uninstall-sysconfig
|
||||
rm -f $(DESTDIR)$(sysconfdir)/event.d/libvirtd
|
||||
rmdir $(DESTDIR)$(sysconfdir)/event.d || :
|
||||
else
|
||||
install-init-upstart:
|
||||
uninstall-init-upstart:
|
||||
endif # LIBVIRT_INIT_SCRIPT_UPSTART
|
||||
|
||||
|
||||
EXTRA_DIST += libvirtd.service.in
|
||||
if LIBVIRT_INIT_SCRIPT_SYSTEMD
|
||||
|
||||
SYSTEMD_UNIT_DIR = /lib/systemd/system
|
||||
BUILT_SOURCES += libvirtd.service
|
||||
|
||||
install-init-systemd: install-sysconfig libvirtd.service
|
||||
$(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
|
||||
$(INSTALL_SCRIPT) libvirtd.service \
|
||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
|
||||
|
||||
uninstall-init-systemd: uninstall-sysconfig
|
||||
rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
|
||||
rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || :
|
||||
else
|
||||
install-init-systemd:
|
||||
uninstall-init-systemd:
|
||||
endif # LIBVIRT_INIT_SCRIPT_SYSTEMD
|
||||
BUILT_SOURCES += libvirtd.init
|
||||
|
||||
libvirtd.init: libvirtd.init.in $(top_builddir)/config.status
|
||||
$(AM_V_GEN)sed \
|
||||
@@ -327,21 +274,18 @@ libvirtd.init: libvirtd.init.in $(top_builddir)/config.status
|
||||
chmod a+x $@-t && \
|
||||
mv $@-t $@
|
||||
|
||||
libvirtd.service: libvirtd.service.in $(top_builddir)/config.status
|
||||
$(AM_V_GEN)sed \
|
||||
-e s!\@localstatedir\@!$(localstatedir)!g \
|
||||
-e s!\@sbindir\@!$(sbindir)!g \
|
||||
-e s!\@sysconfdir\@!$(sysconfdir)!g \
|
||||
< $< > $@-t && \
|
||||
chmod a+x $@-t && \
|
||||
mv $@-t $@
|
||||
|
||||
|
||||
check-local:
|
||||
$(AM_V_GEN)if test -x '$(AUGPARSE)'; then \
|
||||
'$(AUGPARSE)' -I $(srcdir) $(srcdir)/test_libvirtd.aug; \
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
install-init:
|
||||
uninstall-init:
|
||||
libvirtd.init:
|
||||
|
||||
endif # LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
|
||||
# This must be added last, since functions it provides/replaces
|
||||
# are used by nearly every other library.
|
||||
@@ -352,6 +296,9 @@ install-data-local: install-data-sasl
|
||||
uninstall-local:: uninstall-data-sasl
|
||||
endif # WITH_LIBVIRTD
|
||||
|
||||
# This is needed for 'make dist' too, so can't wrap in WITH_LIBVIRTD.
|
||||
EXTRA_DIST += probes.d libvirtd.stp
|
||||
|
||||
POD2MAN = pod2man -c "Virtualization Support" \
|
||||
-r "$(PACKAGE)-$(VERSION)" -s 8
|
||||
|
||||
@@ -362,12 +309,12 @@ $(srcdir)/libvirtd.8.in: libvirtd.pod.in
|
||||
# the WITH_LIBVIRTD conditional
|
||||
if HAVE_SASL
|
||||
install-data-sasl:
|
||||
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sasl2/
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/sasl2/
|
||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||
|
||||
uninstall-data-sasl:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||
rmdir $(DESTDIR)$(sysconfdir)/sasl2/ || :
|
||||
rmdir $(DESTDIR)$(sysconfdir)/sasl2/
|
||||
else
|
||||
install-data-sasl:
|
||||
uninstall-data-sasl:
|
||||
|
@@ -66,10 +66,6 @@ module Libvirtd =
|
||||
let auditing_entry = int_entry "audit_level"
|
||||
| bool_entry "audit_logging"
|
||||
|
||||
let keepalive_entry = int_entry "keepalive_interval"
|
||||
| int_entry "keepalive_count"
|
||||
| bool_entry "keepalive_required"
|
||||
|
||||
(* Each enty in the config is one of the following three ... *)
|
||||
let entry = network_entry
|
||||
| sock_acl_entry
|
||||
@@ -79,7 +75,6 @@ module Libvirtd =
|
||||
| processing_entry
|
||||
| logging_entry
|
||||
| auditing_entry
|
||||
| keepalive_entry
|
||||
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
|
||||
let empty = [ label "#empty" . eol ]
|
||||
|
||||
|
@@ -146,10 +146,6 @@ struct daemonConfig {
|
||||
|
||||
int audit_level;
|
||||
int audit_logging;
|
||||
|
||||
int keepalive_interval;
|
||||
unsigned int keepalive_count;
|
||||
int keepalive_required;
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -190,7 +186,6 @@ static int daemonForkIntoBackground(const char *argv0)
|
||||
switch (pid) {
|
||||
case 0:
|
||||
{
|
||||
/* intermediate child */
|
||||
int stdinfd = -1;
|
||||
int stdoutfd = -1;
|
||||
int nextpid;
|
||||
@@ -207,9 +202,9 @@ static int daemonForkIntoBackground(const char *argv0)
|
||||
goto cleanup;
|
||||
if (dup2(stdoutfd, STDERR_FILENO) != STDERR_FILENO)
|
||||
goto cleanup;
|
||||
if (stdinfd > STDERR_FILENO && VIR_CLOSE(stdinfd) < 0)
|
||||
if (VIR_CLOSE(stdinfd) < 0)
|
||||
goto cleanup;
|
||||
if (stdoutfd > STDERR_FILENO && VIR_CLOSE(stdoutfd) < 0)
|
||||
if (VIR_CLOSE(stdoutfd) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (setsid() < 0)
|
||||
@@ -217,70 +212,54 @@ static int daemonForkIntoBackground(const char *argv0)
|
||||
|
||||
nextpid = fork();
|
||||
switch (nextpid) {
|
||||
case 0: /* grandchild */
|
||||
case 0:
|
||||
return statuspipe[1];
|
||||
case -1: /* error */
|
||||
goto cleanup;
|
||||
default: /* intermediate child succeeded */
|
||||
_exit(EXIT_SUCCESS);
|
||||
case -1:
|
||||
return -1;
|
||||
default:
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FORCE_CLOSE(stdoutfd);
|
||||
VIR_FORCE_CLOSE(stdinfd);
|
||||
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||
_exit(EXIT_FAILURE);
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
case -1: /* error in parent */
|
||||
goto error;
|
||||
case -1:
|
||||
return -1;
|
||||
|
||||
default:
|
||||
{
|
||||
/* parent */
|
||||
int got, exitstatus = 0;
|
||||
int ret;
|
||||
char status;
|
||||
|
||||
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||
|
||||
/* We wait to make sure the first child forked successfully */
|
||||
if (virPidWait(pid, NULL) < 0)
|
||||
goto error;
|
||||
if ((got = waitpid(pid, &exitstatus, 0)) < 0 ||
|
||||
got != pid ||
|
||||
exitstatus != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* If we get here, then the grandchild was spawned, so we
|
||||
* must exit. Block until the second child initializes
|
||||
* successfully */
|
||||
/* Now block until the second child initializes successfully */
|
||||
again:
|
||||
ret = read(statuspipe[0], &status, 1);
|
||||
if (ret == -1 && errno == EINTR)
|
||||
goto again;
|
||||
|
||||
VIR_FORCE_CLOSE(statuspipe[0]);
|
||||
|
||||
if (ret != 1) {
|
||||
char ebuf[1024];
|
||||
|
||||
if (ret == 1 && status != 0) {
|
||||
fprintf(stderr,
|
||||
_("%s: error: unable to determine if daemon is "
|
||||
"running: %s\n"), argv0,
|
||||
virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||
exit(EXIT_FAILURE);
|
||||
} else if (status != 0) {
|
||||
fprintf(stderr,
|
||||
_("%s: error: %s. Check /var/log/messages or run "
|
||||
"without --daemon for more info.\n"), argv0,
|
||||
_("%s: error: %s. Check /var/log/messages or run without "
|
||||
"--daemon for more info.\n"), argv0,
|
||||
virDaemonErrTypeToString(status));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
_exit(EXIT_SUCCESS);
|
||||
_exit(ret == 1 && status == 0 ? 0 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
error:
|
||||
VIR_FORCE_CLOSE(statuspipe[0]);
|
||||
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -491,12 +470,8 @@ static int daemonSetupNetworking(virNetServerPtr srv,
|
||||
NULL)))
|
||||
goto error;
|
||||
|
||||
if (virNetServerAddService(srv, svc,
|
||||
config->mdns_adv && !ipsock ?
|
||||
"_libvirt._tcp" :
|
||||
NULL) < 0)
|
||||
if (virNetServerAddService(srv, svc, NULL) < 0)
|
||||
goto error;
|
||||
|
||||
if (svcRO &&
|
||||
virNetServerAddService(srv, svcRO, NULL) < 0)
|
||||
goto error;
|
||||
@@ -924,10 +899,6 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
|
||||
data->audit_level = 1;
|
||||
data->audit_logging = 0;
|
||||
|
||||
data->keepalive_interval = 5;
|
||||
data->keepalive_count = 5;
|
||||
data->keepalive_required = 0;
|
||||
|
||||
localhost = virGetHostname(NULL);
|
||||
if (localhost == NULL) {
|
||||
/* we couldn't resolve the hostname; assume that we are
|
||||
@@ -1091,10 +1062,6 @@ daemonConfigLoad(struct daemonConfig *data,
|
||||
GET_CONF_STR (conf, filename, log_outputs);
|
||||
GET_CONF_INT (conf, filename, log_buffer_size);
|
||||
|
||||
GET_CONF_INT (conf, filename, keepalive_interval);
|
||||
GET_CONF_INT (conf, filename, keepalive_count);
|
||||
GET_CONF_INT (conf, filename, keepalive_required);
|
||||
|
||||
virConfFree (conf);
|
||||
return 0;
|
||||
|
||||
@@ -1485,9 +1452,6 @@ int main(int argc, char **argv) {
|
||||
config->max_workers,
|
||||
config->prio_workers,
|
||||
config->max_clients,
|
||||
config->keepalive_interval,
|
||||
config->keepalive_count,
|
||||
!!config->keepalive_required,
|
||||
config->mdns_adv ? config->mdns_name : NULL,
|
||||
use_polkit_dbus,
|
||||
remoteClientInitHook))) {
|
||||
|
@@ -284,7 +284,7 @@
|
||||
# Logging controls
|
||||
#
|
||||
|
||||
# Logging level: 4 errors, 3 warnings, 2 information, 1 debug
|
||||
# Logging level: 4 errors, 3 warnings, 2 informations, 1 debug
|
||||
# basically 1 will log everything possible
|
||||
#log_level = 3
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
# the event layer.
|
||||
|
||||
# Logging outputs:
|
||||
# An output is one of the places to save logging information
|
||||
# An output is one of the places to save logging informations
|
||||
# The format for an output can be:
|
||||
# x:stderr
|
||||
# output goes to stderr
|
||||
@@ -366,28 +366,3 @@
|
||||
# it with the output of the 'uuidgen' command and then
|
||||
# uncomment this entry
|
||||
#host_uuid = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
###################################################################
|
||||
# Keepalive protocol:
|
||||
# This allows libvirtd to detect broken client connections or even
|
||||
# dead client. A keepalive message is sent to a client after
|
||||
# keepalive_interval seconds of inactivity to check if the client is
|
||||
# still responding; keepalive_count is a maximum number of keepalive
|
||||
# messages that are allowed to be sent to the client without getting
|
||||
# any response before the connection is considered broken. In other
|
||||
# words, the connection is automatically closed approximately after
|
||||
# keepalive_interval * (keepalive_count + 1) seconds since the last
|
||||
# message received from the client. If keepalive_interval is set to
|
||||
# -1, libvirtd will never send keepalive requests; however clients
|
||||
# can still send them and the deamon will send responses. When
|
||||
# keepalive_count is set to 0, connections will be automatically
|
||||
# closed after keepalive_interval seconds of inactivity without
|
||||
# sending any keepalive messages.
|
||||
#
|
||||
#keepalive_interval = 5
|
||||
#keepalive_count = 5
|
||||
#
|
||||
# If set to 1, libvirtd will refuse to talk to clients that do not
|
||||
# support keepalive protocol. Defaults to 0.
|
||||
#
|
||||
#keepalive_required = 1
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libvirtd.h: daemon data structure definitions
|
||||
*
|
||||
* Copyright (C) 2006-2012 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2011 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -22,10 +22,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef LIBVIRTD_H__
|
||||
# define LIBVIRTD_H__
|
||||
|
||||
# define VIR_ENUM_SENTINELS
|
||||
#ifndef QEMUD_INTERNAL_H__
|
||||
# define QEMUD_INTERNAL_H__
|
||||
|
||||
# include <config.h>
|
||||
|
||||
@@ -35,11 +33,59 @@
|
||||
# include "qemu_protocol.h"
|
||||
# include "logging.h"
|
||||
# include "threads.h"
|
||||
# include "network.h"
|
||||
# if HAVE_SASL
|
||||
# include "virnetsaslcontext.h"
|
||||
# endif
|
||||
# include "virnetserverprogram.h"
|
||||
|
||||
# if WITH_DTRACE
|
||||
# ifndef LIBVIRTD_PROBES_H
|
||||
# define LIBVIRTD_PROBES_H
|
||||
# include "probes.h"
|
||||
# endif /* LIBVIRTD_PROBES_H */
|
||||
|
||||
/* Systemtap 1.2 headers have a bug where they cannot handle a
|
||||
* variable declared with array type. Work around this by casting all
|
||||
* arguments. This is some gross use of the preprocessor because
|
||||
* PROBE is a var-arg macro, but it is better than the alternative of
|
||||
* making all callers to PROBE have to be aware of the issues. And
|
||||
* hopefully, if we ever add a call to PROBE with other than 2 or 3
|
||||
* end arguments, you can figure out the pattern to extend this hack.
|
||||
*/
|
||||
# define VIR_COUNT_ARGS(...) VIR_ARG5(__VA_ARGS__, 4, 3, 2, 1)
|
||||
# define VIR_ARG5(_1, _2, _3, _4, _5, ...) _5
|
||||
# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
|
||||
# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
|
||||
|
||||
/* The double cast is necessary to silence gcc warnings; any pointer
|
||||
* can safely go to intptr_t and back to void *, which collapses
|
||||
* arrays into pointers; while any integer can be widened to intptr_t
|
||||
* then cast to void *. */
|
||||
# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
|
||||
# define VIR_ADD_CAST2(a, b) \
|
||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b)
|
||||
# define VIR_ADD_CAST3(a, b, c) \
|
||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
|
||||
|
||||
# define VIR_ADD_CASTS(...) \
|
||||
VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
|
||||
__VA_ARGS__)
|
||||
|
||||
# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
|
||||
# define PROBE(NAME, FMT, ...) \
|
||||
VIR_DEBUG_INT("trace." __FILE__ , __func__, __LINE__, \
|
||||
#NAME ": " FMT, __VA_ARGS__); \
|
||||
if (LIBVIRTD_ ## NAME ## _ENABLED()) { \
|
||||
PROBE_EXPAND(LIBVIRTD_ ## NAME, \
|
||||
VIR_ADD_CASTS(__VA_ARGS__)); \
|
||||
}
|
||||
# else
|
||||
# define PROBE(NAME, FMT, ...) \
|
||||
VIR_DEBUG_INT("trace." __FILE__, __func__, __LINE__, \
|
||||
#NAME ": " FMT, __VA_ARGS__);
|
||||
# endif
|
||||
|
||||
typedef struct daemonClientStream daemonClientStream;
|
||||
typedef daemonClientStream *daemonClientStreamPtr;
|
||||
typedef struct daemonClientPrivate daemonClientPrivate;
|
||||
@@ -63,7 +109,6 @@ struct daemonClientPrivate {
|
||||
virConnectPtr conn;
|
||||
|
||||
daemonClientStreamPtr streams;
|
||||
bool keepalive_supported;
|
||||
};
|
||||
|
||||
# if HAVE_SASL
|
||||
|
@@ -8,7 +8,6 @@
|
||||
# Required-Start: $network messagebus
|
||||
# Should-Start: $named
|
||||
# Should-Start: xend
|
||||
# Should-Start: hal
|
||||
# Should-Start: avahi-daemon
|
||||
# Required-Stop: $network messagebus
|
||||
# Should-Stop: $named
|
||||
@@ -60,13 +59,6 @@ start() {
|
||||
echo -n $"Starting $SERVICE daemon: "
|
||||
mkdir -p @localstatedir@/cache/libvirt
|
||||
rm -rf @localstatedir@/cache/libvirt/*
|
||||
|
||||
# LIBVIRTD_NOFILES_LIMIT from /etc/sysconfig/libvirtd is not handled
|
||||
# automatically
|
||||
if [ -n "$LIBVIRTD_NOFILES_LIMIT" ]; then
|
||||
ulimit -n "$LIBVIRTD_NOFILES_LIMIT"
|
||||
fi
|
||||
|
||||
KRB5_KTNAME=$KRB5_KTNAME daemon --pidfile $PIDFILE --check $SERVICE $PROCESS --daemon $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
|
||||
RETVAL=$?
|
||||
echo
|
||||
@@ -81,6 +73,7 @@ stop() {
|
||||
echo
|
||||
if [ $RETVAL -eq 0 ]; then
|
||||
rm -f @localstatedir@/lock/subsys/$SERVICE
|
||||
rm -f $PIDFILE
|
||||
rm -rf @localstatedir@/cache/libvirt/*
|
||||
else
|
||||
exit $RETVAL
|
||||
|
@@ -1,22 +0,0 @@
|
||||
# NB we don't use socket activation. When libvirtd starts it will
|
||||
# spawn any virtual machines registered for autostart. We want this
|
||||
# to occur on every boot, regardless of whether any client connects
|
||||
# to a socket. Thus socket activation doesn't have any benefit
|
||||
|
||||
[Unit]
|
||||
Description=Virtualization daemon
|
||||
After=syslog.target
|
||||
After=udev.target
|
||||
After=avahi.target
|
||||
After=dbus.target
|
||||
Before=libvirt-guests.service
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=-/etc/sysconfig/libvirtd
|
||||
ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
# Override the maximum number of opened files
|
||||
#LimitNOFILE=2048
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
65
daemon/libvirtd.stp
Normal file
65
daemon/libvirtd.stp
Normal file
@@ -0,0 +1,65 @@
|
||||
probe libvirt.daemon.client.connect = process("libvirtd").mark("client_connect")
|
||||
{
|
||||
fd = $arg1;
|
||||
readonly = $arg2;
|
||||
localAddr = user_string($arg3);
|
||||
remoteAddr = user_string($arg4);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.disconnect = process("libvirtd").mark("client_disconnect")
|
||||
{
|
||||
fd = $arg1;
|
||||
}
|
||||
|
||||
|
||||
probe libvirt.daemon.client.tls_allow = process("libvirtd").mark("client_tls_allow")
|
||||
{
|
||||
fd = $arg1;
|
||||
x509dname = user_string($arg2);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.tls_deny = process("libvirtd").mark("client_tls_deny")
|
||||
{
|
||||
fd = $arg1;
|
||||
x509dname = user_string($arg2);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.tls_fail = process("libvirtd").mark("client_tls_fail")
|
||||
{
|
||||
fd = $arg1;
|
||||
}
|
||||
|
||||
|
||||
function authtype_to_string(authtype) {
|
||||
if (authtype == 0)
|
||||
return "none"
|
||||
if (authtype == 1)
|
||||
return "sasl"
|
||||
if (authtype == 2)
|
||||
return "polkit"
|
||||
return "unknown"
|
||||
}
|
||||
|
||||
|
||||
probe libvirt.daemon.client.auth_allow = process("libvirtd").mark("client_auth_allow")
|
||||
{
|
||||
fd = $arg1;
|
||||
authtype = $arg2;
|
||||
authname = authtype_to_string($arg2);
|
||||
identity = user_string($arg3);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.auth_deny = process("libvirtd").mark("client_auth_deny")
|
||||
{
|
||||
fd = $arg1;
|
||||
authtype = $arg2;
|
||||
authname = authtype_to_string($arg2);
|
||||
identity = user_string($arg3);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.auth_fail = process("libvirtd").mark("client_auth_fail")
|
||||
{
|
||||
fd = $arg1;
|
||||
authtype = $arg2;
|
||||
authname = authtype_to_string($arg2);
|
||||
}
|
@@ -1,7 +1,4 @@
|
||||
# Override the default config file
|
||||
# NOTE: This setting is no longer honoured if using
|
||||
# systemd. Set '--config /etc/libvirt/libvirtd.conf'
|
||||
# in LIBVIRTD_ARGS instead.
|
||||
#LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
|
||||
|
||||
# Listen for TCP/IP connections
|
||||
@@ -19,6 +16,3 @@
|
||||
#QEMU_AUDIO_DRV=sdl
|
||||
#
|
||||
#SDL_AUDIODRIVER=pulse
|
||||
|
||||
# Override the maximum number of opened files
|
||||
#LIBVIRTD_NOFILES_LIMIT=2048
|
||||
|
@@ -1,8 +0,0 @@
|
||||
# The kernel allocates aio memory on demand, and this number limits the
|
||||
# number of parallel aio requests; the only drawback of a larger limit is
|
||||
# that a malicious guest could issue parallel requests to cause the kernel
|
||||
# to set aside memory. Set this number at least as large as
|
||||
# 128 * (number of virtual disks on the host)
|
||||
# Libvirt uses a default of 1M requests to allow 8k disks, with at most
|
||||
# 64M of kernel memory if all disks hit an aio request at the same time.
|
||||
fs.aio-max-nr = 1048576
|
@@ -31,11 +31,9 @@ script
|
||||
ulimit -c "$DAEMON_COREFILE_LIMIT"
|
||||
fi
|
||||
|
||||
# LIBVIRTD_NOFILES_LIMIT from /etc/sysconfig/libvirtd is not handled
|
||||
# automatically
|
||||
if [ -n "$LIBVIRTD_NOFILES_LIMIT" ]; then
|
||||
ulimit -n "$LIBVIRTD_NOFILES_LIMIT"
|
||||
fi
|
||||
# Clean up a pidfile that might be left around
|
||||
rm -f /var/run/libvirtd.pid
|
||||
|
||||
mkdir -p /var/cache/libvirt
|
||||
rm -rf /var/cache/libvirt/*
|
||||
|
||||
@@ -43,5 +41,6 @@ script
|
||||
end script
|
||||
|
||||
post-stop script
|
||||
rm -f $PIDFILE
|
||||
rm -rf /var/cache/libvirt/*
|
||||
end script
|
||||
|
12
daemon/probes.d
Normal file
12
daemon/probes.d
Normal file
@@ -0,0 +1,12 @@
|
||||
provider libvirtd {
|
||||
probe client_connect(int fd, int readonly, const char *localAddr, const char *remoteAddr);
|
||||
probe client_disconnect(int fd);
|
||||
|
||||
probe client_auth_allow(int fd, int authtype, const char *identity);
|
||||
probe client_auth_deny(int fd, int authtype, const char *identity);
|
||||
probe client_auth_fail(int fd, int authtype);
|
||||
|
||||
probe client_tls_allow(int fd, const char *x509dname);
|
||||
probe client_tls_deny(int fd, const char *x509dname);
|
||||
probe client_tls_fail(int fd);
|
||||
};
|
891
daemon/remote.c
891
daemon/remote.c
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* stream.c: APIs for managing client streams
|
||||
*
|
||||
* Copyright (C) 2009, 2011 Red Hat, Inc.
|
||||
* Copyright (C) 2009 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
|
||||
@@ -94,7 +94,7 @@ daemonStreamUpdateEvents(daemonClientStream *stream)
|
||||
* fast stream, but slow client
|
||||
*/
|
||||
static void
|
||||
daemonStreamMessageFinished(virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
daemonStreamMessageFinished(virNetMessagePtr msg,
|
||||
void *opaque)
|
||||
{
|
||||
daemonClientStream *stream = opaque;
|
||||
@@ -276,7 +276,7 @@ cleanup:
|
||||
* -1 on fatal client error
|
||||
*/
|
||||
static int
|
||||
daemonStreamFilter(virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
daemonStreamFilter(virNetServerClientPtr client,
|
||||
virNetMessagePtr msg,
|
||||
void *opaque)
|
||||
{
|
||||
@@ -556,7 +556,7 @@ daemonStreamHandleWriteData(virNetServerClientPtr client,
|
||||
|
||||
|
||||
/*
|
||||
* Process a finish handshake from the client.
|
||||
* Process an finish handshake from the client.
|
||||
*
|
||||
* Returns a VIR_NET_OK confirmation if successful, or a VIR_NET_ERROR
|
||||
* if there was a stream error
|
||||
|
8
docs/.gitignore
vendored
Normal file
8
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
.memdump
|
||||
apibuild.pyc
|
||||
*.html
|
||||
libvirt-api.xml
|
||||
libvirt-refs.xml
|
||||
todo.html.in
|
@@ -1,6 +1,6 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
SUBDIRS= schemas
|
||||
@@ -60,12 +60,7 @@ png = \
|
||||
libvirt-driver-arch.png \
|
||||
libvirt-object-model.png \
|
||||
madeWith.png \
|
||||
et.png \
|
||||
migration-managed-direct.png \
|
||||
migration-managed-p2p.png \
|
||||
migration-native.png \
|
||||
migration-tunnel.png \
|
||||
migration-unmanaged-direct.png
|
||||
et.png
|
||||
|
||||
gif = \
|
||||
architecture.gif \
|
||||
@@ -85,17 +80,15 @@ qemu_xml = \
|
||||
libvirt-qemu-api.xml \
|
||||
libvirt-qemu-refs.xml
|
||||
|
||||
apidir = $(pkgdatadir)/api
|
||||
api_DATA = libvirt-api.xml libvirt-qemu-api.xml
|
||||
|
||||
fig = \
|
||||
libvirt-net-logical.fig \
|
||||
libvirt-net-physical.fig \
|
||||
libvirt-daemon-arch.fig \
|
||||
libvirt-driver-arch.fig \
|
||||
libvirt-object-model.fig \
|
||||
migration-managed-direct.fig \
|
||||
migration-managed-p2p.fig \
|
||||
migration-native.fig \
|
||||
migration-tunnel.fig \
|
||||
migration-unmanaged-direct.fig
|
||||
libvirt-object-model.fig
|
||||
|
||||
EXTRA_DIST= \
|
||||
apibuild.py \
|
||||
@@ -113,7 +106,7 @@ MAINTAINERCLEANFILES = \
|
||||
$(addprefix $(srcdir)/,$(apihtml)) \
|
||||
$(addprefix $(srcdir)/,$(devhelphtml))
|
||||
|
||||
all: web
|
||||
all-am: web
|
||||
|
||||
api: $(srcdir)/libvirt-api.xml $(srcdir)/libvirt-refs.xml
|
||||
qemu_api: $(srcdir)/libvirt-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
|
||||
@@ -197,12 +190,19 @@ python_generated_files = \
|
||||
$(srcdir)/libvirt-qemu-api.xml \
|
||||
$(srcdir)/libvirt-qemu-refs.xml
|
||||
|
||||
$(python_generated_files): $(srcdir)/apibuild.py \
|
||||
APIBUILD=$(srcdir)/apibuild.py
|
||||
APIBUILD_STAMP=$(APIBUILD).stamp
|
||||
|
||||
$(python_generated_files): $(APIBUILD_STAMP)
|
||||
|
||||
$(APIBUILD_STAMP): $(srcdir)/apibuild.py \
|
||||
$(srcdir)/../include/libvirt/*.h \
|
||||
$(srcdir)/../src/libvirt.c \
|
||||
$(srcdir)/../src/libvirt-qemu.c \
|
||||
$(srcdir)/../src/util/virterror.c
|
||||
$(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(srcdir)/apibuild.py
|
||||
$(AM_V_GEN)srcdir=$(srcdir) $(PYTHON) $(APIBUILD)
|
||||
touch $@
|
||||
|
||||
|
||||
check-local: all
|
||||
|
||||
@@ -212,6 +212,7 @@ clean-local:
|
||||
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-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
|
||||
rm -rf $(APIBUILD_STAMP)
|
||||
|
||||
rebuild: api qemu_api all
|
||||
|
||||
|
@@ -100,7 +100,7 @@ index dfc6415..3642296 100644
|
||||
+ /* If xendConfigVersion is 2, then we can only report _LIVE (and
|
||||
+ * xm_internal reports _CONFIG). If it is 3, then _LIVE and
|
||||
+ * _CONFIG are always in sync for a running system. */
|
||||
+ if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||
+ if (domain->id < 0 && priv->xendConfigVersion < 3)
|
||||
+ return -2;
|
||||
+ if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
|
@@ -110,7 +110,7 @@ index fe2ff86..66e8518 100644
|
||||
+ * depends on xendConfigVersion. */
|
||||
+ if (dom) {
|
||||
+ priv = dom->conn->privateData;
|
||||
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
||||
+ if (priv->xendConfigVersion >= 3)
|
||||
+ flags |= VIR_DOMAIN_VCPU_CONFIG;
|
||||
+ }
|
||||
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, flags);
|
||||
@@ -163,14 +163,14 @@ index 3642296..55c2cc4 100644
|
||||
+
|
||||
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||
+
|
||||
+ if ((domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) ||
|
||||
+ if ((domain->id < 0 && priv->xendConfigVersion < 3) ||
|
||||
+ (flags & VIR_DOMAIN_VCPU_MAXIMUM))
|
||||
+ return -2;
|
||||
+
|
||||
+ /* With xendConfigVersion 2, only _LIVE is supported. With
|
||||
+ * xendConfigVersion 3, only _LIVE|_CONFIG is supported for
|
||||
+ * running domains, or _CONFIG for inactive domains. */
|
||||
+ if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
|
||||
+ if (priv->xendConfigVersion < 3) {
|
||||
+ if (flags & VIR_DOMAIN_VCPU_CONFIG) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("Xend version does not support modifying "
|
||||
|
@@ -122,7 +122,7 @@ index 55c2cc4..b90c331 100644
|
||||
-
|
||||
- priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||
-
|
||||
- if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||
- if (domain->id < 0 && priv->xendConfigVersion < 3)
|
||||
- return(-1);
|
||||
-
|
||||
- snprintf(buf, sizeof(buf), "%d", vcpus);
|
||||
|
@@ -1649,7 +1649,6 @@ class CParser:
|
||||
"virDomainSetMemoryFlags" : (False, ("memory")),
|
||||
"virDomainBlockJobSetSpeed" : (False, ("bandwidth")),
|
||||
"virDomainBlockPull" : (False, ("bandwidth")),
|
||||
"virDomainBlockRebase" : (False, ("bandwidth")),
|
||||
"virDomainMigrateGetMaxSpeed" : (False, ("bandwidth")) }
|
||||
|
||||
def checkLongLegacyFunction(self, name, return_type, signature):
|
||||
|
@@ -348,16 +348,5 @@
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a name="mobile">Mobile applications</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://market.android.com/details?id=vm.manager">VM Manager</a></dt>
|
||||
<dd>
|
||||
VM Manager is VM (libvirt) manager (over SSH) application. VM Manager
|
||||
is an application for libvirt VM / Domain management over SSH.
|
||||
Please keep in mind that this software is under heavy development.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
4
docs/devhelp/.gitignore
vendored
Normal file
4
docs/devhelp/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
libvirt.devhelp
|
||||
*.html
|
@@ -56,7 +56,7 @@ esx://example-esx.com/?no_verify=1 (ESX over HTTPS, but doesn't verify the s
|
||||
URIs have this general form (<code>[...]</code> marks an optional part).
|
||||
</p>
|
||||
<pre>
|
||||
type://[username@]hostname[:port]/[[folder/...]datacenter/[folder/...][cluster/]server][?extraparameters]
|
||||
type://[username@]hostname[:port]/[datacenter[/cluster]/server][?extraparameters]
|
||||
</pre>
|
||||
<p>
|
||||
The <code>type://</code> is either <code>esx://</code> or
|
||||
@@ -79,14 +79,6 @@ type://[username@]hostname[:port]/[[folder/...]datacenter/[folder/...][cluster/]
|
||||
</p>
|
||||
<pre>
|
||||
vpx://example-vcenter.com/dc1/cluster1/example-esx.com
|
||||
</pre>
|
||||
<p>
|
||||
Datacenters and clusters can be organized in folders, those have to be
|
||||
specified as well. The driver can handle folders
|
||||
<span class="since">since 0.9.7</span>.
|
||||
</p>
|
||||
<pre>
|
||||
vpx://example-vcenter.com/folder1/dc1/folder2/example-esx.com
|
||||
</pre>
|
||||
|
||||
|
||||
|
@@ -35,27 +35,10 @@ mount them use:
|
||||
<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.
|
||||
driver. On such kernels, it may be neccessary 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.
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt>LIBVIRT_LXC_NAME</dt>
|
||||
<dd>The name assigned to the container by libvirt</dd>
|
||||
<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</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h3>Example config version 1</h3>
|
||||
<p></p>
|
||||
<pre>
|
||||
|
@@ -513,73 +513,6 @@ $ virsh domxml-to-native qemu-argv demo.xml
|
||||
-serial none -parallel none -usb
|
||||
</pre>
|
||||
|
||||
<h2><a name="qemucommand">Pass-through of arbitrary qemu
|
||||
commands</a></h2>
|
||||
|
||||
<p>Libvirt provides an XML namespace and an optional
|
||||
library <code>libvirt-qemu.so</code> for dealing specifically
|
||||
with qemu. When used correctly, these extensions allow testing
|
||||
specific qemu features that have not yet been ported to the
|
||||
generic libvirt XML and API interfaces. However, they
|
||||
are <b>unsupported</b>, in that the library is not guaranteed to
|
||||
have a stable API, abusing the library or XML may result in
|
||||
inconsistent state the crashes libvirtd, and upgrading either
|
||||
qemu-kvm or libvirtd may break behavior of a domain that was
|
||||
relying on a qemu-specific pass-through. If you find yourself
|
||||
needing to use them to access a particular qemu feature, then
|
||||
please post an RFE to the libvirt mailing list to get that
|
||||
feature incorporated into the stable libvirt XML and API
|
||||
interfaces.
|
||||
</p>
|
||||
<p>The library provides two
|
||||
API: <code>virDomainQemuMonitorCommand</code>, for sending an
|
||||
arbitrary monitor command (in either HMP or QMP format) to a
|
||||
qemu guest (<span class="since">Since 0.8.3</span>),
|
||||
and <code>virDomainQemuAttach</code>, for registering a qemu
|
||||
domain that was manually started so that it can then be managed
|
||||
by libvirtd (<span class="since">Since 0.9.4</span>).
|
||||
</p>
|
||||
<p>Additionally, the following XML additions allow fine-tuning of
|
||||
the command line given to qemu when starting a domain
|
||||
(<span class="since">Since 0.8.3</span>). In order to use the
|
||||
XML additions, it is necessary to issue an XML namespace request
|
||||
(the special <code>xmlns:<i>name</i></code> attribute) that
|
||||
pulls in <code>http://libirt.org/schemas/domain/qemu/1.0</code>;
|
||||
typically, the namespace is given the name
|
||||
of <code>qemu</code>. With the namespace in place, it is then
|
||||
possible to add an element <code><qemu:commandline></code>
|
||||
under <code>driver</code>, with the following sub-elements
|
||||
repeated as often as needed:
|
||||
<dl>
|
||||
<dt><code>qemu:arg</code></dt>
|
||||
<dd>Add an additional command-line argument to the qemu
|
||||
process when starting the domain, given by the value of the
|
||||
attribute <code>value</code>.
|
||||
</dd>
|
||||
<dt><code>qemu:env</code></dt>
|
||||
<dd>Add an additional environment variable to the qemu
|
||||
process when starting the domain, given with the name-value
|
||||
pair recorded in the attributes <code>name</code>
|
||||
and optional <code>value</code>.</dd>
|
||||
</dl>
|
||||
|
||||
<p>Example:</p><pre>
|
||||
<domain type='qemu' xmlns:qemu='http://libirt.org/schemas/domain/qemu/1.0'>
|
||||
<name>QEmu-fedora-i686</name>
|
||||
<memory>219200</memory>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
</devices>
|
||||
<qemu:commandline>
|
||||
<qemu:arg value='-newarg'/>
|
||||
<qemu:env name='QEMU_ENV' value='VAL'/>
|
||||
</qemu:commandline>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<h2><a name="xmlconfig">Example domain XML config</a></h2>
|
||||
|
||||
<h3>QEMU emulated guest on x86_64</h3>
|
||||
|
@@ -70,11 +70,6 @@ vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
|
||||
<target dev='fda'/>
|
||||
</disk>
|
||||
|
||||
<filesystem type='mount'>
|
||||
<source dir='/home/user/stuff'/>
|
||||
<target dir='my-shared-folder'/>
|
||||
</filesystem>
|
||||
|
||||
<!--BRIDGE-->
|
||||
<interface type='bridge'>
|
||||
<source bridge='eth0'/>
|
||||
|
@@ -28,11 +28,6 @@ BIOS you will see</p>
|
||||
<feature name='xtpr'/>
|
||||
...
|
||||
</cpu>
|
||||
<power_management>
|
||||
<suspend_mem/>
|
||||
<suspend_disk/>
|
||||
<suspend_hybrid/>
|
||||
<power_management/>
|
||||
</host></span>
|
||||
|
||||
<!-- xen-3.0-x86_64 -->
|
||||
@@ -65,30 +60,20 @@ BIOS you will see</p>
|
||||
</guest></span>
|
||||
...
|
||||
</capabilities></pre>
|
||||
<p>The first block (in red) indicates the host hardware
|
||||
capabilities, such as CPU properties and the power
|
||||
management features of the host platform. CPU models are
|
||||
shown as additional features relative to the closest base
|
||||
model, within a feature block (the block is similar to what
|
||||
you will find in a Xen fully virtualized domain
|
||||
description). Further, the power management features
|
||||
supported by the host are shown, such as Suspend-to-RAM (S3),
|
||||
Suspend-to-Disk (S4) and Hybrid-Suspend (a combination of S3
|
||||
and S4). In case the host does not support
|
||||
any such feature, then an empty <power_management/>
|
||||
tag will be shown. </p>
|
||||
<p>The second block (in blue) indicates the paravirtualization
|
||||
support of the Xen support, you will see the os_type of xen
|
||||
to indicate a paravirtual kernel, then architecture
|
||||
information and potential features.</p>
|
||||
<p>The third block (in green) gives similar information but
|
||||
when running a 32 bit OS fully virtualized with Xen using
|
||||
the hvm support.</p>
|
||||
<p>This section is likely to be updated and augmented in the
|
||||
future,
|
||||
see <a href="https://www.redhat.com/archives/libvir-list/2007-March/msg00215.html">the
|
||||
discussion</a> which led to the capabilities format in the
|
||||
mailing-list archives.</p>
|
||||
<p>The first block (in red) indicates the host hardware capabilities, currently
|
||||
it is limited to the CPU properties but other information may be available,
|
||||
it shows the CPU architecture, topology, model name, and additional features
|
||||
which are not included in the model but the CPU provides them. Features of the
|
||||
chip are shown within the feature block (the block is similar to what you will
|
||||
find in a Xen fully virtualized domain description).</p>
|
||||
<p>The second block (in blue) indicates the paravirtualization support of the
|
||||
Xen support, you will see the os_type of xen to indicate a paravirtual
|
||||
kernel, then architecture information and potential features.</p>
|
||||
<p>The third block (in green) gives similar information but when running a
|
||||
32 bit OS fully virtualized with Xen using the hvm support.</p>
|
||||
<p>This section is likely to be updated and augmented in the future, see <a href="https://www.redhat.com/archives/libvir-list/2007-March/msg00215.html">the
|
||||
discussion</a> which led to the capabilities format in the mailing-list
|
||||
archives.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -58,7 +58,7 @@
|
||||
<pre>
|
||||
...
|
||||
<bridge name="virbr0" stp="on" delay="5"/>
|
||||
<domain name="example.com"/>
|
||||
<domain name="example"/>
|
||||
<forward mode="nat" dev="eth0"/>
|
||||
...</pre>
|
||||
|
||||
@@ -134,12 +134,12 @@
|
||||
attribute is set, firewall rules will restrict forwarding
|
||||
to the named device only. This presumes that the local LAN
|
||||
router has suitable routing table entries to return
|
||||
traffic to this host. All incoming and outgoing sessions
|
||||
to guest on these networks are unrestricted. (To restrict
|
||||
incoming traffic to a guest on a routed network, you can
|
||||
configure <a href="formatnwfilter.html">nwfilter rules</a>
|
||||
on the guest's interfaces.)
|
||||
<span class="since">Since 0.4.2</span>
|
||||
traffic to this host. Firewall rules are also installed
|
||||
that prevent incoming sessions from the physical network
|
||||
to the guests, but outgoing sessions are unrestricted (as
|
||||
are sessions from the host to the guests, and between
|
||||
guests on the same network.)<span class="since">Since
|
||||
0.4.2</span>
|
||||
</dd>
|
||||
|
||||
<dt><code>bridge</code></dt>
|
||||
@@ -214,7 +214,7 @@
|
||||
As mentioned above, a <code><forward></code> element can
|
||||
have multiple <code><interface></code> subelements, each
|
||||
one giving the name of a physical interface that can be used
|
||||
for this network <span class="since">Since 0.9.4</span>:
|
||||
for this network<span class="since">Since 0.9.4</span>:
|
||||
<pre>
|
||||
...
|
||||
<forward mode='passthrough'>
|
||||
@@ -226,21 +226,7 @@
|
||||
</forward>
|
||||
...
|
||||
</pre>
|
||||
Additionally, <span class="since">since 0.9.10</span>, libvirt
|
||||
allows a shorthand for specifying all virtual interfaces
|
||||
associated with a single physical function, by using
|
||||
the <code><pf></code> subelement to call out the
|
||||
corresponding physical interface associated with multiple
|
||||
virtual interfaces:
|
||||
<pre>
|
||||
...
|
||||
<forward mode='passthrough'>
|
||||
<pf dev='eth0'/>
|
||||
</forward>
|
||||
...
|
||||
</pre>
|
||||
|
||||
<p>When a guest interface is being constructed, libvirt will pick
|
||||
When a guest interface is being constructed, libvirt will pick
|
||||
an interface from this list to use for the connection. In
|
||||
modes where physical interfaces can be shared by multiple
|
||||
guest interfaces, libvirt will choose the interface that
|
||||
@@ -248,7 +234,7 @@
|
||||
that do not allow sharing of the physical device (in
|
||||
particular, 'passthrough' mode, and 'private' mode when using
|
||||
802.1Qbh), libvirt will choose an unused physical interface
|
||||
or, if it can't find an unused interface, fail the operation.</p>
|
||||
or, if it can't find an unused interface, fail the operation.
|
||||
</dd>
|
||||
</dl>
|
||||
<h5><a name="elementQoS">Quality of service</a></h5>
|
||||
@@ -315,11 +301,9 @@
|
||||
...</pre>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 0.9.4</span>
|
||||
A portgroup provides a method of easily putting guest
|
||||
connections to the network into different classes, with each
|
||||
class potentially having a different level/type of service.
|
||||
<span class="since">Since 0.9.4</span> Each
|
||||
class potentially having a different level/type of service. Each
|
||||
network can have multiple portgroup elements (and one of those
|
||||
can optionally be designated as the 'default' portgroup for the
|
||||
network), and each portgroup has a name, as well as various
|
||||
@@ -356,13 +340,8 @@
|
||||
<pre>
|
||||
...
|
||||
<mac address='00:16:3E:5D:C7:9E'/>
|
||||
<domain name="example.com"/>
|
||||
<dns>
|
||||
<txt name="example" value="example value" />
|
||||
<srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/>
|
||||
<host ip='192.168.122.2'>
|
||||
<hostname>myhost</hostname>
|
||||
<hostname>myhostalias</hostname>
|
||||
</dns>
|
||||
<ip address="192.168.122.1" netmask="255.255.255.0">
|
||||
<dhcp>
|
||||
@@ -411,17 +390,6 @@
|
||||
<span class="since">Since 0.9.3</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><code>srv</code></dt>
|
||||
<dd>The <code>dns</code> element can have also 0 or more <code>srv</code>
|
||||
record elements. Each <code>srv</code> record element defines a DNS SRV record
|
||||
and has 2 mandatory and 5 optional attributes. The mandatory attributes
|
||||
are service name and protocol (tcp, udp) and the optional attributes are
|
||||
target, port, priority, weight and domain as defined in DNS server SRV
|
||||
RFC (RFC 2782).
|
||||
<span class="since">Since 0.9.9</span>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>ip</code></dt>
|
||||
<dd>The <code>address</code> attribute defines an IPv4 address in
|
||||
@@ -574,7 +542,6 @@
|
||||
<h3><a name="examplesBridge">Using an existing host bridge</a></h3>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 0.9.4</span>
|
||||
This shows how to use a pre-existing host bridge "br0". The
|
||||
guests will effectively be directly connected to the physical
|
||||
network (i.e. their IP addresses will all be on the subnet of
|
||||
@@ -592,8 +559,6 @@
|
||||
<h3><a name="examplesDirect">Using a macvtap "direct" connection</a></h3>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 0.9.4, QEMU and KVM only, requires
|
||||
Linux kernel 2.6.34 or newer</span>
|
||||
This shows how to use macvtap to connect to the physical network
|
||||
directly through one of a group of physical devices (without
|
||||
using a host bridge device). As with the host bridge network,
|
||||
|
@@ -1,232 +1,5 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>Node devices XML format</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a name="NodedevAttributes">Node Device XML</a></h2>
|
||||
|
||||
<p>
|
||||
There are several libvirt functions, all with the
|
||||
prefix <code>virNodeDevice</code>, which deal with management of
|
||||
host devices that can be handed to guests via passthrough as
|
||||
<hostdev> elements
|
||||
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".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When represented in XML, a node device uses the
|
||||
top-level <code>device</code> element, with the following
|
||||
elements present according to the type of device:
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>name</code></dt>
|
||||
<dd>The name for this device. The name will be alphanumeric,
|
||||
with words separated by underscore. For many devices, the
|
||||
name is just the bus type and address, as in
|
||||
"pci_0000_00_02_1" or "usb_1_5_3", but some devices are able
|
||||
to provide more specific names, such as
|
||||
"net_eth1_00_27_13_6a_fe_00".
|
||||
</dd>
|
||||
<dt><code>parent</code></dt>
|
||||
<dd>If this element is present, it names the parent device (that
|
||||
is, a controller to which this node belongs).
|
||||
</dd>
|
||||
<dt><code>capability</code></dt>
|
||||
<dd>This node appears for each capability that libvirt
|
||||
associates with a node. A mandatory
|
||||
attribute <code>type</code> lists which category the device
|
||||
belongs to, and controls which further subelements will be
|
||||
present to describe the node:
|
||||
<dl>
|
||||
<dt><code>system</code></dt>
|
||||
<dd>Describes the overall host. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>product</code></dt>
|
||||
<dd>If present, a simple text string giving the product
|
||||
name of the system.</dd>
|
||||
<dt><code>hardware</code></dt>
|
||||
<dd>Describes the hardware of the system, including
|
||||
sub-elements for <code>vendor</code>, <code>version</code>,
|
||||
<code>serial</code>, and <code>uuid</code>.</dd>
|
||||
<dt><code>firmware</code></dt>
|
||||
<dd>Describes the firmware of the system, including
|
||||
sub-elements for <code>vendor</code>, <code>version</code>,
|
||||
and <code>release_date</code>.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>pci</code></dt>
|
||||
<dd>Describes a device on the host's PCI bus. Sub-elements
|
||||
include:
|
||||
<dl>
|
||||
<dt><code>domain</code></dt>
|
||||
<dd>Which domain the device belongs to.</dd>
|
||||
<dt><code>bus</code></dt>
|
||||
<dd>Which bus within the domain.</dd>
|
||||
<dt><code>slot</code></dt>
|
||||
<dd>Which slot within the bus.</dd>
|
||||
<dt><code>function</code></dt>
|
||||
<dd>Which function within the slot.</dd>
|
||||
<dt><code>product</code></dt>
|
||||
<dd>Product details from the device ROM, including an
|
||||
attribute <code>id</code> with the hexadecimal product
|
||||
id, and an optional text description of that id.</dd>
|
||||
<dt><code>vendor</code></dt>
|
||||
<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>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>usb_device</code></dt>
|
||||
<dd>Describes a device on the host's USB bus, based on its
|
||||
location within the bus. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>bus</code></dt>
|
||||
<dd>Which bus the device belongs to.</dd>
|
||||
<dt><code>device</code></dt>
|
||||
<dd>Which device within the bus.</dd>
|
||||
<dt><code>product</code></dt>
|
||||
<dd>Product details from the device ROM, including an
|
||||
attribute <code>id</code> with the hexadecimal product
|
||||
id, and an optional text description of that id.</dd>
|
||||
<dt><code>vendor</code></dt>
|
||||
<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>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>usb</code></dt>
|
||||
<dd>Describes a USB device, based on its advertised driver
|
||||
interface. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>number</code></dt>
|
||||
<dd>The device number.</dd>
|
||||
<dt><code>number</code></dt>
|
||||
<dd>The device class.</dd>
|
||||
<dt><code>number</code></dt>
|
||||
<dd>The device subclass.</dd>
|
||||
<dt><code>number</code></dt>
|
||||
<dd>The device protocol.</dd>
|
||||
<dt><code>description</code></dt>
|
||||
<dd>If present, a description of the device.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>net</code></dt>
|
||||
<dd>Describes a device capable for use as a network
|
||||
interface. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>interface</code></dt>
|
||||
<dd>The interface name tied to this device.</dd>
|
||||
<dt><code>address</code></dt>
|
||||
<dd>If present, the MAC address of the device.</dd>
|
||||
<dt><code>capability</code></dt>
|
||||
<dd>A network protocol exposed by the device, where the
|
||||
attribute <code>type</code> can be "80203" for IEEE
|
||||
802.3, or "80211" for various flavors of IEEE 802.11.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>scsi_host</code></dt>
|
||||
<dd>Describes a SCSI host device. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>host</code></dt>
|
||||
<dd>The SCSI host number.</dd>
|
||||
<dt><code>capability</code></dt>
|
||||
<dd>Current capabilities include "vports_ops" (indicates
|
||||
vport operations are supported) and "fc_host", the later
|
||||
implies following sub-elements: <code>wwnn</code>,
|
||||
<code>wwpn</code>, <code>fabric_wwn</code>.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>scsi</code></dt>
|
||||
<dd>Desribes a SCSI device. Sub-elements include:
|
||||
<dl>
|
||||
<dt><code>host</code></dt>
|
||||
<dd>The SCSI host containing the device.</dd>
|
||||
<dt><code>bus</code></dt>
|
||||
<dd>The bus within the host.</dd>
|
||||
<dt><code>target</code></dt>
|
||||
<dd>The target within the bus.</dd>
|
||||
<dt><code>lun</code></dt>
|
||||
<dd>The lun within the target.</dd>
|
||||
<dt><code>type</code></dt>
|
||||
<dd>The type of SCSI device.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>storage</code></dt>
|
||||
<dd>Describes a device usable for storage. Sub-elements
|
||||
include:
|
||||
<dl>
|
||||
<dt><code>block</code></dt>
|
||||
<dd>A block device file name that accesses the storage
|
||||
present on the device.</dd>
|
||||
<dt><code>bus</code></dt>
|
||||
<dd>If present, the name of the bus the device is found
|
||||
on.</dd>
|
||||
<dt><code>drive_type</code></dt>
|
||||
<dd>The type of the drive, such as "disk" or
|
||||
"cdrom".</dd>
|
||||
<dt><code>model</code></dt>
|
||||
<dd>Any model information available from the
|
||||
device.</dd>
|
||||
<dt><code>vendor</code></dt>
|
||||
<dd>Any vendor information available from the
|
||||
device.</dd>
|
||||
<dt><code>serial</code></dt>
|
||||
<dd>Any serial number information available from the
|
||||
device.</dd>
|
||||
<dt><code>size</code></dt>
|
||||
<dd>For fixed-size storage, the amount of storage
|
||||
available.</dd>
|
||||
<dt><code>capability</code></dt>
|
||||
<dd>If present, an additional capability is listed via
|
||||
the attribute <code>type</code>. Current capabilites
|
||||
include "hotpluggable" and "removable", with the
|
||||
latter implying the following
|
||||
sub-elements: <code>media_available</code> (0 or
|
||||
1), <code>media_size</code>,
|
||||
and <code>media_label</code>.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a name="nodeExample">Examples</a></h2>
|
||||
|
||||
<p>The following are some example node device XML outputs:</p>
|
||||
<pre>
|
||||
<device>
|
||||
<name>computer</name>
|
||||
<capability type='system'>
|
||||
<product>2241B36</product>
|
||||
<hardware>
|
||||
<vendor>LENOVO</vendor>
|
||||
<version>ThinkPad T500</version>
|
||||
<serial>R89055N</serial>
|
||||
<uuid>c9488981-5049-11cb-9c1c-993d0230b4cd</uuid>
|
||||
</hardware>
|
||||
<firmware>
|
||||
<vendor>LENOVO</vendor>
|
||||
<version>6FET82WW (3.12 )</version>
|
||||
<release_date>11/26/2009</release_date>
|
||||
</firmware>
|
||||
</capability>
|
||||
</device>
|
||||
|
||||
<device>
|
||||
<name>net_eth1_00_27_13_6a_fe_00</name>
|
||||
<parent>pci_0000_00_19_0</parent>
|
||||
<capability type='net'>
|
||||
<interface>eth1</interface>
|
||||
<address>00:27:13:6a:fe:00</address>
|
||||
<capability type='80203'/>
|
||||
</capability>
|
||||
</device></pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -109,131 +109,6 @@
|
||||
<br/><br/>
|
||||
</p>
|
||||
|
||||
<h3><a name="nwfconceptschains">Filtering chains</a></h3>
|
||||
<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>
|
||||
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
|
||||
dropped or accepted by a filtering rule in one of the traversed chains.
|
||||
<br/>
|
||||
Libvirt's network filtering system automatically creates individual
|
||||
<code>root</code> chains for every virtual machine's network interface
|
||||
on which the user chooses to activate traffic filtering.
|
||||
The user may write filtering rules that are either directly instantiated
|
||||
in the <code>root</code> chain or may create protocol-specific
|
||||
filtering chains for efficient evaluation of protocol-specific rules.
|
||||
The following chains exist:
|
||||
</p>
|
||||
<ul>
|
||||
<li>root</li>
|
||||
<li>mac <span class="since">(since 0.9.8)</span></li>
|
||||
<li>stp (spanning tree protocol)
|
||||
<span class="since">(since 0.9.8)</span></li>
|
||||
<li>vlan (802.1Q) <span class="since">(since 0.9.8)</span></li>
|
||||
<li>arp, rarp</li>
|
||||
<li>ipv4</li>
|
||||
<li>ipv6</li>
|
||||
</ul>
|
||||
<p>
|
||||
<span class="since">Since 0.9.8</span> multiple chains evaluating the
|
||||
<code>mac</code>, <code>stp</code>, <code>vlan</code>,
|
||||
<code>arp</code>, <code>rarp</code>, <code>ipv4</code>, or
|
||||
<code>ipv6</code> protocol can be created using
|
||||
the protocol name only as a prefix in the chain's name. This for
|
||||
examples allows chains with names <code>arp-xyz</code> or
|
||||
<code>arp-test</code> to be specified and have ARP protocol packets
|
||||
evaluated in those chains.
|
||||
<br/><br/>
|
||||
The following filter shows an example of filtering ARP traffic
|
||||
in the <code>arp</code> chain.
|
||||
</p>
|
||||
<pre>
|
||||
<filter name='no-arp-spoofing' chain='arp' priority='-500'>
|
||||
<uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid>
|
||||
<rule action='drop' direction='out' priority='300'>
|
||||
<mac match='no' srcmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='out' priority='350'>
|
||||
<arp match='no' arpsrcmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='out' priority='400'>
|
||||
<arp match='no' arpsrcipaddr='$IP'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='in' priority='450'>
|
||||
<arp opcode='Reply'/>
|
||||
<arp match='no' arpdstmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='in' priority='500'>
|
||||
<arp match='no' arpdstipaddr='$IP'/>
|
||||
</rule>
|
||||
<rule action='accept' direction='inout' priority='600'>
|
||||
<arp opcode='Request'/>
|
||||
</rule>
|
||||
<rule action='accept' direction='inout' priority='650'>
|
||||
<arp opcode='Reply'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='inout' priority='1000'/>
|
||||
</filter>
|
||||
</pre>
|
||||
<p>
|
||||
The consequence of putting ARP-specific rules in the <code>arp</code>
|
||||
chain, rather than for example in the <code>root</code> chain, is that
|
||||
packets for any other protocol than ARP do not need to be evaluated by
|
||||
ARP protocol-specific rules. This improves the efficiency
|
||||
of the traffic filtering. However, one must then pay attention to only
|
||||
put filtering rules for the given protocol into the chain since
|
||||
any other rules will not be evaluated, i.e., an IPv4 rule will not
|
||||
be evaluated in the ARP chain since no IPv4 protocol packets will
|
||||
traverse the ARP chain.
|
||||
<br/><br/>
|
||||
</p>
|
||||
<h3><a name="nwfconceptschainpriorities">Filtering chain priorities</a></h3>
|
||||
<p>
|
||||
All chains are connected to the <code>root</code> chain. The order in
|
||||
which those chains are accessed is influenced by the priority of the
|
||||
chain. The following table shows the chains that can be assigned a
|
||||
priority and their default priorities.
|
||||
</p>
|
||||
<table class="top_table">
|
||||
<tr>
|
||||
<th> Chain (prefix) </th>
|
||||
<th> Default priority </th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>stp</td><td>-810</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>mac</td><td>-800</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vlan</td><td>-750</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ipv4</td><td>-700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ipv6</td><td>-600</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>arp</td><td>-500</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>rarp</td><td>-400</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
A chain with a lower priority value is accessed before one with a
|
||||
higher value.
|
||||
<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
|
||||
node. The above example filter shows the default priority of -500
|
||||
for <code>arp</code> chains.
|
||||
</p>
|
||||
<h3><a name="nwfconceptsvars">Usage of variables in filters</a></h3>
|
||||
<p>
|
||||
|
||||
@@ -260,11 +135,42 @@
|
||||
<a href="#nwflimits">section on limitations</a> on how to use this
|
||||
feature and what to expect when using it.
|
||||
<br/><br/>
|
||||
The above-shown network filer <code>no-arp-spoofing</code>
|
||||
is an example of
|
||||
The following is the XML description of the network filer
|
||||
<code>no-arp-spoofing</code>. It serves as an example for
|
||||
a network filter XML referencing the <code>MAC</code> and
|
||||
<code>IP</code> variables.
|
||||
<br/><br/>
|
||||
<code>IP</code> parameters. This particular filter is referenced by the
|
||||
<code>clean-traffic</code> filter.
|
||||
</p>
|
||||
<pre>
|
||||
<filter name='no-arp-spoofing' chain='arp'>
|
||||
<uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid>
|
||||
<rule action='drop' direction='out' priority='300'>
|
||||
<mac match='no' srcmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='out' priority='350'>
|
||||
<arp match='no' arpsrcmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='out' priority='400'>
|
||||
<arp match='no' arpsrcipaddr='$IP'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='in' priority='450'>
|
||||
<arp opcode='Reply'/>
|
||||
<arp match='no' arpdstmacaddr='$MAC'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='in' priority='500'>
|
||||
<arp match='no' arpdstipaddr='$IP'/>
|
||||
</rule>
|
||||
<rule action='accept' direction='inout' priority='600'>
|
||||
<arp opcode='Request'/>
|
||||
</rule>
|
||||
<rule action='accept' direction='inout' priority='650'>
|
||||
<arp opcode='Reply'/>
|
||||
</rule>
|
||||
<rule action='drop' direction='inout' priority='1000'/>
|
||||
</filter>
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Note that referenced variables are always prefixed with the
|
||||
$ (dollar) sign. The format of the value of a variable
|
||||
must be of the type expected by the filter attribute in the
|
||||
@@ -276,101 +182,8 @@
|
||||
interface from attaching when hotplugging is used. The types
|
||||
that are expected for each XML attribute are shown
|
||||
below.
|
||||
<br/><br/>
|
||||
<span class="since">Since 0.9.8</span> variables can contain lists of
|
||||
elements, e.g., the variable <code>IP</code> can contain multiple IP
|
||||
addresses that are valid on a particular interface. The notation for
|
||||
providing multiple elements for the IP variable is:
|
||||
</p>
|
||||
<pre>
|
||||
...
|
||||
<devices>
|
||||
<interface type='bridge'>
|
||||
<mac address='00:16:3e:5d:c7:9e'/>
|
||||
<filterref filter='clean-traffic'>
|
||||
<parameter name='IP' value='10.0.0.1'/>
|
||||
<parameter name='IP' value='10.0.0.2'/>
|
||||
<parameter name='IP' value='10.0.0.3'/>
|
||||
</filterref>
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
<p>
|
||||
This then allows filters to enable multiple IP addresses
|
||||
per interface. Therefore, with the list
|
||||
of IP address shown above, the following rule will create 3
|
||||
individual filtering rules, one for each IP address.
|
||||
</p>
|
||||
<pre>
|
||||
...
|
||||
<rule action='accept' direction='in' priority='500'>
|
||||
<tcp srpipaddr='$IP'/>
|
||||
</rule>
|
||||
...
|
||||
</pre>
|
||||
<p>
|
||||
<span class="since">Since 0.9.10</span> it is possible to access
|
||||
individual elements of a variable holding a list of elements.
|
||||
A filtering rule like the following accesses the 2nd element
|
||||
of the variable DSTPORTS.
|
||||
</p>
|
||||
<pre>
|
||||
...
|
||||
<rule action='accept' direction='in' priority='500'>
|
||||
<udp dstportstart='$DSTPORTS[1]'/>
|
||||
</rule>
|
||||
...
|
||||
</pre>
|
||||
<p>
|
||||
<span class="since">Since 0.9.10</span> it is possible to create
|
||||
filtering rules that instantiate all combinations of rules from
|
||||
different lists using the notation of
|
||||
<code>$VARIABLE[@<iterator ID>]</code>.
|
||||
The following rule allows a virtual machine to
|
||||
receive traffic on a set of ports, which are specified in DSTPORTS,
|
||||
from the set of source IP address specified in SRCIPADDRESSES.
|
||||
The rule generates all combinations of elements of the variable
|
||||
DSTPORT with those of SRCIPADDRESSES by using two independent
|
||||
iterators to access their elements.
|
||||
</p>
|
||||
<pre>
|
||||
...
|
||||
<rule action='accept' direction='in' priority='500'>
|
||||
<ip srcipaddr='$SRCIPADDRESSES[@1]' dstportstart='$DSTPORTS[@2]'/>
|
||||
</rule>
|
||||
...
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
In an example we assign concrete values to SRCIPADDRESSES and DSTPORTS
|
||||
</p>
|
||||
<pre>
|
||||
SRCIPADDRESSES = [ 10.0.0.1, 11.1.2.3 ]
|
||||
DSTPORTS = [ 80, 8080 ]
|
||||
</pre>
|
||||
<p>
|
||||
Accessing the variables using $SRCIPADDRESSES[@1] and $DSTPORTS[@2] would
|
||||
then result in all combinations of addresses and ports being created:
|
||||
</p>
|
||||
<pre>
|
||||
10.0.0.1, 80
|
||||
10.0.0.1, 8080
|
||||
11.1.2.3, 80
|
||||
11.1.2.3, 8080
|
||||
</pre>
|
||||
<p>
|
||||
Accessing the same variables using a single iterator, for example by using
|
||||
the notation $SRCIPADDRESSES[@1] and $DSTPORTS[@1], would result in
|
||||
parallel access to both lists and result in the following combinations:
|
||||
</p>
|
||||
<pre>
|
||||
10.0.0.1, 80
|
||||
11.1.2.3, 8080
|
||||
</pre>
|
||||
<p>
|
||||
Further, the notation of $VARIABLE is short-hand for $VARIABLE[@0]. The
|
||||
former notation always assumes the iterator with Id '0'.
|
||||
<p>
|
||||
<h2><a name="nwfelems">Element and attribute overview</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -445,19 +258,11 @@
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
action -- mandatory; must either be <code>drop</code>
|
||||
(matching the rule silently discards the packet with no
|
||||
further analysis),
|
||||
<code>reject</code> (matching the rule generates an ICMP
|
||||
reject message with no further analysis) <span class="since">(since
|
||||
0.9.0)</span>, <code>accept</code> (matching the rule accepts
|
||||
the packet with no further analysis), <code>return</code>
|
||||
(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
|
||||
rule for further analysis) <span class="since">(since
|
||||
0.9.7)</span>.
|
||||
action -- mandatory; must either be <code>drop</code>,
|
||||
<code>reject</code><span class="since">(since 0.9.0)</span>,
|
||||
or <code>accept</code> if
|
||||
the evaluation of the filtering rule is supposed to drop,
|
||||
reject (using ICMP message), or accept a packet
|
||||
</li>
|
||||
<li>
|
||||
direction -- mandatory; must either be <code>in</code>, <code>out</code> or
|
||||
@@ -467,21 +272,10 @@
|
||||
<li>
|
||||
priority -- optional; the priority of the rule controls the order in
|
||||
which the rule will be instantiated relative to other rules.
|
||||
Rules with lower value will be instantiated before rules with higher
|
||||
values.
|
||||
Valid values are in the range of 0 to 1000.
|
||||
<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>
|
||||
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
|
||||
access to filter chains.
|
||||
(See also section on
|
||||
<a href="#nwfconceptschainpriorities">
|
||||
filtering chain priorities
|
||||
</a>.)
|
||||
Rules with lower value will be instantiated and therefore evaluated
|
||||
before rules with higher value.
|
||||
Valid values are in the range of 0 to 1000. If this attribute is not
|
||||
provided, the value 500 will automatically be assigned.
|
||||
</li>
|
||||
<li>
|
||||
statematch -- optional; possible values are '0' or 'false' to
|
||||
@@ -610,203 +404,6 @@
|
||||
[...]
|
||||
</pre>
|
||||
|
||||
<h5><a name="nwfelemsRulesProtoVLAN">VLAN (802.1Q)</a>
|
||||
<span class="since">(Since 0.9.8)</span>
|
||||
</h5>
|
||||
<p>
|
||||
Protocol ID: <code>vlan</code>
|
||||
<br/>
|
||||
Note: Rules of this type should go either into the <code>root</code> or
|
||||
<code>vlan</code> chain.
|
||||
</p>
|
||||
<table class="top_table">
|
||||
<tr>
|
||||
<th> Attribute </th>
|
||||
<th> Datatype </th>
|
||||
<th> Semantics </th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>srcmacaddr</td>
|
||||
<td>MAC_ADDR</td>
|
||||
<td>MAC address of sender</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>srcmacmask</td>
|
||||
<td>MAC_MASK</td>
|
||||
<td>Mask applied to MAC address of sender</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dstmacaddr</td>
|
||||
<td>MAC_ADDR</td>
|
||||
<td>MAC address of destination</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dstmacmask</td>
|
||||
<td>MAC_MASK</td>
|
||||
<td>Mask applied to MAC address of destination</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vlan-id</td>
|
||||
<td>UINT16 (0x0-0xfff, 0 - 4095)</td>
|
||||
<td>VLAN ID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>encap-protocol</td>
|
||||
<td>UINT16 (0x03c-0xfff), String</td>
|
||||
<td>Encapsulated layer 3 protocol ID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>comment </td>
|
||||
<td>STRING</td>
|
||||
<td>text with max. 256 characters</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
Valid Strings for <code>encap-protocol</code> are: arp, ipv4, ipv6
|
||||
</p>
|
||||
|
||||
<h5><a name="nwfelemsRulesProtoSTP">STP (Spanning Tree Protocol)</a>
|
||||
<span class="since">(Since 0.9.8)</span>
|
||||
</h5>
|
||||
<p>
|
||||
Protocol ID: <code>stp</code>
|
||||
<br/>
|
||||
Note: Rules of this type should go either into the <code>root</code> or
|
||||
<code>stp</code> chain.
|
||||
</p>
|
||||
<table class="top_table">
|
||||
<tr>
|
||||
<th> Attribute </th>
|
||||
<th> Datatype </th>
|
||||
<th> Semantics </th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>srcmacaddr</td>
|
||||
<td>MAC_ADDR</td>
|
||||
<td>MAC address of sender</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>srcmacmask</td>
|
||||
<td>MAC_MASK</td>
|
||||
<td>Mask applied to MAC address of sender</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>UINT8</td>
|
||||
<td>Bridge Protcol Data Unit (BPDU) type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>flags</td>
|
||||
<td>UINT8</td>
|
||||
<td>BPDU flag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-priority</td>
|
||||
<td>UINT16</td>
|
||||
<td>Root priority (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-priority-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Root priority range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-address</td>
|
||||
<td>MAC_ADDRESS</td>
|
||||
<td>Root MAC address</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-address-mask</td>
|
||||
<td>MAC_MASK</td>
|
||||
<td>Root MAC address mask</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-cost</td>
|
||||
<td>UINT32</td>
|
||||
<td>Root path cost (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>root-cost-hi</td>
|
||||
<td>UINT32</td>
|
||||
<td>Root path cost range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sender-priority</td>
|
||||
<td>UINT16</td>
|
||||
<td>Sender priority (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sender-priority-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Sender priority range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sender-address</td>
|
||||
<td>MAC_ADDRESS</td>
|
||||
<td>BPDU sender MAC address</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sender-address-mask</td>
|
||||
<td>MAC_MASK</td>
|
||||
<td>BPDU sender MAC address mask</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>port</td>
|
||||
<td>UINT16</td>
|
||||
<td>Port identifier (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>port_hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Port identifier range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>msg-age</td>
|
||||
<td>UINT16</td>
|
||||
<td>Message age timer (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>msg-age-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Message age timer range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>max-age</td>
|
||||
<td>UINT16</td>
|
||||
<td>Maximum age timer (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>max-age-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Maximum age timer range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hello-time</td>
|
||||
<td>UINT16</td>
|
||||
<td>Hello time timer (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hello-time-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Hello time timer range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>forward-delay</td>
|
||||
<td>UINT16</td>
|
||||
<td>Forward delay (range start)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>forward-delay-hi</td>
|
||||
<td>UINT16</td>
|
||||
<td>Forward delay range end</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>comment</td>
|
||||
<td>STRING</td>
|
||||
<td>text with max. 256 characters</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h5><a name="nwfelemsRulesProtoARP">ARP/RARP</a></h5>
|
||||
<p>
|
||||
Protocol ID: <code>arp</code> or <code>rarp</code>
|
||||
@@ -896,7 +493,6 @@
|
||||
<h5><a name="nwfelemsRulesProtoIP">IPv4</a></h5>
|
||||
<p>
|
||||
Protocol ID: <code>ip</code>
|
||||
<br/>
|
||||
Note: Rules of this type should either go into the
|
||||
<code>root</code> or <code>ipv4</code> chain.
|
||||
</p>
|
||||
@@ -987,7 +583,6 @@
|
||||
<h5><a name="nwfelemsRulesProtoIPv6">IPv6</a></h5>
|
||||
<p>
|
||||
Protocol ID: <code>ipv6</code>
|
||||
<br/>
|
||||
Note: Rules of this type should either go into the
|
||||
<code>root</code> or <code>ipv6</code> chain.
|
||||
</p>
|
||||
@@ -1828,10 +1423,8 @@
|
||||
</p>
|
||||
<ul>
|
||||
<li>mac</li>
|
||||
<li>stp (spanning tree protocol)</li>
|
||||
<li>vlan (802.1Q)</li>
|
||||
<li>arp, rarp</li>
|
||||
<li>ipv4</li>
|
||||
<li>ip</li>
|
||||
<li>ipv6</li>
|
||||
</ul>
|
||||
|
||||
@@ -1843,14 +1436,13 @@
|
||||
filter subsystem first passes through the filtering support implemented
|
||||
by ebtables and only then through iptables or ip6tables filters. If
|
||||
a filter tree has rules with the protocols <code>mac</code>,
|
||||
<code>stp</code>, <code>vlan</code>
|
||||
<code>arp</code>, <code>rarp</code>, <code>ipv4</code>,
|
||||
or <code>ipv6</code> ebtables rules will automatically be instantiated.
|
||||
<code>arp</code>, <code>rarp</code>, <code>ip</code>, or <code>ipv6</code>
|
||||
ebtables rules will automatically be instantiated.
|
||||
<br/>
|
||||
The role of the <code>chain</code> attribute in the network filter
|
||||
XML is that internally a new user-defined ebtables table is created
|
||||
that then for example receives all <code>arp</code> traffic coming
|
||||
from or going to a virtual machine if the chain <code>arp</code>
|
||||
from or going to a virtual machine, if the chain <code>arp</code>
|
||||
has been specified. Further, a rule is generated in an interface's
|
||||
<code>root</code> chain that directs all ipv4 traffic into the
|
||||
user-defined chain. Therefore, all ARP traffic rules should then be
|
||||
@@ -1858,12 +1450,6 @@
|
||||
into user-defined tables is only supported with filtering on the ebtables
|
||||
layer.
|
||||
<br/>
|
||||
<span class="since">Since 0.9.8</span> multiple chains for the same
|
||||
protocol can be created. For this the name of the chain must have
|
||||
a prefix of one of the previously enumerated protocols. To create an
|
||||
additional chain for handling of ARP traffic, a chain with name
|
||||
<code>arp-test</code> can be specified.
|
||||
<br/>
|
||||
As an example, it is
|
||||
possible to filter on UDP traffic by source and destination ports using
|
||||
the <code>ip</code> protocol filter and specifying attributes for the
|
||||
@@ -2209,13 +1795,6 @@
|
||||
0.8.1 or later in order not to lose the network traffic filters
|
||||
associated with an interface.
|
||||
</p>
|
||||
<h3><a name="nwflimitsvlan">VLAN filtering on Linux</a></h3>
|
||||
<p>
|
||||
VLAN (802.1Q) packets, if sent by a virtual machine, cannot be filtered
|
||||
with rules for protocol IDs <code>arp</code>, <code>rarp</code>,
|
||||
<code>ipv4</code> and <code>ipv6</code> but only
|
||||
with protocol IDs <code>mac</code> and <code>vlan</code>. Therefore,
|
||||
the example filter <code>clean-traffic</code> will not work as expected.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -39,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> and <code>ceph</code> are defined.
|
||||
Specific usage categories are described below.
|
||||
only <code>volume</code> is defined. Specific usage categories are
|
||||
described below.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -54,18 +54,6 @@
|
||||
this secret is associated with.
|
||||
</p>
|
||||
|
||||
<h3>Usage type "ceph"</h3>
|
||||
|
||||
<p>
|
||||
This secret is associated with a Ceph RBD (rados block device).
|
||||
The <code><usage type='ceph'></code> element must contain
|
||||
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><auth></code> element of
|
||||
a <a href="domain.html#elementsDisks">disk
|
||||
device</a>. <span class="since">Since 0.9.7</span>.
|
||||
</p>
|
||||
|
||||
<h2><a name="example">Example</a></h2>
|
||||
|
||||
<pre>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
volumes. Some may have constraints on volume size, or placement.
|
||||
</p>
|
||||
<p>
|
||||
The top level tag for a storage pool document is 'pool'. It has
|
||||
The is 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
|
||||
|
@@ -585,12 +585,6 @@
|
||||
<li><p>For strict equality of a prefix:</p>
|
||||
<pre>
|
||||
STRPREFIX(a,b)
|
||||
</pre>
|
||||
</li>
|
||||
<li><p>To avoid having to check if a or b are NULL:</p>
|
||||
<pre>
|
||||
STREQ_NULLABLE(a, b)
|
||||
STRNEQ_NULLABLE(a, b)
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
1
docs/html/.gitignore
vendored
Normal file
1
docs/html/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.html
|
@@ -373,10 +373,7 @@
|
||||
allocation of collected information (however, on an
|
||||
out-of-memory condition, the buffer may still be NULL). The
|
||||
caller is responsible for freeing registered buffers, since the
|
||||
buffers are designed to persist beyond virCommandFree. It
|
||||
is possible to pass the same pointer to both
|
||||
virCommandSetOutputBuffer and virCommandSetErrorBuffer, in which
|
||||
case the child process interleaves output into a single string.
|
||||
buffers are designed to persist beyond virCommandFree.
|
||||
</p>
|
||||
|
||||
<h3><a name="directory">Setting working directory</a></h3>
|
||||
@@ -448,7 +445,7 @@
|
||||
<strong>Note:</strong> if the command has been daemonized
|
||||
this will only block & wait for the intermediate process,
|
||||
not the real command. <code>virCommandRun</code> will
|
||||
report on any errors that have occurred upon this point
|
||||
report on any errors that have occured upon this point
|
||||
with all previous API calls. If the command fails to
|
||||
run, or exits with non-zero status an error will be
|
||||
reported via normal libvirt error infrastructure. If a
|
||||
|
@@ -163,28 +163,14 @@
|
||||
|
||||
<ul>
|
||||
<li>type=call: the in parameters for the method call, XDR encoded</li>
|
||||
<li>type=call-with-fds: number of file handles, then the in parameters for the method call, XDR encoded, followed by the file handles</li>
|
||||
<li>type=reply+status=ok: the return value and/or out parameters for the method call, XDR encoded</li>
|
||||
<li>type=reply+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
||||
<li>type=reply-with-fds+status=ok: number of file handles, the return value and/or out parameters for the method call, XDR encoded, followed by the file handles</li>
|
||||
<li>type=reply-with-fds+status=error: number of file handles, the error information for the method, a virErrorPtr XDR encoded, followed by the file handles</li>
|
||||
<li>type=event: the parameters for the event, XDR encoded</li>
|
||||
<li>type=stream+status=ok: no payload</li>
|
||||
<li>type=stream+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
||||
<li>type=stream+status=continue: the raw bytes of data for the stream. No XDR encoding</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
With the two packet types that support passing file descriptors, in
|
||||
between the header and the payload there will be a 4-byte integer
|
||||
specifying the number of file descriptors which are being sent.
|
||||
The actual file handles are sent after the payload has been sent.
|
||||
Each file handle has a single dummy byte transmitted as a carrier
|
||||
for the out of band file descriptor. While the sender should always
|
||||
send '\0' as the dummy byte value, the receiver ought to ignore the
|
||||
value for the sake of robustness.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For the exact payload information for each procedure, consult the XDR protocol
|
||||
definition for the program+version in question
|
||||
@@ -353,27 +339,6 @@
|
||||
+--+-----------------------+--------+
|
||||
</pre>
|
||||
|
||||
<h4><a name="wireexamplescallfd">Method call with passed FD</a></h4>
|
||||
|
||||
<p>
|
||||
A single method call with 2 passed file descriptors and successful
|
||||
reply, for a program=8, version=1, procedure=3, which 10 bytes worth
|
||||
of input args, and 4 bytes worth of return values. The number of
|
||||
file descriptors is encoded as a 32-bit int. Each file descriptor
|
||||
then has a 1 byte dummy payload. The overall input
|
||||
packet length is 4 + 24 + 4 + 2 + 10 == 44, and output packet length 32.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
+--+-----------------------+---------------+-------+
|
||||
C --> |44| 8 | 1 | 3 | 0 | 1 | 0 | 2 | .o.oOo.o. | 0 | 0 | --> S (call)
|
||||
+--+-----------------------+---------------+-------+
|
||||
|
||||
+--+-----------------------+--------+
|
||||
C <-- |32| 8 | 1 | 3 | 1 | 1 | 0 | .o.oOo | <-- S (reply)
|
||||
+--+-----------------------+--------+
|
||||
</pre>
|
||||
|
||||
|
||||
<h2><a name="security">RPC security</a></h2>
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -364,51 +364,3 @@ span.since {
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.diagram {
|
||||
background: rgb(230,230,230);
|
||||
border: 2px dotted rgb(178,178,178);
|
||||
padding: 1em;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.data th, table.data td {
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
table.data {
|
||||
border-spacing: 0px;
|
||||
}
|
||||
|
||||
table.data thead th {
|
||||
background: rgb(178,178,178);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.data {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.data thead tr th {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
table.data tr.head th {
|
||||
border-left: 1px solid black;
|
||||
border-right: 1px solid black;
|
||||
}
|
||||
|
||||
table.data tbody td {
|
||||
background: rgb(240,240,240);
|
||||
}
|
||||
table.data tbody td.y {
|
||||
background: rgb(220,255,220);
|
||||
text-align: center;
|
||||
}
|
||||
table.data tbody td.n {
|
||||
background: rgb(255,220,220);
|
||||
text-align: center;
|
||||
}
|
||||
|
@@ -76,7 +76,7 @@
|
||||
<p>
|
||||
The sanlock daemon must be started on every single host
|
||||
that will be running virtual machines. So repeat these
|
||||
steps as necessary.
|
||||
steps as neccessary.
|
||||
</p>
|
||||
|
||||
<h2><a name="sanlockplugin">libvirt sanlock plugin configuration</a></h2>
|
||||
|
@@ -1,58 +0,0 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
6 2775 2400 3675 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||
-6
|
||||
6 5400 2400 6300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||
-6
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
4350 4275 4350 3600 3300 3600 3300 2850
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
4800 4275 4800 3600 5775 3600 5775 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||
1 1 1.00 135.00 180.00
|
||||
3750 5100 3750 4500 4050 4500
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB |
@@ -1,58 +0,0 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
6 2775 2400 3675 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||
-6
|
||||
6 5400 2400 6300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||
-6
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
4350 4275 4350 3600 3300 3600 3300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||
1 1 1.00 135.00 180.00
|
||||
3750 5100 3750 4500 4050 4500
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 135.00 180.00
|
||||
3675 2625 5400 2625
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
Binary file not shown.
Before Width: | Height: | Size: 3.9 KiB |
@@ -1,43 +0,0 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
6 2775 2400 3675 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||
-6
|
||||
6 5400 2400 6300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||
-6
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
3375 1350 3375 825 5700 825 5700 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
Binary file not shown.
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,49 +0,0 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
6 2775 2400 3675 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||
-6
|
||||
6 5400 2400 6300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||
-6
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 135.00 180.00
|
||||
3375 1950 3375 2400
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
3375 2850 3375 3375 5700 3375 5700 2850
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 135.00 180.00
|
||||
5700 2400 5700 1950
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
@@ -1,58 +0,0 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
6 2775 2400 3675 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 630 2925 2700 HV Ctrl\001
|
||||
-6
|
||||
6 5400 2400 6300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 630 5550 2700 HV Ctrl\001
|
||||
-6
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||
1 1 1.00 135.00 180.00
|
||||
4350 4275 4350 3600 3300 3600 3300 2850
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||
1 1 1.00 135.00 180.00
|
||||
3750 5100 3750 4500 4050 4500
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 135.00 180.00
|
||||
3675 2625 5400 2625
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
Binary file not shown.
Before Width: | Height: | Size: 3.9 KiB |
@@ -1,601 +0,0 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>Guest migration</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<p>
|
||||
Migration of guests between hosts is a complicated problem with many possible
|
||||
solutions, each with their own positive and negative points. For maximum
|
||||
flexibility of both hypervisor integration, and adminsitrator deployment,
|
||||
libvirt implements several options for migration.
|
||||
</p>
|
||||
|
||||
<h2><a id="transport">Network data transports</a></h2>
|
||||
|
||||
<p>
|
||||
There are two options for the data transport used during migration, either
|
||||
the hypervisor's own <strong>native</strong> transport, or <strong>tunnelled</strong>
|
||||
over a libvirtd connection.
|
||||
</p>
|
||||
|
||||
<h3><a id="transportnative">Hypervisor native transport</a></h3>
|
||||
<p>
|
||||
<em>Native</em> data transports may or may not support encryption, depending
|
||||
on the hypervisor in question, but will typically have the lowest computational costs
|
||||
by minimising the number of data copies involved. The native data transports will also
|
||||
require extra hypervisor-specific network configuration steps by the administrator when
|
||||
deploying a host. For some hypervisors, it might be necessary to open up a large range
|
||||
of ports on the firewall to allow multiple concurrent migration operations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img class="diagram" src="migration-native.png" alt="Migration native path">
|
||||
</p>
|
||||
|
||||
<h3><a id="transporttunnel">libvirt tunnelled transport</a></h3>
|
||||
<p>
|
||||
<em>Tunnelled</em> data transports will always be capable of strong encryption
|
||||
since they are able to leverage the capabilities built in to the libvirt RPC protocol.
|
||||
The downside of a tunnelled transport, however, is that there will be extra data copies
|
||||
involved on both the source and destinations hosts as the data is moved between libvirtd
|
||||
and the hypervisor. This is likely to be a more significant problem for guests with
|
||||
very large RAM sizes, which dirty memory pages quickly. On the deployment side, tunnelled
|
||||
transports do not require any extra network configuration over and above what's already
|
||||
required for general libvirtd <a href="remote.html">remote access</a>, and there is only
|
||||
need for a single port to be open on the firewall to support multiple concurrent
|
||||
migration operations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img class="diagram" src="migration-tunnel.png" alt="Migration tunnel path">
|
||||
</p>
|
||||
|
||||
<h2><a id="flow">Communication control paths/flows</a></h2>
|
||||
|
||||
<p>
|
||||
Migration of virtual machines requires close co-ordination of the two
|
||||
hosts involved, as well as the application invoking the migration,
|
||||
which may be on the source, the destination, or a third host.
|
||||
</p>
|
||||
|
||||
<h3><a id="flowmanageddirect">Managed direct migration</a></h3>
|
||||
|
||||
<p>
|
||||
With <em>managed direct</em> migration, the libvirt client process
|
||||
controls the various phases of migration. The client application must
|
||||
be able to connect and authenticate with the libvirtd daemons on both
|
||||
the source and destination hosts. There is no need for the two libvirtd
|
||||
daemons to communicate with each other. If the client application
|
||||
crashes, or otherwise loses its connection to libvirtd during the
|
||||
migration process, an attempt will be made to abort the migration and
|
||||
restart the guest CPUs on the source host. There may be scenarios
|
||||
where this cannot be safely done, in which cases the guest will be
|
||||
left paused on one or both of the hosts.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img class="diagram" src="migration-managed-direct.png" alt="Migration direct, managed">
|
||||
</p>
|
||||
|
||||
|
||||
<h3><a id="flowpeer2peer">Managed peer to peer migration</a></h3>
|
||||
|
||||
<p>
|
||||
With <em>peer to peer</em> migration, the libvirt client process only
|
||||
talks to the libvirtd daemon on the source host. The source libvirtd
|
||||
daemon controls the entire migration process itself, by directly
|
||||
connecting the destination host libvirtd. If the client application crashes,
|
||||
or otherwise loses its connection to libvirtd, the migration process
|
||||
will continue uninterrupted until completion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img class="diagram" src="migration-managed-p2p.png" alt="Migration peer-to-peer">
|
||||
</p>
|
||||
|
||||
|
||||
<h3><a id="flowunmanageddirect">Unmanaged direct migration</a></h3>
|
||||
|
||||
<p>
|
||||
With <em>unmanaged direct</em> migration, neither the libvirt client
|
||||
or libvirtd daemon control the migration process. Control is instead
|
||||
delegated to the hypervisor's over management services (if any). The
|
||||
libvirt client merely initiates the migration via the hypervisor's
|
||||
management layer. If the libvirt client or libvirtd crash, the
|
||||
migration process will continue uninterrupted until completion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<img class="diagram" src="migration-unmanaged-direct.png" alt="Migration direct, unmanaged">
|
||||
</p>
|
||||
|
||||
|
||||
<h2><a id="security">Data security</a></h2>
|
||||
|
||||
<p>
|
||||
Since the migration data stream includes a complete copy of the guest
|
||||
OS RAM, snooping of the migration data stream may allow compromise
|
||||
of sensitive guest information. If the virtualization hosts have
|
||||
multiple network interfaces, or if the network switches support
|
||||
tagged VLANs, then it is very desirable to separate guest network
|
||||
traffic from migration or management traffic.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In some scenarios, even a separate network for migration data may
|
||||
not offer sufficient security. In this case it is possible to apply
|
||||
encryption to the migration data stream. If the hypervisor does not
|
||||
itself offer encryption, then the libvirt tunnelled migration
|
||||
facility should be used.
|
||||
</p>
|
||||
|
||||
<h2><a id="uris">Migration URIs</a></h2>
|
||||
|
||||
<p>
|
||||
Initiating a guest migration requires the client application to
|
||||
specify up to three URIs, depending on the choice of control
|
||||
flow and/or APIs used. The first URI is that of the libvirt
|
||||
connection to the source host, where the virtual guest is
|
||||
currently running. The second URI is that of the libvirt
|
||||
connection to the destination host, where the virtual guest
|
||||
will be moved to. The third URI is a hypervisor specific
|
||||
URI used to control how the guest will be migrated. With
|
||||
any managed migration flow, the first and second URIs are
|
||||
compulsory, while the third URI is optional. With the
|
||||
unmanaged direct migration mode, the first and third URIs are
|
||||
compulsory and the second URI is not used.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ordinarily management applications only need to care about the
|
||||
first and second URIs, which are both in the normal libvirt
|
||||
connection URI format. Libvirt will then automatically determine
|
||||
the hypervisor specific URI, by looking up the target host's
|
||||
configured hostname. There are a few scenarios where the management
|
||||
application may wish to have direct control over the third URI.
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
<li>The configured hostname is incorrect, or DNS is broken. If a
|
||||
host has a hostname which will not resolve to match one of its
|
||||
public IP addresses, then libvirt will generate an incorrect
|
||||
URI. In this case the management application should specify the
|
||||
hypervisor specific URI explicitly, using an IP address, or a
|
||||
correct hostname.</li>
|
||||
<li>The host has multiple network interaces. If a host has multiple
|
||||
network interfaces, it might be desirable for the migration data
|
||||
stream to be sent over a specific interface for either security
|
||||
or performance reasons. In this case the management application
|
||||
should specify the hypervisor specific URI, using an IP address
|
||||
associated with the network to be used.</li>
|
||||
<li>The firewall restricts what ports are available. When libvirt
|
||||
generates a migration URI will pick a port number using hypervisor
|
||||
specific rules. Some hypervisors only require a single port to be
|
||||
open in the firewalls, while others require a whole range of port
|
||||
numbers. In the latter case the management application may wish
|
||||
to choose a specific port number outside the default range in order
|
||||
to comply with local firewall policies</li>
|
||||
</ol>
|
||||
|
||||
<h2><a id="config">Configuration file handling</a></h2>
|
||||
|
||||
<p>
|
||||
There are two types of virtual machine known to libvirt. A <em>transient</em>
|
||||
guest only exists while it is running, and has no configuration file stored
|
||||
on disk. A <em>persistent</em> guest maintains a configuration file on disk
|
||||
even when it is not running.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By default, a migration operation will not attempt to change any configuration
|
||||
files that may be stored on either the source or destination host. It is the
|
||||
administrator, or management application's, responsibility to manage distribution
|
||||
of configuration files (if desired). It is important to note that the <code>/etc/libvirt</code>
|
||||
directory <strong>MUST NEVER BE SHARED BETWEEN HOSTS</strong>. There are some
|
||||
typical scenarios that might be applicable:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Centralized configuration files outside libvirt, in shared storage. A cluster
|
||||
aware management application may maintain all the master guest configuration
|
||||
files in a cluster filesystem. When attempting to start a guest, the config
|
||||
will be read from the cluster FS and used to deploy a persistent guest.
|
||||
For migration the configuration will need to be copied to the destination
|
||||
host and removed on the original.
|
||||
</li>
|
||||
<li>Centralized configuration files outside libvirt, in a database. A data center
|
||||
management application may not storage configuration files at all. Instead it
|
||||
may generate libvirt XML on the fly when a guest is booted. It will typically
|
||||
use transient guests, and thus not have to consider configuration files during
|
||||
migration.
|
||||
</li>
|
||||
<li>Distributed configuration inside libvirt. The configuration file for each
|
||||
guest is copied to every host where the guest is able to run. Upon migration
|
||||
the existing config merely needs to be updated with any changes
|
||||
</li>
|
||||
<li>Ad-hoc configuration management inside libvirt. Each guest is tied to a
|
||||
specific host and rarely migrated. When migration is required, the config
|
||||
is moved from one host to the other.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
As mentioned above, libvirt will not touch configuration files during
|
||||
migration by default. The <code>virsh</code> command has two flags to
|
||||
influence this behaviour. The <code>--undefine-source</code> flag
|
||||
will cause the configuration file to be removed on the source host
|
||||
after a successful migration. The <code>--persist</code> flag will
|
||||
cause a configuration file to be created on the destination host
|
||||
after a successful migration. The following table summarizes the
|
||||
configuration file handling in all possible state and flag
|
||||
combinations.
|
||||
</p>
|
||||
|
||||
<table class="data">
|
||||
<thead>
|
||||
<tr class="head">
|
||||
<th colspan="3">Before migration</th>
|
||||
<th colspan="2">Flags</th>
|
||||
<th colspan="3">After migration</th>
|
||||
</tr>
|
||||
<tr class="subhead">
|
||||
<th>Guest type</th>
|
||||
<th>Source config</th>
|
||||
<th>Dest config</th>
|
||||
<th>--undefine-source</th>
|
||||
<th>--persist</th>
|
||||
<th>Guest type</th>
|
||||
<th>Source config</th>
|
||||
<th>Dest config</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- src:N, dst:N -->
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
|
||||
<!-- src:N, dst:Y -->
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
|
||||
<!-- src:Y dst:N -->
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td>Transient</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
|
||||
<!-- src:Y dst:Y -->
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="n">N</td>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Persistent</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td class="y">Y</td>
|
||||
<td>Persistent</td>
|
||||
<td class="n">N</td>
|
||||
<td class="y">Y</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2><a id="scenarios">Migration scenarios</a></h2>
|
||||
|
||||
|
||||
<h3><a id="scenarionativedirect">Native migration, client to two libvirtd servers</a></h3>
|
||||
|
||||
<p>
|
||||
At an API level this requires use of virDomainMigrate, without the
|
||||
VIR_MIGRATE_PEER2PEER flag set. The destination libvirtd server
|
||||
will automatically determine the native hypervisor URI for migration
|
||||
based off the primary hostname. To force migration over an alternate
|
||||
network interface the optional hypervisor specific URI must be provided
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [HV-URI]
|
||||
|
||||
|
||||
eg using default network interface
|
||||
|
||||
virsh migrate web1 qemu+ssh://desthost/system
|
||||
virsh migrate web1 xen+tls://desthost/system
|
||||
|
||||
|
||||
eg using secondary network interface
|
||||
|
||||
virsh migrate web1 qemu://desthost/system tcp://10.0.0.1/
|
||||
virsh migrate web1 xen+tcp://desthost/system xenmigr:10.0.0.1/
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Supported by Xen, QEMU, VMWare and VirtualBox drivers
|
||||
</p>
|
||||
|
||||
<h3><a id="scenarionativepeer2peer">Native migration, client to and peer2peer between, two libvirtd servers</a></h3>
|
||||
|
||||
<p>
|
||||
virDomainMigrate, with the VIR_MIGRATE_PEER2PEER flag set,
|
||||
using the libvirt URI format for the 'uri' parameter. The
|
||||
destination libvirtd server will automatically determine
|
||||
the native hypervisor URI for migration, based off the
|
||||
primary hostname. The optional uri parameter controls how
|
||||
the source libvirtd connects to the destination libvirtd,
|
||||
in case it is not accessible using the same address that
|
||||
the client uses to connect to the destination, or a different
|
||||
encryption/auth scheme is required. There is no
|
||||
scope for forcing an alternative network interface for the
|
||||
native migration data with this method.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This mode cannot be invoked from virsh
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Supported by QEMU driver
|
||||
</p>
|
||||
|
||||
<h3><a id="scenariotunnelpeer2peer1">Tunnelled migration, client and peer2peer between two libvirtd servers</a></h3>
|
||||
|
||||
<p>
|
||||
virDomainMigrate, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
|
||||
flags set, using the libvirt URI format for the 'uri' parameter. The
|
||||
destination libvirtd server will automatically determine
|
||||
the native hypervisor URI for migration, based off the
|
||||
primary hostname. The optional uri parameter controls how
|
||||
the source libvirtd connects to the destination libvirtd,
|
||||
in case it is not accessible using the same address that
|
||||
the client uses to connect to the destination, or a different
|
||||
encryption/auth scheme is required. The native hypervisor URI
|
||||
format is not used at all.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This mode cannot be invoked from virsh
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Supported by QEMU driver
|
||||
</p>
|
||||
|
||||
<h3><a id="nativedirectunmanaged">Native migration, client to one libvirtd server</a></h3>
|
||||
|
||||
<p>
|
||||
virDomainMigrateToURI, without the VIR_MIGRATE_PEER2PEER flag set,
|
||||
using a hypervisor specific URI format for the 'uri' parameter.
|
||||
There is no use or requirement for a destination libvirtd instance
|
||||
at all. This is typically used when the hypervisor has its own
|
||||
native management daemon available to handle incoming migration
|
||||
attempts on the destination.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
syntax: virsh migrate GUESTNAME HV-URI
|
||||
|
||||
|
||||
eg using same libvirt URI for all connections
|
||||
|
||||
virsh migrate --direct web1 xenmigr://desthost/
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Supported by Xen driver
|
||||
</p>
|
||||
|
||||
<h3><a id="nativepeer2peer">Native migration, peer2peer between two libvirtd servers</a></h3>
|
||||
|
||||
<p>
|
||||
virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER flag set,
|
||||
using the libvirt URI format for the 'uri' parameter. The
|
||||
destination libvirtd server will automatically determine
|
||||
the native hypervisor URI for migration, based off the
|
||||
primary hostname. There is no scope for forcing an alternative
|
||||
network interface for the native migration data with this method.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [ALT-DEST-LIBVIRT-URI]
|
||||
|
||||
|
||||
eg using same libvirt URI for all connections
|
||||
|
||||
virsh migrate --p2p web1 qemu+ssh://desthost/system
|
||||
|
||||
|
||||
eg using different libvirt URI auth scheme for peer2peer connections
|
||||
|
||||
virsh migrate --p2p web1 qemu+ssh://desthost/system qemu+tls:/desthost/system
|
||||
|
||||
|
||||
eg using different libvirt URI hostname for peer2peer connections
|
||||
|
||||
virsh migrate --p2p web1 qemu+ssh://desthost/system qemu+ssh://10.0.0.1/system
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Supported by the QEMU driver
|
||||
</p>
|
||||
|
||||
<h3><a id="scenariotunnelpeer2peer2">Tunnelled migration, peer2peer between two libvirtd servers</a></h3>
|
||||
|
||||
<p>
|
||||
virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
|
||||
flags set, using the libvirt URI format for the 'uri' parameter. The
|
||||
destination libvirtd server will automatically determine
|
||||
the native hypervisor URI for migration, based off the
|
||||
primary hostname. The optional uri parameter controls how
|
||||
the source libvirtd connects to the destination libvirtd,
|
||||
in case it is not accessible using the same address that
|
||||
the client uses to connect to the destination, or a different
|
||||
encryption/auth scheme is required. The native hypervisor URI
|
||||
format is not used at all.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [ALT-DEST-LIBVIRT-URI]
|
||||
|
||||
|
||||
eg using same libvirt URI for all connections
|
||||
|
||||
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system
|
||||
|
||||
|
||||
eg using different libvirt URI auth scheme for peer2peer connections
|
||||
|
||||
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system qemu+tls:/desthost/system
|
||||
|
||||
|
||||
eg using different libvirt URI hostname for peer2peer connections
|
||||
|
||||
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system qemu+ssh://10.0.0.1/system
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Supported by QEMU driver
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -8,787 +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>0.9.9: Jan 7 2012</h3>
|
||||
<ul>
|
||||
<li> Features:<br/>
|
||||
Add new API virDomain{S,G}etInterfaceParameters (Hu Tao),<br/>
|
||||
Add new API virDomain{G,S}etNumaParameters (Hu Tao),<br/>
|
||||
Add support for ppc64 qemu (Prerna Saxena, Bharata B Rao, Michael Ellerman),<br/>
|
||||
Support Xen domctl v8 (Jim Fehlig)<br/>
|
||||
</li>
|
||||
|
||||
<li> Documentation:<br/>
|
||||
Fix typos in messages. (Yuri Chornoivan),<br/>
|
||||
docs: re-fix stray / (Eric Blake),<br/>
|
||||
virsh: move version command to host group (Lai Jiangshan),<br/>
|
||||
docs: Move 'echo' command description into the generic commands section (Satoru SATOH),<br/>
|
||||
docs: Move 'send-key' command description into the domain commands section (Satoru SATOH),<br/>
|
||||
docs: remove stray / (Eric Blake),<br/>
|
||||
docs: fix missing / in xml examples (Eric Blake),<br/>
|
||||
docs: improve virsh domxml-*-native command docs (Alex Jia),<br/>
|
||||
docs: document <qemu:commandline> xml (Eric Blake),<br/>
|
||||
Fix typo in storage pool documentation (Christophe Fergeau),<br/>
|
||||
docs: tweak 'virsh edit' wording (Eric Blake),<br/>
|
||||
docs: document <address> elements in one place (Eric Blake),<br/>
|
||||
threads: Document spurious wakeups on virCondWait (Michal Privoznik)<br/>
|
||||
</li>
|
||||
|
||||
<li> Portability:<br/>
|
||||
build: fix mingw virCommand build (Eric Blake),<br/>
|
||||
tests: avoid test failure on rawhide gnutls (Eric Blake),<br/>
|
||||
build: drop check for ANSI compiler (Eric Blake),<br/>
|
||||
Fix build on s390(x) and other stange arches (Daniel Veillard),<br/>
|
||||
Require avahi as an rpm dependancy (Daniel Veillard),<br/>
|
||||
Disable python explicitly in mingw32 autobuild (Daniel P. Berrange),<br/>
|
||||
build: disable dtrace on non-Linux builds (Eric Blake),<br/>
|
||||
build: let autobuild check more code (Eric Blake),<br/>
|
||||
maint: allow bootstrap in a sandbox (Eric Blake)<br/>
|
||||
</li>
|
||||
|
||||
<li> Bug Fixes:<br/>
|
||||
qemu: Avoid memory leaks on qemuParseRBDString (Alex Jia),<br/>
|
||||
qemu: fix a bug in numatune (Hu Tao),<br/>
|
||||
qemu: fix use-after-free regression (Eric Blake),<br/>
|
||||
seclabel: fix regression in libvirtd restart (Eric Blake),<br/>
|
||||
command: Discard FD_SETSIZE limit for opened files (Michal Privoznik),<br/>
|
||||
Fix xenstore serial console path for HVM guests (Jim Fehlig),<br/>
|
||||
schemas: Allow '.' in CPU feature name (Jiri Denemark),<br/>
|
||||
virCommand: Properly handle POLLHUP (Michal Privoznik),<br/>
|
||||
virCPUDefCopy forgot to copy NUMA topology (Jiri Denemark),<br/>
|
||||
qemu: fix block stat naming (Eric Blake),<br/>
|
||||
domiftune: clean up previous patches (Eric Blake),<br/>
|
||||
virsh: Fix checking for reconnect conditions (Peter Krempa),<br/>
|
||||
qemu: Fix bandwidth memory leak on failure (Alex Jia),<br/>
|
||||
qemu: fix blkio memory leak on failure (Eric Blake),<br/>
|
||||
remove a static limit on max domains in python bindings (Daniel Veillard),<br/>
|
||||
python: Fix problems of virDomain{Set, Get}BlockIoTune bindings (Alex Jia),<br/>
|
||||
qemu: fix inf-loop in blkio parameters (Eric Blake),<br/>
|
||||
qemu: Keep list of USB devices attached to domains (Michal Privoznik),<br/>
|
||||
qemu: Release the lock on domobj if fails on finding the disk path (Osier Yang),<br/>
|
||||
virsh: plug mem leaks in domxml-*-native (Alex Jia),<br/>
|
||||
console: plug memory leaks (Alex Jia),<br/>
|
||||
rpc: handle param_int, plug memory leaks (Eric Blake),<br/>
|
||||
python: plug memory leak on libvirt_virConnectOpenAuth (Alex Jia),<br/>
|
||||
Only add the timer when a callback is registered (Daniel P. Berrange),<br/>
|
||||
qemu: detect truncated file as invalid save image (Eric Blake),<br/>
|
||||
qemu: Don't drop hostdev config until security label restore (Michal Privoznik),<br/>
|
||||
Fix default migration speed in qemu driver (Jim Fehlig),<br/>
|
||||
qemu: Fix race between async and query jobs (Jiri Denemark),<br/>
|
||||
qemu: Do not free the device from activePciHostdevs if it's in use (Osier Yang),<br/>
|
||||
qemu: Honor the original properties of PCI device when detaching (Osier Yang),<br/>
|
||||
spec: fix inverted logic on sanlock (Wen Congyang),<br/>
|
||||
tests: plug memory leak on linuxTestNodeInfo (Alex Jia),<br/>
|
||||
storage: Fix a potential crash when creating vol object (Osier Yang),<br/>
|
||||
qemu: Disable EOF processing during qemuDomainDestroy (Jiri Denemark),<br/>
|
||||
virsh: Free returned MIME type string (Michal Privoznik),<br/>
|
||||
storage: Activate/deactivate logical volumes only on local node (Rommer),<br/>
|
||||
security: don't try to label network disks (Josh Durgin),<br/>
|
||||
test: replace deprecated "fedora-13" machine with "pc-0.13" (Laine Stump),<br/>
|
||||
network: don't add iptables rules for externally managed networks (Laine Stump),<br/>
|
||||
threadpool: Use while loop on virCondWait (Michal Privoznik),<br/>
|
||||
virsh: plug memory leak on cmdDomblklist (Alex Jia),<br/>
|
||||
fix error when parsing ppc64 models on x86 host (Stefan Berger),<br/>
|
||||
fix memory leak in src/nodeinfo.c (Stefan Berger),<br/>
|
||||
threadpool: Don't wait on condition if pool has no workers (Michal Privoznik),<br/>
|
||||
bridge: Fix forward delay APIs (Jiri Denemark),<br/>
|
||||
virsh: return correct value from cmdDomIfGetLink (Peter Krempa),<br/>
|
||||
virsh: plug memory leak on cmdDomIfGetLink() sucessful path (Alex Jia),<br/>
|
||||
virsh: plug memory leak on cmdBlkdeviotune() sucessful path (Alex Jia),<br/>
|
||||
test: fix potential lock corruption in test driver (Laine Stump),<br/>
|
||||
spec: fix logic bug in deciding to turn on cgconfig (Eric Blake),<br/>
|
||||
When checking nttyFDs to see if it is != 1, be sure to use '1' and not '-1' (Daniel P. Berrange),<br/>
|
||||
Fix installation of libvirt-guests.service (Daniel P. Berrange)<br/>
|
||||
</li>
|
||||
|
||||
<li> Improvements:<br/>
|
||||
Implement DNS SRV record into the bridge driver (Michal Novotny),<br/>
|
||||
seclabel: honor device override in selinux (Eric Blake),<br/>
|
||||
seclabel: allow a seclabel override on a disk src (Eric Blake),<br/>
|
||||
seclabel: extend XML to allow per-disk label overrides (Eric Blake),<br/>
|
||||
seclabel: move seclabel stuff earlier (Eric Blake),<br/>
|
||||
seclabel: refactor existing domain_conf usage (Eric Blake),<br/>
|
||||
schema: rewrite seclabel rng to match code (Eric Blake),<br/>
|
||||
domiftune: Enable the virDomain{S,G}etInterfaceParameters in virsh (Hu Tao),<br/>
|
||||
domiftune: Add virDomain{S,G}etInterfaceParameters support to qemu driver (Hu Tao),<br/>
|
||||
domiftune: Add a util function virDomainNetFind (Hu Tao),<br/>
|
||||
domiftune: Add support of new APIs to the remote driver (Hu Tao),<br/>
|
||||
domiftune: virDomain{S,G}etInterfaceParameters: the main entry points (Hu Tao),<br/>
|
||||
daemon: clean up daemonization (Eric Blake),<br/>
|
||||
tests: fix schema checks sorting (Eric Blake),<br/>
|
||||
qemu: Support for overriding NOFILE limit (Michal Privoznik),<br/>
|
||||
virsh: Use vshWatchJob in cmdManagedSave (Michal Privoznik),<br/>
|
||||
virsh: Use vshWatchJob in cmdSave (Michal Privoznik),<br/>
|
||||
virsh: Use vshWatchJob in cmdDump (Michal Privoznik),<br/>
|
||||
virsh: Move job watch code to a separate function (Michal Privoznik),<br/>
|
||||
qemuhelptest: Add new qemuCap flag (Michal Privoznik),<br/>
|
||||
qemu: Support readonly filesystem passthrough (Osier Yang),<br/>
|
||||
nwfilter: Do not require DHCP requests to be broadcasted (Stefan Berger),<br/>
|
||||
tests: run schema checks in sorted order (Eric Blake),<br/>
|
||||
tests: Add fake PPC64 emulator for QEMU testing (Michael Ellerman),<br/>
|
||||
qemu: Add spapr-vio address assignment (Michael Ellerman),<br/>
|
||||
Add New address type spapr-vio to domain.rng (Bharata B Rao),<br/>
|
||||
Add address type for SPAPR VIO devices (Michael Ellerman),<br/>
|
||||
qemu: Add a capability flag for -no-acpi (Michael Ellerman),<br/>
|
||||
add new command numatune to virsh (Hu Tao),<br/>
|
||||
Implement virDomain{G, S}etNumaParameters for the qemu driver (Hu Tao),<br/>
|
||||
Add virDomain{G, S}etNumaParameters support to the remote driver (Hu Tao),<br/>
|
||||
use cpuset to manage numa (Hu Tao),<br/>
|
||||
Add functions to set/get cgroup cpuset parameters (Hu Tao),<br/>
|
||||
virsh: simplify printing of typed parameters (Eric Blake),<br/>
|
||||
Hide use of timers for domain event dispatch (Daniel P. Berrange),<br/>
|
||||
Remove decl of all APIs related to domain event callbacks & queues (Daniel P. Berrange),<br/>
|
||||
Remove all domain event structs from header (Daniel P. Berrange),<br/>
|
||||
Convert drivers to thread safe APIs for adding callbacks (Daniel P. Berrange),<br/>
|
||||
Add APIs to allow management of callbacks purely with virDomainEventState (Daniel P. Berrange),<br/>
|
||||
Return count of callbacks when registering callbacks (Daniel P. Berrange),<br/>
|
||||
Convert Xen & VBox drivers to use virDomainEventState (Daniel P. Berrange),<br/>
|
||||
nwfilter: do not create ebtables chain unnecessarily (Stefan Berger),<br/>
|
||||
migration: Add more specific error code/message on migration abort (Peter Krempa),<br/>
|
||||
virsh: Add option to undefine storage with domains (Peter Krempa),<br/>
|
||||
python: Expose blockPeek and memoryPeek in Python binding (Osier Yang),<br/>
|
||||
virsh: support multifunction in attach-disk (KAMEZAWA Hiroyuki),<br/>
|
||||
python: Fix export of virDomainSnapshotListChildrenNames (Peter Krempa),<br/>
|
||||
Provide a helper method virDomainLiveConfigHelperMethod (Lei Li),<br/>
|
||||
virsh: Print error message if argument parsing fails for cmdNodesuspend (Peter Krempa),<br/>
|
||||
build: follow directory install conventions (Eric Blake),<br/>
|
||||
Fix make uninstall (Dave Allan),<br/>
|
||||
qemu: Prepare to cater for more general address assignment (Michael Ellerman),<br/>
|
||||
qemu: Add address in qemuBuildChrDeviceStr() on pseries (Michael Ellerman),<br/>
|
||||
qemu: Use spapr-vscsi on pseries machine type (Michael Ellerman),<br/>
|
||||
network: allow '-' in model name (Eric Blake),<br/>
|
||||
cpu: Add cpu flags supported by newest qemu (Peter Krempa),<br/>
|
||||
Pass the VM's UUID into the nwfilter subsystem (Stefan Berger),<br/>
|
||||
nwfilter: cleanup return codes in nwfilter subsystem (Stefan Berger),<br/>
|
||||
spec: make it easier to autoreconf when building rpm (Eric Blake),<br/>
|
||||
Ensure to prefix %{buildroot} when overriding systemd install location (Daniel P. Berrange),<br/>
|
||||
Add ppc64 specific definitions to domain.rng (Bharata B Rao),<br/>
|
||||
Clean up qemuBuildCommandLine to remove x86-specific (Prerna Saxena),<br/>
|
||||
Modify the tests/nodeinfotest.c to use sysfs in addition (Prerna Saxena),<br/>
|
||||
Use sysfs to gather host topology, in place of (Prerna Saxena)<br/>
|
||||
</li>
|
||||
|
||||
<li> Cleanups:<br/>
|
||||
network_conf: Fix whitespace to pass syntax-check (Peter Krempa)<br/>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>0.9.8: Dec 8 2011</h3>
|
||||
<ul>
|
||||
<li> Features:<br/>
|
||||
Add support for QEMU 1.0 (Jiri Denemark),<br/>
|
||||
Add first parts of PPC cpu driver. (Prerna Saxena),<br/>
|
||||
Add new API virDomain{Set, Get}BlockIoTune (Lei Li),<br/>
|
||||
block_resize: Define the new API (Osier Yang),<br/>
|
||||
Add a public API to invoke suspend/resume on the host (Srivatsa S. Bhat),<br/>
|
||||
Various improvements for LXC containers (Daniel P. Berrange),<br/>
|
||||
Define keepalive protocol and add virConnectIsAlive API (Jiri Denemark),<br/>
|
||||
Add support for STP and VLANfiltering (Stefan Berger)<br/>
|
||||
</li>
|
||||
|
||||
<li> Documentation:<br/>
|
||||
Add documentation for <disk><source type="dir"> (Christophe Fergeau),<br/>
|
||||
Fix typo in virDomainResume API doc (Christophe Fergeau),<br/>
|
||||
maint: fix improper use of 'an' (Eric Blake),<br/>
|
||||
virsh: translate net-info help (Eric Blake),<br/>
|
||||
maint: typo fixes (Eric Blake),<br/>
|
||||
virsh: Fix typos in man page (Jiri Denemark),<br/>
|
||||
rpc: Fix a typo in virNetClientSendNonBlock documentation (Jiri Denemark),<br/>
|
||||
docs: fix grammar of capabilities (Eric Blake),<br/>
|
||||
Documentation about chains' priorities, lists of elements etc. (Stefan Berger)<br/>
|
||||
</li>
|
||||
|
||||
<li> Portability:<br/>
|
||||
spec: don't use chkconfig --list (Eric Blake),<br/>
|
||||
build: fix build with older libxml2 (Eric Blake),<br/>
|
||||
Conditionalize daemonPath decl for Win32 which lacks UNIX sockets (Daniel P. Berrange),<br/>
|
||||
build: reduce warnings from older gcc (Eric Blake),<br/>
|
||||
Fix incorrect symbols for virtime.h module breaking Mingw32 (Daniel P. Berrange),<br/>
|
||||
build: fix build on Cygwin (Eric Blake),<br/>
|
||||
build: fix build at -O2 on rawhide (Eric Blake),<br/>
|
||||
Fix build for platforms lacking struct ifreq (Daniel P. Berrange),<br/>
|
||||
build: fix 'make dist' without dtrace (Eric Blake),<br/>
|
||||
Don't use undocumented __isleap macro (Daniel P. Berrange),<br/>
|
||||
virnetsocket: pass XAUTORITY for ssh connection (Christian Franke),<br/>
|
||||
Fix build on Mingw32 wrt export of virNetServerGetDBusConn (Daniel P. Berrange),<br/>
|
||||
build: fix compile error with no macvtap (Eric Blake),<br/>
|
||||
Fix build with polkit0 (Jim Fehlig),<br/>
|
||||
Fix strchr call triggering gcc 4.3 & 4.4 bug (Stefan Berger),<br/>
|
||||
PATCH: Fix build without MACVTAP (Michael Wood),<br/>
|
||||
util: fix compile error on debian (Eli Qiao),<br/>
|
||||
Disable numactl on ARM architectures too (Daniel P. Berrange),<br/>
|
||||
Add libvirt confdir to files section in mingw32 spec (Daniel P. Berrange),<br/>
|
||||
build: fix mingw build of gnulib openpty (Eric Blake)<br/>
|
||||
</li>
|
||||
|
||||
<li> Bug Fixes:<br/>
|
||||
Fix updating of haveTheBuck in RPC client to be race-free (Daniel P. Berrange),<br/>
|
||||
Prevent crash of libvirtd when attaching to existing qemu process (Jim Fehlig),<br/>
|
||||
qemu: Ignore shutdown event from destroyed domain (Jiri Denemark),<br/>
|
||||
remote_driver: don't fail if keepalive check fails (Guido Günther),<br/>
|
||||
command: handle empty buffer argument correctly (Eric Blake),<br/>
|
||||
client: Check if other thread claims it has the buck before claiming it. (Peter Krempa),<br/>
|
||||
Avoid crash in shunloadtest (Daniel P. Berrange),<br/>
|
||||
Fix a logic error for setting block I/O (Lei Li),<br/>
|
||||
virsh: Allow other escape characters for console (Michal Privoznik),<br/>
|
||||
bridge_driver: Don't define network if XML contains more IPv4 adreses. (Peter Krempa),<br/>
|
||||
virsh: Fix possible deadlock when virsh is about to exit (Jiri Denemark),<br/>
|
||||
util: Plug memory leak on virNetDevMacVLanCreateWithVPortProfile() error path (Alex Jia),<br/>
|
||||
util: Plug memory leak on virNetDevBridgeGet() sucessful path (Alex Jia),<br/>
|
||||
uml: Plug memory leak on umlStartVMDaemon() error path (Alex Jia),<br/>
|
||||
rpc: Plug memory leak on virNetClientSendInternal() error path (Alex Jia),<br/>
|
||||
conf: Plug memory leak on virDomainDefParseXML() error path (Alex Jia),<br/>
|
||||
qemu: Plug memory leak onqemuProcessWaitForMonitor() error path (Alex Jia),<br/>
|
||||
conf: reject duplicate paths in device weights (Eric Blake),<br/>
|
||||
Make logging async signal safe wrt time stamp generation (Daniel P. Berrange),<br/>
|
||||
Don't mark suspend as active until we know it is running (Daniel P. Berrange),<br/>
|
||||
util: avoid null deref on qcowXGetBackingStore (Alex Jia),<br/>
|
||||
virsh: correct return value error (Alex Jia),<br/>
|
||||
qemu: fix blkiotune --live --config (Eric Blake),<br/>
|
||||
lxc: Fix suspend/resume with freezer cgroup (Jiri Denemark),<br/>
|
||||
rpc: Really send non-blocking calls while waiting for another call (Jiri Denemark),<br/>
|
||||
util: fix thinko in runIO (Paolo Bonzini),<br/>
|
||||
storage: Skip socket and fifo on pool-start (Michal Privoznik),<br/>
|
||||
conf: Don't drop console definition on domain restart (Michal Privoznik),<br/>
|
||||
qemu: Avoid dereference of NULL pointer (Peter Krempa),<br/>
|
||||
nwfilter: Initialize virNWFilterAddIpAddrForIfname return variable (Michal Privoznik),<br/>
|
||||
Fix disabling of virtual port profile code on old hosts (Daniel P. Berrange),<br/>
|
||||
Fix uninitialized variable in NWfilter IP learning code (Daniel P. Berrange),<br/>
|
||||
storage: Fallback to use lvchange first if lvremove fails (Chang Liu),<br/>
|
||||
conf: don't modify cpu set string during parsing (Eric Blake),<br/>
|
||||
qemu: don't release network actual device twice (Roopa Prabhu),<br/>
|
||||
tests: avoid xend ABRT crash report (Eric Blake),<br/>
|
||||
Fix use of uninitialized variable in QEMU driver (Daniel P. Berrange),<br/>
|
||||
snapshot: refuse to generate names for non-regular backing files (Eric Blake),<br/>
|
||||
fix a bug in remoteSerializeTypedParameters (Hu Tao),<br/>
|
||||
Don't return a fatal error if receiving unexpected stream data (Daniel P. Berrange),<br/>
|
||||
Fix handling of stream EOF (Daniel P. Berrange),<br/>
|
||||
storage: forbid rebuilding existing disk storage pools (Guido Günther),<br/>
|
||||
qemu: fix domjobabort regression (Eric Blake),<br/>
|
||||
fix two bugs in bridge_driver.c (Hu Tao),<br/>
|
||||
nwfilter: avoid failure with noexec /tmp (Eric Blake),<br/>
|
||||
lxc: free error object to avoid memory leak (Alex Jia),<br/>
|
||||
lxc: free 'ttyFDs' array on return from lxcVmStart (Alex Jia)<br/>
|
||||
</li>
|
||||
|
||||
<li> Improvements:<br/>
|
||||
npiv: Expose fabric_name outside (Osier Yang),<br/>
|
||||
Improve error reporting when libvirtd is not installed (Daniel P. Berrange),<br/>
|
||||
spec: fix sanlock dependency (Eric Blake),<br/>
|
||||
spec: add dmidecode as prereq (Eric Blake),<br/>
|
||||
examples: Update event tests for shutdown event (Jiri Denemark),<br/>
|
||||
qemu: Rework handling of shutdown event (Jiri Denemark),<br/>
|
||||
python: Expose binding for virNodeGetMemoryStats() (Peter Krempa),<br/>
|
||||
python: Expose binding for virNodeGetCPUStats() (Peter Krempa),<br/>
|
||||
build: require more tools from maintainers (Eric Blake),<br/>
|
||||
apparmor: allow tunnelled migrations. (Serge Hallyn),<br/>
|
||||
Update of filters to handle multiple IP addresses (Stefan Berger),<br/>
|
||||
build: update to latest gnulib (Eric Blake),<br/>
|
||||
build: properly skip tests (Eric Blake),<br/>
|
||||
spec: mark directories in /var/run as ghosts (Eric Blake),<br/>
|
||||
qemu: filter blkio 0-device-weight at two other places (Hu Tao),<br/>
|
||||
qemu: amend existing table of device weights (Eric Blake),<br/>
|
||||
virsh: fix setting weight and device-weights at the same time (Hu Tao),<br/>
|
||||
Add tests for blkdeviotune (Lei Li),<br/>
|
||||
Support virDomain{Set, Get}BlockIoTune in the python API (Lei Li),<br/>
|
||||
Enable the blkdeviotune command in virsh (Lei Li),<br/>
|
||||
Implement virDomain{Set, Get}BlockIoTune for the qemu driver (Lei Li),<br/>
|
||||
Support block I/O throttle in XML (Lei Li),<br/>
|
||||
Add virDomain{Set, Get}BlockIoTune support to the remote driver (Lei Li),<br/>
|
||||
Fix leak build config file path (Daniel P. Berrange),<br/>
|
||||
Add internal APIs for dealing with time (Daniel P. Berrange),<br/>
|
||||
Remove obsolete virGetPMCapabilities sym from private symbols file (Daniel P. Berrange),<br/>
|
||||
Add suspend info to Xen, LXC and UML hypervisor capabilities (Daniel P. Berrange),<br/>
|
||||
Remove pointless strdup in node suspend code (Daniel P. Berrange),<br/>
|
||||
Do lazy init of host PM features (Daniel P. Berrange),<br/>
|
||||
Remove powerMgmt_valid field from capabilities struct (Daniel P. Berrange),<br/>
|
||||
Add export of node suspend capabilities APIs (Daniel P. Berrange),<br/>
|
||||
Move suspend capabilities APIs out of util.h into virnodesuspend.c (Daniel P. Berrange),<br/>
|
||||
Rename suspend capabilities APIs (Daniel P. Berrange),<br/>
|
||||
Sanitize virDiscoverHostPMFeature to return a boolean (Daniel P. Berrange),<br/>
|
||||
Move the virHostPMCapability enum helpers into capabilities.c (Daniel P. Berrange),<br/>
|
||||
Fix capabilities XML to use generic terms for suspend targets (Daniel P. Berrange),<br/>
|
||||
Remove internal only virHostPMCapability enum (Daniel P. Berrange),<br/>
|
||||
Fix values of PM target type constants (Daniel P. Berrange),<br/>
|
||||
blkiotune: add qemu support for blkiotune.device_weight (Hu Tao),<br/>
|
||||
blkiotune: add interface for blkiotune.device_weight (Hu Tao),<br/>
|
||||
qemu, lxc: drop redundant checks (Eric Blake),<br/>
|
||||
API: prevent query of --live and --config at once (Eric Blake),<br/>
|
||||
build: fix typo in last patch (Eric Blake),<br/>
|
||||
block_resize: Update test file for RPC (Osier Yang),<br/>
|
||||
block_resize: Expose the new API to virsh (Osier Yang),<br/>
|
||||
block_resize: Implement qemu driver method (Osier Yang),<br/>
|
||||
block_resize: Implement qemu monitor functions (Osier Yang),<br/>
|
||||
block_resize: Wire up the remote protocol (Osier Yang),<br/>
|
||||
examples: Correct the example command to use testnode.xml (Osier Yang),<br/>
|
||||
Add virsh command to initiate suspend on the host (Srivatsa S. Bhat),<br/>
|
||||
Implement the core API to suspend/resume the host (Srivatsa S. Bhat),<br/>
|
||||
Add the remote protocol implementation for virNodeSuspendForDuration (Srivatsa S. Bhat),<br/>
|
||||
Add 'Hybrid-Suspend' power management discovery for the host (Srivatsa S. Bhat),<br/>
|
||||
virsh: Don't traverse childless nodes in vshNodeIsSuperset (Michal Privoznik),<br/>
|
||||
conf: make virt-xml-validate work with vbox domains (Lorin Hochstein),<br/>
|
||||
conf: Improve incorrect root element error messages (Michal Privoznik),<br/>
|
||||
Refactor initial LXC mem tune / device ACL code (Daniel P. Berrange),<br/>
|
||||
Add support for blkio tuning of LXC containers (Daniel P. Berrange),<br/>
|
||||
Add support for CPU quota/period to LXC driver (Daniel P. Berrange),<br/>
|
||||
Support CPU placement in LXC driver (Daniel P. Berrange),<br/>
|
||||
Support NUMA memory placement for LXC containers (Daniel P. Berrange),<br/>
|
||||
storage: Refetch file status after open (Michal Privoznik),<br/>
|
||||
Fix version numbers for isAlive and setKeepAlive driver APIs (Jiri Denemark),<br/>
|
||||
build: Properly generate and check virkeepaliveprotocol-structs (Jiri Denemark),<br/>
|
||||
examples: Use virConnectOpenAuth in events-c (Jiri Denemark),<br/>
|
||||
qemu: Cancel p2p migration when connection breaks (Jiri Denemark),<br/>
|
||||
qemu: Add support for keepalive messages during p2p migration (Jiri Denemark),<br/>
|
||||
Add keepalive support into domain-events examples (Jiri Denemark),<br/>
|
||||
Implement virConnectIsAlive in all drivers (Jiri Denemark),<br/>
|
||||
Introduce virConnectIsAlive API (Jiri Denemark),<br/>
|
||||
Implement keepalive protocol in remote driver (Jiri Denemark),<br/>
|
||||
Add support for async close of client RPC socket (Jiri Denemark),<br/>
|
||||
Implement keepalive protocol in libvirt daemon (Jiri Denemark),<br/>
|
||||
virsh: Always run event loop (Jiri Denemark),<br/>
|
||||
Introduce virConnectSetKeepAlive (Jiri Denemark),<br/>
|
||||
Implement common keepalive handling (Jiri Denemark),<br/>
|
||||
rpc: Add some debug messages to virNetClient (Jiri Denemark),<br/>
|
||||
rpc: Fix handling of non-blocking calls that could not be sent (Jiri Denemark),<br/>
|
||||
rpc: Pass the buck only to the first available thread (Jiri Denemark),<br/>
|
||||
nwfilter: remove virConnectPtr from internal API calls (Stefan Berger),<br/>
|
||||
API: prefer 'disk' over 'block' or 'path' (Eric Blake),<br/>
|
||||
blockstats: support lookup by path in blockstats (Eric Blake),<br/>
|
||||
virsh: Increase device-detach intelligence (Michal Prívozník),<br/>
|
||||
Enable detection of multiple IP addresses (Stefan Berger),<br/>
|
||||
fix error message when using wrong URI alias (Eli Qiao),<br/>
|
||||
Pass additional parameter into applyDHCPOnly function (Stefan Berger),<br/>
|
||||
nwfilter: use shell variable to invoke 'ip(6)tables' command (Stefan Berger),<br/>
|
||||
nwfilter: use shell variable to invoke 'ebtables' command (Stefan Berger),<br/>
|
||||
Improve error reporting of failures to apply filtering rules (Stefan Berger),<br/>
|
||||
Add documentation for STP filtering support (Stefan Berger),<br/>
|
||||
Add test cases for STP traffic filtering (Stefan Berger),<br/>
|
||||
Add a 'mac' chain (Stefan Berger),<br/>
|
||||
Add strings.h include to capabilities.h for ffs() function prototype (Daniel P. Berrange),<br/>
|
||||
build: Update AUTHORS (Osier Yang),<br/>
|
||||
Export KVM Host Power Management capabilities (Srivatsa S. Bhat),<br/>
|
||||
qemu: Copy console definition from serial (Michal Privoznik),<br/>
|
||||
storage: Skips backingStore of virtual snapshot lv (Osier Yang),<br/>
|
||||
Add documentation for VLAN filtering support (Stefan Berger),<br/>
|
||||
Add test cases for VLAN traffic filtering (Stefan Berger),<br/>
|
||||
Don't copy sexpr node value that is an empty string (Jim Fehlig),<br/>
|
||||
enable cgroup cpuset by default (Hu Tao),<br/>
|
||||
tests: test recent hash addition (Eric Blake),<br/>
|
||||
Add test cases for parsing of list values (Stefan Berger),<br/>
|
||||
Extend NWFilter parameter parser to cope with lists of values (Stefan Berger),<br/>
|
||||
Create rules for each member of a list (Stefan Berger),<br/>
|
||||
Rework value part of name-value pairs (Stefan Berger),<br/>
|
||||
Add test cases (Stefan Berger),<br/>
|
||||
Interleave jumping into chains with filtering rules in 'root' table (Stefan Berger),<br/>
|
||||
Extend rule priorities into negative numbers (Stefan Berger),<br/>
|
||||
Enable chains with names having a known prefix (Stefan Berger),<br/>
|
||||
Extend the filter XML to support priorities of chains (Stefan Berger),<br/>
|
||||
Use the actual names of chains in data structure (Stefan Berger),<br/>
|
||||
Use scripting for cleaning and renaming of chains (Stefan Berger),<br/>
|
||||
Make filter creation in root table more flexible (Stefan Berger),<br/>
|
||||
Introduce an internal priority for chains (Stefan Berger),<br/>
|
||||
Add function to get hash table's key/value pairs (Stefan Berger),<br/>
|
||||
Add support for systemd init service (Daniel P. Berrange),<br/>
|
||||
Add support for interfaces with type=direct to LXC (Daniel P. Berrange),<br/>
|
||||
Allow creation of plain macvlan devices (Daniel P. Berrange),<br/>
|
||||
Refactor LXC network setup to allow future enhancements (Daniel P. Berrange),<br/>
|
||||
Add missing 'const' annotations for internal domain conf helpers (Daniel P. Berrange),<br/>
|
||||
qemu: Generate -numa option (Bharata B Rao),<br/>
|
||||
XML definitions for guest NUMA and parsing routines (Bharata B Rao),<br/>
|
||||
virsh: add iface-bridge and iface-unbridge commands (Laine Stump),<br/>
|
||||
Allow non-blocking message sending on virNetClient (Daniel P. Berrange),<br/>
|
||||
Refactor code for enabling/disabling I/O callback in remote client (Daniel P. Berrange),<br/>
|
||||
Split virNetClientSend into 2 methods (Daniel P. Berrange),<br/>
|
||||
Refactor code for passing the buck in the remote client (Daniel P. Berrange),<br/>
|
||||
Explicitly track whether the buck is held in remote client (Daniel P. Berrange),<br/>
|
||||
Remove all linked list handling from remote client event loop (Daniel P. Berrange),<br/>
|
||||
util: Add netdev helper functions to private symbols (Eli Qiao),<br/>
|
||||
qemu/rbd: improve rbd device specification (Sage Weil),<br/>
|
||||
maint: fix build (Stefan Berger),<br/>
|
||||
Fix error reporting in port profile parsing/formatting APIs (Daniel P. Berrange),<br/>
|
||||
API: add trivial qemu support for VIR_TYPED_PARAM_STRING (Eric Blake),<br/>
|
||||
API: remote support for VIR_TYPED_PARAM_STRING (Eric Blake),<br/>
|
||||
API: add VIR_TYPED_PARAM_STRING (Eric Blake),<br/>
|
||||
maint: use mailmap, not AUTHORS, for secondary addresses (Eric Blake),<br/>
|
||||
maint: fix make syntax-check (Stefan Berger),<br/>
|
||||
nwfilter: simplify execution of ebiptables scripts (Eric Blake),<br/>
|
||||
Remove usage of brctl command line tool (Daniel P. Berrange),<br/>
|
||||
Add an API for retrieving the MAC address of an interface (Daniel P. Berrange),<br/>
|
||||
Expose MTU management APIs (Daniel P. Berrange),<br/>
|
||||
Turn two int parameters into bools in bridge APIs (Daniel P. Berrange),<br/>
|
||||
Make all brXXX APIs raise errors, instead of returning errnos (Daniel P. Berrange),<br/>
|
||||
build: allow for local gnulib diffs (Eric Blake),<br/>
|
||||
qemu: Fix improper error message for disk detaching (Osier Yang),<br/>
|
||||
virsh: Add VSH_OFLAG_EMPTY_OK for attach-disk command (Xu He Jie)<br/>
|
||||
</li>
|
||||
|
||||
<li> Cleanups:<br/>
|
||||
Remove time APIs from src/util/util.h (Daniel P. Berrange),<br/>
|
||||
bandwidth: Fix funky identation (Michal Privoznik),<br/>
|
||||
qemu: fix a const-correctness issue (Eric Blake),<br/>
|
||||
build: fix accidental POTFILES.in regression (Eric Blake),<br/>
|
||||
Fix up ordering of private symbols file (Daniel P. Berrange),<br/>
|
||||
Move ifaceMacvtapLinkDump and ifaceGetNthParent functions (Daniel P. Berrange),<br/>
|
||||
Move functions for dealing with physical/virtual devices (Daniel P. Berrange),<br/>
|
||||
Rename APIs for dealing with virtual/physical functions (Daniel P. Berrange),<br/>
|
||||
Move virNetDevValidateConfig to virnetdev.c (Daniel P. Berrange),<br/>
|
||||
Rename ifaceCheck to virNetDevValidateConfig (Daniel P. Berrange),<br/>
|
||||
Move virNetDevGetIPv4Address to virnetdev.c (Daniel P. Berrange),<br/>
|
||||
Rename ifaceGetIPAddress to virNetDevGetIPv4Address (Daniel P. Berrange),<br/>
|
||||
Move virNetDevGetIndex & virNetDevGetVLanID to virnetdev.c (Daniel P. Berrange),<br/>
|
||||
Rename ifaceGetIndex and ifaceGetVLAN (Daniel P. Berrange),<br/>
|
||||
Move MAC address replacement functions to virnetdev.c (Daniel P. Berrange),<br/>
|
||||
Rename interface MAC address replacement APIs (Daniel P. Berrange),<br/>
|
||||
Move the low level macvlan creation APIs (Daniel P. Berrange),<br/>
|
||||
Rename low level macvlan creation APIs (Daniel P. Berrange),<br/>
|
||||
Rename high level macvlan creation APIs (Daniel P. Berrange),<br/>
|
||||
Rename and split the macvtap.c file (Daniel P. Berrange),<br/>
|
||||
Rename Macvtap management APIs (Daniel P. Berrange),<br/>
|
||||
Remove ifaceSetMac and ifaceGetMac APIs (Daniel P. Berrange),<br/>
|
||||
Remove ifaceUp, ifaceDown, ifaceCtrl & ifaceIsUp APIs (Daniel P. Berrange),<br/>
|
||||
Move LXC veth.c code into shared utility APIs (Daniel P. Berrange),<br/>
|
||||
Rename the LXC veth management APIs and delete duplicated APIs (Daniel P. Berrange),<br/>
|
||||
Split src/util/network.{c,h} into 5 pieces (Daniel P. Berrange),<br/>
|
||||
Rename virVirtualPortProfileParams & APIs (Daniel P. Berrange),<br/>
|
||||
build: drop useless dirent.h includes (Eric Blake),<br/>
|
||||
xenapi: remove unused variable (Eric Blake),<br/>
|
||||
Remove code instantiating filters on direct interfaces (Stefan Berger),<br/>
|
||||
Adjust naming of network device bandwidth management APIs (Daniel P. Berrange),<br/>
|
||||
Santize naming of socket address APIs (Daniel P. Berrange),<br/>
|
||||
Split bridge.h into three separate files (Daniel P. Berrange),<br/>
|
||||
Rename all brXXXX APIs to follow new convention (Daniel P. Berrange),<br/>
|
||||
Remove 'brControl' object (Daniel P. Berrange)<br/>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>0.9.7: Nov 8 2011</h3>
|
||||
<ul>
|
||||
<li> Features:<br/>
|
||||
esx: support vSphere 5.x (Patrice LACHANCE),<br/>
|
||||
vbox: support for VirtualBox 4.1 (Matthias Bolte),<br/>
|
||||
Introduce the virDomainOpenGraphics API (Daniel P. Berrange),<br/>
|
||||
Add AHCI support to qemu driver (Jim Fehlig),<br/>
|
||||
snapshot: many improvements and 2 new APIs (Eric Blake),<br/>
|
||||
api: Add public api for 'reset' (Xu He Jie)<br/>
|
||||
</li>
|
||||
|
||||
<li> Documentation:<br/>
|
||||
Add <deviceboot> capability. (Philipp Hahn),<br/>
|
||||
API: document scheduler parameter names (Eric Blake),<br/>
|
||||
improve typed parameter documentation (Eric Blake),<br/>
|
||||
fix typo in <disk>/<target> example (Eric Blake),<br/>
|
||||
python: Fix documentation of virStream recv (Matthias Bolte),<br/>
|
||||
Add documentation about migration. (Daniel P. Berrange),<br/>
|
||||
Document filesystem type='block' for LXC (Ryota Ozaki),<br/>
|
||||
fix incorrect info about routed networks (Laine Stump),<br/>
|
||||
document managed=yes of hostdev passthrough (Eric Blake),<br/>
|
||||
trivial spelling fix (Philipp Hahn),<br/>
|
||||
Fix virt-sanlock-cleanup documentation (Philipp Hahn),<br/>
|
||||
Fix two comments related to error handling (Philipp Hahn),<br/>
|
||||
fix network XML documentation (Laine Stump),<br/>
|
||||
Clarify semantics of virDomainMigrate2 (Jiri Denemark),<br/>
|
||||
Update examples for probing with systemtap (Daniel P. Berrange),<br/>
|
||||
fix html bug (Eric Blake),<br/>
|
||||
virsh: Update the help information for undefine command. (tangchen),<br/>
|
||||
Document STREQ_NULLABLE and STRNEQ_NULLABLE (Guido Günther),<br/>
|
||||
Document that ff callbacks need to be invoked from a clean stack. (Guido Günther),<br/>
|
||||
formatdomain.html.in: fix tickpolicy (Douglas Schilling Landgraf),<br/>
|
||||
virsh: describe attach-interface parameter target (Daniel Veillard),<br/>
|
||||
virsh: update man page for cpu_shares parameter (Daniel Veillard),<br/>
|
||||
document node device XML (Eric Blake),<br/>
|
||||
document virsh nodedev-* commands (Eric Blake),<br/>
|
||||
snapshot: fix man page typos (Eric Blake),<br/>
|
||||
virsh: Better document --copy-storage migrate options (Jiri Denemark),<br/>
|
||||
virsh: Enhance documentation of commands starting jobs (Jiri Denemark),<br/>
|
||||
virsh: Improve virsh manual for virsh memtune command (Peter Krempa)<br/>
|
||||
</li>
|
||||
|
||||
<li> Portability:<br/>
|
||||
build: fix build on platforms without ptsname_r (Eric Blake),<br/>
|
||||
build: silence compiler warning on BSD (Eric Blake),<br/>
|
||||
build: fix linking on BSD (Eric Blake),<br/>
|
||||
remote: fix mingw32 build (Laine Stump),<br/>
|
||||
build: fix deep VPATH builds (Eric Blake),<br/>
|
||||
Use ENAMETOOLONG if the the socket path is longer than UNIX_PATH_MAX (Guido Günther),<br/>
|
||||
build: avoid RHEL 5 build failure on LXC (Eric Blake),<br/>
|
||||
build: use gnulib fdatasync (Eric Blake),<br/>
|
||||
Fix virFileOpenTty definition on Win32 (Daniel P. Berrange),<br/>
|
||||
compile: fix undefined reference to gnutls_x509_crt_get_dn with gcc-4.6.1 (Xu He Jie),<br/>
|
||||
Fix VPATH build (Jiri Denemark),<br/>
|
||||
build: fix 'make dist' error (Wen Congyang),<br/>
|
||||
Fix syntax problem in mingw32-libvirt.spec.in (Daniel P. Berrange),<br/>
|
||||
spec: mingw cleanups (Eric Blake),<br/>
|
||||
build: fix mingw build without sasl (Eric Blake),<br/>
|
||||
build: fix 'make rpm' (Eric Blake),<br/>
|
||||
build: fix 'make distcheck' (Eric Blake),<br/>
|
||||
disable xenlight for non-Xen platforms (Dan Horák),<br/>
|
||||
build: Fix VPATH build with new probes (Jiri Denemark),<br/>
|
||||
build: fix 'make distcheck' with pdwtags installed (Eric Blake),<br/>
|
||||
spec: F15 still uses cgconfig, RHEL lacks hyperv (Eric Blake)<br/>
|
||||
</li>
|
||||
|
||||
<li> Bug Fixes:<br/>
|
||||
Fix sending/receiving of FDs when stream returns EAGAIN (Daniel P. Berrange),<br/>
|
||||
lxc: avoid use-after-free (Eric Blake),<br/>
|
||||
conf: Don't free uninitialized pointer (Jiri Denemark),<br/>
|
||||
Fix default console type setting (Daniel P. Berrange),<br/>
|
||||
Fix crash formatting virtio console (Daniel P. Berrange),<br/>
|
||||
Fix off-by-one printing month in logging code (Daniel P. Berrange),<br/>
|
||||
Add missing param initialization in qemuDomainBlockStatsFlags (Daniel P. Berrange),<br/>
|
||||
fix crash when starting network (Wen Congyang),<br/>
|
||||
Don't overwrite error message during VM cleanup (Daniel P. Berrange),<br/>
|
||||
Correctly handle '*' in /etc/filesystems (Daniel P. Berrange),<br/>
|
||||
Fix URI alias prefix matching (Wen Ruo Lv),<br/>
|
||||
ServerClient: Flush cached data (Michal Privoznik),<br/>
|
||||
Fix storage pool source comparison to avoid comparing with self (Daniel P. Berrange),<br/>
|
||||
qemu: plug memory leak (Alex Jia),<br/>
|
||||
qemu: Restore the original states of PCI device when restarting daemon (Osier Yang),<br/>
|
||||
macvtap: Fix error return value convention/inconsistencies (Roopa Prabhu),<br/>
|
||||
pci address conflict when virtio disk with drive type (Xu He Jie),<br/>
|
||||
qemu: plug memory leak (Alex Jia),<br/>
|
||||
qemu: avoid leaking uninit data from hotplug to dumpxml (Eric Blake),<br/>
|
||||
util: Fix virUUIDGeneratePseudoRandomBytes (Ryota Ozaki),<br/>
|
||||
lxc: Revert zeroing count of allocated items if VIR_REALLOC_N fails (Peter Krempa),<br/>
|
||||
lxc: avoid null deref on lxcSetupLoopDevices failure (Alex Jia),<br/>
|
||||
lxc: avoid missing '{' in the function (Alex Jia),<br/>
|
||||
storage: avoid null deref on qemu-img failure (Eric Blake),<br/>
|
||||
storage: make previous leak less likely to regress (Eric Blake),<br/>
|
||||
storage: plug iscsi memory leak (Eric Blake),<br/>
|
||||
qemu: avoid leaking uninit data from hotplug to dumpxml (Eric Blake),<br/>
|
||||
qemu: Do not wait if the PCI device is not managed when reattaching (Osier Yang),<br/>
|
||||
Add missing strdup return value check (Roopa Prabhu),<br/>
|
||||
macvtap: avoid invalid free (Roopa Prabhu),<br/>
|
||||
util: Fix typo in virGetHostname description (Jiri Denemark),<br/>
|
||||
macvtap: plug memory leak for 802.1Qbh (Eric Blake),<br/>
|
||||
qemu: plug memory leak on migration (Eric Blake),<br/>
|
||||
conf: plug memory leak on error (Eric Blake),<br/>
|
||||
storage: plug memory leak on error (Eric Blake),<br/>
|
||||
util: Make getaddrinfo failure nonfatal in virGetHostname (Jiri Denemark),<br/>
|
||||
qemu: fix text block info parsing (Eric Blake),<br/>
|
||||
qemu: avoid text monitor null deref (Eric Blake),<br/>
|
||||
qemu: check for json allocation failure (Eric Blake),<br/>
|
||||
virFDStream: close also given errfd (fd leak) (Marc-André Lureau),<br/>
|
||||
command: avoid fd leak on failure (Eric Blake),<br/>
|
||||
qemu: Check for domain being active on successful job acquire (Michal Privoznik),<br/>
|
||||
xen: Return tap2 for tap2 disks (Philipp Hahn),<br/>
|
||||
xen: fix PyGrub boot device order (Philipp Hahn),<br/>
|
||||
build: fix 'make check' linkage with dtrace (Eric Blake),<br/>
|
||||
Fix deps for probes.o to ensure correct build ordering (Daniel P. Berrange),<br/>
|
||||
If receiving a stream error, mark EOF on the stream (Daniel P. Berrange),<br/>
|
||||
xen_xs: Guard against set but empty kernel argument (Guido Günther),<br/>
|
||||
snapshot: avoid accidental renames with snapshot-edit (Eric Blake),<br/>
|
||||
storage: Do not use comma as seperator for lvs output (Osier Yang),<br/>
|
||||
qemuDomainAttach: Initialize pidfile variable (Michal Privoznik),<br/>
|
||||
lxc: fix logic bug (Eric Blake),<br/>
|
||||
Don't send back unknown program errors for async messages (Daniel P. Berrange),<br/>
|
||||
Fix deadlock when the RPC program is unknown (Daniel P. Berrange),<br/>
|
||||
remote_driver: Avoid double free in EventControl building (Michal Privoznik),<br/>
|
||||
xenParseXM: don't dereference NULL pointer when script is empty (Guido Günther),<br/>
|
||||
qemu: Fix migration with dname (Jiri Denemark),<br/>
|
||||
virsh: do not unlink NULL file (Marc-André Lureau),<br/>
|
||||
qemu: Fix error message mentioning VNC instead of SPICE (Peter Krempa),<br/>
|
||||
qemu: Check for ejected media during startup and migration (Michal Privoznik),<br/>
|
||||
qemu: add return value check (Alex Jia),<br/>
|
||||
qemu: Always remove domain object if MigratePrepare fails (Jiri Denemark),<br/>
|
||||
fix AppArmor driver for pipe character devices (Jamie Strandboge),<br/>
|
||||
daemon: Don't remove pidfiles in init scripts (Peter Krempa),<br/>
|
||||
storage: Do not break the whole vol lookup process in the middle (Osier Yang),<br/>
|
||||
Fix synchronous reading of stream data (Daniel P. Berrange)<br/>
|
||||
</li>
|
||||
|
||||
<li> Improvements:<br/>
|
||||
Add missing defaultConsoleTargetType callback for AppArmour (Daniel P. Berrange),<br/>
|
||||
Fix naming of constant for disk event (Daniel P. Berrange),<br/>
|
||||
lxc: use common code for process cleanup (Eric Blake),<br/>
|
||||
Set aliases for LXC/UML console devices (Daniel P. Berrange),<br/>
|
||||
Default console target type with no <target> element (Daniel P. Berrange),<br/>
|
||||
Add support for multiple consoles in LXC (Daniel P. Berrange),<br/>
|
||||
Rewrite LXC I/O forwarding to use main event loop (Daniel P. Berrange),<br/>
|
||||
Allow multiple consoles per virtual guest (Daniel P. Berrange),<br/>
|
||||
virnetsockettest: Use a temporary directory in /tmp (Guido Günther),<br/>
|
||||
xen: allow getting < max typed parameters (Eric Blake),<br/>
|
||||
lxc: allow getting < max typed parameters (Eric Blake),<br/>
|
||||
libxl: allow getting < max typed parameters (Eric Blake),<br/>
|
||||
esx: allow getting < max typed parameters (Eric Blake),<br/>
|
||||
qemu: allow getting < max typed parameters (Eric Blake),<br/>
|
||||
Add support for probing filesystem with libblkid (Daniel P. Berrange),<br/>
|
||||
Fix error message when failing to detect filesystem (Daniel P. Berrange),<br/>
|
||||
Workaround for broken kernel autofs mounts (Daniel P. Berrange),<br/>
|
||||
Ensure errno is valid when returning from lxcContainerWaitForContinue (Daniel P. Berrange),<br/>
|
||||
Create /var/lib/libvirt/filesystems for LXC trees (Daniel P. Berrange),<br/>
|
||||
esx: Support folders in the path of vpx:// connection URIs (Matthias Bolte),<br/>
|
||||
qemu: pass virConnectPtr into Domain{Attach,Detach}* (Sage Weil),<br/>
|
||||
vbox: Support shared folders (Matthias Bolte),<br/>
|
||||
xenapi: Improve error reporting in xenapiOpen once again (Matthias Bolte),<br/>
|
||||
Use a common xml type for ceph secret usage. (Josh Durgin),<br/>
|
||||
storage: add auth to virDomainDiskDef (Josh Durgin),<br/>
|
||||
secret: add Ceph secret type (Sage Weil),<br/>
|
||||
Implement RPC driver support for virDomainOpenGraphics (Daniel P. Berrange),<br/>
|
||||
Extend RPC server to allow FD passing (Daniel P. Berrange),<br/>
|
||||
Add client side support for FD passing (Daniel P. Berrange),<br/>
|
||||
Extend RPC protocol to allow FD passing (Daniel P. Berrange),<br/>
|
||||
Add APIs for virNetSocket for sending/receiving file descriptors (Daniel P. Berrange),<br/>
|
||||
Wire up QEMU implementation for virDomainOpenGraphics (Daniel P. Berrange),<br/>
|
||||
Extend graphics event to include UNIX socket (Daniel P. Berrange),<br/>
|
||||
virsh: Fix error message on vol-create-from failure (Ryota Ozaki),<br/>
|
||||
bridge: modify for use when sVirt is enabled with qemu (Tyler Coumbes),<br/>
|
||||
Use virXMLSaveFile when writing XML config (Jiri Denemark),<br/>
|
||||
Introduce virXMLSaveFile as a wrapper for virFileRewrite (Jiri Denemark),<br/>
|
||||
Introduce virFileRewrite for safe file rewrite (Jiri Denemark),<br/>
|
||||
Add a systemtap script for watching QEMU monitor interactions (Daniel P. Berrange),<br/>
|
||||
qemu: simplify use of HAVE_YAJL (Eric Blake),<br/>
|
||||
snapshot: simplify indentation of disk encryption xml (Eric Blake),<br/>
|
||||
snapshot: simplify indentation of nwfilter (Eric Blake),<br/>
|
||||
Add REMOTE_PROC_DOMAIN_EVENT_DISK_CHANGE to remote_protocol-structs (Daniel P. Berrange),<br/>
|
||||
nwfilter: extend schema to support new targets (Stefan Berger),<br/>
|
||||
util: Add virFileAccessibleAs to private symbols (Michal Privoznik),<br/>
|
||||
startupPolicy: Emit event on disk source dropping (Michal Privoznik),<br/>
|
||||
qemu: implement startupPolicy (Michal Privoznik),<br/>
|
||||
qemu: Move device alias assigning before command line construction (Michal Privoznik),<br/>
|
||||
util: Create virFileAccessibleAs function (Michal Privoznik),<br/>
|
||||
conf: Introduce optional startupPolicy attribute for cdrom and floppy (Michal Privoznik),<br/>
|
||||
waitpid: improve safety (Eric Blake),<br/>
|
||||
virsh: Fix vol-info's 'Type' output (Ryota Ozaki),<br/>
|
||||
support continue/return targets in nwfilter (David L Stevens),<br/>
|
||||
snapshot: simplify indentation of network xml (Eric Blake),<br/>
|
||||
snapshot: simplify indentation of cpu features (Eric Blake),<br/>
|
||||
snapshot: simplify indentation of sysinfo (Eric Blake),<br/>
|
||||
snapshot: test domainsnapshot indentation (Eric Blake),<br/>
|
||||
snapshot: indent domain xml when nesting (Eric Blake),<br/>
|
||||
virbuf: add auto-indentation support (Eric Blake),<br/>
|
||||
virbuf: more detailed error reporting (Eric Blake),<br/>
|
||||
virbuf: improve testsuite reporting (Eric Blake),<br/>
|
||||
virbuf: fix const-correctness (Eric Blake),<br/>
|
||||
qemu: allow json in domxml-to-native (tangchen),<br/>
|
||||
support setting bandwidth from virsh attach-interface (Hu Tao),<br/>
|
||||
lxc: use hand-rolled code in place of unlockpt and grantpt (Serge E. Hallyn),<br/>
|
||||
qemu: Test name-space handling (Philipp Hahn),<br/>
|
||||
qemu: Fix name-space handling (Philipp Hahn),<br/>
|
||||
Replace virBufferAdd with virBufferAddLit for const string (Daniel P. Berrange),<br/>
|
||||
Allow for URI aliases when connecting to libvirt (Daniel P. Berrange),<br/>
|
||||
Add support for autodestroy of guests to the LXC and UML drivers (Daniel P. Berrange),<br/>
|
||||
Use virBufferEscapeShell in cmdEcho (Guido Günther),<br/>
|
||||
qemu: replace qemuMonitorEscapeShell by virBufferEscapeShell (Guido Günther),<br/>
|
||||
virBufferEscapeShell: Emit quotes for the empty string (Guido Günther),<br/>
|
||||
snapshot: detect when qemu lacks disk-snapshot support (Eric Blake),<br/>
|
||||
virBufferEscapeShell: Fix escaping of single quotes. (Guido Günther),<br/>
|
||||
compile: Add a missing function 'pciDeviceListFind' to libvirt_private.syms (Xu He Jie),<br/>
|
||||
snapshot: implement LIST_LEAVES flag in esx (Eric Blake),<br/>
|
||||
qemu: Relax -no-shutdown check to [0.14.0, 0.15.0] (Jiri Denemark),<br/>
|
||||
qemu: Honor the orginal PCI dev properties when reattaching (Osier Yang),<br/>
|
||||
qemu: Do not reattach PCI device used by other domain when shutdown (Osier Yang),<br/>
|
||||
Xen: Fake versions in xencapstest (Philipp Hahn),<br/>
|
||||
Xen: move versions to struct (Philipp Hahn),<br/>
|
||||
Use virBufferEscapeShell in virNetSocketNewConnectSSH (Guido Günther),<br/>
|
||||
Add virBufferEscapeShell (Guido Günther),<br/>
|
||||
Autodetect if the remote nc command supports the -q option (Guido Günther),<br/>
|
||||
qemu: Make sure BeginJob is always followed by EndJob (Jiri Denemark),<br/>
|
||||
qemu: Log debug messages when changing job (Jiri Denemark),<br/>
|
||||
build: add compiler attributes to virUUIDParse (Eric Blake),<br/>
|
||||
Fix typo in lxc_controller (Serge E. Hallyn),<br/>
|
||||
build: update to latest gnulib (Eric Blake),<br/>
|
||||
events: Propose a separate lock for event queue (Michal Privoznik),<br/>
|
||||
qemu: Implement VIR_DUMP_RESET (Michal Privoznik),<br/>
|
||||
virDomainCoreDump: Introduce VIR_DUMP_RESET flag (Michal Privoznik),<br/>
|
||||
example: Support debug output and loop switch (Philipp Hahn),<br/>
|
||||
example: Redirect --help output to stdout/stderr (Philipp Hahn),<br/>
|
||||
example: Fix argument handling (Philipp Hahn),<br/>
|
||||
snapshot: implement LIST_LEAVES flag in qemu (Eric Blake),<br/>
|
||||
snapshot: add API for filtering by leaves (Eric Blake),<br/>
|
||||
tests: Add support for skipping tests (Philipp Hahn),<br/>
|
||||
Introduce <driver> under <filesystem> to support open-by-handle (Harsh Prateek Bora),<br/>
|
||||
buf: implement generic virBufferEscape (Sage Weil),<br/>
|
||||
daemon: Always advertise libvirtd service (Osier Yang),<br/>
|
||||
snapshot: take advantage of new relations (Eric Blake),<br/>
|
||||
snapshot: track qemu snapshot relations (Eric Blake),<br/>
|
||||
snapshot: framework for more efficient relation traversal (Eric Blake),<br/>
|
||||
snapshot: use correct qmp monitor command (Eric Blake),<br/>
|
||||
snapshot: virsh shorthand for operating on current snap (Eric Blake),<br/>
|
||||
build: ship helper scripts (Eric Blake),<br/>
|
||||
Rewrite all the DTrace/SystemTAP probing (Daniel P. Berrange),<br/>
|
||||
Fix missing lock calls on virNetTLSContextRef (Daniel P. Berrange),<br/>
|
||||
Refactor TLS to facilitate dynamic probing (Daniel P. Berrange),<br/>
|
||||
Add virSocketRef API to facilitate dynamic probing (Daniel P. Berrange),<br/>
|
||||
Make libvirt.so include the RPC server code (Daniel P. Berrange),<br/>
|
||||
snapshot: implement snapshot children listing in esx (Eric Blake),<br/>
|
||||
snapshot: implement snapshot children listing in qemu (Eric Blake),<br/>
|
||||
snapshot: remote protocol for snapshot children (Eric Blake),<br/>
|
||||
snapshot: virsh fallback for snapshot-list --descendants --from (Eric Blake),<br/>
|
||||
snapshot: virsh fallback for snapshot-list --from children (Eric Blake),<br/>
|
||||
snapshot: virsh fallback for snapshot-list --tree --from (Eric Blake),<br/>
|
||||
snapshot: virsh snapshot-list and children (Eric Blake),<br/>
|
||||
xen: add error handling to UUID parsing (Guido Günther),<br/>
|
||||
maint: typo fixes (Eric Blake),<br/>
|
||||
snapshot: sort snapshot-list --tree (Eric Blake),<br/>
|
||||
snapshot: simplify redefinition of disk snapshot (Eric Blake),<br/>
|
||||
snapshot: let virsh edit disk snapshots (Eric Blake),<br/>
|
||||
snapshot: fix virsh error message typo (Eric Blake),<br/>
|
||||
qemu: add separate rerror_policy for disk errors (Laine Stump),<br/>
|
||||
qemu: leave rerror policy at default when enospace is requested (Laine Stump),<br/>
|
||||
qemu: enable multifunction for older qemu (Eric Blake),<br/>
|
||||
Make LXC work with new network configuration types (Daniel P. Berrange),<br/>
|
||||
init: raise default system aio limits (Eric Blake),<br/>
|
||||
maint: fix minor issues in virterror public header (Eric Blake),<br/>
|
||||
snapshot: enforce REVERT_FORCE on qemu (Eric Blake),<br/>
|
||||
snapshot: use qemu-img on disks in use at time of snapshot (Eric Blake),<br/>
|
||||
snapshot: add REVERT_FORCE to API (Eric Blake),<br/>
|
||||
snapshot: implement snapshot roots listing in vbox (Eric Blake),<br/>
|
||||
qemu: Don't fail virDomainGetInfo if we can't update balloon info (Jiri Denemark),<br/>
|
||||
snapshot: simplify esx snapshot name lookup (Eric Blake),<br/>
|
||||
snapshot: implement snapshot roots listing in esx (Eric Blake),<br/>
|
||||
qemu: correct misspelled 'enospc' option, and only use for werror (Laine Stump),<br/>
|
||||
snapshot: better virsh handling of missing current, parent (Eric Blake),<br/>
|
||||
Allow passing of command line args to LXC container (Daniel P. Berrange),<br/>
|
||||
Add support for bandwidth filtering on LXC guests (Daniel P. Berrange),<br/>
|
||||
network: fill in bandwidth from portgroup for all forward modes (Laine Stump),<br/>
|
||||
bridge_driver.c: Fix autoconf setting (Neil Wilson),<br/>
|
||||
Set to NULL members that have been freed to prevent crashes (Marc-André Lureau),<br/>
|
||||
snapshot: implement getparent for vbox (Eric Blake),<br/>
|
||||
snapshot: implement getparent for esx (Eric Blake),<br/>
|
||||
qemu: make PCI multifunction support more manual (Laine Stump),<br/>
|
||||
lvm storage backend: handle command_names=1 in lvm.conf (Serge E. Hallyn),<br/>
|
||||
qemu: Check for outstanding async job too (Michal Privoznik),<br/>
|
||||
virsh: Add 'reset' command for virsh (Xu He Jie),<br/>
|
||||
remote: Implement 'reset' for remote driver (Xu He Jie),<br/>
|
||||
qemu: Implement 'reset' for qemu driver (Xu He Jie),<br/>
|
||||
logging: Add date to log timestamp (Jiri Denemark),<br/>
|
||||
logging: Do not log timestamp through syslog (Jiri Denemark),<br/>
|
||||
hyperv: Report an error for acceptable URI schemes with a transport (Matthias Bolte),<br/>
|
||||
esx: Report an error for acceptable URI schemes with a transport (Matthias Bolte),<br/>
|
||||
snapshot: implement getparent in qemu (Eric Blake),<br/>
|
||||
snapshot: add virsh snapshot-list --tree (Eric Blake),<br/>
|
||||
snapshot: refactor virsh snapshot parent computation (Eric Blake),<br/>
|
||||
snapshot: remote protocol for getparent (Eric Blake),<br/>
|
||||
security: properly chown/label bidirectional and unidirectional fifos (Laine Stump),<br/>
|
||||
qemu: Preserve fakeReboot flag in domain status (Jiri Denemark),<br/>
|
||||
qemu: Finish domain shutdown on reconnect (Jiri Denemark),<br/>
|
||||
qemu: Check domain status details when reconnecting monitor (Jiri Denemark),<br/>
|
||||
virsh: Allow using complete <capabilities> elements with cpu-baseline (Peter Krempa),<br/>
|
||||
virsh: Allow using domain and capabilities XMLs with cpu-compare (Peter Krempa),<br/>
|
||||
qemu: add ability to set PCI device "rombar" on or off (Laine Stump),<br/>
|
||||
qemu: Relax -no-shutdown check to [0.14.0, 0.15.50) (Jiri Denemark),<br/>
|
||||
virLockManagerNopInit: Rename flags to unused_flags (Michal Privoznik),<br/>
|
||||
debug: Annotate some variables as unused (Michal Privoznik),<br/>
|
||||
maint: update authors (Peter Krempa),<br/>
|
||||
Add unsafe cache mode support for disk driver (Oskari Saarenmaa),<br/>
|
||||
selinux: Correctly report warning if virt_use_nfs not set (Michal Privoznik),<br/>
|
||||
virsh: Do not ignore the specified flags for cmdSaveImageDefine (Osier Yang),<br/>
|
||||
qemu: Transfer inactive XML among cookie (Michal Privoznik)<br/>
|
||||
</li>
|
||||
|
||||
<li> Cleanups:<br/>
|
||||
Remove translations in socket test case (Daniel P. Berrange),<br/>
|
||||
test: drop redundant check (Eric Blake),<br/>
|
||||
startupPolicty: Minor cleanups (Michal Privoznik),<br/>
|
||||
secret: fix bad patch application (Eric Blake),<br/>
|
||||
Remove trailing whitespace from all xfig files (Daniel P. Berrange),<br/>
|
||||
Fix typo in virFileAccessibleAs (Daniel P. Berrange),<br/>
|
||||
snapshot: minor cleanups from reviewing indentation (Eric Blake),<br/>
|
||||
build: ignore test executable (Eric Blake),<br/>
|
||||
esx: drop dead code to silence Coverity (Eric Blake),<br/>
|
||||
snapshot: drop dead parameters (Eric Blake),<br/>
|
||||
qemu: silence Coverity false positive (Eric Blake),<br/>
|
||||
conf: remove unused VIR_ENUM_DECL (Laine Stump)<br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>0.9.6: Sep 22 2011</h3>
|
||||
<ul>
|
||||
<li> Portability:<br/>
|
||||
@@ -5471,7 +4690,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
|
||||
qemu: Search binaries in PATH instead of hardcoding /usr/bin (Matthias Bolte),<br/>
|
||||
Implement QMP support for extracting CPU thread ID (Daniel P. Berrange),<br/>
|
||||
Misc fixes to QMP monitor support for QEMU (Daniel P. Berrange),<br/>
|
||||
Fix setup of compatibility serial devices from console device (Daniel P. Berrange),<br/>
|
||||
Fix setup of compatability serial devices from console device (Daniel P. Berrange),<br/>
|
||||
Start modernizing configure (Eric Blake),<br/>
|
||||
Add a rule to check for uses of readlink. (Chris Lalancette),<br/>
|
||||
Add virConnectGetVersion Python API (Taizo ITO),<br/>
|
||||
@@ -6125,7 +5344,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
|
||||
Pull connection handling code out of doTunnelMigrate (Daniel P. Berrange),<br/>
|
||||
Refactor native QEMU migration code (Daniel P. Berrange),<br/>
|
||||
Don't force dconn to be NULL in virDomainMigrate (Daniel P. Berrange),<br/>
|
||||
Remove unnecessary uri_in parameter from virMigratePrepareTunnel (Daniel P. Berrange),<br/>
|
||||
Remove unneccessary uri_in parameter from virMigratePrepareTunnel (Daniel P. Berrange),<br/>
|
||||
Move the VIR_DRV_FEATURE* constants (Daniel P. Berrange),<br/>
|
||||
Fix configure.ac message vertical alignment (Daniel P. Berrange),<br/>
|
||||
cgroup: Fix -Werror breakage (Cole Robinson),<br/>
|
||||
@@ -7500,7 +6719,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
|
||||
from virsh (Saori Fukuta), Coverage files (Daniel Berrange),
|
||||
Solaris fixes (Mark Johnson), avoid [r]index calls (Richard Jones),
|
||||
release information in Xen backend, virsh cpupin command cleanups
|
||||
(Masayuki Sunou), xen:/// support as standard Xen URI (Richard Jones and
|
||||
(Masayuki Sunou), xen:/// suppport as standard Xen URI (Richard Jones and
|
||||
Daniel Berrange), improve driver selection/decline mechanism (Richard
|
||||
Jones), error reporting on XML dump (Richard Jones), Remove unused
|
||||
virDomainKernel structure (Richard Jones), daemon event loop event
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
@@ -97,12 +97,6 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="genericName">
|
||||
<data type="string">
|
||||
<param name="pattern">[a-zA-Z0-9_\+\-]+</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name="dnsName">
|
||||
<data type="string">
|
||||
<param name="pattern">[a-zA-Z0-9\.\-]+</param>
|
||||
|
@@ -34,9 +34,6 @@
|
||||
<ref name='cpuspec'/>
|
||||
</optional>
|
||||
</element>
|
||||
<optional>
|
||||
<ref name='power_management'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='migration'/>
|
||||
</optional>
|
||||
@@ -108,28 +105,6 @@
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
<define name='power_management'>
|
||||
<element name='power_management'>
|
||||
<interleave>
|
||||
<optional>
|
||||
<element name='suspend_mem'>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='suspend_disk'>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='suspend_hybrid'>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='migration'>
|
||||
<element name='migration_features'>
|
||||
<optional>
|
||||
@@ -327,11 +302,6 @@
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='deviceboot'>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -85,22 +85,13 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
<zeroOrMore>
|
||||
<element name='interface'>
|
||||
<attribute name='dev'>
|
||||
<ref name='deviceName'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name='pf'>
|
||||
<attribute name='dev'>
|
||||
<ref name='deviceName'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
<zeroOrMore>
|
||||
<element name='interface'>
|
||||
<attribute name='dev'>
|
||||
<ref name='deviceName'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</optional>
|
||||
|
||||
@@ -146,19 +137,6 @@
|
||||
<attribute name="value"><text/></attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="srv">
|
||||
<attribute name="service"><text/></attribute>
|
||||
<attribute name="protocol"><ref name="protocol"/></attribute>
|
||||
<optional>
|
||||
<attribute name="domain"><ref name="dnsName"/></attribute>
|
||||
<attribute name="target"><text/></attribute>
|
||||
<attribute name="port"><ref name="unsignedShort"/></attribute>
|
||||
<attribute name="priority"><ref name="unsignedShort"/></attribute>
|
||||
<attribute name="weight"><ref name="unsignedShort"/></attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="host">
|
||||
<attribute name="ip"><ref name="ipv4Addr"/></attribute>
|
||||
@@ -238,4 +216,11 @@
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='addr-family'>
|
||||
<data type='string'>
|
||||
<param name="pattern">(ipv4)|(ipv6)</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
@@ -95,21 +95,4 @@
|
||||
<param name="minInclusive">1</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name='unsignedShort'>
|
||||
<data type='integer'>
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">65535</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name='protocol'>
|
||||
<data type='string'>
|
||||
<param name='pattern'>(tcp)|(udp)</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name='addr-family'>
|
||||
<data type='string'>
|
||||
<param name="pattern">(ipv4)|(ipv6)</param>
|
||||
</data>
|
||||
</define>
|
||||
</grammar>
|
||||
|
@@ -216,35 +216,6 @@
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name='wwn'>
|
||||
<data type='string'>
|
||||
<param name='pattern'>(0-9a-fA-F){16}</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name='capsfchost'>
|
||||
<attribute name='type'>
|
||||
<value>fc_host</value>
|
||||
</attribute>
|
||||
|
||||
<element name='wwnn'>
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
|
||||
<element name='wwpn'>
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
|
||||
<element name='fabric_wwn'>
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='capsvports'>
|
||||
<attribute name='type'>
|
||||
<value>vports_ops</value>
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name='capscsihost'>
|
||||
<attribute name='type'>
|
||||
@@ -254,17 +225,6 @@
|
||||
<element name='host'>
|
||||
<ref name='uint'/>
|
||||
</element>
|
||||
|
||||
<optional>
|
||||
<zeroOrMore>
|
||||
<element name='capability'>
|
||||
<choice>
|
||||
<ref name='capsfchost'/>
|
||||
<ref name='capsvports'/>
|
||||
</choice>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='capscsi'>
|
||||
|
@@ -28,26 +28,6 @@
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</optional>
|
||||
<optional>
|
||||
<zeroOrMore>
|
||||
<element name="vlan">
|
||||
<ref name="match-attribute"/>
|
||||
<ref name="common-l2-attributes"/>
|
||||
<ref name="vlan-attributes"/>
|
||||
<ref name="comment-attribute"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</optional>
|
||||
<optional>
|
||||
<zeroOrMore>
|
||||
<element name="stp">
|
||||
<ref name="match-attribute"/>
|
||||
<ref name="srcmacandmask-attributes"/>
|
||||
<ref name="stp-attributes"/>
|
||||
<ref name="comment-attribute"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</optional>
|
||||
<optional>
|
||||
<zeroOrMore>
|
||||
<element name="arp">
|
||||
@@ -306,42 +286,20 @@
|
||||
<attribute name="chain">
|
||||
<choice>
|
||||
<value>root</value>
|
||||
<data type="string">
|
||||
<param name="pattern">mac[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">stp[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">vlan[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">arp[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">rarp[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">ipv4[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">ipv6[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||
</data>
|
||||
<value>arp</value>
|
||||
<value>rarp</value>
|
||||
<value>ipv4</value>
|
||||
<value>ipv6</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="priority">
|
||||
<ref name='priority-type'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="filterref-node-attributes">
|
||||
<attribute name="filter">
|
||||
<data type="NCName"/>
|
||||
</attribute>
|
||||
<zeroOrMore>
|
||||
<optional>
|
||||
<element name="parameter">
|
||||
<attribute name="name">
|
||||
<ref name="filter-param-name"/>
|
||||
@@ -350,7 +308,7 @@
|
||||
<ref name="filter-param-value"/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="rule-node-attributes">
|
||||
@@ -395,7 +353,7 @@
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name="srcmacandmask-attributes">
|
||||
<define name="common-l2-attributes">
|
||||
<interleave>
|
||||
<ref name="srcmac-attribute"/>
|
||||
<optional>
|
||||
@@ -403,12 +361,6 @@
|
||||
<ref name="addrMAC"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name="common-l2-attributes">
|
||||
<interleave>
|
||||
<ref name="srcmacandmask-attributes"/>
|
||||
<optional>
|
||||
<attribute name="dstmacaddr">
|
||||
<ref name="addrMAC"/>
|
||||
@@ -592,134 +544,6 @@
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name="vlan-attributes">
|
||||
<interleave>
|
||||
<optional>
|
||||
<attribute name="vlanid">
|
||||
<ref name="vlan-vlanid"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="encap-protocol">
|
||||
<ref name="mac-protocolid"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name="stp-attributes">
|
||||
<optional>
|
||||
<attribute name="type">
|
||||
<ref name="uint8range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="flags">
|
||||
<ref name="uint8range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-priority">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-priority-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-address">
|
||||
<ref name="addrMAC"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-address-mask">
|
||||
<ref name="addrMAC"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-cost">
|
||||
<ref name="uint32range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="root-cost-hi">
|
||||
<ref name="uint32range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="sender-priority">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="sender-priority-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="sender-address">
|
||||
<ref name="addrMAC"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="sender-address-mask">
|
||||
<ref name="addrMAC"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="port">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="port-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="age">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="age-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="max-age">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="max-age-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="hello-time">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="hello-time-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="forward-delay">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="forward-delay-hi">
|
||||
<ref name="uint16range"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="arp-attributes">
|
||||
<interleave>
|
||||
<optional>
|
||||
@@ -811,15 +635,12 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="variable-name-type">
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+(\[[ ]*[@]?[0-9]+[ ]*\])?</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name="addrMAC">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">([a-fA-F0-9]{1,2}:){5}[a-fA-F0-9]{1,2}</param>
|
||||
@@ -829,7 +650,10 @@
|
||||
|
||||
<define name="addrIP">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9]</param>
|
||||
@@ -839,7 +663,10 @@
|
||||
|
||||
<define name="addrIPv6">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">([a-fA-F0-9]{0,4}:){2,7}([a-fA-F0-9]*)(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])?</param>
|
||||
@@ -849,7 +676,10 @@
|
||||
|
||||
<define name="addrMask">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
@@ -864,7 +694,10 @@
|
||||
|
||||
<define name="addrMaskv6">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
@@ -883,7 +716,10 @@
|
||||
<param name="pattern">0x([0-3][0-9a-fA-F]|[0-9a-fA-F])</param>
|
||||
</data>
|
||||
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
@@ -894,7 +730,10 @@
|
||||
|
||||
<define name="mac-protocolid">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x([6-9a-fA-F][0-9a-fA-F]{2}|[0-9a-fA-F]{4})</param>
|
||||
@@ -910,29 +749,16 @@
|
||||
<value>rarp</value>
|
||||
<value>ipv4</value>
|
||||
<value>ipv6</value>
|
||||
<value>vlan</value>
|
||||
</choice>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="vlan-vlanid">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x([0-9a-fA-F]{1,3})</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">4095</param>
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="uint8range">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
||||
@@ -947,7 +773,10 @@
|
||||
|
||||
<define name="uint16range">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x[0-9a-fA-F]{1,4}</param>
|
||||
@@ -960,21 +789,6 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="uint32range">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x[0-9a-fA-F]{1,8}</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">4294967295</param>
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="boolean">
|
||||
<choice>
|
||||
<value>yes</value>
|
||||
@@ -988,7 +802,10 @@
|
||||
|
||||
<define name="arpOpcodeType">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="int">
|
||||
<param name="minInclusive">0</param>
|
||||
@@ -1004,7 +821,10 @@
|
||||
|
||||
<define name="ipProtocolType">
|
||||
<choice>
|
||||
<ref name="variable-name-type"/>
|
||||
<!-- variable -->
|
||||
<data type="string">
|
||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
||||
</data>
|
||||
|
||||
<data type="string">
|
||||
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
||||
@@ -1046,8 +866,6 @@
|
||||
<value>drop</value>
|
||||
<value>accept</value>
|
||||
<value>reject</value>
|
||||
<value>continue</value>
|
||||
<value>return</value>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
@@ -1061,7 +879,7 @@
|
||||
|
||||
<define name='priority-type'>
|
||||
<data type="int">
|
||||
<param name="minInclusive">-1000</param>
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">1000</param>
|
||||
</data>
|
||||
</define>
|
||||
|
@@ -1,12 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- A Relax NG schema for the libvirt secret properties XML format -->
|
||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
|
||||
<start>
|
||||
<ref name='secret'/>
|
||||
</start>
|
||||
|
||||
<include href='basictypes.rng'/>
|
||||
|
||||
<define name='secret'>
|
||||
<element name='secret'>
|
||||
<optional>
|
||||
@@ -40,7 +37,6 @@
|
||||
<element name='usage'>
|
||||
<choice>
|
||||
<ref name='usagevolume'/>
|
||||
<ref name='usageceph'/>
|
||||
<!-- More choices later -->
|
||||
</choice>
|
||||
</element>
|
||||
@@ -58,13 +54,21 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='usageceph'>
|
||||
<attribute name='type'>
|
||||
<value>ceph</value>
|
||||
</attribute>
|
||||
<element name='name'>
|
||||
<ref name='genericName'/>
|
||||
</element>
|
||||
<define name="UUID">
|
||||
<choice>
|
||||
<data type="string">
|
||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
||||
</data>
|
||||
<data type="string">
|
||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="absFilePath">
|
||||
<data type="string">
|
||||
<param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]+</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
@@ -60,10 +60,6 @@
|
||||
<a href="auth.html">Authentication</a>
|
||||
<span>Configure authentication for the libvirt daemon</span>
|
||||
</li>
|
||||
<li>
|
||||
<a href="migration.html">Migration</a>
|
||||
<span>Migrating guests between machines</span>
|
||||
</li>
|
||||
<li>
|
||||
<a href="windows.html">Windows port</a>
|
||||
<span>Access the libvirt daemon from a native Windows client</span>
|
||||
|
@@ -3,85 +3,9 @@
|
||||
<body>
|
||||
<h1 >Storage Management</h1>
|
||||
<p>
|
||||
Libvirt provides storage management on the physical host through
|
||||
storage pools and volumes.
|
||||
</p>
|
||||
<p>
|
||||
A storage pool is a quantity of storage set aside by an
|
||||
administrator, often a dedicated storage administrator, for use
|
||||
by virtual machines. Storage pools are divided into storage
|
||||
volumes either by the storage administrator or the system
|
||||
administrator, and the volumes are assigned to VMs as block
|
||||
devices.
|
||||
</p>
|
||||
<p>
|
||||
For example, the storage administrator responsible for an NFS
|
||||
server creates a share to store virtual machines' data. The
|
||||
system administrator defines a pool on the virtualization host
|
||||
with the details of the share
|
||||
(e.g. nfs.example.com:/path/to/share should be mounted on
|
||||
/vm_data). When the pool is started, libvirt mounts the share
|
||||
on the specified directory, just as if the system administrator
|
||||
logged in and executed 'mount nfs.example.com:/path/to/share
|
||||
/vmdata'. If the pool is configured to autostart, libvirt
|
||||
ensures that the NFS share is mounted on the directory specified
|
||||
when libvirt is started.
|
||||
</p>
|
||||
<p>
|
||||
Once the pool is started, the files in the NFS share are
|
||||
reported as volumes, and the storage volumes' paths may be
|
||||
queried using the libvirt APIs. The volumes' paths can then be
|
||||
copied into the section of a VM's XML definition describing the
|
||||
source storage for the VM's block devices. In the case of NFS,
|
||||
an application using the libvirt APIs can create and delete
|
||||
volumes in the pool (files in the NFS share) up to the limit of
|
||||
the size of the pool (the storage capacity of the share). Not
|
||||
all pool types support creating and deleting volumes. Stopping
|
||||
the pool (somewhat unfortunately referred to by virsh and the
|
||||
API as "pool-destroy") undoes the start operation, in this case,
|
||||
unmounting the NFS share. The data on the share is not modified
|
||||
by the destroy operation, despite the name. See man virsh for
|
||||
more details.
|
||||
</p>
|
||||
<p>
|
||||
A second example is an iSCSI pool. A storage administrator
|
||||
provisions an iSCSI target to present a set of LUNs to the host
|
||||
running the VMs. When libvirt is configured to manage that
|
||||
iSCSI target as a pool, libvirt will ensure that the host logs
|
||||
into the iSCSI target and libvirt can then report the available
|
||||
LUNs as storage volumes. The volumes' paths can be queried and
|
||||
used in VM's XML definitions as in the NFS example. In this
|
||||
case, the LUNs are defined on the iSCSI server, and libvirt
|
||||
cannot create and delete volumes.
|
||||
</p>
|
||||
<p>
|
||||
Storage pools and volumes are not required for the proper
|
||||
operation of VMs. Pools and volumes provide a way for libvirt
|
||||
to ensure that a particular piece of storage will be available
|
||||
for a VM, but some administrators will prefer to manage their
|
||||
own storage and VMs will operate properly without any pools or
|
||||
volumes defined. On systems that do not use pools, system
|
||||
administrators must ensure the availability of the VMs' storage
|
||||
using whatever tools they prefer, for example, adding the NFS
|
||||
share to the host's fstab so that the share is mounted at boot
|
||||
time.
|
||||
</p>
|
||||
<p>
|
||||
If at this point the value of pools and volumes over traditional
|
||||
system administration tools is unclear, note that one of the
|
||||
features of libvirt is its remote protocol, so it's possible to
|
||||
manage all aspects of a virtual machine's lifecycle as well as
|
||||
the configuration of the resources required by the VM. These
|
||||
operations can be performed on a remote host entirely within the
|
||||
libvirt API. In other words, a management application using
|
||||
libvirt can enable a user to perform all the required tasks for
|
||||
configuring the host for a VM: allocating resources, running the
|
||||
VM, shutting it down and deallocating the resources, without
|
||||
requiring shell access or any other control channel.
|
||||
</p>
|
||||
<p>
|
||||
Libvirt supports the following storage pool types:
|
||||
</p>
|
||||
This page describes the backends for the storage management capabilities in
|
||||
libvirt.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#StorageBackendDir">Directory backend</a>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
|
103
docs/uri.html.in
103
docs/uri.html.in
@@ -2,8 +2,6 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1 >Connection URIs</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
<p>
|
||||
Since libvirt supports many different kinds of virtualization
|
||||
(often referred to as "drivers" or "hypervisors"), we need a
|
||||
@@ -15,46 +13,41 @@ machine over the network.
|
||||
To this end, libvirt uses URIs as used on the Web and as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. This page
|
||||
documents libvirt URIs.
|
||||
</p>
|
||||
<h2><a name="URI_libvirt">Specifying URIs to libvirt</a></h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#URI_libvirt">Specifying URIs to libvirt</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_xen">xen:/// URI</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_qemu">qemu:///... QEMU and KVM URIs</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_remote">Remote URIs</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_test">test:///... Test URIs</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#URI_legacy">Other & legacy URI formats</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>
|
||||
<a name="URI_libvirt">Specifying URIs to libvirt</a>
|
||||
</h3>
|
||||
<p>
|
||||
The URI is passed as the <code>name</code> parameter to <a href="html/libvirt-libvirt.html#virConnectOpen"><code>virConnectOpen</code></a> or <a href="html/libvirt-libvirt.html#virConnectOpenReadOnly"><code>virConnectOpenReadOnly</code></a>. For example:
|
||||
</p>
|
||||
<pre>
|
||||
virConnectPtr conn = virConnectOpenReadOnly (<b>"test:///default"</b>);
|
||||
</pre>
|
||||
<h2>
|
||||
<a name="URI_config">Configuring URI aliases</a>
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
To simplify life for administrators, it is possible to setup URI aliases in a
|
||||
libvirt client configuration file. The configuration file is <code>/etc/libvirt/libvirt.conf</code>
|
||||
for the root user, or <code>$HOME/.libvirt/libvirt.conf</code> for any unprivileged user.
|
||||
In this file, the following syntax can be used to setup aliases
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
uri_aliases = [
|
||||
"hail=qemu+ssh://root@hail.cloud.example.com/system",
|
||||
"sleet=qemu+ssh://root@sleet.cloud.example.com/system",
|
||||
]
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
A URI alias should be a string made up from the characters
|
||||
<code>a-Z, 0-9, _, -</code>. Following the <code>=</code>
|
||||
can be any libvirt URI string, including arbitrary URI parameters.
|
||||
URI aliases will apply to any application opening a libvirt
|
||||
connection, unless it has explicitly passed the <code>VIR_CONNECT_NO_ALIASES</code>
|
||||
parameter to <code>virConnectOpenAuth</code>. If the passed in
|
||||
URI contains characters outside the allowed alias character
|
||||
set, no alias lookup will be attempted.
|
||||
</p>
|
||||
|
||||
<h2>
|
||||
<h3>
|
||||
<a name="URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
In virsh use the <code>-c</code> or <code>--connect</code> option:
|
||||
</p>
|
||||
@@ -83,9 +76,9 @@ In virt-install use the <code>--connect=</code><i>URI</i> option:
|
||||
<pre>
|
||||
virt-install <b>--connect=test:///default</b> <i>[other options]</i>
|
||||
</pre>
|
||||
<h2>
|
||||
<h3>
|
||||
<a name="URI_xen">xen:/// URI</a>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
<i>This section describes a feature which is new in libvirt >
|
||||
0.2.3. For libvirt ≤ 0.2.3 use <a href="#URI_legacy_xen"><code>"xen"</code></a>.</i>
|
||||
@@ -94,9 +87,9 @@ virt-install <b>--connect=test:///default</b> <i>[other options]</i>
|
||||
To access a Xen hypervisor running on the local machine
|
||||
use the URI <code>xen:///</code>.
|
||||
</p>
|
||||
<h2>
|
||||
<h3>
|
||||
<a name="URI_qemu">qemu:///... QEMU and KVM URIs</a>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
To use QEMU support in libvirt you must be running the
|
||||
<code>libvirtd</code> daemon (named <code>libvirt_qemud</code>
|
||||
@@ -126,9 +119,9 @@ KVM URIs are identical. You select between qemu, qemu accelerated and
|
||||
KVM guests in the <a href="format.html#KVM1">guest XML as described
|
||||
here</a>.
|
||||
</p>
|
||||
<h2>
|
||||
<h3>
|
||||
<a name="URI_remote">Remote URIs</a>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
Remote URIs are formed by taking ordinary local URIs and adding a
|
||||
hostname and/or transport name. As a special case, using a URI
|
||||
@@ -189,9 +182,9 @@ We refer you to <a href="remote.html#Remote_URI_reference">the libvirt
|
||||
remote URI reference</a> and <a href="remote.html">full documentation
|
||||
for libvirt remote support</a>.
|
||||
</p>
|
||||
<h2>
|
||||
<h3>
|
||||
<a name="URI_test">test:///... Test URIs</a>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
The test driver is a dummy hypervisor for test purposes.
|
||||
The URIs supported are:
|
||||
@@ -203,12 +196,12 @@ host definitions built into the driver. </li>
|
||||
a set of host definitions held in the named file.
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a name="URI_legacy">Other & legacy URI formats</a>
|
||||
</h2>
|
||||
<h3>
|
||||
<a name="URI_NULL">NULL and empty string URIs</a>
|
||||
<a name="URI_legacy">Other & legacy URI formats</a>
|
||||
</h3>
|
||||
<h4>
|
||||
<a name="URI_NULL">NULL and empty string URIs</a>
|
||||
</h4>
|
||||
<p>
|
||||
Libvirt allows you to pass a <code>NULL</code> pointer to
|
||||
<code>virConnectOpen*</code>. Empty string (<code>""</code>) acts in
|
||||
@@ -230,9 +223,9 @@ the user to type a URI in directly (if that is appropriate). If your
|
||||
application wishes to connect specifically to a Xen hypervisor, then
|
||||
for future proofing it should choose a full <a href="#URI_xen"><code>xen:///</code> URI</a>.
|
||||
</p>
|
||||
<h3>
|
||||
<h4>
|
||||
<a name="URI_file">File paths (xend-unix-server)</a>
|
||||
</h3>
|
||||
</h4>
|
||||
<p>
|
||||
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
||||
</p>
|
||||
@@ -247,9 +240,9 @@ using a file URI such as:
|
||||
<pre>
|
||||
virsh -c ///var/run/xend/xend-socket
|
||||
</pre>
|
||||
<h3>
|
||||
<h4>
|
||||
<a name="URI_http">Legacy: <code>http://...</code> (xend-http-server)</a>
|
||||
</h3>
|
||||
</h4>
|
||||
<p>
|
||||
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
||||
|
||||
@@ -283,17 +276,17 @@ Notes:
|
||||
libvirt, only the old-style sexpr interface known in the Xen
|
||||
documentation as "unix server" or "http server".</li>
|
||||
</ol>
|
||||
<h3>
|
||||
<h4>
|
||||
<a name="URI_legacy_xen">Legacy: <code>"xen"</code></a>
|
||||
</h3>
|
||||
</h4>
|
||||
<p>
|
||||
Another legacy URI is to specify name as the string
|
||||
<code>"xen"</code>. This will continue to refer to the Xen
|
||||
hypervisor. However you should prefer a full <a href="#URI_xen"><code>xen:///</code> URI</a> in all future code.
|
||||
</p>
|
||||
<h3>
|
||||
<h4>
|
||||
<a name="URI_legacy_proxy">Legacy: Xen proxy</a>
|
||||
</h3>
|
||||
</h4>
|
||||
<p>
|
||||
Libvirt continues to support connections to a separately running Xen
|
||||
proxy daemon. This provides a way to allow non-root users to make a
|
||||
|
6
examples/domain-events/events-c/.gitignore
vendored
Normal file
6
examples/domain-events/events-c/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.exe
|
||||
.deps
|
||||
.libs
|
||||
event-test
|
@@ -40,7 +40,7 @@ void usage(const char *pname);
|
||||
|
||||
const char *eventToString(int event) {
|
||||
const char *ret = "";
|
||||
switch ((virDomainEventType) event) {
|
||||
switch(event) {
|
||||
case VIR_DOMAIN_EVENT_DEFINED:
|
||||
ret ="Defined";
|
||||
break;
|
||||
@@ -59,16 +59,13 @@ const char *eventToString(int event) {
|
||||
case VIR_DOMAIN_EVENT_STOPPED:
|
||||
ret ="Stopped";
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_SHUTDOWN:
|
||||
ret = "Shutdown";
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const char *eventDetailToString(int event, int detail) {
|
||||
const char *ret = "";
|
||||
switch ((virDomainEventType) event) {
|
||||
switch(event) {
|
||||
case VIR_DOMAIN_EVENT_DEFINED:
|
||||
if (detail == VIR_DOMAIN_EVENT_DEFINED_ADDED)
|
||||
ret = "Added";
|
||||
@@ -80,7 +77,7 @@ static const char *eventDetailToString(int event, int detail) {
|
||||
ret = "Removed";
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_STARTED:
|
||||
switch ((virDomainEventStartedDetailType) detail) {
|
||||
switch (detail) {
|
||||
case VIR_DOMAIN_EVENT_STARTED_BOOTED:
|
||||
ret = "Booted";
|
||||
break;
|
||||
@@ -96,7 +93,7 @@ static const char *eventDetailToString(int event, int detail) {
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_SUSPENDED:
|
||||
switch ((virDomainEventSuspendedDetailType) detail) {
|
||||
switch (detail) {
|
||||
case VIR_DOMAIN_EVENT_SUSPENDED_PAUSED:
|
||||
ret = "Paused";
|
||||
break;
|
||||
@@ -118,7 +115,7 @@ static const char *eventDetailToString(int event, int detail) {
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_RESUMED:
|
||||
switch ((virDomainEventResumedDetailType) detail) {
|
||||
switch (detail) {
|
||||
case VIR_DOMAIN_EVENT_RESUMED_UNPAUSED:
|
||||
ret = "Unpaused";
|
||||
break;
|
||||
@@ -131,7 +128,7 @@ static const char *eventDetailToString(int event, int detail) {
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_STOPPED:
|
||||
switch ((virDomainEventStoppedDetailType) detail) {
|
||||
switch (detail) {
|
||||
case VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
|
||||
ret = "Shutdown";
|
||||
break;
|
||||
@@ -155,13 +152,6 @@ static const char *eventDetailToString(int event, int detail) {
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_EVENT_SHUTDOWN:
|
||||
switch ((virDomainEventShutdownDetailType) detail) {
|
||||
case VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED:
|
||||
ret = "Finished";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -295,25 +285,6 @@ static int myDomainEventControlErrorCallback(virConnectPtr conn ATTRIBUTE_UNUSED
|
||||
}
|
||||
|
||||
|
||||
const char *diskChangeReasonStrings[] = {
|
||||
"startupPolicy", /* 0 */
|
||||
/* add new reason here */
|
||||
};
|
||||
static int myDomainEventDiskChangeCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
virDomainPtr dom,
|
||||
const char *oldSrcPath,
|
||||
const char *newSrcPath,
|
||||
const char *devAlias,
|
||||
int reason,
|
||||
void *opaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
printf("%s EVENT: Domain %s(%d) disk change oldSrcPath: %s newSrcPath: %s devAlias: %s reason: %s\n",
|
||||
__func__, virDomainGetName(dom), virDomainGetID(dom),
|
||||
oldSrcPath, newSrcPath, devAlias, diskChangeReasonStrings[reason]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void myFreeFunc(void *opaque)
|
||||
{
|
||||
char *str = opaque;
|
||||
@@ -348,7 +319,6 @@ int main(int argc, char **argv)
|
||||
int callback6ret = -1;
|
||||
int callback7ret = -1;
|
||||
int callback8ret = -1;
|
||||
int callback9ret = -1;
|
||||
struct sigaction action_stop;
|
||||
|
||||
memset(&action_stop, 0, sizeof action_stop);
|
||||
@@ -363,9 +333,7 @@ int main(int argc, char **argv)
|
||||
virEventRegisterDefaultImpl();
|
||||
|
||||
virConnectPtr dconn = NULL;
|
||||
dconn = virConnectOpenAuth(argc > 1 ? argv[1] : NULL,
|
||||
virConnectAuthPtrDefault,
|
||||
VIR_CONNECT_RO);
|
||||
dconn = virConnectOpenReadOnly (argv[1] ? argv[1] : NULL);
|
||||
if (!dconn) {
|
||||
printf("error opening\n");
|
||||
return -1;
|
||||
@@ -414,11 +382,6 @@ int main(int argc, char **argv)
|
||||
VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
|
||||
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventControlErrorCallback),
|
||||
strdup("callback control error"), myFreeFunc);
|
||||
callback9ret = virConnectDomainEventRegisterAny(dconn,
|
||||
NULL,
|
||||
VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
|
||||
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventDiskChangeCallback),
|
||||
strdup("disk change"), myFreeFunc);
|
||||
|
||||
if ((callback1ret != -1) &&
|
||||
(callback2ret != -1) &&
|
||||
@@ -426,16 +389,8 @@ int main(int argc, char **argv)
|
||||
(callback4ret != -1) &&
|
||||
(callback5ret != -1) &&
|
||||
(callback6ret != -1) &&
|
||||
(callback7ret != -1) &&
|
||||
(callback9ret != -1)) {
|
||||
if (virConnectSetKeepAlive(dconn, 5, 3) < 0) {
|
||||
virErrorPtr err = virGetLastError();
|
||||
fprintf(stderr, "Failed to start keepalive protocol: %s\n",
|
||||
err && err->message ? err->message : "Unknown error");
|
||||
run = 0;
|
||||
}
|
||||
|
||||
while (run && virConnectIsAlive(dconn) == 1) {
|
||||
(callback7ret != -1)) {
|
||||
while (run) {
|
||||
if (virEventRunDefaultImpl() < 0) {
|
||||
virErrorPtr err = virGetLastError();
|
||||
fprintf(stderr, "Failed to run event loop: %s\n",
|
||||
@@ -451,7 +406,6 @@ int main(int argc, char **argv)
|
||||
virConnectDomainEventDeregisterAny(dconn, callback5ret);
|
||||
virConnectDomainEventDeregisterAny(dconn, callback6ret);
|
||||
virConnectDomainEventDeregisterAny(dconn, callback7ret);
|
||||
virConnectDomainEventDeregisterAny(dconn, callback9ret);
|
||||
if (callback8ret != -1)
|
||||
virConnectDomainEventDeregisterAny(dconn, callback8ret);
|
||||
}
|
||||
|
@@ -430,8 +430,7 @@ def eventToString(event):
|
||||
"Started",
|
||||
"Suspended",
|
||||
"Resumed",
|
||||
"Stopped",
|
||||
"Shutdown" );
|
||||
"Stopped" );
|
||||
return eventStrings[event];
|
||||
|
||||
def detailToString(event, detail):
|
||||
@@ -441,8 +440,7 @@ def detailToString(event, detail):
|
||||
( "Booted", "Migrated", "Restored", "Snapshot" ),
|
||||
( "Paused", "Migrated", "IOError", "Watchdog" ),
|
||||
( "Unpaused", "Migrated"),
|
||||
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"),
|
||||
( "Finished" )
|
||||
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot")
|
||||
)
|
||||
return eventStrings[event][detail]
|
||||
|
||||
@@ -471,19 +469,13 @@ def myDomainEventIOErrorCallback(conn, dom, srcpath, devalias, action, opaque):
|
||||
def myDomainEventGraphicsCallback(conn, dom, phase, localAddr, remoteAddr, authScheme, subject, opaque):
|
||||
print "myDomainEventGraphicsCallback: Domain %s(%s) %d %s" % (dom.name(), dom.ID(), phase, authScheme)
|
||||
|
||||
def myDomainEventDiskChangeCallback(conn, dom, oldSrcPath, newSrcPath, devAlias, reason, opaque):
|
||||
print "myDomainEventDiskChangeCallback: Domain %s(%s) disk change oldSrcPath: %s newSrcPath: %s devAlias: %s reason: %s" % (
|
||||
dom.name(), dom.ID(), oldSrcPath, newSrcPath, devAlias, reason)
|
||||
def usage(out=sys.stderr):
|
||||
print >>out, "usage: "+os.path.basename(sys.argv[0])+" [-hdl] [uri]"
|
||||
print >>out, " uri will default to qemu:///system"
|
||||
print >>out, " --help, -h Print this help message"
|
||||
print >>out, " --debug, -d Print debug output"
|
||||
print >>out, " --loop, -l Toggle event-loop-implementation"
|
||||
def usage():
|
||||
print "usage: "+os.path.basename(sys.argv[0])+" [uri]"
|
||||
print " uri will default to qemu:///system"
|
||||
|
||||
def main():
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "hdl", ["help", "debug", "loop"])
|
||||
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"] )
|
||||
except getopt.GetoptError, err:
|
||||
# print help information and exit:
|
||||
print str(err) # will print something like "option -a not recognized"
|
||||
@@ -491,17 +483,11 @@ def main():
|
||||
sys.exit(2)
|
||||
for o, a in opts:
|
||||
if o in ("-h", "--help"):
|
||||
usage(sys.stdout)
|
||||
usage()
|
||||
sys.exit()
|
||||
if o in ("-d", "--debug"):
|
||||
global do_debug
|
||||
do_debug = True
|
||||
if o in ("-l", "--loop"):
|
||||
global use_pure_python_event_loop
|
||||
use_pure_python_event_loop ^= True
|
||||
|
||||
if len(args) >= 1:
|
||||
uri = args[0]
|
||||
if len(sys.argv) > 1:
|
||||
uri = sys.argv[1]
|
||||
else:
|
||||
uri = "qemu:///system"
|
||||
|
||||
@@ -531,15 +517,12 @@ def main():
|
||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)
|
||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG, myDomainEventWatchdogCallback, None)
|
||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS, myDomainEventGraphicsCallback, None)
|
||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DISK_CHANGE, myDomainEventDiskChangeCallback, None)
|
||||
|
||||
vc.setKeepAlive(5, 3)
|
||||
|
||||
# The rest of your app would go here normally, but for sake
|
||||
# of demo we'll just go to sleep. The other option is to
|
||||
# run the event loop in your main thread if your app is
|
||||
# totally event based.
|
||||
while vc.isAlive() == 1:
|
||||
while 1:
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
|
5
examples/dominfo/.gitignore
vendored
Normal file
5
examples/dominfo/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
.libs
|
||||
info1
|
@@ -1,7 +1,7 @@
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
|
||||
LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
|
||||
$(COVERAGE_LDFLAGS)
|
||||
|
||||
|
5
examples/domsuspend/.gitignore
vendored
Normal file
5
examples/domsuspend/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
.libs
|
||||
suspend
|
@@ -1,7 +1,7 @@
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
|
||||
LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
|
||||
$(COVERAGE_LDFLAGS)
|
||||
|
||||
|
5
examples/hellolibvirt/.gitignore
vendored
Normal file
5
examples/hellolibvirt/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
hellolibvirt
|
||||
.deps
|
||||
.libs
|
@@ -1,4 +1,4 @@
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
|
5
examples/openauth/.gitignore
vendored
Normal file
5
examples/openauth/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
openauth
|
||||
.deps
|
||||
.libs
|
@@ -1,4 +1,4 @@
|
||||
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
|
@@ -1,6 +1,4 @@
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
|
||||
EXTRA_DIST = \
|
||||
events.stp \
|
||||
rpc-monitor.stp
|
||||
EXTRA_DIST = client.stp
|
||||
|
28
examples/systemtap/client.stp
Normal file
28
examples/systemtap/client.stp
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/stap
|
||||
|
||||
probe libvirt.daemon.client.connect {
|
||||
printf("Client fd=%d connected readonly=%d addr=%s\n", fd, readonly, addr);
|
||||
}
|
||||
probe libvirt.daemon.client.disconnect {
|
||||
printf("Client fd=%d disconnected addr=%s\n", fd, addr);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.tls_allow {
|
||||
printf("Client fd=%d tls allow %s\n", fd, x509dname);
|
||||
}
|
||||
probe libvirt.daemon.client.tls_deny {
|
||||
printf("Client fd=%d tls deny %s\n", fd, x509dname);
|
||||
}
|
||||
probe libvirt.daemon.client.tls_fail {
|
||||
printf("Client fd=%d tls fail\n", fd);
|
||||
}
|
||||
|
||||
probe libvirt.daemon.client.auth_allow {
|
||||
printf("Client fd=%d auth %s allow %s\n", fd, authname, identity);
|
||||
}
|
||||
probe libvirt.daemon.client.auth_deny {
|
||||
printf("Client fd=%d auth %s deny %s\n", fd, authname, identity);
|
||||
}
|
||||
probe libvirt.daemon.client.auth_fail {
|
||||
printf("Client fd=%d auth %s fail\n", fd, authname);
|
||||
}
|
@@ -1,133 +0,0 @@
|
||||
#!/usr/bin/stap
|
||||
#
|
||||
# Copyright (C) 2011 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
#
|
||||
# This script will monitor all operation of the libvirt event loop
|
||||
# in both client and server. Example output is:
|
||||
#
|
||||
# 0.000 begin
|
||||
# 2.359 18185 + handle 1 4 1
|
||||
# 2.360 18185 + handle 2 6 1
|
||||
# 2.360 18185 * handle 2 0
|
||||
# 2.360 14370 > handle 3 1
|
||||
# 2.360 14370 + handle 33 16 1
|
||||
# 2.361 14370 ~ 7 -1
|
||||
# 2.361 14370 > handle 33 1
|
||||
# 2.361 14370 * handle 33 1
|
||||
# 2.361 14370 * handle 33 1
|
||||
# 2.361 14370 * handle 33 3
|
||||
# 2.361 14370 ~ 7 -1
|
||||
# 2.361 14370 > handle 1 1
|
||||
# 2.361 14370 ~ 7 -1
|
||||
# 2.361 14370 > handle 33 2
|
||||
# 2.361 14370 * handle 33 1
|
||||
# 2.361 14370 ~ 7 -1
|
||||
# 2.361 18185 * handle 2 1
|
||||
# 2.362 18185 * handle 2 0
|
||||
# 2.362 14370 > handle 33 1
|
||||
# 2.362 14370 * handle 33 1
|
||||
# 2.362 14370 * handle 33 1
|
||||
# 2.362 14370 ~ 7 -1
|
||||
# 2.367 14370 * handle 33 3
|
||||
# 2.367 14370 > handle 1 1
|
||||
# 2.367 14370 ~ 7 -1
|
||||
# 2.367 14370 > handle 33 2
|
||||
# 2.367 14370 * handle 33 1
|
||||
# 2.367 14370 ~ 7 -1
|
||||
# 2.370 18185 - timeout 1
|
||||
# 2.370 14370 ! handle 33
|
||||
# 2.371 14370 - handle 33
|
||||
# 2.371 14370 ~ 6 -1
|
||||
#
|
||||
# Legend:
|
||||
# + Add
|
||||
# - Remove
|
||||
# * Update
|
||||
# > dispatch
|
||||
# ! purge
|
||||
# ~ Iterate
|
||||
#
|
||||
#
|
||||
|
||||
# Show all updates to registered timeouts/handles
|
||||
global showUpdates = 1
|
||||
|
||||
# Show when handles/timeouts are dispatched
|
||||
global showDispatch = 1
|
||||
|
||||
# Show iterations of the event loop
|
||||
global showIter = 1
|
||||
|
||||
global start
|
||||
|
||||
# Print a string, with a timestamp relative to the start of the script
|
||||
function print_ts(msg)
|
||||
{
|
||||
now = gettimeofday_ns() / (1000*1000)
|
||||
delta = (now - start)
|
||||
|
||||
printf("%3d.%03d %s\n", (delta / 1000), (delta % 1000), msg);
|
||||
}
|
||||
|
||||
probe begin {
|
||||
start = gettimeofday_ns() / (1000*1000)
|
||||
print_ts("begin");
|
||||
}
|
||||
|
||||
probe libvirt.event_poll.add_handle {
|
||||
print_ts(sprintf("%d + handle %d %d %d", pid(), watch, fd, events));
|
||||
}
|
||||
probe libvirt.event_poll.remove_handle {
|
||||
print_ts(sprintf("%d - handle %d", pid(), watch));
|
||||
}
|
||||
probe libvirt.event_poll.update_handle {
|
||||
if (showUpdates)
|
||||
print_ts(sprintf("%d * handle %d %d", pid(), watch, events));
|
||||
}
|
||||
probe libvirt.event_poll.purge_handle {
|
||||
print_ts(sprintf("%d ! handle %d", pid(), watch));
|
||||
}
|
||||
probe libvirt.event_poll.dispatch_handle {
|
||||
if (showDispatch)
|
||||
print_ts(sprintf("%d > handle %d %d", pid(), watch, events));
|
||||
}
|
||||
|
||||
probe libvirt.event_poll.add_timeout {
|
||||
print_ts(sprintf("%d + timeout %d %d", pid(), timer, frequency));
|
||||
}
|
||||
probe libvirt.event_poll.remove_timeout {
|
||||
print_ts(sprintf("%d - timeout %d", pid(), timer));
|
||||
}
|
||||
probe libvirt.event_poll.update_timeout {
|
||||
if (showUpdates)
|
||||
print_ts(sprintf("%d * timeout %d %d", pid(), timer, frequency));
|
||||
}
|
||||
probe libvirt.event_poll.purge_timeout {
|
||||
print_ts(sprintf("%d ! timeout %d", pid(), timer));
|
||||
}
|
||||
|
||||
probe libvirt.event_poll.dispatch_timeout {
|
||||
if (showDispatch)
|
||||
print_ts(sprintf("%d > timeout %d", pid(), timer));
|
||||
}
|
||||
|
||||
probe libvirt.event_poll.run {
|
||||
if (showIter)
|
||||
print_ts(sprintf("%d ~ %d %d", pid(), nfds, timeout));
|
||||
}
|
@@ -1,80 +0,0 @@
|
||||
#!/usr/bin/stap
|
||||
#
|
||||
# Copyright (C) 2011 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
#
|
||||
# This script will monitor all messages sent/received between libvirt
|
||||
# and the QEMU monitor
|
||||
#
|
||||
# stap qemu-monitor.stp
|
||||
# 0.000 begin
|
||||
# 3.848 ! 0x7f2dc00017b0 {"timestamp": {"seconds": 1319466931, "microseconds": 187755}, "event": "SHUTDOWN"}
|
||||
# 5.773 > 0x7f2dc0007960 {"execute":"qmp_capabilities","id":"libvirt-1"}
|
||||
# 5.774 < 0x7f2dc0007960 {"return": {}, "id": "libvirt-1"}
|
||||
# 5.774 > 0x7f2dc0007960 {"execute":"query-commands","id":"libvirt-2"}
|
||||
# 5.777 < 0x7f2dc0007960 {"return": [{"name": "quit"}, {"name": ....snip....
|
||||
# 5.777 > 0x7f2dc0007960 {"execute":"query-chardev","id":"libvirt-3"}
|
||||
# 5.778 < 0x7f2dc0007960 {"return": [{"filename": ....snip....
|
||||
# 5.779 > 0x7f2dc0007960 {"execute":"query-cpus","id":"libvirt-4"}
|
||||
# 5.780 < 0x7f2dc0007960 {"return": [{"current": true, "CPU": 0, "pc": 1048560, "halted": false, "thread_id": 13299}], "id": "libvirt-4"}
|
||||
# 5.780 > 0x7f2dc0007960 {"execute":"set_password","arguments":{"protocol":"vnc","password":"123456","connected":"keep"},"id":"libvirt-5"}
|
||||
# 5.782 < 0x7f2dc0007960 {"return": {}, "id": "libvirt-5"}
|
||||
# 5.782 > 0x7f2dc0007960 {"execute":"expire_password","arguments":{"protocol":"vnc","time":"never"},"id":"libvirt-6"}
|
||||
# 5.783 < 0x7f2dc0007960 {"return": {}, "id": "libvirt-6"}
|
||||
# 5.783 > 0x7f2dc0007960 {"execute":"balloon","arguments":{"value":224395264},"id":"libvirt-7"}
|
||||
# 5.785 < 0x7f2dc0007960 {"return": {}, "id": "libvirt-7"}
|
||||
# 5.785 > 0x7f2dc0007960 {"execute":"cont","id":"libvirt-8"}
|
||||
# 5.789 ! 0x7f2dc0007960 {"timestamp": {"seconds": 1319466933, "microseconds": 129980}, "event": "RESUME"}
|
||||
# 5.789 < 0x7f2dc0007960 {"return": {}, "id": "libvirt-8"}
|
||||
# 7.537 ! 0x7f2dc0007960 {"timestamp": {"seconds": 1319466934, "microseconds": 881214}, "event": "SHUTDOWN"}
|
||||
#
|
||||
|
||||
|
||||
global start
|
||||
|
||||
# Print a string, with a timestamp relative to the start of the script
|
||||
function print_ts(msg)
|
||||
{
|
||||
now = gettimeofday_ns() / (1000*1000)
|
||||
delta = (now - start)
|
||||
|
||||
printf("%3d.%03d %s\n", (delta / 1000), (delta % 1000), msg);
|
||||
}
|
||||
|
||||
|
||||
# Just so we know the script is now running
|
||||
probe begin {
|
||||
start = gettimeofday_ns() / (1000*1000)
|
||||
print_ts("begin")
|
||||
}
|
||||
|
||||
probe libvirt.qemu.monitor_send_msg {
|
||||
if (fd != -1) {
|
||||
print_ts(sprintf("> %p %s (fd=%d)", mon, substr(msg, 0, strlen(msg)-2), fd));
|
||||
} else {
|
||||
print_ts(sprintf("> %p %s", mon, substr(msg, 0, strlen(msg)-2)));
|
||||
}
|
||||
}
|
||||
|
||||
probe libvirt.qemu.monitor_recv_reply {
|
||||
print_ts(sprintf("< %p %s", mon, reply));
|
||||
}
|
||||
|
||||
probe libvirt.qemu.monitor_recv_event {
|
||||
print_ts(sprintf("! %p %s", mon, event));
|
||||
}
|
@@ -1,167 +0,0 @@
|
||||
#!/usr/bin/stap
|
||||
#
|
||||
# Copyright (C) 2011 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
#
|
||||
# This script will monitor all RPC messages going in/out of libvirtd and
|
||||
# any connected clients. Example output:
|
||||
#
|
||||
# 0.000 begin
|
||||
# 2.632 C + 0x7f1ea57dc010 local=127.0.0.1;0 remote=127.0.0.1;0
|
||||
# 2.632 C > 0x7f1ea57dc010 msg=remote.1.auth_list(call, ok, 0) len=28
|
||||
# 2.632 + S 0x1c1f710 local=127.0.0.1;0 remote=127.0.0.1;0
|
||||
# 2.632 > S 0x1c1f710 msg=remote.1.auth_list(call, ok, 0) len=28
|
||||
# 2.633 < S 0x1c1f710 msg=remote.1.auth_list(reply, ok, 0) len=36
|
||||
# 2.633 C < 0x7f1ea57dc010 msg=remote.1.auth_list(reply, ok, 0) len=36
|
||||
# 2.633 C > 0x7f1ea57dc010 msg=remote.1.open(call, ok, 1) len=40
|
||||
# 2.633 > S 0x1c1f710 msg=remote.1.open(call, ok, 1) len=40
|
||||
# 2.639 < S 0x1c1f710 msg=remote.1.open(reply, ok, 1) len=28
|
||||
# 2.639 C < 0x7f1ea57dc010 msg=remote.1.open(reply, ok, 1) len=28
|
||||
# 2.639 C > 0x7f1ea57dc010 msg=remote.1.get_uri(call, ok, 2) len=28
|
||||
# 2.639 > S 0x1c1f710 msg=remote.1.get_uri(call, ok, 2) len=28
|
||||
# 2.639 < S 0x1c1f710 msg=remote.1.get_uri(reply, ok, 2) len=48
|
||||
# 2.640 C < 0x7f1ea57dc010 msg=remote.1.get_uri(reply, ok, 2) len=48
|
||||
# 2.640 C > 0x7f1ea57dc010 msg=remote.1.domain_lookup_by_id(call, ok, 3) len=32
|
||||
# 2.640 > S 0x1c1f710 msg=remote.1.domain_lookup_by_id(call, ok, 3) len=32
|
||||
# 2.640 < S 0x1c1f710 msg=remote.1.domain_lookup_by_id(reply, error, 3) len=180
|
||||
# 2.641 C < 0x7f1ea57dc010 msg=remote.1.domain_lookup_by_id(reply, error, 3) len=180
|
||||
# 2.641 C > 0x7f1ea57dc010 msg=remote.1.close(call, ok, 4) len=28
|
||||
# 2.641 > S 0x1c1f710 msg=remote.1.close(call, ok, 4) len=28
|
||||
# 2.641 < S 0x1c1f710 msg=remote.1.close(reply, ok, 4) len=28
|
||||
# 2.641 C < 0x7f1ea57dc010 msg=remote.1.close(reply, ok, 4) len=28
|
||||
# 2.641 C - 0x7f1ea57dc010 local= remote=
|
||||
# 2.641 - S 0x1c1f710 local=127.0.0.1;0 remote=127.0.0.1;0
|
||||
|
||||
|
||||
global start
|
||||
|
||||
# If this is set to '1', then all the raw RPC values are postfixed
|
||||
# to the string translation
|
||||
global verbose=0
|
||||
|
||||
# Print a string, with a timestamp relative to the start of the script
|
||||
function print_ts(msg)
|
||||
{
|
||||
now = gettimeofday_ns() / (1000*1000)
|
||||
delta = (now - start)
|
||||
|
||||
printf("%3d.%03d %s\n", (delta / 1000), (delta % 1000), msg);
|
||||
}
|
||||
|
||||
|
||||
# Just so we know the script is now running
|
||||
probe begin {
|
||||
start = gettimeofday_ns() / (1000*1000)
|
||||
print_ts("begin")
|
||||
}
|
||||
|
||||
|
||||
# Format an RPC message
|
||||
function msginfo(prefix, client, len, prog, version, proc, type, status, serial)
|
||||
{
|
||||
progstr = libvirt_rpc_program_name(prog, verbose);
|
||||
procstr = libvirt_rpc_procedure_name(prog, version, proc, verbose);
|
||||
typestr = libvirt_rpc_type_name(type, verbose);
|
||||
statusstr = libvirt_rpc_status_name(status, verbose);
|
||||
|
||||
|
||||
print_ts(sprintf("%s %-16p msg=%s.%d.%s(%s, %s, %d) len=%d",
|
||||
prefix, client, progstr, version, procstr,
|
||||
typestr, statusstr, serial, len));
|
||||
}
|
||||
|
||||
# Catch all tx/rx of RPC messages by clients & libvirtd
|
||||
probe libvirt.rpc.server_client_msg_rx {
|
||||
if (len)
|
||||
msginfo("> S", client, len, prog, vers, proc, type, status, serial)
|
||||
}
|
||||
probe libvirt.rpc.server_client_msg_tx_queue {
|
||||
if (len)
|
||||
msginfo("< S", client, len, prog, vers, proc, type, status, serial)
|
||||
}
|
||||
probe libvirt.rpc.client_msg_rx {
|
||||
if (len)
|
||||
msginfo("C <", client, len, prog, vers, proc, type, status, serial)
|
||||
}
|
||||
probe libvirt.rpc.client_msg_tx_queue {
|
||||
if (len)
|
||||
msginfo("C >", client, len, prog, vers, proc, type, status, serial)
|
||||
}
|
||||
|
||||
|
||||
# Used to track connection info
|
||||
global localAddrs
|
||||
global remoteAddrs;
|
||||
global clientSocks
|
||||
global serverSocks
|
||||
|
||||
|
||||
# Watch for all sockets opened/closed
|
||||
probe libvirt.rpc.socket_new {
|
||||
localAddrs[pid(), sock] = localAddr;
|
||||
remoteAddrs[pid(), sock] = remoteAddr;
|
||||
}
|
||||
|
||||
probe libvirt.rpc.socket_free {
|
||||
if (refs == 1) {
|
||||
delete localAddrs[pid(), sock];
|
||||
delete remoteAddrs[pid(), sock];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Print whenever a client opens / closes a connection
|
||||
probe libvirt.rpc.client_new {
|
||||
clientSocks[pid(), client] = sock;
|
||||
print_ts(sprintf("C + %-16p local=%s remote=%s", client, localAddrs[pid(), sock], remoteAddrs[pid(), sock]));
|
||||
}
|
||||
|
||||
probe libvirt.rpc.client_free {
|
||||
if (refs == 1) {
|
||||
print_ts(sprintf("C - %-16p local=%s remote=%s", client,
|
||||
localAddrs[pid(), clientSocks[pid(), client]],
|
||||
remoteAddrs[pid(), clientSocks[pid(), client]]));
|
||||
delete clientSocks[pid(), client];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# print whenever the server receives a client connection open/close
|
||||
probe libvirt.rpc.server_client_new {
|
||||
serverSocks[pid(), client] = sock;
|
||||
print_ts(sprintf("+ S %-16p local=%s remote=%s", client, localAddrs[pid(), sock], remoteAddrs[pid(), sock]));
|
||||
}
|
||||
|
||||
probe libvirt.rpc.server_client_free {
|
||||
if (refs == 1) {
|
||||
print_ts(sprintf("- S %-16p local=%s remote=%s", client,
|
||||
localAddrs[pid(), serverSocks[pid(), client]],
|
||||
remoteAddrs[pid(), serverSocks[pid(), client]]));
|
||||
delete serverSocks[pid(), client];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
probe libvirt.rpc.socket_send_fd {
|
||||
print_ts(sprintf("= %-16p send fd=%d", sock, fd));
|
||||
}
|
||||
|
||||
|
||||
probe libvirt.rpc.socket_recv_fd {
|
||||
print_ts(sprintf("= %-16p recv fd=%d", sock, fd));
|
||||
}
|
@@ -9,8 +9,6 @@ FILTERS = \
|
||||
allow-ipv4.xml \
|
||||
clean-traffic.xml \
|
||||
no-arp-spoofing.xml \
|
||||
no-arp-ip-spoofing.xml \
|
||||
no-arp-mac-spoofing.xml \
|
||||
no-ip-multicast.xml \
|
||||
no-ip-spoofing.xml \
|
||||
no-mac-broadcast.xml \
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user