1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-08-18 13:50:02 +03:00

Compare commits

...

730 Commits

Author SHA1 Message Date
c759ae5509 Release of libvirt-0.6.5
* configure.in libvirt.spec.in NEWS docs/* po/*: release of
  libvirt-0.6.5
* .gitignore: adding cscope files
Daniel
2009-07-03 14:32:17 +00:00
d81275974a Add support for arm emulation if qemu-system-arm is present
* src/qemu_conf.c: patch from C.J. Adams-Collier adding support
  for arm emulation if qemu-system-arm is present
daniel
2009-07-03 13:15:55 +00:00
67d0c6eb94 Skip labelling if no src path present
Fixes startup of guest's with sourceless cdrom devices.

Patch from Cole Robinson originally posted here:

  https://bugzilla.redhat.com/499569

but never sent upstream.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-07-03 10:29:09 +00:00
add254feea Don't unnecessarily try to change a file context
As pointed out by Tim Waugh here:

  https://bugzilla.redhat.com/507555

We shouldn't bother trying to set the context of a file if it already
matches what we want.

(Fixed to use STREQ() and not use tabs, as pointed out by danpb)

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-07-03 10:27:46 +00:00
547147084d Re-label shared and readonly images
This patch was posted ages ago here:

  https://bugzilla.redhat.com/493692

But was never posted upstream AFAICT.

Patch from Dan Berrange

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-07-03 10:26:37 +00:00
1e4434d652 Fix some missing parts in network code and schemas
* docs/schemas/network.rng: fix the network schemas to match
  new accepted elements, patch by Satoru SATOH
* src/network_conf.c: fix network driver to save the domain name
  in XML if present, patch by Satoru SATOH
* AUTHORS: adding Satoru SATOH
Daniel
2009-07-02 14:02:18 +00:00
bc429a0e54 fix an endless loop in node device XML dump
* src/node_device.c: fix an endless loop in node device XML dump,
  patch by Cole Robinson
Daniel
2009-07-01 21:30:41 +00:00
bf32184d48 small OpenNebula driver doc update
* docs/drvone.html docs/drvone.html.in: small OpenNebula driver
  doc update by Abel Miguez Rodriguez
daniel
2009-07-01 21:24:47 +00:00
9dfcca0353 OpenNebula driver documentation
* docs/drvone.html.in docs/drvone.html docs/drivers.html.in
  docs/hvsupport.html.in docs/sitemap.html.in docs/*: added
  documentation for OpenNebula driver by Abel Miguez Rodriguez
  and regenerated the docs
Daniel
2009-07-01 14:27:24 +00:00
88b4cc5fe9 Regenerated the documentation and localization files
* src/libvirt.c src/virterror.c: fix some missing comments in public
  modules.
* docs/libvirt-api.xml docs/libvirt-refs.xml
  docs/devhelp/libvirt-libvirt.html docs/html/libvirt-libvirt.html:
  regenerated documentation
* po/*: updated the polish localization and regenerated
Daniel
2009-07-01 13:08:17 +00:00
2a004db6c7 Various logging cleanups in code and doc
* docs/logging.html[.in] qemud/libvirtd.conf qemud/qemud.c
  src/logging.[ch]: cleanup the logging code and docs to remove
  all references to log level 0, cleanup hardcoded values and add
  a default VIR_LOG_DEFAULT value, patch by Amy Griffis
daniel
2009-07-01 11:21:15 +00:00
f7bd305904 cleanup and small update for OpenNebula
* src/opennebula/one_conf.c src/opennebula/one_driver.c: cleanup
  and small update for OpenNebula driver by Abel Miguez Rodriguez
Daniel
2009-07-01 10:42:10 +00:00
69ba4d0971 Remove unused code. Ensure null termination after strncpy in opennebula 2009-07-01 10:40:12 +00:00
1476b6d487 * src/storage_driver.c: don't destroy a pool when calling create
by mistake, patch by Dave Allan.
daniel
2009-07-01 08:33:22 +00:00
eb6d21cc0e Reduce LXC capabilities 2009-06-29 17:09:42 +00:00
96619805cb Use libcap-ng to clear capabilities for many child processes 2009-06-29 17:00:52 +00:00
1a982aef18 Prepare for using libcap-ng 2009-06-29 11:33:13 +00:00
2c359dd609 Add HACKING doc to the website 2009-06-29 11:09:17 +00:00
39c7e7a6b7 Fix crash in QEMU driver with bad capabilities data 2009-06-29 10:41:56 +00:00
609e31dd3e * src/parthelper.c: fix a superfluous % on printf format problem
raised by Matthias Bolte
Daniel
2009-06-26 20:14:18 +00:00
ecd937164f * src/nodeinfo.c: sometimes libnuma can't handle some topologies,
but those failures should not completely break libvirt, patch
  by Dan Berrange, fixes #506590
daniel
2009-06-26 20:08:07 +00:00
14435163a0 * src/xend_internal.c: avoid a segfault when dumping XML with recent
xen versions, patch by Sascha, fixes #503254
daniel
2009-06-26 18:14:16 +00:00
fd90b67afe allow to create storage volumes on disk backend
* src/libvirt_private.syms src/parthelper.c src/storage_backend_disk.c
  src/storage_conf.c src/storage_conf.h: allow to create storage
  volumes on disk backend, patches by Henrik Persson
* AUTHORS: add Henrik Persson
Daniel
2009-06-26 16:18:59 +00:00
173c230e66 big cleanup of the debug configuration option
* src/Makefile.am src/libvirt.c src/libvirt_private.syms src/logging.c
  src/logging.h src/util.c src/libvirt_debug.syms: big cleanup of
  the debug configuration option and code by Amy Griffis
daniel
2009-06-26 15:08:04 +00:00
b052424c0d * src/node_device.c src/node_device_hal.h src/node_device_hal_linux.c:
fix bogus WWN in NPIV support, patch by David Allan
daniel
2009-06-26 14:09:01 +00:00
4c4ea03d7a fix reading of storage pool definitions at startup
* src/storage_conf.c: fix reading of storage pool definitions at startup
  patch by Cole Robinson
daniel
2009-06-25 15:13:25 +00:00
9e0809911c fix UML driver logging macros
* src/uml_driver.c: fix UML driver logging macros, patch by Amy Griffis
* AUTHORS: adding Amy Griffis
Daniel
2009-06-25 15:02:10 +00:00
cc7499dd03 * src/node_device_conf.c: fix a leak, patch by Dave Allan
daniel
2009-06-25 14:51:21 +00:00
d45242c616 Fix a couple of state problems
* src/qemu_driver.c: fix a domain state problem after
  migration, patch  by Federico Simoncelli, fixes #507537
* src/domain_conf.c:  fix a transcient domain state problem after
  destroy, patch  by Federico Simoncelli, fixes #507304
* AUTHORS: add Federico Simoncelli and Javier Fontan
daniel
2009-06-25 13:55:58 +00:00
73f34b31f5 Fix broken dominfo command when no security driver is implemented 2009-06-25 09:37:22 +00:00
8ceac55c29 * po/*: update a lot of translations, and regenerate the po* files
daniel
2009-06-24 17:42:04 +00:00
b547201561 Finish the integration of OpenNebula driver
* configure.in libvirt.spec.in src/Makefile.am
  src/opennebula/one_client.[ch] src/opennebula/one_conf.h
  src/opennebula/one_driver.[ch] : Finish the integration of OpenNebula,
  avoid dependancy on OpenNebula libraries, require xmlrpc-c-devel
  and build it by default, based on patch by Javier Fontan and DanB
  suggestions
Daniel
2009-06-24 17:32:56 +00:00
31bd8cb6d0 * src/opennebula/one_conf.c src/opennebula/one_driver.c: fix One
driver compilation issues, patch by Javier Fontan and remove
  some tabs in format strings
daniel
2009-06-24 16:17:10 +00:00
2fa4a8b991 Fix storage handling for custom test driver.
If using a custom test driver, storage pool file parsing was broken, and
storage volume parsing was never implemented. Fix these issues, and add
some examples in docs/
2009-06-22 17:19:30 +00:00
3f305eb1e9 Refactor storage XML parsing to be consistent with domain/network conf.
The storage driver arranges its parsing routines in a way that make them
difficult to use in the test driver for non-default file parsing. This
refactoring moves things to be consistent with the way domain_conf and
network_conf do things.
2009-06-22 16:41:34 +00:00
5de555cae2 Activate virtual networks initialized in custom test driver.
If specifying a custom test driver, virtual networks were not 'activated'
on driver init. This differs from the behavior of domains and storage pools,
so fix it. Also improve a couple error messages in that area.
2009-06-22 16:39:23 +00:00
f7f52b1592 Fix segfault if storage pool has no type attribute (possibly others)
virEnumFromString doesn't check for a NULL string, and will segfault if
passed one. Lots of calling code protects against this, but at least
/pool/@type parsing does not.
2009-06-22 16:37:52 +00:00
387935345c Fix memory reporting for inactive domains in the qemu driver.
Currently, 'info' will always report that mem = max mem. Make sure we
actually return the correct mem value.
2009-06-22 16:35:03 +00:00
5ea25b7801 Fix raw storage volume creation for allocation < capacity.
CreateXMLFrom changes accidentally caused all raw volume creation to be
fully allocated (as though allocation == capacity). Fix this.

Also force CreateXMLFrom to maintain the previous behavior: sparseness
should still be maintained since we search for holes when copying, and the
clone behavior hasn't been tested with anything but the broken behavior.
2009-06-22 16:33:24 +00:00
c1b2aea80c test driver: Fix domain ID after redefining a running VM
The ID of the existing VM was being unconditionally set to -1, which was
upsetting virt-manager.
2009-06-22 16:29:40 +00:00
a06b407fce * src/conf.[ch]: restrict VMX syntax parsing types
daniel
2009-06-22 11:54:49 +00:00
c57932c663 * src/storage_driver.c: cleanup when creating a storage pool fails,
patch by Henrik Persson
Daniel
2009-06-22 10:15:57 +00:00
144276aa1a extend the configuration parser for VMX syntax
* qemud/qemud.c src/conf.c src/conf.h src/qemu_conf.c src/xen_unified.c
  src/xm_internal.c tests/conftest.c tests/xmconfigtest.c: extend
  the configuration parser for VMX syntax, patch by Matthias Bolte
Daniel
2009-06-19 12:34:30 +00:00
2be4d86740 Fix remote socket path for SSH tunnel connections 2009-06-18 13:57:40 +00:00
c0b64e9daa fix a module dependency problem
* src/node_device.[ch] src/storage_backend.[ch]: fixes a
  module dependency problem, patch by Dave Allan
Daniel
2009-06-17 08:38:17 +00:00
502278d5b2 Allow USB hostdev product to be 0x0000
Product = 0 is a valid value based on this bug report:

https://www.redhat.com/archives/libvir-list/2009-May/msg00368.html

Also, throw a less ambiguous error if vendor = 0.
2009-06-16 18:46:06 +00:00
ac75bd1b1e Fix FS volume creation with backing stores.
This regressed when CreateXMLFrom was added: we should only perform the
backing store comparison if an input volume was passed.
2009-06-16 15:47:53 +00:00
53603043c7 Set default emulator in domain_conf.*, rather than the driver.
Rather than numerous instances of:

emulator = vm->def->emulator;
if (!emulator)
    emulator = virDomainDefDefaultEmulator(conn, vm->def, driver->caps);
if (!emulator)
    return -1;

Set this value at XML parse time in the domain config, so we can depend on
it for all future emulator accesses. There were unchecked accesses in the
qemu driver that were tripping up on this if no emulator was specified in
the XML, see:

http://www.redhat.com/archives/libvir-list/2008-October/msg00602.html
2009-06-16 15:42:46 +00:00
3f63c44d12 Add virCapabilities*EmulatorRequired.
Certain drivers always need an 'emulator' specified in the XML (qemu and lxc
at least). Store this info in capabilities.

We will eventually use this to move default emulator handling out of
drivers and into domain_conf.*
2009-06-16 15:27:33 +00:00
659bd66529 Check that '-drive format=' is supported before adding to qemu cmdline.
Qemu < 0.10.0 did not support it, and virt-* tools now try to add this by
default, so it's extra important we ensure the option exists.
2009-06-16 15:17:10 +00:00
c9d9eddaa4 Add qemuhelptest to .*ignore files 2009-06-16 14:06:48 +00:00
bfb59c172b Fix qemu command flags fetching
New function qemudParseHelpStr was being called with arguments in the
wrong order, so command flags == kvm_version :/
2009-06-16 14:01:43 +00:00
39f775cc05 Add new 'availheap' sysctl variant for ABI changes in Xen 2009-06-16 09:31:19 +00:00
c4a6bc4977 Fix build on non-Linux targets 2009-06-15 17:15:54 +00:00
7c4ce7eb03 Fix build from tar.gz 2009-06-15 14:59:22 +00:00
ae974a2bbf Fix bogus initialization in virFindFileInPath 2009-06-15 11:08:28 +00:00
0420a03240 Remove use of getuid()==0 for privilege checks 2009-06-12 13:20:13 +00:00
a8b12e4f27 Include OS driver name (if any) in device XML for nodedev driver 2009-06-12 13:12:55 +00:00
d2c9fe850b Improve error reporting for virConnectOpen URIs 2009-06-12 12:06:15 +00:00
56a46886ad Fix re-detection of transient VMs after libvirtd restart 2009-06-12 11:38:50 +00:00
3bdda17adc fixing a typo in error message
* qemud/remote.c: fixing a typo pointed out by Runa Bhattacharjee
Daniel
2009-06-11 15:34:37 +00:00
bf5d6f431e extract serial number from HAL storage backend
* src/node_device_hal.c src/node_device_conf.[ch]: add support
  for serial number in HAL storage backend, patch by Dave Allan
* docs/schemas/nodedev.rng
tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml:
  update the schemas and add a test case, also by Dave Allan
Daniel
2009-06-11 14:25:19 +00:00
1fbe229b3c Add qemu help string parsing tests
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-06-11 14:17:42 +00:00
04cbe68797 Detect newer qemu-kvm versions
The KVM version string can be one of the following:

  - qemu-kvm-x.y.z in stable releases
  - kvm-XX for kvm versions up to kvm-85
  - qemu-kvm-devel-XX for kvm version kvm-86 and later

There are only a few of places where we need to detect
differences between KVM versions based on 0.9.1:

  1) VNET_HDR introduced in kvm-74

  2) -incoming tcp introduced in kvm-79

  3) -incoming exec introduced in kvm-80

  4) -incoming stdio in all earlier kvm versions

With qemu-kvm-0.10.x, we can now assume that (1) is available
if it's a KVM release, (2) and (3) is always available and
(4) is never available.

So, from now on we should only need to check the qemu version
number and the "is_kvm" flag for detecting feature availability.
We only need the KVM version number for older releases.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-06-11 14:15:49 +00:00
56ecebf22d Re-factor qemu version parsing
This patch is purely re-factoring without any functional changes
to make way for the next patch.

The main thing achieved by the refactoring is that we now have
easier access to the parenthesised string that KVM folks seem
to delight in changing.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-06-11 14:12:30 +00:00
abed6fca87 find and use kvm-img, qemu-img or qcow-create dynamically
* configure.in src/libvirt_private.syms src/storage_backend_fs.c
  src/util.c src/util.h: find and use kvm-img, qemu-img or qcow-create
  dynamically at runtime, patch by Doug Goldstein
* AUTHORS: add Doug Goldstein
Daniel
2009-06-11 13:18:56 +00:00
d12a6ef9c2 typo fix, regenerated docs
* docs/formatdomain.html docs/formatdomain.html.in: typo fix
  by Garry Dolley
Daniel
2009-06-09 13:22:19 +00:00
ce958c191c Added docs on extending public API (Dave Allen) 2009-06-09 11:42:41 +00:00
f969e393a9 Fix a memory error on Xen device removal
* src/xm_internals.c: the memory shrinking on device removal
  didn't copy the right amount of memory, patch by Daniel Berrange
  fixes #497051
daniel
2009-06-04 13:56:49 +00:00
3166570f7c Add NUMA memory APIs to vbox driver 2009-06-03 14:32:18 +00:00
e11013d19c * src/network_driver.c: forbid set Autostart on transcient networks
daniel
2009-06-03 13:52:06 +00:00
69d4634635 Switch to positional struct initializers in vbox driver table 2009-06-03 13:30:19 +00:00
0ca460eada Implement capabilities and nodeinfo APIs 2009-06-03 13:29:23 +00:00
b0b968efd5 Generic shared impls of all NUMA apis 2009-06-03 13:28:02 +00:00
3621d42e0f * src/openvz_conf.c src/virsh.c: various typo or english fixups
raised by Runa Bhattacharjee
daniel
2009-06-03 12:13:52 +00:00
1b28a99d14 Fix HAL driver restart thread safety 2009-06-03 11:24:21 +00:00
c0d74ed43b Support networking in UML driver 2009-06-03 11:13:33 +00:00
7cce4768ae Misc User Mode Linux startup/shutdown bugs 2009-06-03 10:55:33 +00:00
7d633ec400 Fix logging initialization in daemon 2009-06-03 10:36:17 +00:00
81d0ffbc3b NPIV implementation for node device create and destroy
* src/Makefile.am src/node_device.[ch] src/node_device_conf.[ch]
  src/node_device_hal.[ch] src/node_device_hal_linux.c
  src/qemu_driver.c src/remote_internal.c src/storage_backend.c
  src/virsh.c src/xen_unified.c tests/nodedevxml2xmltest.c
  po/POTFILES.in: implementation for node device create and destroy
  in NPIV support, patch by David Allan
Daniel
2009-06-02 15:12:53 +00:00
66220e3e61 release of libvirt-0.6.4
* configure.in libvirt.spec.in NEWS docs/* po/*: release of
  libvirt-0.6.4
* src/libvirt.c src/virterror.c: some comments cleanups
Daniel
2009-05-29 16:51:15 +00:00
6c3ef35064 Avoid double-free in daemon client cleanup code 2009-05-29 14:34:35 +00:00
8a1a2ac558 Fix Win32 portability problems with 'inteface' symbol clash 2009-05-29 14:29:22 +00:00
43692df590 portability fix
* src/lxc_container.c: fix a portability issue if PR_CAPBSET_DROP is
  not defined.
Daniel
2009-05-29 14:27:04 +00:00
b121c7871f network driver: Fix regression defining colliding networks at daemon startup.
If two virtual networks have the same hardcoded bridge device (which
prevents them from being active simultaneously) we still want to define
them at daemon startup, so the user has a fighting chance of correcting
the XML error.

Add an extra flag to SetBridge to avoid reporting an error if there is
a bridge collision, and use this when loading network configs at startup.

This regressed via commit 4c3f3b4d.
2009-05-29 14:18:57 +00:00
545c815c4c networkDestroy: Report error if network is inactive
This follows the same convention as domain drivers.
2009-05-29 14:14:32 +00:00
34497fdb37 qemu_driver: Fix another domain startup error reporting race.
Parse the command line output a bit earlier so we have a better chance
of reporting the full error output on failure.

I hit this when QEMU would try to boot an invalid kernel (virtinst bug).
2009-05-29 14:12:50 +00:00
4ff19ced3a qemuDomainLookupByUUID: print correct UUID string on failed lookup.
Currently we print the raw UUID which isn't very useful in ascii format.
2009-05-29 14:01:55 +00:00
58c73c1789 virsh: Use consistent spacing for net-list
There is different spacing when listing active vs. inactive networks. Ex:

Name                 State      Autostart
-----------------------------------------
default              active     yes
xxxxxx               inactive no
2009-05-29 14:00:41 +00:00
525c3d40a9 PPC Qemu Machine Type update
* src/qemu_conf.c docs/schemas/domain.rng
  tests/capabilityschemadata/caps-qemu-kvm.xml: PPC Qemu Machine Type
  changed from g3bw to g3beige some time ago, patch by Thomas Baker
Daniel
2009-05-29 13:32:06 +00:00
8c13e4fef0 Fix missing break in network parsing code 2009-05-29 13:26:45 +00:00
110c64209c fix storage volume inconsistencies in schema and doc
* docs/schemas/storagevol.rng docs/formatstorage.html[.in]
  tests/storagevolschemadata/vol-qcow2.xml: fix storage volume
  inconsistencies in schema and document, patch by Ryota Ozaki
daniel
2009-05-29 12:27:45 +00:00
a35f6aee6a * po/*: update of many localizations, regenerate the po
Daniel
2009-05-29 12:08:49 +00:00
c31300e69f Fix misc bugs in ARGV -> XML convertor 2009-05-28 13:21:19 +00:00
2afc3bfd8b Avoid broken networking with new QEMU/KVM >= 86 2009-05-28 13:15:57 +00:00
ee8553e156 Fix misc syntax problems with open nebula driver 2009-05-28 13:11:22 +00:00
dcd9865385 Include function/line nr at all logging levels 2009-05-28 12:54:07 +00:00
7c99cb93c5 Fix python domain events example & binding 2009-05-28 11:02:11 +00:00
fb828ed21d Fix error location logging 2009-05-27 12:10:47 +00:00
ad8a5e5daa Cleanup ocaml intermediate binaries 2009-05-27 12:07:43 +00:00
b811851b8d Include the OpenNebula driver
* src/opennebula/one_conf.[ch] src/opennebula/one_driver.[ch]:
  the OpenNebula driver
* configure.in include/libvirt/virterror.h qemud/Makefile.am
  qemud/qemud.c src/Makefile.am src/domain_conf.[ch] src/driver.h
  src/libvirt.c src/virterror.c: integration of the OpenNebula
  driver in the libvirt infrastructure
* AUTHORS: add Abel Miguez Rodriguez
daniel
2009-05-25 11:56:00 +00:00
a76e46044d Fix the example code for event handling in C
* examples/domain-events/events-c/event-test.c: fixed the example
  code for event handling, patch by Pritesh Kothari
daniel
2009-05-25 09:44:10 +00:00
107a7bd06b Test case for QEMU driver ARGV -> XML conversion 2009-05-21 14:22:51 +00:00
595ade9f41 Add docs on domain XML conversion usage for QEMU/Xen drivers 2009-05-21 14:20:21 +00:00
3d4a0ccbc6 QEMU domain XML conversion from QEMU argv 2009-05-21 14:16:55 +00:00
7828b5ccb0 Fix typo s/ES97/AC97/ 2009-05-21 14:16:06 +00:00
d8dbd61107 Basic domain XML conversions for Xen/QEMU drivers 2009-05-21 14:14:01 +00:00
60d4777190 Remote protocol support for domain XML conversion APIs 2009-05-21 13:50:56 +00:00
4d5383fd36 public API for domain XML conversions 2009-05-21 13:46:35 +00:00
c9e6c8c02f Add virInterface APIs to python code generator 2009-05-21 10:57:05 +00:00
8d96348704 * docs/formatstorage.html[.in]: fix a error in format type example
pointed out by Ryota Ozaki
Daniel
2009-05-21 08:03:13 +00:00
73bc011483 Add the Interface config APIs
* configure.in include/libvirt/libvirt.h[.in]
  include/libvirt/virterror.h qemud/remote.c
  qemud/remote_dispatch_args.h qemud/remote_dispatch_prototypes.h
  qemud/remote_dispatch_ret.h qemud/remote_dispatch_table.h
  qemud/remote_protocol.[chx] src/Makefile.am src/datatypes.c
  src/datatypes.h src/driver.h src/libvirt.c src/remote_internal.c
  src/virterror.c src/libvirt_private.syms src/libvirt_public.syms:
  Add the Interface config APIs and remote stubs for those, patch
  by Laine Stump
* AUTHORS: add Laine
daniel
2009-05-20 14:26:49 +00:00
e8da987570 cleanup of some direct stderr logging
* qemud/qemud.c src/console.c src/network_driver.c
  src/node_device_conf.c src/node_device_hal.c src/storage_conf.c
  src/util.c: cleanup of some direct stderr logging
daniel
2009-05-20 13:37:30 +00:00
d879d360eb * src/pci.c: small portability patch
daniel
2009-05-20 13:34:15 +00:00
6a140adb78 * src/lxc_driver.c: fix a couple of error code, patch by Amy Griffis
daniel
2009-05-20 07:12:00 +00:00
2d1de285b3 VolumeCreateXMLFrom FS storage backend implementation.
Add an extra 'inputvol' parameter to the file volume building routines. This
allows us to easily reuse the duplicate functionality.
2009-05-19 13:43:48 +00:00
4aa0959d60 Storage driver implementation for CreateXMLFrom
There is some funkiness here, since we are either dealing with 2 different
pools (which means validation x 2) or the same pool, where we have to be
careful not to deadlock.
2009-05-19 13:37:51 +00:00
5f99a7fd23 Fix node device media insert/eject detection.
We were correctly registering a callback , but weren't telling hal to
actually notify us of any property changes.
2009-05-19 13:35:57 +00:00
6244c173ba Fix a possible deadlock in HAL nodedev driver.
The cap_lost and prop_modified callbacks could deadlock if an existing
device needed to be refreshed, since dev_create expects the driver to
be unlocked.
2009-05-19 13:26:14 +00:00
b8893d0277 Fix rpm build: add 'mylibtool' to EXTRADIST. 2009-05-19 13:23:07 +00:00
f7ea2b5d7f Generate some config files at build time, not install time.
Generating at install time breaks 'make && sudo make install' if root
can't access the users home directory (NFS w/o no_root_squash for example).
2009-05-19 13:22:00 +00:00
b509716b33 Add documentation for <sound> device XML format. 2009-05-19 13:18:00 +00:00
adf4384501 Use virAsprintf, rather than VIR_ALLOC + strcpy + strcat 2009-05-19 13:15:50 +00:00
bb175dfc53 Don't validate disk type in virsh attach-disk
Let the underlying driver tell us what it supports. At the moment
we are at least erroneously denying floppy eject/insert.
2009-05-19 13:04:46 +00:00
5b13f4375d Better error reporting if 'import libvirtmod' fails
Don't squash a possibly legitimate libvirtmod error (e.g. some from
clashing libvirt.so versions) with 'Cannot import cygvirtmod'
2009-05-19 13:03:03 +00:00
de658ab4e4 Fix misc locking bugs identified by lock checker 2009-05-19 11:06:25 +00:00
6962a2dd7e Added an optional OCaml+CIL test program for mutex lock validation 2009-05-19 10:17:17 +00:00
3ce55d22e4 Declare support for QEMU migration in capabilities 2009-05-18 15:10:51 +00:00
67cc35ade9 Finish hostonly networks support in vbox
* src/vbox/vbox_driver.c src/vbox/vbox_tmpl.c: last patch for
  hostonly networks support in vbox driver, patch by Pritesh Kothari
daniel
2009-05-15 14:00:50 +00:00
37623bf49a * src/vbox/vbox_tmpl.c: implement vbox vrdp/sdl/gui support,
patches by Pritesh Kothari
daniel
2009-05-15 13:45:40 +00:00
cd223d93da generic support for RDP and desktop graphic extensions
* docs/schemas/domain.rng src/domain_conf.[ch] src/qemu_driver.c:
  extend the generic code for the RDP and desktop extensions of
  the graphic tag needed for vbox, patch by Pritesh Kothari
Daniel
2009-05-15 09:43:51 +00:00
fa1ceca232 * src/xend_internal.c: remove [] around cpumaps for recent xend
patch by Tatsuro Enokura
daniel
2009-05-14 10:31:11 +00:00
ee0d7552e2 Fix a few 'used uninitialized' warnings. 2009-05-13 17:43:47 +00:00
7afe94e7e2 * src/buf.c: avoid an XML attribute escaping bug #499791
daniel
2009-05-13 16:19:59 +00:00
0d11a25e6d Replace sys/capability.h with linux/capability.h 2009-05-13 11:37:16 +00:00
af8600678d Update POTFILES, and s/write/safewrite/ to appease 'make syntax-check' 2009-05-12 20:44:29 +00:00
be9e5185b4 Break out FS volume build routines to their own functions.
Improves readability, particularly wrt the pending CreateFromXML changes.
This will also help implementing File->Block volume creation in the future,
since some of this code will need to be moved to a backend agnostic file.
2009-05-12 20:27:17 +00:00
6852c88fc7 Virsh commands vol-clone and vol-create-from
vol-clone is a convenience function, requiring only a volume to clone and a
new name.

vol-create-from is a direct mapping to the public API, which allows cloning
across pools, converting between formats, etc, but requires an xml file to be
passed
2009-05-12 20:17:21 +00:00
3804161eb6 Test driver implementation of virStorageVolCreateXMLFrom 2009-05-12 20:15:56 +00:00
885de7f8cf Remote driver plumbing for virStorageVolCreateXMLFrom 2009-05-12 20:13:52 +00:00
5b31c7d08a Add public API stubs for virStorageVolCreateXMLFrom
Also checkin regenerated docs due to API change.
2009-05-12 20:10:50 +00:00
52c5f7adc8 Fix error squashing when refreshing file volumes 2009-05-12 19:59:46 +00:00
37ede4d5f5 Add test case for exercising the event loop 2009-05-12 16:45:14 +00:00
470317f5c7 Fix watch/timer event deletion 2009-05-12 16:43:04 +00:00
0a31be6ba2 Fix interrupting of main event thread & protect against accidental uniniitalized variables 2009-05-12 16:41:49 +00:00
72dc6d60ab Remove use of qemudSetNonBlock/SetCloseExec in favour of shared impl 2009-05-12 15:43:07 +00:00
b8761bb215 Add libtool wrapper to allow quiet build with "make -s" 2009-05-12 15:40:03 +00:00
1a60d6bcd6 Improve driver open URI handling 2009-05-12 15:35:18 +00:00
e978774ec6 * src/network_driver.c: enable bridges which are not up
without an IP address, patch by Ludwig Nussel
Daniel
2009-05-12 15:31:22 +00:00
6582d5872d Make hash destructors call internal unref methods to free objects 2009-05-11 15:27:37 +00:00
65ecb4b434 Fix unused variable warning in LXC driver 2009-05-11 15:26:23 +00:00
426f9772b8 Fix QEMU ARGV detection with kvm >= 85 2009-05-11 15:14:24 +00:00
9927ca6274 Report detailed error if initial connection open attempt fails 2009-05-11 14:55:52 +00:00
9959a1dd9d drop CAP_SYS_BOOT capability from LXC containers
* src/lxc_container.c: drop LXC CAP_SYS_BOOT capability to avoid
  reboot from inside containers, patch by Ryota Ozaki
Daniel
2009-05-11 14:05:27 +00:00
0c8a9d2d51 Check that QEMU is still alive while reading startup output.
By checking the pid every retry period, we can quickly determine if
the process crashed at startup, rather than make the user wait for
the entire timeout (3 seconds).
2009-05-11 13:52:31 +00:00
a331653dad Add pidfile argument to __virExec
virExec will write out the pid of the daemonized process only. Use this
in the QEMU driver, rather than QEMU's pidfile, so we can catch errors we
might miss if the emulator bails early.
2009-05-11 13:50:38 +00:00
27d72bd517 Report qemu log data if we fail to daemonize the process.
This ensures the user will actually see 'hook' function error output.
2009-05-11 13:37:19 +00:00
79d9d2432f Add helper function virExecDaemonize
Wraps __virExec with the VIR_EXEC_DAEMON flag. Waits on the intermediate
process to ensure we don't end up with any zombies, and differentiates between
original process errors and intermediate process errors.
2009-05-11 13:34:37 +00:00
2e878906e4 "Host only" and "Internal" network support for vbox
* src/vbox/vbox_tmpl.c: "Host only" and "Internal" network support
  for vbox, patch by Pritesh Kothari
daniel
2009-05-11 09:56:04 +00:00
070c1c82b0 Support for 'internal' network
* src/domain_conf.[ch] docs/schemas/domain.rng: add support
  for internal network in the generic part of the code, and
  update the Relax-NG grammar accordingly, patch by Pritesh Kothari
daniel
2009-05-11 09:50:27 +00:00
b81c7c0892 Create cgroups mode 755, not 655 (Ryota Ozaki) 2009-05-08 10:24:11 +00:00
328eac61cd Fix /dev/ population to use char devices (Ryota Ozaki) 2009-05-08 10:22:46 +00:00
6059354da6 return VIR_DRV_OPEN_DECLINED instead of VIR_DRV_OPEN_ERROR when vbox can't be
found so other hypervisors can be probed. Patch by Pritesh Kothari.
2009-05-08 10:18:26 +00:00
67e2804ecb fix crash when init fails early (i.e. due to vbox not being installed) 2009-05-08 10:14:30 +00:00
54ebbde1e1 Improve name & UUID uniqueness checking in QEMU driver 2009-05-08 10:11:14 +00:00
88e22e4e8c Enable save/restore/migrate for QEMU >= 0.10.0 2009-05-08 10:07:15 +00:00
0fb9066aaf Log dlopen() errors more verbosely 2009-05-08 10:05:56 +00:00
7022759b7e Add new VIR_ERR_OPERATION_INVALID error code & use it in Xen & QEMU drivers 2009-05-08 09:58:46 +00:00
2a1c7b57ff Improve init.d file headers
* qemud/libvirtd.init.in: improve the LSB init header for the
  init.d file, patch by Frederik Himpe
Daniel
2009-05-07 07:34:05 +00:00
1dfc35677e check for NULL pointers in pidfile functions 2009-05-07 07:29:51 +00:00
7ee54d8356 Changes needed for multiple graphics adapters
* src/domain_conf.c src/domain_conf.h: parse and save multiple
  graphics elements instead of one, patch by Pritesh Kothari
* src/qemu_conf.c src/qemu_driver.c: adapt the qemu/kvm driver for
  the new structures, patch by Pritesh Kothari
* src/xend_internal.c src/xm_internal.c: same thing for Xen drivers
Daniel
2009-05-07 07:27:49 +00:00
9f9ce6130d don't crash when called without arguments 2009-05-07 07:17:25 +00:00
1d6c713b18 Fix qemu driver's interpretation of <hostdev managed='yes'/>
This change:

  Tue Mar  3 08:55:13 GMT 2009 Daniel P. Berrange <berrange@redhat.com>

       Don't try to detach & reset PCI devices while running test
       suite for XML-> ARGV conversion.
       * src/qemu_driver.c: Add qemuPrepareHostDevices() helper to
       detach and reset PCI devices.
       * src/qemu_conf.c: Don't detach & reset PCI devices while
       building the command line argv

accidentally did this:

-            if (hostdev->managed) {
+        if (!hostdev->managed) {

Which results in managed='yes' not causing the device to be
detached when the guest is starting.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-05-06 15:56:20 +00:00
4f10759024 Refresh QEMU driver capabilities for each getCapabilities call.
Also fix up a couple issues where caps are accessed without locking
the driver structure.
2009-05-06 14:20:34 +00:00
5432ec8ded VirtualBox version improvement and cleanups
* src/vbox/vbox_driver.c src/vbox/vbox_tmpl.c: changes in
  VirtualBox driver version detection and move informations
  from a global variable into a driver structure, patch by Pritesh
  Kothari.
Daniel
2009-05-06 13:51:19 +00:00
81748c62c7 * libvirt.spec.in: add a couple of missing directories
Daniel
2009-05-06 13:27:54 +00:00
9ccdbb5d61 * src/vbox/vbox_XPCOMCGlue.[ch]: improve VirtualBox path detection
patch by Pritesh Kothari
Daniel
2009-05-06 13:23:44 +00:00
840955ff7c Don't throw away StartVM errors when migrating/restoring in qemu driver. 2009-05-05 14:26:02 +00:00
03f3736511 Small cleanups in test driver VolCreateXML 2009-05-05 14:19:59 +00:00
2a9ca74164 Remove some debug code from storage_driver.c 2009-05-05 14:18:51 +00:00
48e9d6862a Use proper error code in virStorageVolCreateXML 2009-05-05 14:17:50 +00:00
3f24e6c21c Fix a comment typo in storage_backend_fs.c 2009-05-04 15:44:44 +00:00
5314dffc85 virExec: Delay daemonizing as long as possible.
This way the caller can catch more errors (e.g. from a hook callback) from
the intermediate process.
2009-05-04 15:43:25 +00:00
a4d0a3fd50 Add some documentation to __virExec and virExec 2009-05-04 15:41:46 +00:00
aaabde58cb Remove trailing whitespace from m4 file 2009-04-30 13:30:51 +00:00
cb4a6614fa Fix check for -Wformat-security which depends on -Wformat 2009-04-28 10:55:45 +00:00
9cae1d5ed6 release of 0.6.3
* NEWS configure.in libvirt.spec.in docs/*: release of 0.6.3
* po/*: regenerated
* src/libvirt.c src/virterror.c: fixed some function comments
Daniel
2009-04-24 14:04:54 +00:00
62aa1b56d6 Add virNodeDeviceCreateXML / virNodeDeviceDestroy boilerplate public API and remote protocol impl 2009-04-24 13:11:23 +00:00
1aac8114ae Fix Xen dlopen module missing export 2009-04-24 12:19:00 +00:00
1fbee8dadf Fix XM driver VIF config creation 2009-04-24 12:17:50 +00:00
741fecedaa Update of localizations and XML descriptions
* po/*: updated a could of locale, regenerated
* docs/libvirt-api.xml docs/libvirt-refs.xml: regenerated too
daniel
2009-04-24 10:09:24 +00:00
d83ded2dba Avoid compile warnings about assignment/conditional/truthvalue 2009-04-22 14:28:25 +00:00
220bcb0535 Use a private /dev/pts instance in containers if kernel is new enough 2009-04-22 14:26:50 +00:00
9c19a898f9 Remove stale QEMU pidfiles 2009-04-21 19:14:50 +00:00
7a367cca30 Ensure VirtualBox domain IDs start from 1 instead of 0 2009-04-21 19:13:23 +00:00
4c3f3b4d46 * src/network_conf.c src/network_conf.h: add dynamic bridge names
support, patch by Soren Hansen
* AUTHORS: add Soren
daniel
2009-04-21 19:00:06 +00:00
ec4e379125 * src/xend_internal.c: let xend try vcpu pinning operation even
if the domain is not running, patch by Takahashi Tomohiro
daniel
2009-04-21 15:10:23 +00:00
5237c2b847 * docs/drvvbox.html[.in]: tiny fixes to VirtualBox docs
Daniel
2009-04-21 13:39:40 +00:00
b4ee10dfde VirtualBox Documentation
* docs/drvvbox.html.in docs/hvsupport.html.in docs/drivers.html.in
  docs/sitemap.html.in docs/*.html: VirtualBox Documentation by
  Pritesh Kothari
Daniel
2009-04-21 12:24:14 +00:00
bfc48afa14 cope with kernels where CLONE_NEWUSER is not supported
* src/lxc_container.c src/lxc_container.h: cope with kernels
  where CLONE_NEWUSER is not supported, patch by Serge Hallyn
daniel
2009-04-20 12:27:12 +00:00
a4b1c0977a Fix typo in manpage
It's "service libvirtd start", not "service start libvirtd".

Reported-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-04-20 11:55:53 +00:00
55671efe80 * po/*: merge in a lot of localization updates and regenerate
daniel
2009-04-20 09:25:44 +00:00
943a2f2b60 * src/bridge.c: fix a compilation breakage raised by Anton Protopopov
daniel
2009-04-20 09:18:26 +00:00
fd9a55254f Added new virt-xml-validate tool to mingw specfile 2009-04-19 16:47:43 +00:00
969209ce07 Disable vbox driver for mingw32 builds 2009-04-19 16:37:15 +00:00
89626e8d69 Add another vbox file to EXTRA_DIST 2009-04-19 16:36:22 +00:00
ac6797b28c Add missing break in error code 2009-04-19 15:49:00 +00:00
cfa30de3b8 Improve error reporting for lookup failures on inactive domains 2009-04-19 15:30:50 +00:00
c881b32215 Fix 2 domain ID handling bugs in remote driver 2009-04-19 15:21:54 +00:00
cb43623acd Switch over todo domain lookup based on UUID in virDomainAssignDef 2009-04-19 15:16:43 +00:00
8372a8c127 Regenerate API docs to pull in vbox driver error codes 2009-04-19 15:14:44 +00:00
26eb2feedd Add tools/ directory (missed from previous commit) 2009-04-19 15:12:33 +00:00
001390a684 Add 2 missing vbox files to EXTRA_DIST 2009-04-19 15:12:01 +00:00
fa4126087b Add tool for validating XML & fix misc bugs in virsh POD docs 2009-04-19 15:10:45 +00:00
9a15c48d2d Switch to using virDomainDefPtr for building command line in QEMU driver 2009-04-19 14:50:01 +00:00
2cd9b2d8ee drop the pool lock when allocating fs volumes
* src/libvirt_private.syms src/storage_backend.h
  src/storage_backend_fs.c src/storage_conf.h src/storage_driver.c:
  drop the pool lock when allocating fs volumes, patch by Cole Robinson
daniel
2009-04-17 19:12:37 +00:00
10d1650843 integration of the VirtualBox support
* configure.in include/libvirt/virterror.h src/Makefile.am
  src/domain_conf.[ch] src/driver.h src/virterror.c src/vbox/README
  src/vbox/vbox_CAPI_v2_2.h src/vbox/vbox_V2_2.c
  src/vbox/vbox_XPCOMCGlue.[ch] src/vbox/vbox_driver.[ch]
  src/vbox/vbox_tmpl.c: integration of the VirtualBox support
  patches by Pritesh Kothari
Daniel
2009-04-17 16:09:07 +00:00
81e6a22192 Small doc fixes
* src/libvirt.c: fix the doc of virNodeGetFreeMemory to say bytes
* docs/drvlxc.html.in docs/drvlxc.html: fix command used in examples
daniel
2009-04-17 15:34:53 +00:00
d24f6aabbb fix "make syntax-check" 2009-04-17 08:21:40 +00:00
5caa1e0eb0 Don't log monitor output to domain log file.
It's logged via the logging system already. Prefix monitor debug output with vm
name.
2009-04-16 15:56:27 +00:00
a6c612a4ad don't hardcode buffer for getgrnam_r to 1024 bytes and increase it on ERANGE. 2009-04-16 14:53:19 +00:00
9fa79000ec qemu -drive takes format= not fmt=
Seems like a simple typo - it has been "format=" since the flag
was introduced, but we added it as "fmt=".

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-04-16 14:21:35 +00:00
169afbe9aa Fix lxc syntax-check failure
Fixes:

 CHECK: avoid_if_before_free
 src/lxc_container.c: if (oldroot) VIR_FREE(oldroot)
 src/lxc_container.c: if (newroot) VIR_FREE(newroot)
 Makefile.maint: found useless "if" before "free" above

and:

 src/lxc_container.c:317:
 Makefile.maint: found trailing blank(s)

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-04-16 13:08:03 +00:00
316befbb0c Api documentation
* docs/Makefile.am docs/api.html docs/api.html.in docs/archdomain.html
 docs/archnetwork.html docs/archnode.html docs/archstorage.html
 docs/goals.html docs/intro.html
 docs/libvirt-daemon-arch.fig docs/libvirt-daemon-arch.png
 docs/libvirt-driver-arch.fig docs/libvirt-driver-arch.png
 docs/libvirt-object-model.fig docs/libvirt-object-model.png
 docs/page.xsl docs/sitemap.html docs/sitemap.html.in:
 adding a new api page, extending the stylesheet to allow references
 and including images from Dan Berrange
daniel
2009-04-15 20:42:50 +00:00
f61208bde9 * src/virsh.c: fix for virsh ttyconsole return value bug #495954
daniel
2009-04-15 20:09:09 +00:00
1951b95cb2 Adding Serge E. Hallyn to the authors list, Daniel 2009-04-15 20:04:22 +00:00
a28a644680 * drvlxc.html.in drvlxc.html: some examples from Serge Hallyn
daniel
2009-04-15 20:00:29 +00:00
14687aad81 * src/xm_internal.c: fix a crash on vcpupin to inactive Xen domains,
as raised by Takahashi Tomohiro
daniel
2009-04-15 09:53:34 +00:00
cab9eed62e * src/lxc_driver.c: adds the getHostname method to the lxc driver
patch by Dan Smith
daniel
2009-04-15 09:34:56 +00:00
06e43a8f2c Commit patches by Serge Hallyn from 6-Apr and 7-Apr 2009-04-14 17:51:12 +00:00
4fb341d741 * libvirt.spec.in: fix build on RHEL and Centos 5.x
daniel
2009-04-14 12:47:34 +00:00
b2df3510b7 * src/storage_backend_scsi.[ch]: add SCSI storage rescan support,
patch by David Allan
daniel
2009-04-07 12:50:17 +00:00
8536e697b6 release of 0.6.2
* configure.in libvirt.spec.in NEWS docs/*: release of 0.6.2
* po/*: Gujarati and Polish updates, rebuild
* AUTHORS: add one missing
Daniel
2009-04-03 15:25:38 +00:00
6d910c9fd4 Don't lose file format info on volume refresh. 2009-04-03 14:17:57 +00:00
766b2250e1 Refresh volume alloc/capacity when dumping XML. 2009-04-03 14:15:30 +00:00
a843f44c51 Fix test driver domain restore return value. 2009-04-03 14:14:05 +00:00
e807e4d9e9 Fix sparse volume allocation reporting. 2009-04-03 14:13:02 +00:00
9ec1a56923 Fix crash in svirt verification, and incorrect cleanup in VM failure paths 2009-04-03 14:10:17 +00:00
f0817018b1 Allow autoconnect to virsh console in create/start. Refuse to connect to remote consoles 2009-04-03 14:03:38 +00:00
92ff72b52c Misc NUMA related fixes 2009-04-03 12:45:05 +00:00
e4073623a6 Support PCI passthrough for Xen 2009-04-03 12:38:52 +00:00
11b0ed46c5 Improve security label error reporting & verification (Dan Walsh) 2009-04-03 10:55:51 +00:00
d9ec9c6937 Fix mingw32 portability 2009-04-02 18:42:33 +00:00
0722925986 * docs/schemas/domain.rng: some missing disk bus values and cleanups
daniel
2009-04-02 13:19:11 +00:00
89dd05cc6f * docs/*: start cleanup/revamp of architecture docs
daniel
2009-04-02 12:01:11 +00:00
8b8f4c5cbc * po/*: updated brazilian, spanish, polish and simplified chinese translations
and regenerated
Daniel
2009-04-02 09:56:17 +00:00
55ae53d971 SCSI HBA storage pool implementation (Dave Allan) 2009-04-01 16:03:22 +00:00
ecedb9cef3 Make SASL check also look for libsasl.so if libsasl2.so is missing 2009-04-01 10:40:38 +00:00
10467f1c5b Fix crash after calling virConnectClose 2009-04-01 10:39:12 +00:00
61243e0f57 Fix generation of networkCreateXML and storagePoolCreateXML 2009-04-01 10:37:57 +00:00
b02c0455d1 Fix localtime handling for newer XenD 2009-04-01 10:36:52 +00:00
e4c65831e3 Misc fixes uncovered by OOM testing 2009-04-01 10:31:01 +00:00
dab6391f2d Sanitize symlink resolution 2009-04-01 10:26:22 +00:00
9a47149559 Fix misc memory handling bugs 2009-04-01 10:21:34 +00:00
83a618f807 Add support for vifname= in XM config files 2009-04-01 10:16:05 +00:00
3ad8a273b5 Improve error reporting in Xen driver SEXPR generation 2009-04-01 10:01:23 +00:00
b2f5ba21b8 Fix error message in node device lookup 2009-04-01 09:55:32 +00:00
461afc2200 Fix URI check in QEMU migration 2009-04-01 09:54:20 +00:00
45707d5631 Add treeview to node device listing in virsh 2009-04-01 09:52:59 +00:00
4d3d0039e5 Convert all drivers to use old-style struct initializers; this makes a handy
built-in TODO list for each driver.  Also rip out the internal getURI method;
it is never used by any of the drivers, and was buggy to boot.
2009-03-31 15:47:16 +00:00
c61180dcd7 * libvirt.spec.in: better modularization of the spec file,
patch by Ryota Ozaki
daniel
2009-03-31 12:45:07 +00:00
b7071653fa * src/util.c: fix virRun() to prevent zombies on pipe errors,
patch by Ryota Ozaki
daniel
2009-03-31 12:26:54 +00:00
3b97f7db53 DOn't try to query memory balloon if guest isn't active 2009-03-27 14:57:51 +00:00
cb7593bd19 Support memory ballooning in QEMU 2009-03-27 11:44:29 +00:00
97230f6a35 Default to native arch, and check domain type when auto-filling guest arch (Soren Hansen) 2009-03-24 11:16:29 +00:00
667f669fdc Include 'CHECK: ' prefix when printing name of each syntax-check rule that is run 2009-03-24 11:00:21 +00:00
60623a7ce0 Add support for a non-template filesystem root. (Florian Vichot) 2009-03-24 10:59:13 +00:00
aac6018a35 fix missing authentication on virsh shell commands
* src/virsh.c: fix missing authentication when command are issued
  from the shell, patch by Matthias Bolte
Daniel
2009-03-23 16:36:32 +00:00
de4950b200 * src/util.c: flag unused parameters, by Maximilian Wilhelm
daniel
2009-03-20 20:46:07 +00:00
c29d092905 use posix_fallocate() to allocate diskspace faster
* src/libvirt_private.syms src/storage_backend_fs.c src/util.c
  src/util.h: use posix_fallocate() on supported systems to
  allocate diskspace faster, patches by Amit Shah
Daniel
2009-03-20 12:17:56 +00:00
92d313ebe6 Fix test breakage on x86_64 from previous change 2009-03-20 11:44:17 +00:00
b75a469852 More flexible setup of QEMU capabilities/emulators 2009-03-20 11:20:26 +00:00
0ad4ece725 * docs/schemas/domain.rng: extend definition for security attributes
daniel
2009-03-19 14:26:51 +00:00
c86afc85ee Fix labelling of shared/readonly devices (Dan Walsh) 2009-03-17 11:35:40 +00:00
df59fdce06 * src/remote_internal.c: remove file descriptors leak
daniel
2009-03-17 11:00:56 +00:00
b68a19be0f Don't allow readonly connections to dump secure xml. 2009-03-16 17:21:12 +00:00
2068f2f5a3 Initialize security driver after config parsing 2009-03-16 17:16:04 +00:00
d2c77e06c7 Fix test driver 'save' deadlock 2009-03-16 17:14:34 +00:00
b44af714d3 Support SASL auth for VNC server. 2009-03-16 13:54:26 +00:00
8fa62166c4 Avoid deadlock setting vcpus in QEMU driver 2009-03-16 11:44:46 +00:00
35625e5aa8 Fix subsystem lookup for older HAL releases 2009-03-16 10:56:01 +00:00
2dedb34a91 Added ac97 soundcard to RNG schema & tests (Pritesh Kothari) 2009-03-16 10:47:12 +00:00
aa08419ca8 Avoid some potential FILE * leaks
* qemud/qemud.c src/cgroup.c src/uml_driver.c src/util.c: close
  some potential FILE * leaks
Daniel
2009-03-16 10:41:37 +00:00
29ed758ae0 Fix dispatch of FD events when one or more handles are marked deleted 2009-03-16 10:35:21 +00:00
24a149cfa2 Fix handling of cpumaps arg to virDomainGetVcpus RPC dispatcher 2009-03-16 10:33:01 +00:00
2567fac4a7 Don't free storage volume in cleanup path, since it may still be referenced 2009-03-16 10:31:38 +00:00
aad6873175 Don't try to close NULL virConnectPtr object 2009-03-16 10:30:04 +00:00
a3262d812b * src/storage_conf.c: fix storage pool mode parsing, and refactoring
patch by Ryota Ozaki
Daniel
2009-03-12 20:15:32 +00:00
bdd6894713 * src/xs_internal.c: fix xen events handling problem (Dan Berrange)
Daniel
2009-03-11 13:43:24 +00:00
27a63a76af * src/xend_internal.c: fix an allocation problem in xenDaemonDomainLookupByName_ids
Daniel
2009-03-10 11:13:32 +00:00
4dfb7e8b2e Fix Xen block detach with newer Xend (Cole RobinSon / Tomohiro Takahashi) 2009-03-10 10:32:24 +00:00
7f39e2e5e5 * src/cgroup.c src/cgroup.h src/lxc_driver.c: allows to get
CPU usage of a lxc using cpuacct subsystem of cgroups, patch
  by Ryota Ozaki
Daniel
2009-03-06 14:44:04 +00:00
e43d1ae0c6 * NEWS configure.in libvirt.spec.in doc/* include/libvirt/libvirt.h:
release of 0.6.1
* po/*: rebuilt
* AUTHORS: updated to list new contributors
Daniel
2009-03-04 13:17:44 +00:00
4ebe4c108d Fix misc failures in test suite & make test cases more robust to future changes 2009-03-04 13:04:06 +00:00
b9739b4709 Add missing locking calls in remote driver 2009-03-03 19:33:34 +00:00
3aed672836 Use lseek+saferead/write for pci.c & dont link to qemu driver for nodedevxml2xmltest 2009-03-03 17:00:18 +00:00
61796bdb4b Explicitly track static declared vs dynamically generated security labels 2009-03-03 16:53:13 +00:00
e4818895c1 Misc sVirt bug fixes 2009-03-03 15:18:24 +00:00
efa5832b0a config: fix a typo
* src/qemu_conf.c (CHECK_TYPE): Fix typo:
s/security_river/security_driver/
2009-03-03 15:12:30 +00:00
d15b1a93fc * po/*: update italian, polish and brazilian translations, regenerate
daniel
2009-03-03 14:36:28 +00:00
d0aa10fdd6 QEMU security driver usage for sVirt support (James Morris, Dan Walsh, Daniel Berrange) 2009-03-03 12:03:44 +00:00
b756b005ec Replace use of qemudLog with logging.h APIs/macros 2009-03-03 11:40:08 +00:00
10e3148f0a avoid file descriptor leak when fd == 0
* src/pci.c (pciGetDevice): Initialize dev->fd to -1, not 0.
(pciFreeDevice): Close fd also when it is 0.
2009-03-03 11:25:52 +00:00
8343dcb893 don't leak a file descriptor on failed pciGetDevice call
* src/pci.c (pciIterDevices): Always close dir handle.
2009-03-03 11:25:35 +00:00
260082321c update .gitignore and .hgignore files 2009-03-03 11:25:00 +00:00
41ed6eb327 SELinux security driver for sVirt support (James Morris, Dan Walsh & Daniel Berrange) 2009-03-03 10:06:49 +00:00
aa2c97263d virsh additions for sVirt support (James Morris & Dan Walsh) 2009-03-03 09:59:02 +00:00
8bd1604cb7 Core internal driver stub for sVirt support (Jams Morris & Dan Walsh) 2009-03-03 09:44:41 +00:00
a8cd24b346 Remote protocol / RPC API for sVirt support (James Morris & Dan Walsh) 2009-03-03 09:27:02 +00:00
8d13558ae6 Internal driver API for sVirt support (James Morris & Dan Walsh) 2009-03-03 09:14:28 +00:00
0b7860ecdd Public API for sVirt support (James Morris & Dan Walsh) 2009-03-03 09:09:00 +00:00
8f1912c58d Don't try to detach & reset PCI devices while running test suite for XML-> ARGV conversion. 2009-03-03 08:59:45 +00:00
1ca2bd7912 * qemud/qemud.c: fix qemu+tls handshake negotiation, patch by
Chris Lalancette
Daniel
2009-03-03 08:25:50 +00:00
1d1748b63e Ignore some generated autotools files in example app 2009-03-02 20:24:46 +00:00
72652e9dbb Always reset PCI devices 2009-03-02 20:22:35 +00:00
644b41a94d Export virUnrefConnect & virCapabilitiesGenerateMac to driver code 2009-03-02 20:19:13 +00:00
0c85c384fa tests: further isolate a test that runs libvirtd
* tests/daemon-conf: Specify a non-default socket directory.
Specify test-specific log directory and pid file, too.
2009-03-02 20:01:26 +00:00
d15549aee0 add two tests
* tests/libvirtd-pool: New file.
Exercise the new unix_sock_dir option
* tests/libvirtd-fail: New file.
* tests/Makefile.am (test_scripts): Add libvirtd-fail and libvirtd-pool.
2009-03-02 20:01:05 +00:00
0bfa7cbb29 tests: fix an error that made us skip the daemon-conf test
* tests/Makefile.am (CONFIG_HEADER): Correct definition.
2009-03-02 19:03:49 +00:00
7fad73685e tests: test for a recent fix
* tests/libvirtd-net-persist: New file.  Test for today's
"Mark 'defined' networks as persistent" fix.
* tests/Makefile.am (test_scripts): Add it.
2009-03-02 18:41:00 +00:00
9883bec50d virsh: tweak a format string to avoid emitting trailing space
* src/virsh.c (cmdNetworkList): Change format not to right-pad
with spaces, as that would have required a trailing blank in
an expected output file.
2009-03-02 18:39:36 +00:00
aedf57db70 Fix bridge generation loop counter (spotted by Jim Meyering) 2009-03-02 17:56:50 +00:00
f9cbf065ad Recognize ejectable media in hostdev hal driver. 2009-03-02 17:41:13 +00:00
4837725f37 Better error reporting from qemu AttachDevice 2009-03-02 17:39:43 +00:00
1f11e3bb61 Generate network bridge names if none passed at define/create time. 2009-03-02 17:37:03 +00:00
adecc8fc9e Remove redundant monitor watch variable (s/monitor_watch/monitorWatch/) 2009-03-02 17:33:39 +00:00
895247b76b Mark 'defined' networks as persistent. 2009-03-02 17:29:44 +00:00
09fb8845a7 adds a new <hostdev managed='(yes|no)'> property to host devices in domains
* docs/schemas/domain.rng src/domain_conf.c src/domain_conf.h
  src/qemu_conf.c
  tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.xml
  tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address.xml
  tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-product.xml:
  adds a new <hostdev managed='(yes|no)'> property
  to host devices indicating whether or not we should
  automatically dettach/reset, patch by Mark McLoughlin
daniel
2009-03-02 16:40:30 +00:00
34d23b0b01 * src/qemu_driver.c: add qemu dettach/reattach/reset implementation
patch by Mark McLoughlin.
Daniel
2009-03-02 16:32:52 +00:00
0231102863 Implement node attach/reattach/reset in the remote driver
* qemud/remote.c qemud/remote_dispatch_args.h
  qemud/remote_dispatch_prototypes.h qemud/remote_dispatch_table.h
  qemud/remote_protocol.c qemud/remote_protocol.h
  qemud/remote_protocol.x src/remote_internal.c: Implement
  attach/reattach/reset in the remote driver, patch by Mark
  McLoughlin.
Daniel
2009-03-02 16:30:59 +00:00
6427091ffe * src/virsh.c: add 3 new commands for node device detach, reattach and reset,
patch by Mark McLoughlin.
Daniel
2009-03-02 16:28:17 +00:00
737af2ea04 Adds the APIs for virNodeDeviceDettach , ReAttach and Reset
* include/libvirt/libvirt.h include/libvirt/libvirt.h.in
  src/driver.h src/libvirt.c src/libvirt_public.syms
  src/lxc_driver.c src/openvz_driver.c src/qemu_driver.c
  src/test.c src/uml_driver.c: add the public APIs for
  virNodeDeviceDettach virNodeDeviceReAttach and virNodeDeviceReset
  and extends the driver structure accordingly.
Daniel
2009-03-02 16:25:13 +00:00
d217641314 implements dettach, reattach and reset for PCI devices
* configure.in po/POTFILES.in src/Makefile.am src/libvirt_private.syms
  src/pci.c src/pci.h: Add implementations of dettach, reattach and
  reset for PCI devices, patch by Mark McLoughlin
Daniel
2009-03-02 16:18:11 +00:00
a3ce3b1c71 * qemud/qemud.c src/node_device_hal.c: activate DBus multithreading
to avoid random crashes in the daemon, patch by Daniel Berrange
Daniel
2009-03-02 11:13:37 +00:00
14dfe93965 correct a typo in a diagnostic
* src/storage_conf.c (virStorageVolDefParsePerms): Correct a typo:
s/owner/group/.  Patch by Ryota Ozaki.
2009-03-02 10:27:20 +00:00
0fe3340ed9 plug two config-parsing leaks
* src/storage_conf.c (virStoragePoolDefParsePerms): Free mode string.
(virStorageVolDefParsePerms): Likewise.
* AUTHORS: Update.
Patch by Ryota Ozaki.
2009-03-02 10:26:37 +00:00
07696eb347 don't dereference uninitialized pointer
* src/storage_conf.c (virStoragePoolDefParsePerms): Initialize
"ptr" to NULL.
2009-03-02 10:07:55 +00:00
014bb5cf7e If there is a failure during Qemu offline migrate, make sure to resume the
guest.

Signed-off-by: Chris Lalancette <clalance@redhat.com>
2009-02-27 16:18:50 +00:00
9bceeca83c * docs/libvirt-api.xml docs/libvirt-refs.xml
docs/devhelp/libvirt-virterror.html docs/html/libvirt-virterror.html:
  regenerated the APIs and documentation.
* po/*: updated the polish translation, regenerated.
daniel
2009-02-27 14:30:51 +00:00
2e187bcbca Add support for a exec callback in virExecWithHook 2009-02-26 16:27:51 +00:00
66780313c2 New example program
* Makefile.am configure.in examples/hellolibvirt/Makefile.am
  examples/hellolibvirt/hellolibvirt.c: new trivial example program
  by David Allan
Daniel
2009-02-26 16:14:50 +00:00
372d5b3088 * src/remote_internal.c: fix autostart of session daemon, patch
by Dan Berrange
Daniel
2009-02-26 15:06:06 +00:00
299aefebf2 * src/storage_backend_fs.c: fix compile-error when configured without qemu-img
daniel
2009-02-26 14:36:30 +00:00
a7868e0131 * python/Makefile.am: avoid a parallel make issue #472702
provided by Michael Marineau
Daniel
2009-02-26 13:58:35 +00:00
44811e8a2a documenting static host IP assignments
* docs/formatnetwork.html docs/formatnetwork.html.in: patch from
  Charles Duffy documenting static host IP assignments.
daniel
2009-02-25 20:02:14 +00:00
8e2b396a7f Add forgotten file 2009-02-24 15:53:31 +00:00
da61daa2e6 Add nodedevxml2xml test
Add a test to check node device XML parsing by first parsing
the XML, then re-formatting as XML and finally comparing the
resulting XML to the original XML.
2009-02-24 14:58:32 +00:00
c4c5e9dbbb Add virNodeDeviceDefParseString()
Add support for parsing node device XML descriptions.

This will be used by PCI passthrough related functions to
obtain the PCI device address for a given node device.
2009-02-24 14:55:45 +00:00
ee197521c5 Add virXPathULongLong()
Add a variant of virXPathULong() which can handle long longs.

Needed for parsing storage device capacities.
2009-02-24 14:54:30 +00:00
c56b4bcbf3 Add virXPathLongHex() and virXPathULongHex()
Add new functions to allow parsing integers with base 16

This will be used to e.g. parse PCI vendor IDs.
2009-02-24 14:53:30 +00:00
14480f699d Fix a typo in hostdev docs
It's:

 <address bus='0x06' slot='0x02' function='0x0'/>

not:

 <address>bus='0x06' slot='0x02' function='0x0'</address>
2009-02-24 14:52:33 +00:00
761f5a52dc networkEnableIpForwarding() now returns zero for success 2009-02-22 11:19:54 +00:00
6a4da4657b docs: commit auto-generated change
Commit auto-generated change as a result of earlier s/clock sync/clock offset/
2009-02-22 11:17:38 +00:00
4cbe86fcb8 (s)size_t type cleanup 2009-02-19 08:18:31 +00:00
7e8ad2036a Remove the _actually_ incorrect ATTRIBUTE_UNUSED (Patch by Maximilian Wilhelm) 2009-02-18 01:37:47 +00:00
f1b4ca52ff fix build failure due to invalid generated Makefile
* qemud/Makefile.am (libvirtd_LDADD): Unindent "if HAVE_*" directives.
Reported by Daniel Schwager.
2009-02-17 14:46:21 +00:00
125980cb76 Fix daemon TCP listen cleanup 2009-02-17 14:40:24 +00:00
cf47347312 Remove incorrect ATTRIBUTE_UNUSED usage. 2009-02-17 14:38:22 +00:00
73619269ae Build fix for 'driver.c' when building with loadable modules
The 'asprintf' -> 'virAsprintf' transition made in
[043d702f] "use virAsprintf instead of asprintf" introducted
a build error for 'driver.c' as 'util.h' has to be included.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>
2009-02-17 10:43:26 +00:00
81ba67b2b6 Avoid link failure when configured --with-driver-modules
* qemud/Makefile.am (WITH_DRIVER_MODULES): Link with libvirt_driver.la
and libvirt_util.la.  Indent for readability.
2009-02-17 10:34:30 +00:00
64b72210ad Work around 'virGetVersion' build problem
The 'getVer' fix introducted in d88d459d [Allow remote://hostname/
style URIs for automatic driver probe...] breaks compiling libvirt
with loadable module support.  Work around this to get it building again.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>
2009-02-17 10:33:41 +00:00
cedc15019e avoid compiler warning about unused parameter
* src/bridge.c (brProbeVnetHdr)
[IFF_VNET_HDR && TUNGETFEATURES && TUNGETIFF]: Use a "(void)" case
to mark the parameter as unused.  Reported by Maximilian Wilhelm in
http://thread.gmane.org/gmane.comp.emulators.libvirt/11918/focus=11917
2009-02-17 10:26:43 +00:00
6b4b4eb29c don't fail daemon-conf test when configured --without-qemu
* tests/Makefile.am (TESTS_ENVIRONMENT): Define CONFIG_HEADER.
* tests/daemon-conf: Use test-lib.sh.
Skip this test when configured --without-qemu.
2009-02-17 10:23:48 +00:00
bdd5094d8f accommodate configuring --without-lxc --without-qemu
* configure.in: Enable internal WITH_BRIDGE support not just for LXC or
QEMU, but also for --with-network.  Russell Haering reported that
compilation failed when configured with --without-lxc --without-qemu.
Details: http://thread.gmane.org/gmane.comp.emulators.libvirt/11928
* src/bridge.h: Use #if WITH_BRIDGE, rather than currently-equivalent
"#if defined(WITH_QEMU) || defined(WITH_LXC)"
2009-02-17 10:23:19 +00:00
a16ee2c83b doc: fix typo in formatdomain's clock offset specification
* docs/formatdomain.html.in: s/clock sync/clock offset/
Patch by Jesse Lauren Farinacci <jieryn@gmail.com>.
2009-02-17 10:19:40 +00:00
4dce547640 Fix I/O errors in libvirtd daemon, and hang/crash in remote client upon I/O error 2009-02-17 09:44:18 +00:00
3a53ab7913 Unbreak virsh *-edit commands: Don't pass unexpected flags to DumpXML 2009-02-16 22:51:31 +00:00
c482439232 Remove erroneous lvm volume format check for backing store. 2009-02-16 22:47:19 +00:00
a3d1fb9cf3 Fix building python bindings: Skip bindings for virSaveLastError and
virFreeError
2009-02-16 22:44:49 +00:00
0bb6f816e3 Add virFileWriteStr()
Re-factor the code from networkEnableIpForwarding() into a
utility function in preparation for code which writes to
sysfs files.
2009-02-13 19:13:06 +00:00
f6a5e8f785 Fix some error strings in xml.c
Just some copy-and-paste mixups.
2009-02-13 19:12:45 +00:00
c4602255c7 virXPathInt() and virXPathUInt() don't exist
It looks like these functions have never existed.
2009-02-13 19:12:20 +00:00
62e45f57b4 Fix bugzilla link in virsh man page
Note, I haven't generated a new virsh.1 because Pod::Man 2.16
gives a bunch of warnings even with the existing version.
2009-02-13 19:11:59 +00:00
6d69d5eac3 Fix libvirt_proxy.c warnings from gcc-4.4
libvirt_proxy.c: In function 'proxyReadClientSocket':
 libvirt_proxy.c:659: error: dereferencing pointer 'req' does break strict-aliasing rules
 libvirt_proxy.c:657: error: dereferencing pointer 'req' does break strict-aliasing rules
 libvirt_proxy.c:655: error: dereferencing pointer 'req' does break strict-aliasing rules
 ...
2009-02-13 19:11:37 +00:00
9fec27be49 Fix bridge.c warnings with gcc-4.4
bridge.c: In function 'brSetInetAddr':
 bridge.c:665: error: dereferencing pointer '({anonymous})' does break strict-aliasing rules
 bridge.c:665: note: initialized from here
 bridge.c:666: error: dereferencing pointer '({anonymous})' does break strict-aliasing rules
 bridge.c:666: note: initialized from here

Fix qemud.c warnings with gcc-4.4

 qemud.c: In function ‘remoteListenTCP’:
 qemud.c:675: error: dereferencing pointer ‘sa.72’ does break strict-aliasing rules
 qemud.c:675: note: initialized from here
 qemud.c:678: error: dereferencing pointer ‘sa.73’ does break strict-aliasing rules
 qemud.c:678: note: initialized from here
2009-02-13 19:10:55 +00:00
7d2b7ad520 Fix migrate for Xen 3.3 2009-02-13 18:23:23 +00:00
f98b9e05d8 test:///default driver: don't dereference NULL "def"
* src/test.c (testNetworkCreate, testNetworkDefine): Since "def" is
set to NULL immediately after any vir*AssignDef call (to indicate we
no longer own it and to ensure no clean-up path mistakenly frees it),
dereference via net->def->, not def->.
2009-02-13 18:11:03 +00:00
6efe591e66 usleep to wait for domain logfile to fill up 2009-02-13 11:35:16 +00:00
e9c920ba67 fix return status when domain didn't show up 2009-02-11 20:33:11 +00:00
98352a103b libvirtd: new config-file option: unix_sock_dir
Before this change, the unix socket directory was hard-coded
to be e.g., /var/run/libvirt for euid==0 and ~/.libvirt otherwise.
With this change, you may now specify that directory in libvirtd's
config file via a line like this: unix_sock_dir = "/var/run/libvirt".
This is essential for running tests that do not impinge on any
existing libvirtd process, and in running tests in parallel.
* qemud/libvirtd.conf (unix_sock_dir): Add comment and example.
* qemud/qemud.h (struct qemud_server) [logDir]: Change type
from char[PATH_MAX] to char*.
* qemud/qemud.c (unix_sock_dir): New global
(remoteReadConfigFile): Set the global.
(qemudInitPaths): Use the global, unix_sock_dir, if non-NULL.
One minor improvement: unlink both sockets or none, never
just one of them.
(qemudCleanup): Free logDir.
(main): Use the new global rather than hard-coding "/run/libvirt".
* qemud/libvirtd.aug (sock_acl_entry): Add "unix_sock_dir".
2009-02-09 17:52:38 +00:00
3557096d44 don't print uninitialized in debug diagnostic
* qemud/mdns.c (libvirtd_mdns_timeout_new): Don't use local, t,
uninitialized.
2009-02-09 15:38:06 +00:00
b92d7e761c avoid two test failures induced by today's error-reporting changes
* tests/cpuset: Adjust expected diagnostic to match new behavior.
* tests/undefine: Likewise.
2009-02-09 15:31:34 +00:00
f84c166013 Improve error reporting in virsh 2009-02-09 14:24:06 +00:00
fa7f51b813 introduce virSaveLastError(), virFreeError() 2009-02-09 14:16:23 +00:00
1290b28f59 Limit virsh history entries to 500 (Jim Paris) 2009-02-09 10:24:27 +00:00
0437e75291 Don't ignore errors to save domain status 2009-02-07 21:36:06 +00:00
9a86716446 Fix 100% libvirt CPU usage when --timeout is set 2009-02-06 14:43:52 +00:00
31135bff29 src/domain_conf.c: Check the last error, not the last
connection error, which may not have been set.
2009-02-05 19:29:37 +00:00
003f354917 xenstore: Use virMacAddrCompare() for case-insensitive comparison 2009-02-05 18:14:00 +00:00
b8b4fd4c7d report error for some xend operations on shutdown domain 2009-02-05 17:24:51 +00:00
bc68ae8060 robustify sexpr parser for NICs 2009-02-05 17:17:33 +00:00
3909c7d3ed syntax-check: enable prohibit_nonreentrant
* .x-sc_prohibit_nonreentrant: Add src/console.c and virterror.c.
* Makefile.cfg (local-checks-to-skip): Don't exempt
sc_prohibit_nonreentrant.
* Makefile.nonreentrant: Don't exempt strerror.
2009-02-05 16:28:41 +00:00
bafd7389e4 remove remainder of offending strerror uses
* qemud/qemud.c (GET_CONF_STR): Use virStrerror, not strerror.
* qemud/remote.c (remoteDispatchDomainBlockPeek): Likewise.
(remoteDispatchDomainMemoryPeek, remoteDispatchAuthSaslInit): Likewise.
(remoteDispatchAuthPolkit): Likewise.
* src/lxc_container.c (lxcContainerAvailable): Likewise.
* src/network_driver.c (networkStartNetworkDaemon): Likewise.
(networkShutdownNetworkDaemon): Likewise.
* src/qemu_conf.c (qemudExtractVersion, qemudNetworkIfaceConnect):
* src/storage_conf.c (virStoragePoolLoadAllConfigs): Likewise.
* src/storage_driver.c (storagePoolUndefine): Likewise.
* src/uml_driver.c (umlStartup, umlStartVMDaemon): Likewise.
* src/util.c (virFileReadAll): Likewise.
* src/uuid.c (virUUIDGenerate): Likewise.
* src/xen_internal.c (get_cpu_flags): Likewise.
2009-02-05 16:28:30 +00:00
d22a844b46 don't include raw errno in diagnostics
* src/uml_driver.c (umlStartVMDaemon): Don't print raw errno value.
* qemud/remote.c (remoteDispatchAuthSaslInit): Likewise.
2009-02-05 16:28:15 +00:00
d2758fa13e qemud.c: use virStrerror, not strerror 2009-02-05 16:28:03 +00:00
1e31bfb055 iptables.c: Use virStrerror, not strerror.
* src/iptables.c: Include "virterror_internal.h".
Use virStrerror, not strerror.
* src/iptables.c (notifyRulesUpdated): Use %s rather than
string-concatenation that made sc_unmarked_diagnostics report
a false-positive.
2009-02-05 16:27:51 +00:00
dcfa920aff use virReportOOMError rather than more verbose equivalent
* src/qemu_driver.c (qemudDomainSave, qemudDomainRestore)
(qemudDomainAttachPciDiskDevice)
(qemudDomainAttachUsbMassstorageDevice):
2009-02-05 16:27:40 +00:00
e60430be53 qemu_driver.c: s/strerror/virStrerror.../
Perform most changs automatically, with this:
perl -pi -e 's/\bstrerror *\((.+?)\)/virStrerror($1, ebuf, sizeof ebuf)/'
Then, declare ebuf, as needed
2009-02-05 16:27:28 +00:00
b0d49913d5 remove duplicate *SetCloseExec and *SetNonBlock functions
* src/qemu_driver.c: Use virSetCloseExec and virSetNonBlock,
rather than qemuSet* functions.  Suggested by Daniel P. Berrange.
* src/util.c (virSetCloseExec): Publicize.
* src/util.h (virSetCloseExec): Declare
* src/libvirt_private.syms: Add virSetCloseExec.
2009-02-05 16:27:17 +00:00
22c9bf6d8b ChangeLog: correct date formats one last time 2009-02-05 16:25:32 +00:00
caea9c00e3 qemu_driver.c: use virReportSystemError in place of some qemudLog uses
...thus eliminating many uses of strerror.
(kvmGetMaxVCPUs): Rather than merely warning, diagnose an error
and return -1 upon failure to open KVM_DEVICE.  Suggested by
Daniel P. Berrange.
2009-02-05 16:11:25 +00:00
7bc569dda9 publicize virStrerror
* src/virterror.c (virStrerror): Remove "static".
* src/virterror_internal.h (virStrerror): Declare it.
* src/libvirt_private.syms: Add virStrerror;
2009-02-05 16:10:07 +00:00
a9aa76bad5 remove useless code
* src/bridge.c (brAddTap): Remove redundant errno=ENOMEM assignment
after failed strdup.
* src/cgroup.c (virCgroupFree): Remove redundant *group=NULL assignment
after VIR_FREE(*group).
* src/lxc_driver.c (lxcShutdown): Likewise.
* src/xen_unified.c (xenUnifiedClose): Likewise.
* src/xm_internal.c (xenXMDomainConfigFormat): Rewrite disk-
and net-config-setting code to be clearer.
2009-02-05 16:03:11 +00:00
7faa50d1db lxc_container: Don't dereference NULL upon failure
* src/lxc_container.c (lxcContainerPivotRoot): Free and zero
oldroot *after* printing the diagnostic, both for virFileMakePath
and pivot_root failure.
2009-02-05 15:28:19 +00:00
41549b3888 ChangeLog: reformat recent date/name/email lines 2009-02-03 21:12:22 +00:00
6778ad0f07 avoid a format-related warning
* src/qemu_driver.c (qemudStartVMDaemon): Use "%s".
2009-02-03 13:09:18 +00:00
dff2114795 build: enable redundant-const check
* Makefile.cfg (local-checks-to-skip): Remove sc_redundant_const.
* src/lxc_controller.c: Remove redundant "const"(s).
* src/storage_backend_fs.c: Likewise.
* src/util.h: Likewise.
* src/xen_internal.c: Likewise.
* tests/qparamtest.c: Likewise.
2009-02-03 13:08:59 +00:00
08f87e3d03 syntax-check: enable more checks
* Makefile.cfg (local-checks-to-skip): Don't skip sc_m4_quote_check.
Don't skip sc_prohibit_nonreentrant.
* Makefile.nonreentrant (NON_REENTRANT): Comment out until we've
remove all remaining uses of strerror.
2009-02-03 13:08:36 +00:00
c18ccff446 cleanup: remove useless if-before-VIR_FREE
* Makefile.cfg (useless_free_options): Also check for VIR_FREE.
* src/iptables.c (iptRulesFree): Remove useless if-before-VIR_FREE.
* src/remote_internal.c (remoteAuthSASL): Likewise.
* src/test.c (testOpenFromFile): Likewise.
2009-02-03 13:08:07 +00:00
d26c3387df tests: diagnose more open failures
* tests/qemuxml2argvtest.c: Revert the change,
"tests: diagnose open failure" of 2009-01-30.
* tests/testutils.c (virtTestLoadFile): Diagnose failure here.
2009-02-02 20:35:14 +00:00
66929686c4 fix more printf("%s", NULL) cases 2009-02-02 18:41:56 +00:00
e69b20d616 Don't hardcode ssh port 22, use VIR_FREE, initialize pointers to NULL not 0. 2009-01-31 13:49:11 +00:00
4a5dfb847b Release of 0.6.0
* configure.in docs/* NEWS: release of 0.6.0
* po/*: regenerated and updated brazilian and polish localizations
daniel
2009-01-31 11:46:29 +00:00
42fea976df * docs/news.html*: update with infos for 0.6.0
* docs/*: regenerated some data too
daniel
2009-01-31 09:14:58 +00:00
cf1b0f868b tests: diagnose open failure
* tests/qemuxml2argvtest.c (testCompareXMLToArgvFiles): Diagnose
failure to open an input file.
2009-01-30 21:59:35 +00:00
f92e9f599b Fix empty declaration in enum declaration 2009-01-30 21:52:22 +00:00
f34ba729ff Added missing shared disk test case 2009-01-30 21:49:12 +00:00
a119a98081 fix qemud version reporting when qemu is not installed
* src/qemu_conf.c (uname_normalize): New function, factored out of...
(qemudBuildCommandLine): ...here.  Use the new function.
(qemudExtractVersion): Use it here, rather than hard-coding "i686".
2009-01-30 19:57:20 +00:00
a6ef2e0055 Fix ifname= passing to QEMU for type=ethernet network config 2009-01-30 17:17:58 +00:00
67e7416119 Support disk caching mode config 2009-01-30 17:15:39 +00:00
3cb55cb51f Fix crash using bogus arch in QEMU 2009-01-30 17:12:28 +00:00
896761e5c7 Fix numerous bugs in QEMU domain startup 2009-01-30 17:07:29 +00:00
05436ab7ff Fix valgrind crash in LXC & avoid probing unneccessarily 2009-01-30 16:51:33 +00:00
d8637214a4 Fix leak of storage vols when freeing pool 2009-01-30 16:48:52 +00:00
e2da806861 Fix leak in serializing error message from daemon to client 2009-01-30 16:48:02 +00:00
745c249a61 Fix yet another printf("%s", NULL) case
Fix getpwuid_r() usage
Fix virsh migrateuri handling
2009-01-30 15:43:05 +00:00
1c64dc76c1 Misc xen driver bug/crash fixes 2009-01-29 23:01:37 +00:00
3a8d93ab36 Fix xend XML generation when CPU pinning is used 2009-01-29 18:40:32 +00:00
73da543e77 maint: sync from coreutils
* .x-sc_prohibit_have_config_h: Renamed from...
* .x-sc_no_have_config_h: ... this.
* .x-sc_prohibit_HAVE_MBRTOWC: New file.
2009-01-29 18:06:19 +00:00
3801794908 Support VNC password setting in QEMU driver 2009-01-29 17:50:00 +00:00
4f4bfbc79e Fix save/restore migrate syntax for new KVM releases 2009-01-29 17:27:54 +00:00
e96d88ff3d fix another printf("%s", NULL) case 2009-01-29 17:18:24 +00:00
87e4ded54a add missing files 2009-01-29 17:14:48 +00:00
a10aa7a96b correctly enable floppies for HVM guests. 2009-01-29 17:05:49 +00:00
3463c34e33 fix VNC port reporting when vncunused is set 2009-01-29 17:02:00 +00:00
a9f8c8f5f1 * Makefile.cfg: disable some new checks 2009-01-29 12:11:49 +00:00
3aaad2178c * Makefile.maint: sync from coreutils 2009-01-29 12:11:28 +00:00
ecb2eb4554 prohibit new uses of VIR_ERR_NO_MEMORY
* Makefile.maint (sc_prohibit_VIR_ERR_NO_MEMORY): New rule.
* .x-sc_prohibit_VIR_ERR_NO_MEMORY: New file: exceptions.
2009-01-29 12:10:52 +00:00
bc18a91f91 error-reporting calls using VIR_ERR_NO_MEMORY: use virReportOOMError instead
* src/uml_conf.c (VIR_FROM_THIS): Define to VIR_FROM_UML.
* src/xs_internal.c (VIR_FROM_THIS): Define to VIR_FROM_XEN.
* src/xml.c (VIR_FROM_THIS): Define to VIR_FROM_XML.
* src/stats_linux.c (VIR_FROM_THIS): Define to VIR_FROM_STATS_LINUX.
* src/datatypes.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
* src/lxc_conf.c (VIR_FROM_THIS): Define to VIR_FROM_LXC.
* src/libvirt.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
* src/node_device_conf.c (VIR_FROM_THIS): Define to VIR_FROM_NODEDEV.
* src/openvz_conf.c (VIR_FROM_THIS): Define to VIR_FROM_OPENVZ.
* src/openvz_driver.c (VIR_FROM_THIS): Define to VIR_FROM_OPENVZ.
* src/conf.c (VIR_FROM_THIS): Define to VIR_FROM_CONF.
Note: this loses config_filename:config_lineno diagnostics,
but that's ok.
* src/node_device.c (VIR_FROM_THIS): Define to VIR_FROM_NODEDEV.
* src/sexpr.c (VIR_FROM_THIS): Define to VIR_FROM_SEXPR.
* po/POTFILES.in: remove src/sexpr.c and src/lxc_conf.c
2009-01-29 12:10:32 +00:00
a99e5ccba4 don't abort if setlocale() fails 2009-01-29 11:49:33 +00:00
94d6177982 Fix typo & tweak variable decl 2009-01-28 22:07:36 +00:00
46d1324e47 Stopping reading off wire after 1 complete RPC message is received 2009-01-28 22:00:32 +00:00
ca9af16aa7 Fix bogus valgrind memory leak warnings in test suite 2009-01-28 21:53:48 +00:00
9322b2e861 Solaris portability for RPC code data types 2009-01-28 21:33:56 +00:00
e730de6fd8 remote_internal.c: fix typo that would mistakenly report OOM
* src/remote_internal.c (addrToString): Report VIR_ERR_UNKNOWN_HOST,
not VIR_ERR_NO_MEMORY.
2009-01-28 16:14:24 +00:00
8cc2bbe33c qparams.c: Use virReportOOMError(NULL), not qparam_report_oom()
* src/qparams.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
(qparam_report_oom): Remove definition.
Replace all uses.
2009-01-28 16:13:46 +00:00
499189694a fix mis-use of PF_UNIX as a protocol 2009-01-28 14:36:23 +00:00
be33b189a5 libvirt_proxy: avoid potential buffer overflow
* proxy/libvirt_proxy.c (proxyReadClientSocket): Ensure that
we've read an entire virProxyPacket before dereferencing "req".
Analysis and patch by "Rasputin" <rasputin@email.ru>.  Details in
<http://thread.gmane.org/gmane.comp.emulators.libvirt/11459>.
2009-01-28 14:08:33 +00:00
eb0849f370 * po/POTFILES.in: Add src/lxc_conf.c 2009-01-28 13:59:56 +00:00
c2102c60ea remove reference to non-existent *.res 2009-01-28 13:45:50 +00:00
555de859cc avoid printf format-mismatch warnings
* qemud/qemud.c (qemudClientReadBuf, qemudClientWriteBuf):
Use %lld and a (long long int) cast to print a ssize_t value.
2009-01-28 11:31:39 +00:00
489fde7680 Add support for copy-on-write storage volumes 2009-01-27 18:30:03 +00:00
765bca14d1 * POTFILES.in: update: remove src/lxc_conf.c; Add src/bridge.c. 2009-01-27 15:37:34 +00:00
2c22a68ce2 Added complete set of RNG schemas for all XML formats 2009-01-27 15:29:53 +00:00
04b120e481 Added link to libvirt-qpid on front page, and docs on URI formats for each driver 2009-01-27 14:49:09 +00:00
f03d3439cd virterror.c: don't read beyond end of buffer upon OOM
* src/virterror.c (virReportSystemErrorFull): Fix typo in
my previous change.  Patch by Daniel P. Berrange.
2009-01-27 12:26:53 +00:00
b4f62abbf1 kvm/virtio: Set IFF_VNET_HDR when setting up tap fds
IFF_VNET_HDR is a tun/tap flag that allows you to send and receive
large (i.e. GSO) packets and packets with partial checksums. Setting
the flag means that every packet is proceeded by the same header which
virtio uses to communicate GSO/csum metadata.

By enabling this flag on the tap fds we create, we greatly increase
the achievable throughput with virtio_net.

However, we need to be careful to only set the flag when a) QEMU has
support for this ABI and b) the value of the flag is queryable using
the TUNGETIFF ioctl.

It's nearly five months since kvm-74 - the first KVM release with this
feature - was released. Up until now, we've not added libvirt support
because there is no clean way to detect support for this in QEMU at
runtime. A brief attempt to add a "info capabilities" monitor command
to QEMU floundered. Perfect is the enemy of good enough. Probing the
KVM version will suffice for now.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
2009-01-27 11:12:05 +00:00
e15147c141 fix errors in virReportSystemErrorFull
* src/virterror.c (virStrerror): New function.
(virReportSystemErrorFull): Don't leak "combined".
In fact, don't even attempt allocation.
Do include the result of formatted print in final diagnostic.
2009-01-27 10:57:18 +00:00
4e8f63fdaa use gnulib's stpcpy module
* bootstrap (modules): Add stpcpy, and pull in gnulib bits:
* gnulib/lib/stpcpy.c: New file.
* gnulib/m4/stpcpy.m4: New file.
* gnulib/lib/Makefile.am: Update.
* gnulib/m4/gnulib-cache.m4: Update.
* gnulib/m4/gnulib-comp.m4: Update.
2009-01-27 10:30:30 +00:00
aa7c4102aa update from gnulib 2009-01-27 10:29:55 +00:00
339cc9d992 build: avoid format warnings
* src/proxy_internal.c (xenProxyCommand): Mark a diagnostic.
* src/xen_unified.c (xenUnifiedOpen, xenUnifiedAddDomainInfo):
Fix unmarked diagnostics by removing the diagnostic altogether:
replace each xenUnifiedError(...,VIR_ERR_NO_MEMORY call with a
call to virReportOOMError.
2009-01-27 08:50:03 +00:00
69d947eb80 * src/virterror.c (virErrorMsg): Correct indentation. 2009-01-27 08:49:15 +00:00
39e49ad7c9 fix recursive lock hang in xenstore driver 2009-01-23 19:18:24 +00:00
ad70b32414 Support QEMU disk format specification in XML 2009-01-23 16:22:20 +00:00
5f0c720163 .cvsignore: Add explicit list of generated files.
* .hgignore: Regenerate.
* m4/.gitignore: Regenerate.
2009-01-23 16:15:49 +00:00
727d4fdc6e fix comment typo: s/contains/continues/
* src/libvirt.c (virStorageVolFree): Correct typo in comment.
2009-01-23 14:18:43 +00:00
7523642c01 qemud: don't dereference NULL on failed virGetUserDirectory
* qemud/qemud.c (qemudInitPaths): Return right away,
upon virGetUserDirectory failure.
2009-01-23 13:50:59 +00:00
3b22f80f07 m4: update from gnulib to avoid warnings from cutting-edge autoconf
* gnulib/m4/errno_h.m4
* gnulib/m4/gnulib-comp.m4
* gnulib/m4/multiarch.m4
2009-01-23 13:32:48 +00:00
48dc345f2d correct and tighten up .*ignore files
* .cvsignore: Don't ignore *.orig or *.rej.  They're not build products.
Don't ignore the entire m4 directory.
* Makefile.maint (sync-vcs-ignore-files): Correct quoting.
Use sed rather than a for loop.
Search only version-controled files (for reproducibility)
* gnulib/lib/netinet/.cvsignore: Append missing newline-at-EOF,
so that the use of sed doesn't mistakenly concatenate lines.
* gnulib/lib/sys/.cvsignore: Likewise.
* m4/.cvsignore: Ignore acinclude.m4 and aclocal.m4, not *.m4.
* .hgignore: Regenerate.
* all .gitignore files: Regenerate.
2009-01-23 13:32:17 +00:00
6278bb191a maint: update list of error function names and adapt
* Makefile.maint (msg_gen_function): Update list.
Remove some now-unused names, add some new ones.
* src/hash.c (virHashError): Remove unused definition.
* src/openvz_conf.h (openvzLog): Likewise.
* src/xen_unified.c: Mark newly-exposed diagnostics for translation.
2009-01-23 12:29:29 +00:00
e80f10064e parse IP address for bridge interfaces 2009-01-23 01:48:47 +00:00
c4985e9419 use the gnulib random_r function 2009-01-22 20:27:01 +00:00
1b745219c7 Remove use of non-reentrant POSIX apis 2009-01-22 19:41:48 +00:00
d0eab955c2 xm_internal.c: fix locking bug: s/Lock/Unlock/
* src/xm_internal.c (xenXMDomainDefineXML): Release lock, (don't
try to acquire it) upon failure, just before returning.
2009-01-22 19:18:24 +00:00
a7acdde406 generate .hgignore 2009-01-22 19:03:11 +00:00
7420fec81b Remove non-existent symbol from linker script 2009-01-22 18:33:13 +00:00
fb4ec82358 Support script for bridge interface type 2009-01-22 18:29:13 +00:00
39e6ded8ae Fix to xen test case for threadsafety patches 2009-01-22 18:19:20 +00:00
2b29698352 Least privilege support for Solaris 2009-01-22 17:49:41 +00:00
e52d74e536 Make xen driver threadsafe 2009-01-21 18:11:14 +00:00
20921cc284 If you un-install libvirt and re-install it, you get a warning
from the post-install script:

  Installing     : libvirt
  ln: creating symbolic link `/etc/libvirt/qemu/networks/autostart/default.xml': File exists

See https://bugzilla.redhat.com/462011
2009-01-21 10:50:03 +00:00
e3672d9695 Allow storage driver to handle daemon restarts 2009-01-20 22:43:07 +00:00
23a090ab92 Allow virtual networks to survive daemon restart 2009-01-20 22:36:10 +00:00
a964a6dad6 Support ac97 soundcard model 2009-01-20 22:15:55 +00:00
554d82a200 Use global thread-local error for all python error reporting 2009-01-20 22:10:52 +00:00
839c6de58b libvirtd: respect LIBVIRT_DEBUG when logging to syslog 2009-01-20 21:50:31 +00:00
1709e1dc88 Add missing .x-sc_prohibit_nonreentrant 2009-01-20 21:49:05 +00:00
5fb1e29c7e * src/logging.c: fix openlog() ident lifetime for Solaris
daniel
2009-01-20 21:34:44 +00:00
89408fd3a0 Refresh GNULIB, also pulling in random_r module 2009-01-20 21:05:33 +00:00
a888b22cf9 Support domain events in test driver 2009-01-20 20:23:53 +00:00
071be08079 Add syntax check rule to look for non-reentrant POSIX apis 2009-01-20 20:19:55 +00:00
3548e9aae8 don't ignore write failure
* src/network_driver.c (networkEnableIpForwarding): This function
would always return 1 (success).  Now it returns 0 upon write or
close failure, being careful to preserve any errno from a write failure.
Add comments.
2009-01-20 19:29:08 +00:00
d82071710e Dynamically adjust worker threads in daemon 2009-01-20 19:27:11 +00:00
f61341173b Allow concurrent processing of RPC calls in daemon 2009-01-20 19:25:15 +00:00
84ef468ba8 Fix some misleading comments in XM driver 2009-01-20 18:20:09 +00:00
2c7be88d15 Remove a use of strerror() in error reporting in remote driver 2009-01-20 17:47:13 +00:00
788bedd904 Remove use of static data in Xen XM driver 2009-01-20 17:34:56 +00:00
0fc5b2fbc9 Activate RHEL5 specific flags when needed
* libvirt.spec.in: try to autodetect when rhel5 option should be
  passed to configure
Daniel
2009-01-20 17:27:34 +00:00
e428a69e6f Remove use of static data in Xen inotify driver 2009-01-20 17:19:23 +00:00
437ac354fc Make error reporting threadsafe by avoiding strerror 2009-01-20 17:13:33 +00:00
25415eb104 * src/qemu_driver.c: remove a warning when printing a file offset
daniel
2009-01-20 16:39:35 +00:00
61674cc17d Make RPC call dispatch threaded 2009-01-20 16:36:34 +00:00
458a673cb7 remove stdout_fd, stderr_fd from virDomainObj
* src/domain_conf.h src/lxc_driver.c src/uml_driver.c: virDomainObj
  doesn't need stdout and stderr fields anymore, patch from
  Guido Günther
daniel
2009-01-20 16:10:20 +00:00
6d004d3f8a * src/domain_conf.h src/qemu_driver.c: use monitor fd for QEmu/KVM
domain shutdown and read saved vm status on libvirtd startup,
  last 2 patches from Guido Günther finishing up the surviving the
  libvirt daemon restart
daniel
2009-01-20 15:52:11 +00:00
103ee5d4c2 Fix apibuild.py and update/regenerate localizations
* docs/apibuild.py: fix the parser with another Win32 keyword
* po/*: updated a couple of translations and regenerated
daniel
2009-01-20 15:42:07 +00:00
45062390a6 fix "make syntax-check" failures
* ChangeLog: Start with TAB, not 8 spaces.
* src/virterror.c: Remove trailing spaces.
2009-01-20 13:51:52 +00:00
763e33c373 Fix config summary output alignment 2009-01-20 12:25:40 +00:00
a776fad370 Add public APIs for ref counting on public objects 2009-01-20 12:14:03 +00:00
0466ff28f2 Fix actual vs expected data comparison order to get correct diff +++/--- output 2009-01-20 12:03:40 +00:00
ead04dcbe8 Thread local error reporting 2009-01-20 12:01:45 +00:00
c790f6d25e Avoid bogus event loop wakeups in remote driver when doing RPC call 2009-01-20 11:45:09 +00:00
ed493909f7 Add locking to the remote driver 2009-01-20 11:41:24 +00:00
8dfbfe3145 daemonize qemu processes 2009-01-19 21:55:54 +00:00
5d99a309e6 save domstate as string in status file 2009-01-19 21:06:26 +00:00
e59dd65380 Change Ben Guthro email
Daniel
2009-01-19 20:24:12 +00:00
9a969b86a9 * src/xen_internal.c src/xend_internal.c: Relax NUMA checking
for RHEL-5 and change the detection stategy for default Xen
  accesses, patch by Markus Armbruster
daniel
2009-01-19 20:16:10 +00:00
b751b46bc5 Fix PVFB version check for RHEL-5
* src/xend_internal.c src/xm_internal.c: fix paravirt framebuffer
  handling since it was backoprted for RHEL-5, patch by Markus
  Armbruster
daniel
2009-01-19 19:49:30 +00:00
e676a699e8 * src/xend_internal.c src/xm_internal.c: fix fully virt network
device configuration for Xen on RHEL-5, patch by Markus Armbruster
daniel
2009-01-19 18:12:00 +00:00
4fbbbbd336 * configure.in: add a --with-rhel5-api configure option
for the Xen specific version of RHEL-5, patch by Markus Armbruster
daniel
2009-01-19 17:41:39 +00:00
99ed5b4bee Two bug fixes coming from RHEL and Markus being added to AUTHORS
* src/xm_internal.c: two bug fixes coming from RHEL package
  posted by Markus Armbruster
* AUTHORS: adding Markus
daniel
2009-01-19 15:24:41 +00:00
1fe181e36f tests: virsh-all and virsh-synopsis were not being run
* tests/Makefile.am (test_scripts): Add two missing backslashes.
2009-01-16 18:07:24 +00:00
735329b824 tests: exercise a bug that could make virsh and libvirtd segfault
* tests/define-dev-segfault: New file.
* tests/Makefile.am (test_scripts): Add define-dev-segfault.
2009-01-16 18:06:33 +00:00
46d4a5e047 Fix segfault with console device back compat. 2009-01-16 16:50:11 +00:00
dd9b3fb594 Fix bug when fork isn't available (Win32) in remote driver 2009-01-15 20:13:12 +00:00
2be79b1d5e Reduce exit paths in remote driver APIs 2009-01-15 20:07:10 +00:00
19d1bf2562 Remove use of macros in remote driver private data access 2009-01-15 20:04:44 +00:00
0cd119e7b8 Fix incorrect use of private data field in remote driver 2009-01-15 20:03:10 +00:00
4dac0a1105 Generic internal threads API 2009-01-15 19:56:05 +00:00
52e51d278e Implement virKill for Win32 platform 2009-01-15 19:40:21 +00:00
4d713eabf5 Avoid passing NULL to printf %s specifier 2009-01-15 17:54:20 +00:00
c7095a4b4c Improve xend_get error message 2009-01-15 15:17:53 +00:00
443698d2b2 implement capabilities parsing for Solaris 2009-01-15 01:35:17 +00:00
406c05f2e7 Fix xs_unwatch() to correctly pass the token 2009-01-15 01:23:32 +00:00
c8070bf632 Fix activeDomainList handling 2009-01-15 01:21:36 +00:00
65316d7940 Fix ref-counting for Xen driver event registration 2009-01-15 01:18:37 +00:00
d6511cf6de Fix devhelp build dependencies 2009-01-14 17:36:05 +00:00
9e58678a98 Let devhelp build in a separate objdir. 2009-01-14 17:30:39 +00:00
231dde6dc4 remove references to non-existent files in docs/ 2009-01-14 17:24:18 +00:00
5b6c39f51f Mark Xen PV CD-ROM devices as such 2009-01-14 16:21:12 +00:00
d052118dae Improve compiler flag checking 2009-01-14 15:23:26 +00:00
37abbb387e qemud.c: fix error in yesterday's change: s/X_OK/R_OK/
* qemud/qemud.c (main): Fix error s/X_OK/R_OK/ reported by
Daniel Berrange.
2009-01-13 12:22:24 +00:00
17bfd657b7 * HACKING: Clarify "bool" vs. XDR/wire-format. 2009-01-13 10:45:41 +00:00
890915054f fix the QEmu links
* docs/index.html docs/index.html.in docs/relatedlinks.html
  docs/relatedlinks.html.in: fix the QEmu links
daniel
2009-01-12 21:09:09 +00:00
e0a2770f67 Fix invocation of rpcgen.
* qemud/Makefile.am: Fix invocation of rpcgen, and make sure
	we run the right one.
2009-01-12 19:19:22 +00:00
fe54138020 tests: quiet virsh-all
* tests/virsh-all: For now, ignore diagnostics and exit status,
when running all virsh commands.
2009-01-12 18:23:10 +00:00
6954d44e53 diagnose "libvirtd --config=no-such-file"
* qemud/qemud.c (remoteReadConfigFile): Don't return 0 (success)
when the config file is unreadable or nonexistent
Return -1, not 0, upon virConfReadFile failure.
(main): If remote_config_file is not specified via --config(-f),
use the default config file only if it exists.  Otherwise,
use /dev/null.
* src/conf.c (virConfReadFile): Don't diagnose virFileReadAll
failure, since it already does that.
2009-01-12 18:22:32 +00:00
1c947488f6 fix non-srcdir build failure
* qemud/Makefile.am (check-local): Prefix use of test_libvirtd.aug
with $(srcdir)/.  Add quotes around $(AUGPARSE), in case it expands
to something unusual.
2009-01-12 18:21:49 +00:00
c8ef64bdd7 Add tests and docs for the new PCI passthrough format
* docs/formatdomain.html.in docs/libvirt.rng docs/formatdomain.html:
  document the new PCI passthrough format
* tests/qemuxml2argvtest.c tests/qemuxml2xmltest.c
  tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.args
  tests/qemuxml2argvdata/qemuxml2argv-hostdev-pci-address.xml:
  and add a regression test for it.
Daniel
2009-01-12 15:09:19 +00:00
8af87ea251 don't emulate snprintf 2009-01-11 11:21:29 +00:00
4275be68fb split out opening of the qemu logfile 2009-01-11 11:18:31 +00:00
261c3a8fd0 src/logging.h: fix non-debug compile 2009-01-09 19:22:02 +00:00
12b6851d54 Fixups after gnulib refresh 2009-01-08 20:42:01 +00:00
d6bd288da2 add missing flags argument 2009-01-08 19:52:15 +00:00
46971d5ed7 pass flags argument to all virDomain*DefParse* functions 2009-01-08 13:54:20 +00:00
88053456f8 poll: don't return uninitialized
* gnulib/lib/poll.c (poll) [WIN32_NATIVE]: Initialize "rc".
[sync from gnulib also adjusts cpp indentation to reflect nesting.]
2009-01-08 08:55:20 +00:00
7386d78e6d add more files pulled in via yesterday's gnulib upgrade
* gnulib/m4/multiarch.m4: New file.
* gnulib/m4/hostent.m4: New file.
* gnulib/m4/servent.m4: New file.
* .x-sc_prohibit_gethostby: Exempt all gnulib/m4/* files, so
hostent.m4's uses of gethostbyname and gethostbyaddr do not
trigger a "make syntax-check" failure.
2009-01-07 17:11:02 +00:00
55d0a68596 bootstrap: pull in gnulib's ioctl module
* bootstrap: Invoke gnulib-tool with its --no-vc-files
option, since we version-control the files it imports.
This tells it not to mark imported files as cvs-ignored.
(modules): Add ioctl.
* gnulib/lib/ioctl.c: New file.
* gnulib/lib/sys_ioctl.in.h: New file.
* gnulib/tests/sys_ioctl.in.h: Removed.
* gnulib/tests/ioctl.c: Removed.
* gnulib/lib/Makefile.am: Update.
* gnulib/m4/gnulib-cache.m4: Likewise.
* gnulib/m4/gnulib-comp.m4: Likewise.
* gnulib/tests/Makefile.am: Likewise.
* gnulib/lib/.cvsignore: Ignore sys_ioctl.h.
* gnulib/lib/.gitignore: Regenerate.
2009-01-07 17:10:00 +00:00
bd4edfeedd ignore generated libvirtd.logrotate.
* qemud/.cvsignore: Add libvirtd.logrotate.
* qemud/.gitignore: Regenerate.
2009-01-07 17:09:06 +00:00
c7cbbfa43b * src/domain_conf.c src/qemu_conf.c: implement PCI passthrough
for recent KVM versions in a similar way to USB, patch by
  Jason Krieg. Some cleanups and reformating too.
daniel
2009-01-07 12:56:13 +00:00
d6eceb568f * src/openvz_driver.c: fix the mac addresses generation for OpenVZ veth
devices, patch by Evgeniy Sokolov
* docs/apps.html: regenerated fixing a typo
Daniel
2009-01-07 10:55:54 +00:00
fbba4423e9 * src/libvirt_private.syms src/qemu_driver.c src/test.c
src/uml_driver.c src/util.c src/util.h src/xen_unified.c:
  unify hostname lookup using virGetHostname convenience function,
  patch by David Lutterkort
daniel
2009-01-07 10:43:16 +00:00
6c996bfc8f update from gnulib; use its time_r module for localtime_r on mingw
* bootstrap (modules): Add time_r.
* gnulib/m4/time_h.m4: New file.
* gnulib/m4/time_r.m4: New file.
* gnulib/lib/time_r.c: New file.
* gnulib/tests/test-time.c: New file.
* gnulib/lib/time.in.h: New file.
* gnulib/lib/Makefile.am: Update.
* gnulib/lib/fseeko.c: Likewise.
* gnulib/lib/lstat.c: Likewise.
* gnulib/lib/netdb.in.h: Likewise.
* gnulib/lib/stdint.in.h: Likewise.
* gnulib/lib/stdlib.in.h: Likewise.
* gnulib/lib/sys_select.in.h: Likewise.
* gnulib/lib/sys_stat.in.h: Likewise.
* gnulib/lib/sys_time.in.h: Likewise.
* gnulib/lib/unistd.in.h: Likewise.
* gnulib/lib/wchar.in.h: Likewise.
* gnulib/m4/codeset.m4: Likewise.
* gnulib/m4/errno_h.m4: Likewise.
* gnulib/m4/extensions.m4: Likewise.
* gnulib/m4/getaddrinfo.m4: Likewise.
* gnulib/m4/gettext.m4: Likewise.
* gnulib/m4/glibc2.m4: Likewise.
* gnulib/m4/glibc21.m4: Likewise.
* gnulib/m4/gnulib-cache.m4: Likewise.
* gnulib/m4/gnulib-comp.m4: Likewise.
* gnulib/m4/iconv.m4: Likewise.
* gnulib/m4/include_next.m4: Likewise.
* gnulib/m4/intdiv0.m4: Likewise.
* gnulib/m4/intlmacosx.m4: Likewise.
* gnulib/m4/intmax.m4: Likewise.
* gnulib/m4/inttypes-pri.m4: Likewise.
* gnulib/m4/inttypes_h.m4: Likewise.
* gnulib/m4/lcmessage.m4: Likewise.
* gnulib/m4/lib-link.m4: Likewise.
* gnulib/m4/lstat.m4: Likewise.
* gnulib/m4/netdb_h.m4: Likewise.
* gnulib/m4/nls.m4: Likewise.
* gnulib/m4/po.m4: Likewise.
* gnulib/m4/printf-posix.m4: Likewise.
* gnulib/m4/printf.m4: Likewise.
* gnulib/m4/progtest.m4: Likewise.
* gnulib/m4/size_max.m4: Likewise.
* gnulib/m4/sockets.m4: Likewise.
* gnulib/m4/stdint.m4: Likewise.
* gnulib/m4/stdint_h.m4: Likewise.
* gnulib/m4/sys_ioctl_h.m4: Likewise.
* gnulib/m4/threadlib.m4: Likewise.
* gnulib/m4/uintmax_t.m4: Likewise.
* gnulib/m4/visibility.m4: Likewise.
* gnulib/m4/wchar.m4: Likewise.
* gnulib/m4/wchar_t.m4: Likewise.
* gnulib/m4/wint_t.m4: Likewise.
* gnulib/m4/xsize.m4: Likewise.
* gnulib/tests/Makefile.am: Likewise.
* gnulib/tests/sockets.h: Likewise.
* gnulib/tests/.cvsignore: Likewise.
* gnulib/tests/.gitignore: Likewise.
* tests/.gitignore: Likewise.
* docs/examples/.gitignore: Likewise.
* gnulib/lib/.cvsignore: Likewise.
* gnulib/lib/.gitignore: Likewise.

remove files associated with obsolete strpbrk module
* gnulib/lib/strpbrk.c: Remove file.
* gnulib/m4/strpbrk.m4: Remove file.
2009-01-06 20:12:50 +00:00
37e72aa542 Fix misc mingw portability problems 2009-01-06 18:32:03 +00:00
83467de3ed add virKillProcess 2009-01-06 17:46:46 +00:00
ffafc252dd trivial cleanups 2009-01-06 17:20:27 +00:00
4015331b73 ignore generated TAGS files 2009-01-06 17:14:18 +00:00
bc79ee38bb * AUTHORS: John Levon is now a commiter
Daniel
2009-01-06 16:18:59 +00:00
2ad1ca3f6c fix "make dist" (from scratch) failure
* src/Makefile.am (EXTRA_DIST): Don't distribute libvirt_sym.version,
now that it's been removed.  Spotted by Daniel Veillard.
2009-01-06 15:22:57 +00:00
950c8b3916 dist: distribute all libvirt_*.syms files, ...
* src/Makefile.am (EXTRA_DIST): Distribute all libvirt_*.syms files,
not just those that happen to be selected at configure time.
2009-01-06 15:16:43 +00:00
06522492f9 avoid syntax-check (po-check) failure due to FP match on gettext.m4
* Makefile.maint (po-check): Exclude .m4 files.
2009-01-06 09:48:30 +00:00
2a37fb80eb * qemud/remote.c: fix compilation without SASL, patch by John Levon
daniel
2009-01-06 09:44:34 +00:00
c193699d34 * po/*: updated polish and brazilian translations, regenerated
Daniel
2009-01-06 08:48:48 +00:00
0dbcac6598 * src/storage_backend_fs.c: Make mntent.h specific to the FS storage
backend, patch by John Levon
daniel
2009-01-06 08:43:44 +00:00
34ac4c1fe7 Remove storage backend symbols from version script
* src/libvirt_private.syms: Remove virStorageBackend* symbol names.
They're linked into qemud, not libvirt.
Author: John Levon
2009-01-05 14:10:40 +00:00
b0119de82f migrate linux-specific symbol names into their own sym file
* configure.in (WITH_LINUX): New automake conditional.
* src/Makefile.am (PRIVSYMFILES) [WITH_LINUX]: Append libvirt_linux.syms.
* src/libvirt_private.syms: Move two symbol names into...
* src/libvirt_linux.syms: ...this new file.
Author: John Levon
2009-01-05 14:08:26 +00:00
83dfc25c02 Move bridge symbols into a separate syms file
* configure.in: Provide a new --with-bridge option.
* src/Makefile.am (PRIVSYMFILES) [WITH_BRIDGE]: Append libvirt_bridge.syms.
* src/bridge.c: Test WITH_BRIDGE rather than particular drivers.
* src/libvirt_private.syms: Move bridge-related symbols into...
* src/libvirt_bridge.syms: ...this new file.
Author: John Levon
2009-01-05 14:07:31 +00:00
ea5775bf8e Move --with-driver-modules symbols into a separate sym file
* src/Makefile.am (PRIVSYMFILES): Append libvirt_driver_modules.syms.
* src/libvirt_private.syms: Move virDriverLoadModule into...
* src/libvirt_driver_modules.syms: ... this new file.
Author: John Levon
2009-01-05 14:06:41 +00:00
ad17ffa034 split version script into multiple files
* src/Makefile.am (PRIVSYMFILES): Define.
(EXTRA_DIST): Append $(PRIVSYMFILES).
(libvirt.syms): New rule.
Reflect renaming: s/libvirt_sym.version/libvirt.syms/.
(BUILT_SOURCES): Depend on libvirt.syms.
* configure.in: Define ENABLE_DEBUG as an automake conditional.
(AC_OUTPUT): Remove src/libvirt_sym.version.
* src/.cvsignore: s/libvirt_sym.version/libvirt.syms/.
* src/.gitignore: Regenerate.
* src/libvirt_public.syms: Renamed from src/libvirt_sym.version.in.
* src/libvirt_debug.syms: New file.
* src/libvirt_private.syms: New file.
Author: John Levon
2009-01-05 14:05:29 +00:00
7924fec593 avoid xgettext warning aboug bug-reporting address
* po/Makevars (MSGID_BUGS_ADDRESS): Set, to avoid xgettext warning.
* po/libvirt.pot: Set bug-reporting address.
2009-01-05 13:28:33 +00:00
8f06d6b103 avoid bogus descriptions due to use of gettext with the empty string
* src/virsh.c: Use `""', not `gettext_noop("")', in numerous
vshCmdInfo definitions.  The latter provokes a warning from gettext.
2009-01-05 13:27:43 +00:00
0388d10a1f Makefile.maint: sync from coreutils 2009-01-05 13:17:34 +00:00
ca34b4d777 Fix numa build on F9, 32-bit 2009-01-05 12:56:36 +00:00
630cf4e22d * Makefile.maint (msg_gen_function): Add to the list. 2009-01-05 08:17:31 +00:00
cb48d5d71c mark a few diagnostics for translation
* src/xen_inotify.c (xenInotifyXendDomainsDirLookup): Mark a diagnostic.
(xenInotifyXendDomainsDirRemoveEntry, xenInotifyOpen): Likewise.
2009-01-05 08:16:44 +00:00
33a7dc93d8 HACKING: mention bool and other scalar types, const-correctness 2009-01-05 08:12:11 +00:00
13a223253c document vnc's keymap attribute 2008-12-26 13:37:53 +00:00
e03a902735 * docs/logging.html docs/logging.html.in: new page documenting
the logging system
* docs/auth.html docs/deployment.html docs/remote.html
  docs/sitemap.html docs/sitemap.html.in docs/uri.html
  docs/windows.html: integration in the existing set
Daniel
2008-12-23 13:47:10 +00:00
8b5ab9fc90 add .x-sc_prohibit_asprintf 2008-12-23 13:40:42 +00:00
043d702f02 use virAsprintf instead of asprintf 2008-12-23 13:03:29 +00:00
922f5e6845 Fix storage driver null dereference. 2008-12-22 16:30:57 +00:00
bd24695a23 Merge xml building for virsh pool-*-as 2008-12-22 16:23:36 +00:00
b496213406 fix make check with the new logging support
* qemud/qemud.c qemud/test_libvirtd_qemu.aug tests/Makefile.am
  tests/daemon-conf: fix make check with the new logging support
  the messages now carry a timestamp which need to be removed,
  the daemon needs to exit if the log configuration informations
  are wrong and we also look at the LIBVIRT_DEBUG environment
  variable
Daniel
2008-12-22 16:16:10 +00:00
5af1e59d2d * qemud/mdns.c: fix a compilation problem in the switch
daniel
2008-12-22 13:08:13 +00:00
970c143497 Document the new daemon options
* qemud/libvirtd.aug qemud/libvirtd.conf: document the new
  options in the config file and augment the Augeas description
daniel
2008-12-22 12:57:35 +00:00
7f3646c81d Finish switching the daemon code to new logging
* qemud/event.c qemud/mdns.c qemud/remote.c: switch other pieces
  of the daemon to the new logging infrastructure
daniel
2008-12-22 12:55:47 +00:00
53f5386a2e Switch daemon to new logging APIs
* qemud/qemud.c qemud/qemud.h: replace the daemon old logging
  infrastructure with the new one and parse configuration options
daniel
2008-12-22 12:53:26 +00:00
0d575be45a * src/uml_conf.c: another logging conversion
daniel
2008-12-22 10:53:07 +00:00
0b05f6c26f convert old logging to the new API
* src/node_device_devkit.c src/uml_driver.c src/virterror.c:
  convert old logging to the new API
daniel
2008-12-22 10:48:59 +00:00
f99b202f5b * src/libvirt.c: convert entry points to new logging
daniel
2008-12-22 10:46:01 +00:00
698d80a824 * src/logging.h src/logging.c: commited the more recent version
with function name and line number
daniel
2008-12-22 10:44:10 +00:00
9fcbbd92bf new internal logging APIs
* src/logging.h src/logging.c: add the infrastructure and internal
  APIs for logging, some of those APIs should be made public later
* src/libvirt_sym.version.in: flag the internal APIs as such
daniel
2008-12-22 10:36:54 +00:00
0ff5cea597 * src/xen_internal.h: remove tabs to fix make syntax-check
and fix the indentation
daniel
2008-12-22 10:32:20 +00:00
d010b68962 make NUMA-initialization code more portable and more robust
qemudCapsInitNUMA and umlCapsInitNUMA were identical, so this change
factors them into a new function, virCapsInitNUMA, and puts it in
nodeinfo.c.

In addition to factoring out the duplicates, this change also
adjusts that function definition (along with its macros) so
that it works with Fedora 9's numactl version 1, and makes it
so the code will work even if someone builds the kernel with
CONFIG_NR_CPUS > 4096.

Finally, also perform this NUMA initialization for the lxc
and openvz drivers.

* src/nodeinfo.c: Include <stdint.h>, <numa.h> and "memory.h".
(virCapsInitNUMA): Rename from qemudCapsInitNUMA and umlCapsInitNUMA.
(NUMA_MAX_N_CPUS): Define depending on NUMA API version.
(n_bits, MASK_CPU_ISSET): Define, adjust, use uint64 rather than long.
* src/nodeinfo.h: Include "capabilities.h".
(virCapsInitNUMA): Declare it.
* examples/domain-events/events-c/Makefile.am:
* src/Makefile.am: Add $(NUMACTL_CFLAGS) and $(NUMACTL_LIBS) to various
compile/link-related variables.
* src/qemu_conf.c: Include "nodeinfo.h".
(qemudCapsInitNUMA): Remove duplicate code.  Adjust caller.
* src/uml_conf.c (umlCapsInitNUMA): Likewise.
Include "nodeinfo.h".
* src/lxc_conf.c: Include "nodeinfo.h".
(lxcCapsInit): Perform NUMA initialization here, too.
* src/openvz_conf.c (openvzCapsInit): And here.
Include "nodeinfo.h".
* src/libvirt_sym.version.in: Add virCapsInitNUMA so that libvirtd
can link to this function.
2008-12-21 18:55:09 +00:00
337dce1e24 * src/node_device_hal.c: Include <config.h> before everything else. 2008-12-21 18:49:11 +00:00
9604a4618a Re-generated doc 2008-12-21 17:26:21 +00:00
6a28a6f297 avoid "make check" failures due to localized error messages 2008-12-20 23:23:50 +00:00
5614e868e1 save and remove kvm/qemu domain status 2008-12-20 13:17:49 +00:00
b679ebe877 add XML parsing for qemu/kvm status files 2008-12-20 13:09:45 +00:00
f1bd11bf87 docs/formatdomain.html.in: Fix documentation typo
(aozturk in #virt).
2008-12-19 10:44:01 +00:00
ecd25f5262 fix device hotplug 2008-12-18 16:49:49 +00:00
830ba76c3e let qemu/kvm instances write a pid file 2008-12-18 15:22:49 +00:00
a485cae819 Replace __FUNCTION__ with __func__ for better portability (John Levon) 2008-12-18 12:25:11 +00:00
264ed02079 Fix gcc-ism in python build (John Levon) 2008-12-18 12:20:00 +00:00
829b6420d8 Fix mistaken free of domain event object after queueing (David Lively) 2008-12-18 12:11:53 +00:00
6313259ada Fix test driver return value & disable nodeinfotest on non-linux (John Levon) 2008-12-18 12:08:05 +00:00
ca05a72db6 Fix unused variable compile warning when polkit is disabled (John Levon) 2008-12-18 12:00:45 +00:00
7c4bc3f92f Use pid_t for all PID tracking variables (John Levon) 2008-12-18 11:58:28 +00:00
9e8517c745 Don't munge default network XML if uuidgen is not present (John Levon) 2008-12-18 11:54:34 +00:00
13d98d68fc Misc daemon fixes (John Levon) 2008-12-18 11:52:06 +00:00
b7e008d3dd docs/virsh.pod: typo fix 2008-12-18 06:48:13 +00:00
6d4eb1985c Makefile.maint: use $(srcdir), not $(top_srcdir) 2008-12-18 06:45:05 +00:00
ded70984f3 Fix unreachable statement (John Levon) 2008-12-17 21:50:02 +00:00
b5259e7e11 Fix domain events callback type (John Levon) 2008-12-17 21:48:20 +00:00
bd31fa766a Remove non-existant symbols from linker script (John Levon) 2008-12-17 21:42:49 +00:00
c2fb8bfee3 Convert linker script comments & linker args to be Solaris compat (John Levon) 2008-12-17 21:39:41 +00:00
0604e9efe0 Fix __sun macro check (John Levon) 2008-12-17 21:31:51 +00:00
e5fc0aad31 Fix return type for Xen open subdriver method impl (John Levon) 2008-12-17 21:26:16 +00:00
6add3883a6 Fix openvz crash when setting vcpus & initialize mutex (Anton Protopopov) 2008-12-17 21:13:19 +00:00
34cd4f9076 Remove trailing semi-colons causing empty statement warnings (John Levon) 2008-12-17 21:09:44 +00:00
7e58aaa7ae Remove use of anonymous unions for non-GCC (John Levon) 2008-12-17 18:12:07 +00:00
6ded3ebad5 portability: don't include <endian.h> or <byteswap.h>
* src/storage_backend_fs.c: Don't include <endian.h> or <byteswap.h>.
(LV_BIG_ENDIAN, LV_LITTLE_ENDIAN): Define.
Use those instead of __BIG_ENDIAN and __LITTLE_ENDIAN.
2008-12-17 18:08:42 +00:00
f4cbc9370e Remove use of _PATH_DEVNULL in favour of /dev/null for portability (John Levon) 2008-12-17 18:04:55 +00:00
4cea12bb69 enforce the "include <config.h> first" rule
* qemud/Makefile.am: Ensure that the generated remote_protocol.c
includes <config.h> first.
* Makefile.maint (sc_require_config_h_first): New rule, so that
"make syntax-check" enforces this.
* .x-sc_require_config_h_first: New file.
* Makefile.am (.x-sc_require_config_h_first): Add it.
* qemud/remote_protocol.x: Don't include <config.h> here.
* qemud/remote_protocol.c: Regenerate.
2008-12-17 17:23:21 +00:00
e4c7e12300 let gcc's -Wformat do its job; avoid "make syntax-check" failure
* src/util.c (virAsprintf): Remove trailing space.
* src/util.h (virAsprintf): Use ATTRIBUTE_FORMAT.
* HACKING (Printf-style functions): New section.
2008-12-17 17:22:43 +00:00
53611889ff Add missing checks for read-only connection flag (CVE-2008-5086) 2008-12-17 16:45:22 +00:00
ed671f0e88 * configure.in: detect syslog.h
daniel
2008-12-17 16:08:47 +00:00
9e8c4fe304 use $(top_srcdir) for m4/ and $(VC_LIST) 2008-12-17 08:30:20 +00:00
7e6a06aeae fix numa-related (and kernel-dependent) test failures
This change is required on some kernels due to the way a change in
the kernel's CONFIG_NR_CPUS propagates through the numa library.
* src/qemu_conf.c (qemudCapsInitNUMA): Pass numa_all_cpus_ptr->size/8
as the buffer-length-in-bytes in the call to numa_node_to_cpus, since
that's what is required on second and subseqent calls.
* src/uml_conf.c (umlCapsInitNUMA): Likewise.
2008-12-17 07:05:45 +00:00
0e459cbdfb Sanitize qemu monitor reads. 2008-12-16 22:34:13 +00:00
36c612b21c add virAsprintf 2008-12-15 20:09:29 +00:00
e4471a7ac7 * src/storage_driver.c: fix a segfault, patch by Miloslav TrmaC
daniel
2008-12-15 15:34:30 +00:00
43b897c17a Fix deadlock when reloading configs 2008-12-15 11:00:11 +00:00
289d52c49e remove redundant optname arguments
This is the second part of the change mentioned here:

  http://thread.gmane.org/gmane.comp.emulators.libvirt/10331

It removes the essentially redundant "optname" parameter
from each of the vshCommandOptNetworkBy and vshCommandOptDomainBy
functions as well as the correspond macros (without "By" suffix).
Now, instead of always passing the optname, "domain", to
vshCommandOptDomainBy, that function requires that its command
argument refer to an opts array containing a "domain" option.

This normalization makes one more help-related change:
it renames the net-start "name" argument to the more
sensible and consistent "network".
* src/virsh.c (VSH_BYNAME, vshCommandOptDomain)
(cmd_has_option): New function, used in vshCommandOptDomainBy
and vshCommandOptNetworkBy.
(vshCommandOptDomainBy, vshCommandOptNetworkBy): Remove the optname
parameter, it's always "domain" ("network").  Update all callers.
Call cmd_has_option.
(vshCommandOptNetwork, cmdAutostart, cmdConsole, cmdDomstate)
(cmdDomblkstat, cmdDomIfstat, cmdSuspend, cmdUndefine, cmdStart)
(cmdSave, cmdSchedinfo, cmdDump, cmdResume, cmdShutdown)
(cmdReboot, cmdDestroy, cmdDominfo, cmdVcpuinfo, cmdVcpupin)
(cmdSetvcpus, cmdSetmem, cmdSetmaxmem, cmdDumpXML, cmdDomname)
(cmdDomid, cmdDomuuid, cmdMigrate, cmdNetworkAutostart)
(cmdNetworkDestroy, cmdNetworkDumpXML, cmdNetworkName)
(opts_network_start, cmdNetworkStart, cmdNetworkUndefine)
(cmdNetworkUuid, cmdVNCDisplay, cmdTTYConsole, cmdAttachDevice)
(cmdDetachDevice, cmdAttachInterface, cmdDetachInterface)
(cmdAttachDisk, cmdDetachDisk, cmdEdit)
* src/Makefile.am (virsh-pool-edit.c): This code is generated
from cmdEdit, and cmdEdit uses the vshCommandOptDomain macro which
now, with the changes above, has only 3 (was 4) arguments, yet the
macro use is mapped to vshCommandOptPool, which still requires 4
arguments.  So this change adjusts the sed code to reinsert the
just-removed argument -- we're not changing pool-related code right
now, because it's not as straight-forward.
2008-12-15 10:26:54 +00:00
7125975d3c syntax-check: enforce the no-cvs-keywords prohibition
* Makefile.maint (sc_prohibit_cvs_keyword): New rule.
Suggested by Daniel Veillard.
The new test exposed two uses of $Date$.
* docs/Goals: Don't use $Date$.
* python/TODO: Likewise.
2008-12-15 10:24:54 +00:00
30bc0a10f3 avoid a spurious test failure on non-numa systems
* tests/daemon-conf: Ignore a spurious libnuma warning.
Reported by Daniel Veillard.
2008-12-12 16:11:50 +00:00
1b3370b43f Oops did the wrong fix in previous commit, correct fix, Daniel 2008-12-12 14:01:03 +00:00
aff9fb9045 * Makefile.maint: fix tabs in C source error message based on
Dave Allan feedback
daniel
2008-12-12 13:58:25 +00:00
9c5470d292 remove cvs $Id$ strings
* po/id.po: Likewise.
* qemud/remote_generate_stubs.pl: Likewise.
* src/virsh.c: Likewise.
* tests/testutils.c: Likewise.
* tests/testutils.h: Likewise.
* RENAMES: Likewise.
2008-12-12 12:45:34 +00:00
8c0c10475d *** empty log message *** 2008-12-12 12:19:21 +00:00
506629e619 remove unused xmlrpc-related files
* src/xmlrpc.h: Remove file.
* src/xmlrpc.c: Likewise.
* tests/test_xmlrpc.sh: Likewise.
* tests/xmlrpctest.c: Likewise.
* tests/xmlrpcserver.py: Likewise.
* tests/Makefile.am (EXTRA_DIST): Remove xmlserver.py.
(noinst_PROGRAMS): Remove xmlrpctest, along with associated variables.
* po/POTFILES.in: Remove src/xmlrpc.c.
* tests/.cvsignore: Remove xmlrpctest.
2008-12-12 11:31:15 +00:00
2e59a005fd fix bits/bytes memory request mismatches
* src/qemu_conf.c src/uml_conf.c: fix a couple of places where
  we were requesting 8 times the required amount of memory,
  patch by Dave Allan
daniel
2008-12-12 10:39:19 +00:00
ccae0a4074 look for devhelp.xsl in $(srcdir) 2008-12-12 09:47:14 +00:00
2ddb440cbb fix serial/parallel virtual devices over tcp, unix and telnet 2008-12-12 09:39:31 +00:00
f998f82598 add --version support to libvirtd
* qemud/qemud.c: add --version support to libvirtd, patch by
  Dave Allan
* AUTHORS: add Dave Allan
Daniel
2008-12-12 07:56:50 +00:00
5257bac05a * libvirt.spec.in: fix a conditional bug in spec file #460510,
patch by Dave Allan
daniel
2008-12-12 07:36:20 +00:00
e2d2b7d577 * src/util.c: retry poll() in EINTR failures, patch by Dave Allan
daniel
2008-12-12 07:29:39 +00:00
762863d728 build: avoid libvirtd link failure with CFLAGS=-g
* qemud/Makefile.am (libvirtd_LDADD): Add gnulib's libgnu.la last.
Otherwise, building with -g (no inlining) would fail due to a use
of c_isspace in libvirt_driver_qemu.a, which used to followed
libgnu.a in the link command.
2008-12-11 18:11:41 +00:00
be2d2e06e2 syntax-check: prohibit all new uses of gethostby* functions
* Makefile.maint (sc_prohibit_gethostby): New rule.
* .x-sc_prohibit_gethostby: Exempt the few existing uses.
2008-12-11 15:14:03 +00:00
63efdb85c1 Fix locking issue in test driver VolLookupByPath 2008-12-11 15:04:09 +00:00
bae8899a46 Fix rpm build by installing logrotate config. 2008-12-11 15:02:39 +00:00
3130848a10 Fix a locking issue in PoolGetAutostart. 2008-12-11 15:00:12 +00:00
52037657dc Fix segfault if virtual network does not have a bridge name 2008-12-11 14:57:45 +00:00
a3d570c7b9 Adding support for SDL fullscreen option
* src/domain_conf.c src/domain_conf.h src/qemu_conf.c
  tests/qemuxml2argvtest.c tests/qemuxml2xmltest.c
  tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.args
  tests/qemuxml2argvdata/qemuxml2argv-graphics-sdl-fullscreen.xml:
  slightly modified patch for SDL fullscreen from Itamar Heim
* docs/formatdomain.html docs/formatdomain.html.in docs/libvirt.rng:
  update the schemas and docs about the sdl graphic element attributes
* AUTHORS: add Itamar Heim
Daniel
2008-12-11 11:44:30 +00:00
bd0af10802 avoid a new "make distcheck" failure
Distribute the new file, libvirtd.logrotate.in, and make
distclean remove the build product, libvirtd.logrotate.
* qemud/Makefile.am (EXTRA_DIST): Add libvirtd.logrotate.in.
(DISTCLEANFILES): Initialize, and append libvirtd.logrotate.in.
2008-12-10 19:21:00 +00:00
7989276259 avoid format string warnings
* src/openvz_conf.c (openvzGetNodeCPUs): Add "%s" arg before _(...).
* src/uml_driver.c (umlDomainBlockPeek): Likewise.
2008-12-10 16:35:00 +00:00
3693a02fff fix just-broken "virsh start" and "virsh pool-start" commands
* src/virsh.c (cmdPoolStart, cmdStart): Change hard-coded
vshCommandOptDomainBy string argument to match just-changed
option name.  Cole Robinson reported that "virsh start" was
broken and provided that part of the fix.
Bug introduced by yesterday's "virsh.c: tweak options to produce
more accurate help".
* tests/start: New file.  Test for the above fix.
* tests/Makefile.am (test_scripts): Add start.
2008-12-09 21:38:04 +00:00
54f4ed6ba1 logrotate qemu monitor logs 2008-12-09 20:22:39 +00:00
1c9968a2b1 virsh.c: tweak options to produce more accurate help
* src/virsh.c: Adjust some vshCmdOptDef command option flags
to improve auto-generated help command syntax.
2008-12-08 13:22:44 +00:00
c9319f315c virsh.c: remove all "syntax" vshCmdInfo entries.
* src/virsh.c: ... now that info is generated.
2008-12-08 13:22:13 +00:00
34e5d2941c virsh.c: add missing (yet empty) "desc" strings
* src/virsh.c: Now, every command must have a "desc" string,
even if it has zero length.  Mark these, so they'll be filled in.
2008-12-08 13:21:30 +00:00
6f61232852 virsh.c: generate each "virsh help COMMAND"s synopsis
* src/virsh.c: Also, diagnose extra arguments after --help (-h).
2008-12-08 13:14:48 +00:00
62db1b13f7 Fix mixup between LDFLAGS & LDADD vars 2008-12-08 12:04:27 +00:00
ca1a1b06d0 Workaround broken limits.h on Debian etch 2008-12-08 11:28:37 +00:00
abb02bd18b Fix autostart of domains with virtual networks used 2008-12-08 11:18:47 +00:00
73bc9c163c Fix NULL crash & integer overflow 2008-12-07 20:45:28 +00:00
5abce0805b Fix test driver storage deadlock 2008-12-07 20:21:46 +00:00
a2b2ada85c Fix return value in testStoragePoolBuild for test driver 2008-12-07 14:08:37 +00:00
466f86052f Fix a compilation problem with old dbus,
Daniel
2008-12-05 15:05:48 +00:00
af61834687 Fix Xen proxy build 2008-12-05 10:10:41 +00:00
491b4eab14 Remove unused driver arg from monitor APIs 2008-12-04 22:19:30 +00:00
4fb8dd5493 Make thread pool size configurable & allow client connection limit 2008-12-04 22:18:44 +00:00
4a00119a0a Use a thread pool for RPC dispatch 2008-12-04 22:16:40 +00:00
f8a5192347 Make event loop thread safe & re-entrant safe 2008-12-04 22:14:15 +00:00
dd6b3318f3 Simplify error reporting rules 2008-12-04 22:12:53 +00:00
c3e308c2fe Change daemon client linked list into array 2008-12-04 22:09:35 +00:00
792322f00d Change RPC dispatch to use an array lookup for handler functions 2008-12-04 22:03:24 +00:00
746f4373e7 Impl of threading locking APIs 2008-12-04 22:00:14 +00:00
d48717054c Add locking for thread safety to nodedevice drivers 2008-12-04 21:48:31 +00:00
e8a4ea75a3 Merge all return paths from node device driver APIs 2008-12-04 21:46:34 +00:00
04a31e99fc Add locking for thread safety to openvz driver 2008-12-04 21:44:55 +00:00
e8c92c3b17 Merge all return paths from openvz driver APIs 2008-12-04 21:41:51 +00:00
b6ee63d8bb Add locking for thread safety to storage driver 2008-12-04 21:40:42 +00:00
c38d4d54c6 Merge all return paths from storage driver APIs 2008-12-04 21:39:45 +00:00
bff6ac7b63 Add locking for thread safety to network driver 2008-12-04 21:38:38 +00:00
b6dbbdc9fe Merge all return paths from network driver APIs 2008-12-04 21:37:52 +00:00
055c2b25d2 Add locking for thread safety to UML driver 2008-12-04 21:14:39 +00:00
773c8bac35 Merge all return paths from UML driver APIs 2008-12-04 21:13:58 +00:00
965c1bfee4 Add locking for thread safety to LXC driver 2008-12-04 21:12:41 +00:00
5305c55849 Merge all return paths from LXC driver APIs 2008-12-04 21:11:41 +00:00
bc898df2c7 QEMU domain event thread safety 2008-12-04 21:09:20 +00:00
3527f16a94 Add locking for (nearly complete) thread safety to QEMU driver 2008-12-04 21:06:41 +00:00
ea960fb719 Merge all return paths from QEMU driver APIs 2008-12-04 21:04:30 +00:00
8492cd2084 Stub out node device APIs in test driver 2008-12-04 21:00:50 +00:00
2a23198886 Add locking for thread safety to test driver 2008-12-04 20:59:06 +00:00
3540f6af23 Merge all return paths from test driver APIs 2008-12-04 20:57:47 +00:00
069252f0e6 Remove macros for accessing test driver internal state 2008-12-04 20:56:10 +00:00
b43401b915 Add thread locking stubs 2008-12-04 20:53:20 +00:00
a2232a5cc2 release of 0.5.1
* src/libvirt_sym.version.in configure.in NEWS docs/*: release
  of 0.5.1
* po/*: updated and regenerated
daniel
2008-12-04 15:54:26 +00:00
1d9a22b785 fix crash and regression when defining a storage volume without a format
* src/storage_conf.c: fix crash and regression when defining
  a storage volume without a format (Cole Robinson)
Daniel
2008-12-04 15:22:04 +00:00
76944e8137 Fix documentation cut and paste errors, and a virsh typo. 2008-12-04 14:51:57 +00:00
b9b9c8b020 Increase timeout for initial monitor poll, to prevent a guest from failing to start if it has to wait for a physical cdrom to spin up. 2008-12-04 14:47:12 +00:00
4fc29fa9f4 patch setting MTU on tap interface
* src/bridge.c: patch setting MTU on tap interface to be the same
  as the value for the bridge (Eduardo Habkost)
daniel
2008-12-04 14:38:31 +00:00
f9d77feca9 ChangeLog: remove stray commas 2008-12-04 13:08:32 +00:00
1d7d2fae10 Differentiate between active and inactive configs by honoring the
VIR_DOMAIN_XML_INACTIVE flag.
2008-12-04 12:02:59 +00:00
38b402ce13 also look for /usb/bin/kvm 2008-12-04 10:45:31 +00:00
fa4fc0321a fix inadequate initialization in storage and test drivers
* src/storage_driver.c (storageListPools): Set all "names" entries to 0.
(storageListDefinedPools, storagePoolListVolumes): Likewise.
* src/test.c (testStoragePoolListVolumes): Likewise.
2008-12-02 15:59:14 +00:00
a904a56c36 Older distributions (i.e. RHEL-5) don't have udevadm at all, but they do
have udevsettle.  So change our tests to prefer udevadm if it exists, but
to fall back to udevsettle if it does not.

Signed-off-by: Chris Lalancette <clalance@redhat.com>
2008-12-02 12:41:29 +00:00
821b41f9f7 Fix driver ordering to make domain autostart work (Gerd von Egidy) 2008-12-02 11:37:55 +00:00
a429e221df Fix recording of UML driver watch to make inotify work 2008-12-02 11:23:27 +00:00
fb23f4f4f4 tests: daemon-conf: accommodate numeric-valued config params
This test would hang when failing to perturb the soon-to-be-
added numeric (and non-boolean) valued parameters, max_clients,
max_workers, min_workers.
* tests/daemon-conf: Require that all commented-out settings
in libvirtd.conf have the same form.  Before, two parameters
were not being tested, since a space had snuck between the
leading "#" and the "param = value" parts.
Apply each RHS-value-perturbing transformation
separately, not in series.
Let VERBOSE=yes turn on debugging.
Be more verbose by default, since this is a relatively
long-running test.
* qemud/libvirtd.conf: Normalize the spacing around each setting
that is to be perturbed by tests/daemon-conf.
2008-12-01 15:04:28 +00:00
0e9349a28d uml: don't free an uninitialized variable
* src/uml_driver.c (umlDomainShutdown): Initialize "info".
Patch and bug report from Ron Yorston <rmy@tigress.co.uk>.
2008-12-01 11:08:16 +00:00
937c1e9e92 Close directory handle when done 2008-11-30 18:37:35 +00:00
5acdb5761d Prefer xenstore driver for listDomains, since xen HV reports ghost ids of
already shutdown domains in some xen versions
2008-11-28 15:25:04 +00:00
d88d459d7b Allow remote://hostname/ style URIs for automatic driver probe. Fix virGetVersion impl 2008-11-28 12:03:20 +00:00
319b83fc28 Fix XM driver handling of disk source paths 2008-11-28 11:23:34 +00:00
c23ff311fc Fix libnuma use to build with v1 compatability code 2008-11-28 11:20:27 +00:00
a9567e09ef Instead of relying solely on polling for /dev devices to appear in libvirt, we
really should be synchronizing against udev.  This is generally done by a call
to udevsettle, which is exactly what this patch implements for the storage
backends that are likely to create new /dev nodes.  I believe I've read that
even after udevsettle, you are not guaranteed that devices are all the way
created, so we still need the polling in the rest of the sources, but this
should give us a much better chance of things existing as we expect.

Signed-off-by: Chris Lalancette <clalance@redhat.com>
2008-11-28 07:50:20 +00:00
d20d6b1bb0 Currently libvirt can race with udev
creation of /dev/disk/by-{id,path}, so if we fail to open the directory, retry
up to 5 seconds.  This is only likely to happen on hosts that are:

1) diskless (so /dev/disk/by-{id,path} doesn't exist already), and
2) slow, and/or heavily loaded (meaning that udev can take some time to create
the /dev nodes).

Signed-off-by: Chris Lalancette <clalance@redhat.com>
2008-11-28 07:42:21 +00:00
431d40fa9c * src/xen_unified.c: use preferably xend method to update
the maximum memory of a xen guest (Jim Fehlig)
Daniel
2008-11-27 16:16:13 +00:00
60c8b285a6 * libvirt.spec.in: cleanups and missing dep for hal
Daniel
2008-11-26 14:46:49 +00:00
718 changed files with 461659 additions and 252751 deletions

View File

@ -1,7 +1,5 @@
*.a
*.o
*.orig
*.rej
*~
.git
ABOUT-NLS
@ -27,7 +25,6 @@ libvirt.pc
libvirt.spec
ltconfig
ltmain.sh
m4
mingw32-libvirt.spec
mkinstalldirs
results.log

5
.gitignore vendored
View File

@ -1,7 +1,5 @@
*.a
*.o
*.orig
*.rej
*~
.git
ABOUT-NLS
@ -21,13 +19,14 @@ config.status
config.sub
configure
coverage
cscope.files
cscope.out
libtool
libvirt-*.tar.gz
libvirt.pc
libvirt.spec
ltconfig
ltmain.sh
m4
mingw32-libvirt.spec
mkinstalldirs
results.log

298
.hgignore Normal file
View File

@ -0,0 +1,298 @@
syntax: glob
*.a
*.o
*~
.git
ABOUT-NLS
COPYING
INSTALL
Makefile
Makefile.in
aclocal.m4
autom4te.cache
build-aux/compile
build-aux/config.guess
build-aux/config.rpath
build-aux/config.sub
build-aux/depcomp
build-aux/install-sh
build-aux/ltmain.sh
build-aux/missing
build-aux/mkinstalldirs
build-aux/mktempd
config.cache
config.guess
config.h
config.h.in
config.log
config.rpath
config.status
config.sub
configure
coverage
docs/.memdump
docs/Makefile
docs/Makefile.in
docs/apibuild.pyc
docs/devhelp/Makefile
docs/devhelp/Makefile.in
docs/devhelp/libvirt.devhelp
docs/examples/.deps
docs/examples/.libs
docs/examples/.memdump
docs/examples/Makefile
docs/examples/Makefile.in
docs/examples/info1
docs/examples/python/Makefile
docs/examples/python/Makefile.in
docs/examples/suspend
docs/schemas/Makefile
docs/schemas/Makefile.in
examples/domain-events/events-c/*.exe
examples/domain-events/events-c/.deps
examples/domain-events/events-c/.libs
examples/domain-events/events-c/Makefile
examples/domain-events/events-c/Makefile.in
examples/domain-events/events-c/event-test
examples/hellolibvirt/.deps
examples/hellolibvirt/.libs
examples/hellolibvirt/Makefile
examples/hellolibvirt/Makefile.in
examples/hellolibvirt/hellolibvirt
gnulib/lib/*.la
gnulib/lib/*.lo
gnulib/lib/.deps
gnulib/lib/.libs
gnulib/lib/Makefile
gnulib/lib/Makefile.in
gnulib/lib/alloca.h
gnulib/lib/arpa/inet.h
gnulib/lib/arpa_inet.h
gnulib/lib/errno.h
gnulib/lib/float.h
gnulib/lib/netdb.h
gnulib/lib/netinet/in.h
gnulib/lib/netinet_in.h
gnulib/lib/poll.h
gnulib/lib/stdbool.h
gnulib/lib/stdint.h
gnulib/lib/stdio.h
gnulib/lib/stdlib.h
gnulib/lib/string.h
gnulib/lib/sys/select.h
gnulib/lib/sys/socket.h
gnulib/lib/sys/stat.h
gnulib/lib/sys/time.h
gnulib/lib/sys_ioctl.h
gnulib/lib/sys_select.h
gnulib/lib/sys_socket.h
gnulib/lib/sys_stat.h
gnulib/lib/sys_time.h
gnulib/lib/time.h
gnulib/lib/unistd.h
gnulib/lib/wchar.h
gnulib/tests/.deps
gnulib/tests/.libs
gnulib/tests/Makefile
gnulib/tests/Makefile.in
gnulib/tests/sys
gnulib/tests/test-EOVERFLOW
gnulib/tests/test-alloca-opt
gnulib/tests/test-arpa_inet
gnulib/tests/test-c-ctype
gnulib/tests/test-errno
gnulib/tests/test-fseeko
gnulib/tests/test-getaddrinfo
gnulib/tests/test-getdelim
gnulib/tests/test-gethostname
gnulib/tests/test-getline
gnulib/tests/test-gettimeofday
gnulib/tests/test-lseek
gnulib/tests/test-lstat
gnulib/tests/test-netdb
gnulib/tests/test-netinet_in
gnulib/tests/test-perror
gnulib/tests/test-poll
gnulib/tests/test-random_r
gnulib/tests/test-snprintf
gnulib/tests/test-sockets
gnulib/tests/test-stdbool
gnulib/tests/test-stdint
gnulib/tests/test-stdio
gnulib/tests/test-stdlib
gnulib/tests/test-strerror
gnulib/tests/test-string
gnulib/tests/test-sys_select
gnulib/tests/test-sys_socket
gnulib/tests/test-sys_stat
gnulib/tests/test-sys_time
gnulib/tests/test-time
gnulib/tests/test-unistd
gnulib/tests/test-vasnprintf
gnulib/tests/test-vasprintf
gnulib/tests/test-wchar
include/Makefile
include/Makefile.in
include/libvirt/Makefile
include/libvirt/Makefile.in
libtool
libvirt-*.tar.gz
libvirt.pc
libvirt.spec
ltconfig
ltmain.sh
m4/Makefile
m4/Makefile.in
m4/acinclude.m4
m4/aclocal.m4
m4/codeset.m4
m4/gettext.m4
m4/glibc21.m4
m4/iconv.m4
m4/intdiv0.m4
m4/intmax.m4
m4/inttypes-pri.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/isc-posix.m4
m4/lcmessage.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/libtool.m4
m4/longdouble.m4
m4/longlong.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
m4/nls.m4
m4/po.m4
m4/printf-posix.m4
m4/progtest.m4
m4/signed.m4
m4/size_max.m4
m4/stdint_h.m4
m4/uintmax_t.m4
m4/ulonglong.m4
m4/wchar_t.m4
m4/wint_t.m4
m4/xsize.m4
mingw32-libvirt.spec
mkinstalldirs
po/*.gmo
po/Makefile
po/Makefile.in
po/Makefile.in.in
po/Makevars.template
po/POTFILES
po/Rules-quot
po/boldquot.sed
po/en@boldquot.header
po/en@quot.header
po/insert-header.sin
po/quot.sed
po/remove-potcdate.sed
po/remove-potcdate.sin
po/stamp-po
proxy/.deps
proxy/.libs
proxy/Makefile
proxy/Makefile.in
proxy/libvirt_proxy
python/*.la
python/*.lo
python/*.loT
python/*.pyc
python/.deps
python/.libs
python/Makefile
python/Makefile.in
python/gen_prog
python/generated.stamp
python/libvirt-export.c
python/libvirt-py.[ch]
python/libvirt.py
python/libvirtclass.py
python/libvirtclass.txt
python/tests/Makefile
python/tests/Makefile.in
qemud/*.gcda
qemud/*.gcno
qemud/*.la
qemud/*.lo
qemud/.deps
qemud/.libs
qemud/Makefile
qemud/Makefile.in
qemud/libvirt_qemud
qemud/libvirtd
qemud/libvirtd.init
qemud/libvirtd.logrotate
results.log
src/*.cov
src/*.exe
src/*.gcda
src/*.gcno
src/*.gcov
src/*.i
src/*.la
src/*.lo
src/*.loT
src/*.s
src/.deps
src/.libs
src/Makefile
src/Makefile.in
src/libvirt.syms
src/libvirt_lxc
src/libvirt_parthelper
src/virsh
src/virsh-net-edit.c
src/virsh-pool-edit.c
stamp-h
stamp-h.in
stamp-h1
tests/*.exe
tests/*.gcda
tests/*.gcno
tests/.deps
tests/.libs
tests/Makefile
tests/Makefile.in
tests/confdata/Makefile
tests/confdata/Makefile.in
tests/conftest
tests/eventtest
tests/nodedevxml2xmltest
tests/nodeinfotest
tests/object-locking
tests/object-locking-files.txt
tests/object-locking.cmi
tests/object-locking.cmx
tests/qemuargv2xmltest
tests/qemuhelptest
tests/qemuxml2argvtest
tests/qemuxml2xmltest
tests/qparamtest
tests/reconnect
tests/seclabeltest
tests/sexpr2xmldata/Makefile
tests/sexpr2xmldata/Makefile.in
tests/sexpr2xmltest
tests/statstest
tests/virshtest
tests/xencapsdata/Makefile
tests/xencapsdata/Makefile.in
tests/xencapstest
tests/xmconfigdata/Makefile
tests/xmconfigdata/Makefile.in
tests/xmconfigtest
tests/xml2sexprdata/Makefile
tests/xml2sexprdata/Makefile.in
tests/xml2sexprtest
tools/Makefile
tools/Makefile.in
tools/virt-xml-validate
tools/virt-xml-validate.1
update.log

View File

@ -1,4 +1,5 @@
^src/util\.c$
^src/xend_internal\.c$
^src/util-lib\.c$
^qemud/qemud.c$
^gnulib/

1
.x-sc_m4_quote_check Normal file
View File

@ -0,0 +1 @@
^gnulib/m4/intl\.m4$

View File

@ -0,0 +1 @@
gnulib/.*

View File

@ -0,0 +1,8 @@
ChangeLog
docs/devhelp/libvirt-virterror.html
docs/html/libvirt-virterror.html
docs/libvirt-api.xml
docs/libvirt-refs.xml
include/libvirt/virterror.h
qemud/remote.c
src/virterror.c

3
.x-sc_prohibit_asprintf Normal file
View File

@ -0,0 +1,3 @@
^gnulib/
^po/
ChangeLog

3
.x-sc_prohibit_gethostby Normal file
View File

@ -0,0 +1,3 @@
gnulib/lib/getaddrinfo.c
gnulib/m4/
src/xend_internal.c

View File

@ -0,0 +1,10 @@
^gnulib/
^po/
ChangeLog
^Makefile*
^docs/
^tests/
^src/virsh\.c
^src/console\.c
^src/virterror\.c
^build-aux/

View File

@ -0,0 +1,2 @@
^docs/examples/info1\.c$
^docs/examples/suspend\.c$

32
AUTHORS
View File

@ -20,7 +20,8 @@ The primary maintainers and people with commit access rights:
Dave Leskovec <dlesko@linux.vnet.ibm.com>
Cole Robinson <crobinso@redhat.com>
Dan Smith <danms@us.ibm.com>
Guido Guenther <agx@sigxcpu.org>
Guido Günther <agx@sigxcpu.org>
John Levon <john.levon@sun.com>
Patches have also been contributed by:
@ -47,18 +48,41 @@ Patches have also been contributed by:
Stefan de Konink <dekonink@kinkrsoftware.nl>
Kaitlin Rupert <kaitlin@linux.vnet.ibm.com>
Evgeniy Sokolov <evg@openvz.org>
John Levon <john.levon@sun.com>
David Lively <dlively@virtualiron.com>
Charles Duffy <Charles_Duffy@messageone.com>
Nguyen Anh Quynh <aquynh@gmail.com>
James Morris <jmorris@namei.org>
Chris Wrigh <chrisw@redhat.com>
Ben Guthro <bguthro@virtualiron.com>
Ben Guthro <ben.guthro@gmail.com>
Shigeki Sakamoto <fj0588di@aa.jp.fujitsu.com>
Gerd von Egidy <lists@egidy.de>
Itamar Heim <iheim@redhat.com>
Dave Allan <dallan@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@canonical.com>
Laine Stump <laine@redhat.com>
Abel Míguez Rodríguez<amiguezr@pdi.ucm.es>
Doug Goldstein <cardoe@gentoo.org>
Javier Fontan <jfontan@gmail.com>
Federico Simoncelli <federico.simoncelli@gmail.com>
Amy Griffis <amy.griffis@hp.com>
Henrik Persson E <henrik.e.persson@ericsson.com>
Satoru SATOH <satoru.satoh@gmail.com>
[....send patches to get your name here....]
The libvirt Logo was designed by Diana Fong
-- End
;; Local Variables:
;; coding: utf-8
;; End:

5003
ChangeLog

File diff suppressed because it is too large Load Diff

72
HACKING
View File

@ -91,6 +91,62 @@ Usually they're in macro definitions or strings, and should be converted
anyhow.
C types
=======
Use the right type.
Scalars
-------
If you're using "int" or "long", odds are good that there's a better type.
If a variable is counting something, be sure to declare it with an
unsigned type.
If it's memory-size-related, use size_t (use ssize_t only if required).
If it's file-size related, use uintmax_t, or maybe off_t.
If it's file-offset related (i.e., signed), use off_t.
If it's just counting small numbers use "unsigned int";
(on all but oddball embedded systems, you can assume that that
type is at least four bytes wide).
If a variable has boolean semantics, give it the "bool" type
and use the corresponding "true" and "false" macros. It's ok
to include <stdbool.h>, since libvirt's use of gnulib ensures
that it exists and is usable.
In the unusual event that you require a specific width, use a
standard type like int32_t, uint32_t, uint64_t, etc.
While using "bool" is good for readability, it comes with minor caveats:
- Don't use "bool" in places where the type size must be constant across
all systems, like public interfaces and on-the-wire protocols. Note
that it would be possible (albeit wasteful) to use "bool" in libvirt's
logical wire protocol, since XDR maps that to its lower-level bool_t
type, which *is* fixed-size.
- Don't compare a bool variable against the literal, "true",
since a value with a logical non-false value need not be "1".
I.e., don't write "if (seen == true) ...". Rather, write "if (seen)...".
Of course, take all of the above with a grain of salt. If you're about
to use some system interface that requires a type like size_t, pid_t or
off_t, use matching types for any corresponding variables.
Also, if you try to use e.g., "unsigned int" as a type, and that
conflicts with the signedness of a related variable, sometimes
it's best just to use the *wrong* type, if "pulling the thread"
and fixing all related variables would be too invasive.
Finally, while using descriptive types is important, be careful not to
go overboard. If whatever you're doing causes warnings, or requires
casts, then reconsider or ask for help.
Pointers
--------
Ensure that all of your pointers are "const-correct".
Unless a pointer is used to modify the pointed-to storage,
give it the "const" attribute. That way, the reader knows
up-front that this is a read-only pointer. Perhaps more
importantly, if we're diligent about this, when you see a non-const
pointer, you're guaranteed that it is used to modify the storage
it points to, or it is aliased to another pointer that is.
Low level memory management
===========================
@ -247,6 +303,22 @@ are some special reasons why you cannot include these files
explicitly.
Printf-style functions
======================
Whenever you add a new printf-style function, i.e., one with a format
string argument and following "..." in its prototype, be sure to use
gcc's printf attribute directive in the prototype. For example, here's
the one for virAsprintf, in util.h:
int virAsprintf(char **strp, const char *fmt, ...)
ATTRIBUTE_FORMAT(printf, 2, 3);
This makes it so gcc's -Wformat and -Wformat-security options can do
their jobs and cross-check format strings with the number and types
of arguments.
Libvirt commiters guidelines
============================

View File

@ -3,8 +3,8 @@
LCOV = lcov
GENHTML = genhtml
SUBDIRS = gnulib/lib include src qemud proxy docs gnulib/tests \
python tests po examples/domain-events/events-c
SUBDIRS = gnulib/lib include src qemud tools proxy docs gnulib/tests \
python tests po examples/domain-events/events-c examples/hellolibvirt
ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4
@ -14,9 +14,13 @@ EXTRA_DIST = \
libvirt.pc libvirt.pc.in \
$(man_MANS) autobuild.sh \
.x-sc_avoid_if_before_free \
.x-sc_require_config_h_first \
.x-sc_prohibit_strcmp \
.x-sc_require_config_h \
autogen.sh
.x-sc_prohibit_nonreentrant \
Makefile.nonreentrant \
autogen.sh \
mylibtool
man_MANS = virsh.1

View File

@ -1,5 +1,5 @@
# Customize Makefile.maint. -*- makefile -*-
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
# Copyright (C) 2003-2009 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -26,32 +26,37 @@ url_dir_list = \
# Tests not to run as part of "make distcheck".
local-checks-to-skip = \
makefile_path_separator_check \
changelog-check \
check-AUTHORS \
makefile-check \
sc_tight_scope \
makefile_path_separator_check \
patch-check \
sc_GPL_version \
sc_always_defined_macros \
sc_cast_of_alloca_return_value \
sc_dd_max_sym_length \
sc_error_exit_success \
sc_file_system \
sc_immutable_NEWS \
sc_makefile_path_separator_check \
sc_obsolete_symbols \
sc_prohibit_S_IS_definition \
sc_prohibit_atoi_atof \
sc_prohibit_jm_in_m4 \
sc_prohibit_quote_without_use \
sc_prohibit_quotearg_without_use \
sc_prohibit_stat_st_blocks \
sc_root_tests \
sc_space_tab \
sc_sun_os_names \
sc_system_h_headers \
sc_tight_scope \
sc_two_space_separator_in_usage \
sc_useless_cpp_parens \
patch-check \
check-AUTHORS \
changelog-check
sc_useless_cpp_parens
useless_free_options = \
--name=sexpr_free \
--name=VIR_FREE \
--name=xmlFree \
--name=xmlXPathFreeContext \
--name=xmlXPathFreeObject

View File

@ -8,11 +8,13 @@ gzip_rsyncable := \
$(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable)
GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
VC_LIST = build-aux/vc-list-files
VC_LIST = $(srcdir)/build-aux/vc-list-files
VC_LIST_EXCEPT = \
$(VC_LIST) | if test -f .x-$@; then grep -vEf .x-$@; else grep -v ChangeLog; fi
include Makefile.nonreentrant
# Prevent programs like 'sort' from considering distinct strings to be equal.
# Doing it here saves us from having to set LC_ALL elsewhere in this file.
export LC_ALL = C
@ -23,12 +25,15 @@ syntax-check-rules := $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \
.PHONY: $(syntax-check-rules)
local-checks-available = \
po-check copyright-check m4-check author_mark_check \
patch-check strftime-check $(syntax-check-rules) \
makefile_path_separator_check \
patch-check $(syntax-check-rules) \
makefile-check check-AUTHORS
.PHONY: $(local-checks-available)
# Arrange to print the name of each syntax-checking rule just before running it.
$(syntax-check-rules): %: %.m
$(patsubst %, %.m, $(syntax-check-rules)):
@echo "CHECK:" $(patsubst sc_%.m, %, $@)
local-check := $(filter-out $(local-checks-to-skip), $(local-checks-available))
syntax-check: $(local-check)
@ -43,6 +48,21 @@ syntax-check: $(local-check)
# exit 1; } || :
# FIXME: don't allow `#include .strings\.h' anywhere
# By default, _prohibit_regexp does not ignore case.
export ignore_case =
_ignore_case = $$(test -n "$$ignore_case" && echo -i || :)
# There are many rules below that prohibit constructs in this package.
# If the offending construct can be matched with a grep-E-style regexp,
# use this macro. The shell variables "re" and "msg" must be defined.
define _prohibit_regexp
dummy=; : so we do not need a semicolon before each use \
test "x$$re" != x || { echo '$(ME): re not defined' 1>&2; exit 1; }; \
test "x$$msg" != x || { echo '$(ME): msg not defined' 1>&2; exit 1; };\
grep $(_ignore_case) -nE "$$re" $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): '"$$msg" 1>&2; exit 1; } || :
endef
sc_avoid_if_before_free:
@$(srcdir)/build-aux/useless-if-before-free \
$(useless_free_options) \
@ -62,41 +82,59 @@ sc_avoid_write:
fi
sc_cast_of_argument_to_free:
@grep -nE '\<free \(\(' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): don'\''t cast free argument' 1>&2; \
exit 1; } || :
@re='\<free *\( *\(' msg='don'\''t cast free argument' \
$(_prohibit_regexp)
sc_cast_of_x_alloc_return_value:
@grep -nE '\*\) *x(m|c|re)alloc\>' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): don'\''t cast x*alloc return value' 1>&2; \
exit 1; } || :
@re='\*\) *x(m|c|re)alloc\>' \
msg='don'\''t cast x*alloc return value' \
$(_prohibit_regexp)
sc_cast_of_alloca_return_value:
@grep -nE '\*\) *alloca\>' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): don'\''t cast alloca return value' 1>&2; \
exit 1; } || :
@re='\*\) *alloca\>' msg='don'\''t cast alloca return value' \
$(_prohibit_regexp)
sc_space_tab:
@grep -n '[ ] ' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found SPACE-TAB sequence; remove the SPACE' \
1>&2; exit 1; } || :
@re='[ ] ' msg='found SPACE-TAB sequence; remove the SPACE' \
$(_prohibit_regexp)
# Don't use *scanf or the old ato* functions in `real' code.
# They provide no error checking mechanism.
# Instead, use strto* functions.
sc_prohibit_atoi_atof:
@grep -nE '\<([fs]?scanf|ato([filq]|ll))\>' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): do not use *scan''f, ato''f, ato''i, ato''l, ato''ll, ato''q, or ss''canf' \
1>&2; exit 1; } || :
@re='\<([fs]?scanf|ato([filq]|ll))\>' \
msg='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \
$(_prohibit_regexp)
# Use STREQ rather than comparing strcmp == 0, or != 0.
# Similarly, use STREQLEN or STRPREFIX rather than strncmp.
sc_prohibit_strcmp:
@grep -nE '! *str''n?cmp *\(|\<str''n?cmp *\([^)]+\) *==' \
$$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): use STREQ in place of the above uses of str''cmp' \
@grep -nE '! *strn?cmp *\(|\<strn?cmp *\([^)]+\) *==' \
$$($(VC_LIST_EXCEPT)) \
| grep -vE ':# *define STREQ(LEN)?\(' && \
{ echo '$(ME): use STREQ(LEN) in place of the above uses of strcmp(strncmp)' \
1>&2; exit 1; } || :
# Use virAsprintf rather than a'sprintf since *strp is undefined on error.
sc_prohibit_asprintf:
@re='\<[a]sprintf\>' \
msg='use virAsprintf, not a'sprintf \
$(_prohibit_regexp)
sc_prohibit_VIR_ERR_NO_MEMORY:
@re='\<V''IR_ERR_NO_MEMORY\>' \
msg='use virReportOOMError, not V'IR_ERR_NO_MEMORY \
$(_prohibit_regexp)
sc_prohibit_nonreentrant:
@fail=0 ; \
for i in $(NON_REENTRANT) ; \
do \
grep --before 2 --after 1 -nE "\<$$i\>[:space:]*\(" $$($(VC_LIST_EXCEPT)) && \
fail=1 && echo "$(ME): use $${i}_r, not $${i}" || : ; \
done ; \
exit $$fail
# Using EXIT_SUCCESS as the first argument to error is misleading,
# since when that parameter is 0, error does not exit. Use `0' instead.
sc_error_exit_success:
@ -106,12 +144,12 @@ sc_error_exit_success:
exit 1; } || :
sc_file_system:
@grep -ni 'file''system' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found use of "file''system";' \
'rewrite to use "file system"' 1>&2; \
exit 1; } || :
@re=file''system ignore_case=1 \
msg='found use of "file''system"; spell it "file system"' \
$(_prohibit_regexp)
sc_no_have_config_h:
# Don't use cpp tests of this symbol. All code assumes config.h is included.
sc_prohibit_have_config_h:
@grep -n '^# *if.*HAVE''_CONFIG_H' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found use of HAVE''_CONFIG_H; remove' \
1>&2; exit 1; } || :
@ -127,6 +165,25 @@ sc_require_config_h:
else :; \
fi
# You must include <config.h> before including any other header file.
sc_require_config_h_first:
@if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \
fail=0; \
for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \
grep '^# *include\>' $$i | sed 1q \
| grep '^# *include <config\.h>' > /dev/null \
|| { echo $$i; fail=1; }; \
done; \
test $$fail = 1 && \
{ echo '$(ME): the above files include some other header' \
'before <config.h>' 1>&2; exit 1; } || :; \
else :; \
fi
sc_prohibit_HAVE_MBRTOWC:
@re='\bHAVE_MBRTOWC\b' msg="do not use $$re; it is always defined" \
$(_prohibit_regexp)
# To use this "command" macro, you must first define two shell variables:
# h: the header, enclosed in <> or ""
# re: a regular expression that matches IFF something provided by $h is used.
@ -158,6 +215,36 @@ sc_prohibit_quotearg_without_use:
sc_prohibit_quote_without_use:
@h='"quote.h"' re='\<quote(_n)? *\(' $(_header_without_use)
# Don't include this header unless you use one of its functions.
sc_prohibit_long_options_without_use:
@h='"long-options.h"' re='\<parse_long_options *\(' \
$(_header_without_use)
# Don't include this header unless you use one of its functions.
sc_prohibit_inttostr_without_use:
@h='"inttostr.h"' re='\<(off|[iu]max|uint)tostr *\(' \
$(_header_without_use)
# Don't include this header unless you use one of its functions.
sc_prohibit_error_without_use:
@h='"error.h"' \
re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\
$(_header_without_use)
sc_prohibit_safe_read_without_use:
@h='"safe-read.h"' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
$(_header_without_use)
sc_prohibit_argmatch_without_use:
@h='"argmatch.h"' \
re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<argmatch(_exit_fn|_(in)?valid) *\()' \
$(_header_without_use)
sc_prohibit_root_dev_ino_without_use:
@h='"root-dev-ino.h"' \
re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
$(_header_without_use)
# Prohibit the inclusion of c-ctype.h without an actual use.
sc_prohibit_c_ctype_without_use:
@h='[<"]c-ctype.h[">]' re='\<c_($(ctype_re)) *\(' $(_header_without_use)
@ -169,10 +256,9 @@ sc_prohibit_ctype_h:
1>&2; exit 1; } || :
sc_obsolete_symbols:
@grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \
$$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY' \
1>&2; exit 1; } || :
@re='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \
msg='do not use HAVE''_FCNTL_H or O'_NDELAY \
$(_prohibit_regexp)
# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
@ -186,121 +272,15 @@ sc_changelog:
{ echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2; \
exit 1; } || :
# Ensure that dd's definition of LONGEST_SYMBOL stays in sync
# with the strings from the two affected variables.
dd_c = $(srcdir)/src/dd.c
sc_dd_max_sym_length:
ifneq ($(wildcard $(dd_c)),)
@len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) ) \
|sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p' \
| wc --max-line-length); \
max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
|tr -d '"' | wc --max-line-length); \
if test "$$len" = "$$max"; then :; else \
echo 'dd.c: LONGEST_SYMBOL is not longest' 1>&2; \
exit 1; \
fi
endif
# Many m4 macros names once began with `jm_'.
# On 2004-04-13, they were all changed to start with gl_ instead.
# Make sure that none are inadvertently reintroduced.
sc_prohibit_jm_in_m4:
@grep -nE 'jm_[A-Z]' \
$$($(VC_LIST) m4 |grep '\.m4$$'; echo /dev/null) && \
{ echo '$(ME): do not use jm_ in m4 macro names' \
1>&2; exit 1; } || :
sc_root_tests:
@if test -d tests \
&& grep check-root tests/Makefile.am>/dev/null 2>&1; then \
t1=sc-root.expected; t2=sc-root.actual; \
grep -nl '^require_root_$$' \
$$($(VC_LIST) tests) |sed s,tests,., |sort > $$t1; \
sed -n 's, cd \([^ ]*\) .*MAKE..check TESTS=\(.*\),./\1/\2,p' \
$(srcdir)/tests/Makefile.am |sort > $$t2; \
diff -u $$t1 $$t2 || diff=1; \
rm -f $$t1 $$t2; \
test "$$diff" \
&& { echo 'tests/Makefile.am: missing check-root action'>&2; \
exit 1; } || :; \
fi
headers_with_interesting_macro_defs = \
exit.h \
fcntl_.h \
fnmatch_.h \
intprops.h \
inttypes_.h \
lchown.h \
openat.h \
stat-macros.h \
stdint_.h
# Create a list of regular expressions matching the names
# of macros that are guaranteed by parts of gnulib to be defined.
.re-defmac:
@(cd $(srcdir)/lib; \
for f in $(headers_with_interesting_macro_defs); do \
test -f $$f && \
sed -n '/^# *define \([^_ (][^ (]*\)[ (].*/s//\1/p' $$f; \
done; \
) | sort -u \
| grep -Ev 'ATTRIBUTE_NORETURN|SIZE_MAX' \
| sed 's/^/^# *define /' \
> $@-t
@mv $@-t $@
# Don't define macros that we already get from gnulib header files.
sc_always_defined_macros: .re-defmac
@if test -f $(srcdir)/src/system.h; then \
trap 'rc=$$?; rm -f .re-defmac; exit $$rc' 0 1 2 3 15; \
grep -f .re-defmac $$($(VC_LIST)) \
&& { echo '$(ME): define the above via some gnulib .h file' \
1>&2; exit 1; } || :; \
fi
# Create a list of regular expressions matching the names
# of files included from system.h. Exclude a couple.
.re-list:
@sed -n '/^# *include /s///p' $(srcdir)/src/system.h \
| grep -Ev 'sys/(param|file)\.h' \
| sed 's/ .*//;;s/^["<]/^# *include [<"]/;s/\.h[">]$$/\\.h[">]/' \
> $@-t
@mv $@-t $@
# Files in src/ should not include directly any of
# the headers already included via system.h.
sc_system_h_headers: .re-list
@if test -f $(srcdir)/src/system.h; then \
trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15; \
grep -nE -f .re-list \
$$($(VC_LIST) src | \
grep -Ev '((copy|system)\.h|parse-gram\.c)$$') \
&& { echo '$(ME): the above are already included via system.h'\
1>&2; exit 1; } || :; \
fi
sc_sun_os_names:
@grep -nEi \
'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
$$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found misuse of Sun OS version numbers' 1>&2; \
exit 1; } || :
sc_the_the:
@grep -ni '\<the ''the\>' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found use of "the ''the";' 1>&2; \
exit 1; } || :
sc_tight_scope:
$(MAKE) -C src $@
@re='\<the ''the\>' \
ignore_case=1 msg='found use of "the ''the";' \
$(_prohibit_regexp)
sc_trailing_blank:
@grep -n '[ ]$$' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): found trailing blank(s)' \
1>&2; exit 1; } || :
@re='[ ]$$' \
ignore_case=1 msg='found trailing blank(s)' \
$(_prohibit_regexp)
# Ensure that no C source file uses TABs for indentation.
# Also match *.h.in files, to get libvirt.h.in.
@ -310,8 +290,8 @@ sc_TAB_in_indentation:
$$($(VC_LIST_EXCEPT) \
| grep -E '\.[ch](\.in)?$$' \
| grep -v '^gnulib/') && \
{ echo '$(ME): found TAB(s) use for indentation; use spaces' \
1>&2; exit 1; } || :
{ echo '$(ME): found TAB(s) used for indentation in C sources;'\
'use spaces' 1>&2; exit 1; } || :
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
@ -330,38 +310,71 @@ sc_two_space_separator_in_usage:
@grep -nE '^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \
$$($(VC_LIST_EXCEPT)) && \
{ echo "$(ME): help2man requires at least two spaces between"; \
echo "$(ME): an option and its description"; \
echo "$(ME): an option and its description"; \
1>&2; exit 1; } || :
# Many of the function names below came from this filter:
# git grep -B2 '\<_('|grep -E '\.c- *[[:alpha:]_][[:alnum:]_]* ?\(.*[,;]$' \
# |sed 's/.*\.c- *//'|perl -pe 's/ ?\(.*//'|sort -u \
# |grep -vE '^(qsort|if|close|assert|fputc|free|N_|vir.*GetName|.*Unlock|virNodeListDevices|virHashRemoveEntry|freeaddrinfo|.*[fF]ree|xdrmem_create|xmlXPathFreeObject|virUUIDFormat|openvzSetProgramSentinal|polkit_action_unref)$'
msg_gen_function =
msg_gen_function += DEBUG0
msg_gen_function += DISABLE_fprintf
msg_gen_function += virXendError
msg_gen_function += virXMLError
msg_gen_function += virHashError
msg_gen_function += virConfError
msg_gen_function += virTestError
msg_gen_function += virLibConnError
msg_gen_function += virStorageReportError
msg_gen_function += virxmlRpcError
msg_gen_function += virLog
msg_gen_function += qemudLog
msg_gen_function += remoteDispatchError
msg_gen_function += virStorageLog
msg_gen_function += xenXMError
msg_gen_function += ERROR
msg_gen_function += ERROR0
msg_gen_function += REMOTE_DEBUG
msg_gen_function += ReportError
msg_gen_function += qemudReportError
msg_gen_function += openvzLog
msg_gen_function += openvzError
msg_gen_function += virDomainReportError
msg_gen_function += virReportErrorHelper
msg_gen_function += VIR_FREE
msg_gen_function += VIR_INFO
msg_gen_function += VIR_USE_CPU
msg_gen_function += errorf
msg_gen_function += lxcError
msg_gen_function += networkLog
msg_gen_function += networkReportError
msg_gen_function += oneError
msg_gen_function += openvzError
msg_gen_function += openvzLog
msg_gen_function += qemudDispatchClientFailure
msg_gen_function += qemudLog
msg_gen_function += qemudReportError
msg_gen_function += regerror
msg_gen_function += remoteDispatchFormatError
msg_gen_function += umlLog
msg_gen_function += umlReportError
msg_gen_function += virConfError
msg_gen_function += virDomainReportError
msg_gen_function += virSecurityReportError
msg_gen_function += virHashError
msg_gen_function += virLibConnError
msg_gen_function += virLibDomainError
msg_gen_function += virLog
msg_gen_function += virNetworkReportError
msg_gen_function += virNodeDeviceReportError
msg_gen_function += virProxyError
msg_gen_function += virRaiseError
msg_gen_function += virReportErrorHelper
msg_gen_function += virReportSystemError
msg_gen_function += virSexprError
msg_gen_function += virStorageLog
msg_gen_function += virStorageReportError
msg_gen_function += virXMLError
msg_gen_function += virXenInotifyError
msg_gen_function += virXenStoreError
msg_gen_function += virXendError
msg_gen_function += vshCloseLogFile
msg_gen_function += xenUnifiedError
msg_gen_function += xenXMError
# Uncomment the following and run "make syntax-check" to see diagnostics
# that are not yet marked for translation, but that need to be rewritten
# so that they are translatable.
# msg_gen_function += error
# msg_gen_function += virXenError
# msg_gen_function += fprintf
# msg_gen_function += testError
# msg_gen_function += virXenError
# msg_gen_function += vshPrint
# msg_gen_function += vshError
func_or := $(shell printf '$(msg_gen_function)'|tr -s '[[:space:]]' '|')
func_re := ($(func_or))
@ -385,9 +398,16 @@ sc_unmarked_diagnostics:
exit 1; } || :
sc_prohibit_virBufferAdd_with_string_literal:
@grep -nE '\<virBufferAdd *\([^,]+, *"[^"]' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): use virBufferAddLit, not virBufferAdd,' \
'with a string literal' 1>&2; exit 1; } || :
@re='\<virBufferAdd *\([^,]+, *"[^"]' \
msg='use virBufferAddLit, not virBufferAdd, with a string literal' \
$(_prohibit_regexp)
# Not only do they fail to deal well with ipv6, but the gethostby*
# functions are also not thread-safe.
sc_prohibit_gethostby:
@re='\<gethostby(addr|name2?) *\(' \
msg='use getaddrinfo, not gethostby*' \
$(_prohibit_regexp)
# Avoid useless parentheses like those in this example:
# #if defined (SYMBOL) || defined (SYM2)
@ -398,18 +418,97 @@ sc_useless_cpp_parens:
# Require the latest GPL.
sc_GPL_version:
@grep -n 'either ''version [^3]' $$($(VC_LIST_EXCEPT)) && \
{ echo '$(ME): GPL vN, N!=3' 1>&2; exit 1; } || :
@re='either ''version [^3]' msg='GPL vN, N!=3' \
$(_prohibit_regexp)
cvs_keywords = \
Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
sc_prohibit_cvs_keyword:
@re='\$$($(cvs_keywords))\$$' \
msg='do not use CVS keyword expansion' \
$(_prohibit_regexp)
# Make sure we don't use st_blocks. Use ST_NBLOCKS instead.
# This is a bit of a kludge, since it prevents use of the string
# even in comments, but for now it does the job with no false positives.
sc_prohibit_stat_st_blocks:
@re='[.>]st_blocks' msg='do not use st_blocks; use ST_NBLOCKS' \
$(_prohibit_regexp)
# Make sure we don't define any S_IS* macros in src/*.c files.
# They're already defined via gnulib's sys/stat.h replacement.
sc_prohibit_S_IS_definition:
@re='^ *# *define *S_IS' \
msg='do not define S_IS* macros; include <sys/stat.h>' \
$(_prohibit_regexp)
# Each program that uses proper_name_utf8 must link with
# one of the ICONV libraries.
sc_proper_name_utf8_requires_ICONV:
@progs=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\
if test "x$$progs" != x; then \
fail=0; \
for p in $$progs; do \
dir=$$(dirname "$$p"); \
base=$$(basename "$$p" .c); \
grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \
|| { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
done; \
test $$fail = 1 && \
{ echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
exit 1; } || :; \
fi
# Warn about "c0nst struct Foo const foo[]",
# but not about "char const *const foo" or "#define const const".
sc_redundant_const:
@grep -E '\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \
$$($(VC_LIST_EXCEPT)) && \
{ echo 1>&2 '$(ME): redundant "const" in declarations'; \
exit 1; } || :
sc_const_long_option:
@grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT)) \
| grep -Ev 'const struct option|struct option const' && { \
echo 1>&2 '$(ME): add "const" to the above declarations'; \
exit 1; } || :
NEWS_hash = \
$$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \
$(srcdir)/NEWS | md5sum -)
# Ensure that we don't accidentally insert an entry into an old NEWS block.
sc_immutable_NEWS:
@if test -f $(srcdir)/NEWS; then \
test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \
{ echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \
fi
# Update the hash stored above. Do this after each release and
# for any corrections to old entries.
update-NEWS-hash: NEWS
perl -pi -e 's/^(old_NEWS_hash = ).*/$${1}'"$(NEWS_hash)/" \
$(srcdir)/cfg.mk
epoch_date = 1970-01-01 00:00:00.000000000 +0000
# Ensure that the c99-to-c89 patch applies cleanly.
patch-check:
rm -rf src-c89 $@.1 $@.2
cp -a src src-c89
(cd src-c89; patch -p1 -V never --fuzz=0) < src/c99-to-c89.diff \
cp -a $(srcdir)/src src-c89
if test "x$(srcdir)" != x.; then \
cp -a src/* src-c89; \
dotfiles=`ls src/.[!.]* 2>/dev/null`; \
test -z "$$dotfiles" || cp -a src/.[!.]* src-c89; \
fi
(cd src-c89; patch -p1 -V never --fuzz=0) < $(srcdir)/src/c99-to-c89.diff \
> $@.1 2>&1
if test "$$REGEN_PATCH" = yes; then \
diff -upr src src-c89 | sed 's,src-c89/,src/,' \
| grep -v '^Only in' > new-diff || : ; fi
if test "$(REGEN_PATCH)" = yes; then \
diff -upr $(srcdir)/src src-c89 | sed 's,$(srcdir)/src-c89/,src/,' \
| grep -vE '^(Only in|File )' \
| perl -pe 's/^((?:\+\+\+|---) \S+\t).*/$${1}$(epoch_date)/;' \
-e 's/^ $$//' \
> new-diff || : ; fi
grep -v '^patching file ' $@.1 > $@.2 || :
msg=ok; test -s $@.2 && msg='fuzzy patch' || : ; \
rm -f src-c89/*.o || msg='rm failed'; \
@ -418,21 +517,6 @@ patch-check:
test "$$msg" = ok && rm -rf src-c89 $@.1 $@.2 || echo "$$msg" 1>&2; \
test "$$msg" = ok
# Ensure that date's --help output stays in sync with the info
# documentation for GNU strftime. The only exception is %N,
# which date accepts but GNU strftime does not.
extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
strftime-check:
@if test -f $(srcdir)/src/date.c; then \
grep '^ %. ' $(srcdir)/src/date.c | sort \
| $(extract_char) > $@-src; \
{ echo N; \
info libc date calendar format | grep '^ `%.'\' \
| $(extract_char); } | sort > $@-info; \
diff -u $@-src $@-info || exit 1; \
rm -f $@-src $@-info; \
fi
check-AUTHORS:
$(MAKE) -C src $@
@ -462,9 +546,10 @@ changelog-check:
exit 1; \
fi
m4-check:
@grep -n 'AC_DEFUN([^[]' m4/*.m4 \
&& { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
sc_m4_quote_check:
@grep -nE '(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \
$$($(VC_LIST_EXCEPT) | grep -E '(^configure\.ac|\.m4)$$') \
&& { echo '$(ME): quote the first arg to AC_DEF*' 1>&2; \
exit 1; } || :
fix_po_file_diag = \
@ -473,21 +558,21 @@ apply the above patch\n'
# Verify that all source files using _() are listed in po/POTFILES.in.
po_file = po/POTFILES.in
po-check:
@if test -f po/POTFILES.in; then \
grep -E -v '^(#|$$)' po/POTFILES.in \
sc_po_check:
@if test -f $(po_file); then \
grep -E -v '^(#|$$)' $(po_file) \
| grep -v '^src/false\.c$$' | sort > $@-1; \
files=; \
for file in $$($(VC_LIST_EXCEPT)); do \
case $$file in \
djgpp/* | man/*) continue;; \
*/c99-to-c89.diff) continue;; \
*.m4) continue;; \
*.?|*.??) ;; \
*) continue;; \
esac; \
case $$file in \
*.[ch]) \
base=`expr " $$file" : ' \(.*\)\..'`; \
{ test -f $$base.l || test -f $$base.y; } && continue;; \
*) continue;; \
esac; \
files="$$files $$file"; \
done; \
@ -498,22 +583,14 @@ po-check:
rm -f $@-1 $@-2; \
fi
# In a definition of #define AUTHORS "... and ..." where the RHS contains
# the English word `and', the string must be marked with `N_ (...)' so that
# gettext recognizes it as a string requiring translation.
author_mark_check:
@grep -n '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
{ echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
exit 1; } || :
# Sometimes it is useful to change the PATH environment variable
# in Makefiles. When doing so, it's better not to use the Unix-centric
# path separator of `:', but rather the automake-provided `@PATH_SEPARATOR@'.
# It'd be better to use `find -print0 ...|xargs -0 ...', but less portable,
# and there probably aren't many projects with so many Makefile.am files
# that we'd have to worry about limits on command line length.
msg = 'Makefile.maint: Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
makefile_path_separator_check:
msg = '$(ME): Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
sc_makefile_path_separator_check:
@grep -n 'PATH=.*:' `find $(srcdir) -name Makefile.am` \
&& { echo $(msg) 1>&2; exit 1; } || :
@ -526,7 +603,7 @@ writable-files:
test -w $$file \
|| { echo ERROR: $$file is not writable; fail=1; }; \
done; \
test "$$fail" && exit 1 || :
test "$$fail" && exit 1 || : ; \
fi
v_etc_file = lib/version-etc.c
@ -534,24 +611,24 @@ sample-test = tests/sample-test
texi = doc/$(PACKAGE).texi
# Make sure that the copyright date in $(v_etc_file) is up to date.
# Do the same for the $(sample-test) and the main doc/.texi file.
copyright-check:
@if test -f $(v_etc_file); then \
sc_copyright_check:
@if test -f $(v_etc_file); then \
grep 'enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' $(v_etc_file) \
>/dev/null \
>/dev/null \
|| { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
exit 1; }; \
exit 1; }; \
fi
@if test -f $(sample-test); then \
grep '# Copyright (C) '$$(date +%Y)' Free' $(sample-test) \
>/dev/null \
@if test -f $(sample-test); then \
grep '# Copyright (C) '$$(date +%Y)' Free' $(sample-test) \
>/dev/null \
|| { echo 'out of date copyright in $(sample-test); update it' 1>&2; \
exit 1; }; \
exit 1; }; \
fi
@if test -f $(texi); then \
grep 'Copyright @copyright{} .*'$$(date +%Y)' Free' $(texi) \
>/dev/null \
|| { echo 'out of date copyright in $(texi); update it' 1>&2; \
exit 1; }; \
@if test -f $(texi); then \
grep 'Copyright @copyright{} .*'$$(date +%Y)' Free' $(texi) \
>/dev/null \
|| { echo 'out of date copyright in $(texi); update it' 1>&2; \
exit 1; }; \
fi
vc-diff-check:
@ -570,21 +647,134 @@ maintainer-distcheck:
$(MAKE) distcheck
$(MAKE) my-distcheck
# Don't make a distribution if checks fail.
# Also, make sure the NEWS file is up-to-date.
vc-dist: $(local-check) cvs-check maintainer-distcheck
$(MAKE) dist
# Use this to make sure we don't run these programs when building
# from a virgin tgz file, below.
null_AM_MAKEFLAGS = \
ACLOCAL=false \
AUTOCONF=false \
AUTOMAKE=false \
AUTOHEADER=false \
MAKEINFO=false
built_programs = $$(cd src && MAKEFLAGS= $(MAKE) -s built_programs.list)
warn_cflags = -Dlint -O -Werror -Wall -Wformat -Wshadow -Wpointer-arith
bin=bin-$$$$
write_loser = printf '\#!%s\necho $$0: bad path 1>&2; exit 1\n' '$(SHELL)'
TMPDIR ?= /tmp
t=$(TMPDIR)/$(PACKAGE)/test
pfx=$(t)/i
# More than once, tainted build and source directory names would
# have caused at least one "make check" test to apply "chmod 700"
# to all directories under $HOME. Make sure it doesn't happen again.
tp := $(shell echo "$(TMPDIR)/$(PACKAGE)-$$$$")
t_prefix = $(tp)/a
t_taint = '$(t_prefix) b'
fake_home = $(tp)/home
# Ensure that tests run from tainted build and src dir names work,
# and don't affect anything in $HOME. Create witness files in $HOME,
# record their attributes, and build/test. Then ensure that the
# witnesses were not affected.
taint-distcheck: $(DIST_ARCHIVES)
test -d $(t_taint) && chmod -R 700 $(t_taint) || :
-rm -rf $(t_taint) $(fake_home)
mkdir -p $(t_prefix) $(t_taint) $(fake_home)
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t_taint) -zxf $(distdir).tar.gz
mkfifo $(fake_home)/fifo
touch $(fake_home)/f
mkdir -p $(fake_home)/d/e
ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-before
cd $(t_taint)/$(distdir) \
&& ./configure \
&& $(MAKE) \
&& HOME=$(fake_home) $(MAKE) check \
&& ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-after \
&& diff $(tp)/.ls-before $(tp)/.ls-after \
&& test -d $(t_prefix)
rm -rf $(tp)
# Verify that a twisted use of --program-transform-name=PROGRAM works.
define install-transform-check
echo running install-transform-check \
&& rm -rf $(pfx) \
&& $(MAKE) program_transform_name='s/.*/zyx/' \
prefix=$(pfx) install \
&& test "$$(echo $(pfx)/bin/*)" = "$(pfx)/bin/zyx" \
&& test "$$(find $(pfx)/share/man -type f|sed 's,.*/,,;s,\..*,,')" = "zyx"
endef
# Install, then verify that all binaries and man pages are in place.
# Note that neither the binary, ginstall, nor the ].1 man page is installed.
define my-instcheck
$(MAKE) prefix=$(pfx) install \
&& test ! -f $(pfx)/bin/ginstall \
&& { fail=0; \
for i in $(built_programs); do \
test "$$i" = ginstall && i=install; \
for j in "$(pfx)/bin/$$i" \
"$(pfx)/share/man/man1/$$i.1"; do \
case $$j in *'[.1') continue;; esac; \
test -f "$$j" && : \
|| { echo "$$j not installed"; fail=1; }; \
done; \
done; \
test $$fail = 1 && exit 1 || :; \
}
endef
define coreutils-path-check
{ \
if test -f $(srcdir)/src/true.c; then \
fail=1; \
mkdir $(bin) \
&& ($(write_loser)) > $(bin)/loser \
&& chmod a+x $(bin)/loser \
&& for i in $(built_programs); do \
case $$i in \
rm|expr|basename|echo|sort|ls|tr);; \
cat|dirname|mv|wc);; \
*) ln $(bin)/loser $(bin)/$$i;; \
esac; \
done \
&& ln -sf ../src/true $(bin)/false \
&& PATH=`pwd`/$(bin):$$PATH $(MAKE) -C tests check \
&& { test -d gnulib-tests \
&& $(MAKE) -C gnulib-tests check \
|| :; } \
&& rm -rf $(bin) \
&& fail=0; \
else \
fail=0; \
fi; \
test $$fail = 1 && exit 1 || :; \
}
endef
# Use -Wformat -Werror to detect format-string/arg-list mismatches.
# Also, check for shadowing problems with -Wshadow, and for pointer
# arithmetic problems with -Wpointer-arith.
# These CFLAGS are pretty strict. If you build this target, you probably
# have to have a recent version of gcc and glibc headers.
# The for-loop below ensures that there is a bin/ directory full of all
# of the programs under test (except the few that are required for basic
# Makefile rules), all symlinked to the just-built "false" program.
# The hard-linking for-loop below ensures that there is a bin/ directory
# full of all of the programs under test (except the ones that are required
# for basic Makefile rules), all symlinked to the just-built "false" program.
# This is to ensure that if ever a test neglects to make PATH include
# the build srcdir, these always-failing programs will run.
# Otherwise, it is too easy to test the wrong programs.
# Note that "false" itself is a symlink to true, so it too will malfunction.
TMPDIR ?= /tmp
t=$(TMPDIR)/$(PACKAGE)/test
my-distcheck: $(local-check) check
my-distcheck: $(DIST_ARCHIVES) $(local-check)
$(MAKE) syntax-check
$(MAKE) check
-rm -rf $(t)
mkdir -p $(t)
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
@ -593,17 +783,13 @@ my-distcheck: $(local-check) check
&& $(MAKE) CFLAGS='$(warn_cflags)' \
AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
&& $(MAKE) dvi \
&& $(install-transform-check) \
&& $(my-instcheck) \
&& $(coreutils-path-check) \
&& $(MAKE) distclean
(cd $(t) && mv $(distdir) $(distdir).old \
&& $(AMTAR) -zxf - ) < $(distdir).tar.gz
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
if test -f $(srcdir)/src/c99-to-c89.diff; then \
cd $(t)/$(distdir) \
&& (cd src && patch -V never --fuzz=0 <c99-to-c89.diff) \
&& ./configure --disable-largefile \
CFLAGS='-Werror -ansi -Wno-long-long' \
&& $(MAKE); \
fi
-rm -rf $(t)
@echo "========================"; \
echo "$(distdir).tar.gz is ready for distribution"; \
@ -633,3 +819,10 @@ sync-vcs-ignore-files:
mv $(c2g)-t $(c2g)
perl $(c2g)
rm -f $(c2g)
echo "syntax: glob" > .hgignore
( for ignore in $$($(VC_LIST) \
| grep -E '(^|/)\.gitignore$$'); do \
dir=$$(dirname "$$ignore"); \
test "$$dir" = . && pfx= || pfx=$$dir/; \
sed "s!^!$$pfx!" "$$ignore"; \
done ) | sort -u >> .hgignore

85
Makefile.nonreentrant Normal file
View File

@ -0,0 +1,85 @@
#
# Generated by running the following on Fedora 9:
#
# nm -D --defined-only /lib/libc.so.6 \
# | grep '_r$' \
# | awk '{print $3}' \
# | grep -v __ \
# | grep -v qsort \ # Red herring since we don't need to pass extra args to qsort comparator
# | grep -v readdir \ # This is safe as long as each DIR * instance is only used by one thread
# | sort \
# | uniq \
# | sed -e 's/_r//'
#
NON_REENTRANT =
NON_REENTRANT += asctime
NON_REENTRANT += ctime
NON_REENTRANT += drand48
NON_REENTRANT += ecvt
NON_REENTRANT += erand48
NON_REENTRANT += ether_aton
NON_REENTRANT += ether_ntoa
NON_REENTRANT += fcvt
NON_REENTRANT += fgetgrent
NON_REENTRANT += fgetpwent
NON_REENTRANT += fgetspent
NON_REENTRANT += getaliasbyname
NON_REENTRANT += getaliasent
NON_REENTRANT += getdate
NON_REENTRANT += getgrent
NON_REENTRANT += getgrgid
NON_REENTRANT += getgrnam
NON_REENTRANT += gethostbyaddr
NON_REENTRANT += gethostbyname2
NON_REENTRANT += gethostbyname
NON_REENTRANT += gethostent
NON_REENTRANT += getlogin
NON_REENTRANT += getmntent
NON_REENTRANT += getnetbyaddr
NON_REENTRANT += getnetbyname
NON_REENTRANT += getnetent
NON_REENTRANT += getnetgrent
NON_REENTRANT += getprotobyname
NON_REENTRANT += getprotobynumber
NON_REENTRANT += getprotoent
NON_REENTRANT += getpwent
NON_REENTRANT += getpwnam
NON_REENTRANT += getpwuid
NON_REENTRANT += getrpcbyname
NON_REENTRANT += getrpcbynumber
NON_REENTRANT += getrpcent
NON_REENTRANT += getservbyname
NON_REENTRANT += getservbyport
NON_REENTRANT += getservent
NON_REENTRANT += getspent
NON_REENTRANT += getspnam
NON_REENTRANT += getutent
NON_REENTRANT += getutid
NON_REENTRANT += getutline
NON_REENTRANT += gmtime
NON_REENTRANT += hcreate
NON_REENTRANT += hdestroy
NON_REENTRANT += hsearch
NON_REENTRANT += initstate
NON_REENTRANT += jrand48
NON_REENTRANT += lcong48
NON_REENTRANT += localtime
NON_REENTRANT += lrand48
NON_REENTRANT += mrand48
NON_REENTRANT += nrand48
NON_REENTRANT += ptsname
NON_REENTRANT += qecvt
NON_REENTRANT += qfcvt
NON_REENTRANT += random
NON_REENTRANT += rand
NON_REENTRANT += seed48
NON_REENTRANT += setstate
NON_REENTRANT += sgetspent
NON_REENTRANT += srand48
NON_REENTRANT += srandom
NON_REENTRANT += strerror
NON_REENTRANT += strtok
NON_REENTRANT += tmpnam
NON_REENTRANT += ttyname

285
NEWS
View File

@ -5,6 +5,291 @@
http://libvirt.org/news.html
0.6.4: May 29 2009:
- New features: new API virStorageVolCreateXMLFrom (Cole Robinson),
full VBox graphic capabilities (Pritesh Kothari), Interface config
APIs (Laine Stump), APIs for domain XML conversions (Daniel
Berrange), initial version of OpenNebula driver (Abel Miguez
Rodriguez)
- Portability: better compiler warning selection (Daniel Berrange),
Win32 portability fixes (Daniel Berrange)
- Documentation: documentation for <sound> device XML format (Cole
Robinson), storage format documentation fixes (Ryota Ozaki),
docs for XML conversion APIs (Daniel Berrange), inconsistencies
in storage volume docs and schemas (Ryota Ozaki)
- Bug fixes: fix hostdev managed handling (Mark McLoughlin),
lxc_controller should not cash without args (Guido Gunther),
bug fixes in I/O routines (Guido Gunther), fix migrationsave/restore
for QEmu 0.10.0 (Daniel Berrange), avoid crash on VBox init
(Guido Gunther), fix dev and cgroup init in LXC (Ryota Ozaki),
QEmu startup fix (Cole Robinson), block node reboots from LXCs (Ryota
Ozaki), QEmu argv detection fix for recent kvm (Daniel Berrange),
fix watch/timer event deletion (Daniel Berrange), fix XML escaping
bug, various locking bugs (Daniel Berrange), avoid a deadlock in
HAL nodedev driver (Cole Robinson), detection of node device media
insert/eject (Cole Robinson), broken networking with new QEMU/KVM
>= 86 (Daniel Berrange), various fixes in domain and network
startup error report (Cole Robinson), double free on unexpected
client disconnect (Daniel Berrange)
- Improvements: cleanups and doc on virExec (Cole Robinson), error
reporting in QEmu migrations (Cole Robinson), better path and driver
detection in VBox (Pritesh Kothari), avoid caching QEMU driver
capabilities(Cole Robinson), multiple graphics elements definitions
(Pritesh Kothari), LSB init header init.d improvements (Frederik
Himpe), special erro code for invalid operations (Daniel Berrange),
dlopen error logging (Daniel Berrange), fix UUID and name uniqueness
(Daniel Berrange), improvement on VBox initialization (Pritesh
Kothari and Dan Berrange), "Host only" and "Internal" network in VBox
(Pritesh Kothari), add utility virExecDaemonize (Cole Robinson),
enable bridges without IP (Ludwig Nussel), 'make -s' silencing
(Daniel Berrange), test case for exercising the event loop (Daniel
Berrange), virsh commands vol-clone and vol-create-from (Cole
Robinson), new xend don't use [] around cpumaps (Tatsuro Enokura),
add the CIL mutex lock checker (Daniel Berrange), fix some LXC
error code (Amy Griffis), virInterface python bindings (Daniel
Berrange), fix to the example code for event handling (Pritesh
Kothari), always add location informations to logging (Daniel
Berrange), python domain events example and binding (Daniel
Berrange), PPC Qemu Machine Type update (Thomas Baker)
- Cleanups: strings bug in virsh (Daniel Berrange), various cleanups
in storage code (Cole Robinson), rpm spec cleanups, destructors
data cleanups (Laine Stump), some QEmu code refactoring (Daniel
Berrange), avoid dependancy on libcap (Daniel Berrange), python
import cleanup (Cole Robinson), virAsprintf based cleanups in
storage code (Cole Robinson), fix some direct stderr logging,
OpenNebula driver cleanups (Daniel Berrange)
0.6.3: Apr 24 2009:
- New features: VirtualBox driver support (Pritesh Kothari),
virt-xml-validate new command (Daniel Berrange)
- Portability: patch to build on Centos (Joseph Shraibman),
build breakage (Anton Protopopov),
- Documentation: Linux Containers documentation (Serge Hallyn),
improvement and updates of architecture pages, fix
virNodeGetFreeMemory documentation to reflect reality,
man page cleanups (Daniel Berrange), man page typo
(Robert P. J. Day), VirtualBox Documentation (Pritesh Kothari),
- Bug fixes: veth off-by-one error (Dan Smith), vcpupin to inactive
Xen crash (Takahashi Tomohiro), virsh ttyconsole return value,
use format= not fmt= on QEmu commandline (Mark McLoughlin),
use UUID for internal domain lookups (Daniel Berrange), remote
domain ID related bugs (Daniel Berrange), QEmu pidfile handling
bugs (Daniel Berrange), network config handling on old Xen (Daniel
Berrange)
- Improvements: add SCSI storage rescan (David Allan), rootless
LXC containers support improvements (Serge Hallyn), getHostname
support for LXC (Dan Smith), cleanup and logging output of some
domain functions (Guido G<>nther), drop pool lock when allocating
volumes (Cole Robinson), LXC handle kernel without CLONE_NEWUSER
support (Serge Hallyn), cpu pinning on defined Xen domains (Takahashi
Tomohiro), dynamic bridge names support (Soren Hansen), LXC use
of private /dev/pts when available (Daniel Berrange),
virNodeDeviceCreateXML and virNodeDeviceDestroy entry points
(Dave Allan)
- Cleanups: don't hardcode getgrnam_r buffer to 1024 bytes (Guido
G<>nther), qemudBuildCommandLine API cleanup (Daniel Berrange),
0.6.2: Apr 3 2009:
- New features: support SASL auth for VNC server (Daniel Berrange),
memory ballooning in QEMU (Daniel Berrange), SCSI HBA storage pool
support (Dave Allan), PCI passthrough in Xen driver (Daniel
Berrange)
- Portability: be more flexible in QEmu binaries paths (Daniel
Berrange), Mingw portability fixes (Daniel Berrange),
- Documentation: add security attributes in RNG schemas, cleanup
of architecture docs, missing disk bus values in RNG schemas,
- Bug fixes: tap vs vbd type on block detach (Cole Robinson and
Takahashi Tomohiro), bad free on storage volume error (Daniel
Berrange), maplenght computations in remote driver (Daniel Berrange),
event dispatching in the daemon (Daniel Berrange), virDomainSetVcpus
deadlock (Daniel Berrange), save deadlock in test driver (Cole
Robinson), fix timing of security driver init (Cole Robinson),
forbid readonly connections from dumping the XML safe info (Cole
Robinson), file descriptor leak on remote access,
fix labelling of shared/readonly devices (Dan Walsh),
virsh missing auth on shell commands (Matthias Bolte),
avoid zombie on exec pipe errors (Ryota Ozaki),
memory leak in virNodeDeviceGetParent (Daniel Berrange),
URI check in migration (Daniel Berrange), various memory bug fixes
(Daniel Berrange), python bindings generator fix (Daniel Berrange),
NUMA memory fixes (Daniel Berrange), various svirt fixes (Daniel
Berrange), fix sparse volume allocation reporting (Cole Robinson),
test driver domain restore return value (Cole Robinson),
do not lose file format info on volume refresh (Cole Robinson)
- Improvements: get CPU usage info for LXC (Ryota Ozaki), fix domain
RNG to add ac97 and tests (Pritesh Kothari), OpenVZ support for
non-template filesystem root (Florian Vichot), improve arch
capabilities generation (Daniel Berrange), modularization of spec
file (Ryota Ozaki), better error reports in SEXPR generation (Daniel
Berrange), support for vifname parameter in VIF config (Daniel
Berrange), localtime handling for new xen (Daniel Berrange),
error reporting/ verification of security labels (Dan Walsh),
add --console arg for create and start virsh commands (Daniel
Berrange), refresh volume alloc/capacity when dumping XML (Cole
Robinson)
- Cleanups: FILE * leaks removal, unused parameters flagging
(Maximilian Wilhelm), switch to pre-C99 struct initialization
for drivers (Chris Lalancette), symlinks resolving cleanup (Daniel
Berrange)
0.6.1: Mar 3 2009:
- New features: new APIs for Node device detach reattach and reset
(Mark McLoughlin), sVirt mandatory access control support (James
Morris and Dan Walsh)
- Portability: non gcc toolchain (John Levon), gcc-4.4 warnings fixes
(Mark McLoughlin), fix build without LXC and QEmu (Jim Meyering)
- Documentation: man page bugzilla URL (Mark McLoughlin), typo
in domain format (Jesse Farinacci), clock offset fix (Mark
McLoughlin), hostdev description typo (Mark McLoughlin), static
host IP (Charles Duffy), new example program (David Allan)
- Bug fixes: NULL dereference in LXC (Jim Meyering), fix domain
error reporting (John Levon), fix loop of libvirtd --timeout
(Daniel Berrange), limit history to 500 to restrict virsh memory
(Daniel Berrange), wrong lvm volume format check (Cole Robinson),
I/O error in daemon and associated remote acces crash (Daniel
Berrange), fix autostart of session daemon (Daniel Berrange),
restart guest on qemu migration failures (Chris Lalancette),
config parsing leaks (Ryota Ozaki), DBus multithreading activation
to avoid crashes (Daniel Berrange), mark defined network descriptions
as persistent (Cole Robinson), qemu+tls handshake negotiation hang
(Chris Lalancette)
- Improvements: don't hardcode ssh port (Guido G<>nther), new test
cases and testing infrastructure (Jim Meyering), improve the
SExpr parser (John Levon), proper error reporting on xend
shutdown command (John Levon), proper handling of errors when
saving QEmu domains state (Guido G<>nther), revamp of the internal
error memory APIs (John Levon), better virsh error reporting (John
Levon), more daemon options to allow running multiple daemons (Jim
Meyering), error handling when creating a QEmu domain (Guido G<>nther),
fix timeouts in QEmu log reading (Guido G<>nther), migration with
xend 3.3 fixes (John Levon), virsh XML dump flags cleanup (Cole
Robinson), fix build with loadable drivers (Maximilian Wilhelm),
internal XML APIs to read long long and hexa values (Mark
McLoughlin), function to parse node device XML descriptions and
associated test (Mark McLoughlin), generate network bridge names if
not provided (Cole Robinson), recognize ejectable media in hostdev
hal driver (Cole Robinson), integration of sVirt (Daniel Berrange)
- Cleanups: printf NULL string checks (John Levon), remove uses of
strerror and use virStrerror (Jim Meyering), remove redundant NULL
assignments (Jim Meyering), QEmu driver logging and exec cleanups
(Jim Meyering), many error handling cleanups (Jim Meyering), XML
module cleanups (Mark McLoughlin), compiler warning (Maximilian
Wilhelm), daemon TCP listen cleanup (Cole Robinson), size_t type
cleanup (Guido G<>nther), parallel make fix (Michael Marineau),
storage error diagnostic fix (Ryota Ozaki), remove redundant monitor
watch variable (Cole Robinson), qemu AttachDevice error report
improvement (Cole Robinson), virsh output cleanup (Jim Meyering),
various tests cleanups and improvements (Jim Meyering), fix the
internal export list with new APIs (Daniel Berrange), cleanups on
new APIs for Node device (Daniel Berrange)
0.6.0: Jan 31 2009:
- New features: thread safety of the API and event handling (Daniel
Berrange), allow QEmu domains to survive daemon restart (Guido
G<>nther), extended logging capabilities, support copy-on-write
storage volumes (Daniel Berrange), support of storage cache
control options for QEmu/KVM (Daniel Berrange)
- Portability: fix old DBus API problem, Debian portability fix
(Daniel Berrange), fix distcheck (Jim Meyering), build in
debug mode (Jim Meyering), libnuma API portability (Jim Meyering),
many portability fixes pointed by Solaris (John Levon), non-gcc
portability fixes (John Levon), various include fixes (Jim Meyering),
various Windows and Mingw portability fixes (Daniel Berrange),
solaris Xen fixes (John Levon), RPC portability to Solaris (Daniel
Berrange)
- Documentation: typo fixes (Richard Jones), logging support,
vnc keymap attributes (Guido G<>nther), HACKING file updates
(Jim Meyering), new PCI passthrough format, libvirt-qpid and
UML driver documentation (Daniel Berrange), provide RNG schemas
for all XML formats used in libvirt APIs (Daniel Berrange),
- Bug fixes: segfault on virtual network without bridge name (Cole
Robinson), various locking fixes (Cole Robinson), fix serial
and parallel devices on tcp/unix/telnet (Guido G<>nther), leak
in daemon (Jim Meyering), storage driver segfault (Miloslav TrmaC),
missing check in read-only connections (Daniel Berrange),
OpenVZ crash and mutex fixes (Anton Protopopov), couple of
daemon bug fixes (John Levon), OpenVZ MAC addresses generation
(Evgeniy Sokolov), poll call initialization fix (Daniel Berrange),
various Xen driver fixes (John Levon), segfault on device
back compat (Cole Robinson), couple Xen bug fixes coming from
RHEL (Markus Armbruster), buffer overflow in libvirt proxy
(rasputin@email.ru), vnc port report (John Levon), repair save
and restore on recent KVM versions (Daniel Berrange), Xen
cpu pinning XML fix (John Levon), various xen driver fixes
(Daniel Berrange), some memory leak fixes (Daniel Berrange)
- Improvements: driver infrastructure and locking (Daniel Berrange),
Test driver infrastructure (Daniel Berrange), parallelism in the
daemon and associated config (Daniel Berrange), virsh help cleanups
(Jim Meyering), logrotate daemon logs (Guido G<>nther), more
regression tests (Jim Meyering), QEmu SDL graphics (Itamar Heim),
add --version flag to daemon (Dave Allan), memory consumption
cleanup (Dave Allan), QEmu pid file and XML states for daemon
restart (Guido G<>nther), gnulib updates (Jim Meyering and
Dan Berrange), PCI passthrough for KVM (Jason Krieg), generic
internal thread API (Daniel Berrange), RHEL-5 specific Xen
configure option and code (Markus Armbruster), save domain
state as string in status file (Guido G<>nther), add locking
to all API entry points (Daniel Berrange), new ref counting APIs
(Daniel Berrange), IP address for Xen bridges (John Levon),
driver format for disk file types (Daniel Berrange), improve
QEmu/KVM tun/tap performances (Mark McLoughlin), enable floppies
for Xen fully virt (John Levon), support VNC password settings
for QEmu/KVM (Daniel Berrange), qemu driver version reporting
(Daniel Berrange)
- Cleanups: converting linked lists to arrays (Daniel Berrange),
daemon RPC handling refactoring (Daniel Berrange), strings cleanups
(Jim Meyering), gethostby* cleanup and test (Jim Meyering), some
code fixes (Dave Allan), various code cleanup (Jim Meyering),
virsh argument handling cleanup (Jim Meyering), virAsprintf
cleanup replacement (Guido G<>nther), QEmu monitor reads (Cole
Robinson), Makefile cleanups (Guido G<>nther), Xen code cleanups
(John Levon), revamp of ELF export scripts (John Levon), domain
event callback args (John Levon), enforce use of pid_t (John Levon),
virsh pool-*-as XML code merge (Cole Robinson), xgettext warnings
(Jim Meyering), add virKillProcess (Guido G<>nther), add
virGetHostname (David Lutterkort), add flags argument to the full
XML parsing stack (Guido G<>nther), various daemon code cleanups
(Guido G<>nther), handling of daemon missing config file (Jim
Meyering), rpcgen invocation cleanup (Richard Jones), devhelp
builkd makefile cleanups (John Levon), update error handling for
threading (Daniel Berrange), remove all non-rentrant POSIX calls
usage (Daniel Berrange), many small cleanups (Jim Meyering and
Daniel Berrange), examples Makefile generator (John Levon),
mis-use of PF_UNIX as a protocol (John Levon), cleanup OOM
error paths (Jim Meyering), temporary fix fro valgrind on lxc
(Daniel Berrange), QEmu driver init cleanups (Daniel Berrange)
0.5.1: Dec 4 2008:
- Portability: fix missing dep in spec file, fix compilation with new
NUMA libraries (Daniel Berrange), udev compatibility for RHEL (Chris
Lalancette),
- Documentation: documentation copy and paste errors and typo (Cole
Robinson)
- Bug fixes: add a delay in storage backend for disks to show up
(Chris Lalancette), fix parsing for CDRom device with no source
(Daniel Berrange), use xenstore to list domains to avoid some
bugs (Guido G<>nther), remove a leak in xen inotify code (Daniel
Berrange), UML driver freeing of uninitialialized variable (Ron
Yorston), fix UML inotify code (Daniel Berrange), crash when
adding storage without a format (Cole Robinson)
- Improvements: use xend preferably to hypervisor call to set Xen
max memory (Jim Fehlig), allow remote://hostname/ URI for automatic
probe of hypervisors (Daniel Berrange), fix daemon configuration
regression testing (Jim Meyering ), check /usr/bin/kvm for QEmu
driver init (Guido G<>nther), proper active vs. inactive
differentiation (Guido G<>nther), improve MTU setting on tap
interfaces (Eduardo Habkost), increase timeout for initial QEmu
monitor poll (Cole Robinson)
- Cleanups:fix improper initialisations (Jim Meyering)
0.5.0: Nov 25 2008:
- New features: CPU and scheduler support for LXC (Dan Smith), SDL display configuration (Daniel Berrange), domain lifecycle event support for QEmu and Xen with python bindings (Ben Guthro and Daniel Berrange), KVM/QEmu migration support (Rich Jones and Chris Lalancette), User Mode Linux driver (Daniel Berrange), API for node device enumeration using HAL and DeviceKit with python bindings (David Lively),
- Portability: RHEL build fixes, VPATH build (Guido Gunther), many MinGW related cleanups and fixes (Richard Jones), compilation without libvirtd (Richard Jones), Add a Windows icon (Richard Jones), sys/poll.h portability fixes (Daniel Berrange), gnulib and mingw cleanups (Jim Meyering),

View File

@ -2,8 +2,6 @@
#
# File renames don't normally go into patches because they make
# the patches much harder to read, so list them here instead.
#
# $Id$
# Clearer naming scheme after Xen-unified patch went in.
src/xen_internal.c src/xen_internal_hv.c

View File

@ -45,21 +45,9 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
;;
esac
compiler_flags=
COMPILER_FLAGS=
for option in $try_compiler_flags; do
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $option"
AC_MSG_CHECKING([whether gcc understands $option])
AC_TRY_LINK([], [],
has_option=yes,
has_option=no,)
CFLAGS="$SAVE_CFLAGS"
AC_MSG_RESULT($has_option)
if test $has_option = yes; then
compiler_flags="$compiler_flags $option"
fi
unset has_option
unset SAVE_CFLAGS
gl_COMPILER_FLAGS($option)
done
unset option
unset try_compiler_flags
@ -85,8 +73,14 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
fi
AC_MSG_RESULT($complCFLAGS)
WARN_CFLAGS="$compiler_flags $complCFLAGS"
WARN_CFLAGS="$COMPILER_FLAGS $complCFLAGS"
AC_SUBST(WARN_CFLAGS)
dnl Needed to keep compile quiet on python 2.4
COMPILER_FLAGS=
gl_COMPILER_FLAGS(-Wno-redundant-decls)
WARN_PYTHON_CFLAGS=$COMPILER_FLAGS
AC_SUBST(WARN_PYTHON_CFLAGS)
])

View File

@ -65,6 +65,7 @@ if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
--build=$(uname -m)-pc-linux \
--host=i686-pc-mingw32 \
--prefix="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw" \
--enable-compile-warnings=error \
--without-sasl \
--without-avahi \
--without-polkit \
@ -73,6 +74,7 @@ if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
--without-qemu \
--without-lxc \
--without-uml \
--without-vbox \
--without-openvz \
--without-libvirtd

View File

@ -73,6 +73,7 @@ gethostname
getpass
gettext
inet_pton
ioctl
mkstemp
mktempd
perror
@ -80,13 +81,16 @@ physmem
poll
posix-shell
recv
random_r
send
setsockopt
socket
stpcpy
strndup
strerror
strsep
sys_stat
time_r
useless-if-before-free
vasprintf
verify
@ -99,6 +103,7 @@ vc-list-files
# put *.[ch] files in new gnulib/lib/ dir.
$gnulib_tool \
--no-vc-files \
--lgpl=2 \
--with-tests \
--m4-base=gnulib/m4 \

View File

@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT([libvirt], [0.5.0])
AC_INIT([libvirt], [0.6.5])
AC_CONFIG_SRCDIR([src/libvirt.c])
AC_CONFIG_AUX_DIR([build-aux])
AM_CONFIG_HEADER([config.h])
@ -23,11 +23,12 @@ AC_SUBST([LIBVIRT_VERSION_INFO])
AC_SUBST([LIBVIRT_VERSION_NUMBER])
dnl Required minimum versions of all libs we depend on
LIBXML_REQUIRED="2.5.0"
LIBXML_REQUIRED="2.6.0"
GNUTLS_REQUIRED="1.0.25"
AVAHI_REQUIRED="0.6.0"
POLKIT_REQUIRED="0.6"
PARTED_REQUIRED="1.8.0"
NETCF_REQUIRED="0.0.1"
dnl Checks for C compiler.
AC_PROG_CC
@ -57,9 +58,17 @@ dnl Support building Win32 DLLs (must appear *before* AM_PROG_LIBTOOL)
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
dnl Override normal libtool in favour of our quiet version
LIBTOOL='$(SHELL) $(top_srcdir)/mylibtool'
AC_SUBST([LIBTOOL])
AM_PROG_CC_C_O
VERSION_SCRIPT_FLAGS=-Wl,--version-script=
`/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
AC_SUBST(VERSION_SCRIPT_FLAGS)
LIBVIRT_COMPILE_WARNINGS([maximum])
dnl Support large files / 64 bit seek offsets.
@ -67,25 +76,29 @@ dnl Use --disable-largefile if you don't want this.
AC_SYS_LARGEFILE
dnl Availability of various common functions (non-fatal if missing).
AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid])
AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid posix_fallocate mmap readlink])
dnl Availability of various not common threadsafe functions
AC_CHECK_FUNCS([strerror_r strtok_r getmntent_r getgrnam_r getpwuid_r])
dnl Availability of various common headers (non-fatal if missing).
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/syslimits.h sys/utsname.h sys/wait.h winsock2.h sched.h termios.h sys/poll.h])
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/syslimits.h sys/utsname.h sys/wait.h winsock2.h sched.h termios.h sys/poll.h syslog.h])
dnl Where are the XDR functions?
dnl If portablexdr is installed, prefer that.
dnl Otherwise try -lrpc (Cygwin) -lxdr (some MinGW) or none (most Unix)
dnl Otherwise try -lrpc (Cygwin) -lxdr (some MinGW), -lnsl (Solaris)
dnl or none (most Unix)
AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
AC_SEARCH_LIBS([xdrmem_create],[rpc xdr])
AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
])
AC_CHECK_LIB([intl],[gettext],[])
dnl Do we have rpcgen?
AC_PATH_PROG([RPCGEN], [rpcgen], [no])
AM_CONDITIONAL([RPCGEN], [test "x$ac_cv_path_RPCGEN" != "xno"])
AM_CONDITIONAL([HAVE_RPCGEN], [test "x$ac_cv_path_RPCGEN" != "xno"])
dnl Is this GLIBC's buggy rpcgen?
AM_CONDITIONAL([GLIBC_RPCGEN],
AM_CONDITIONAL([HAVE_GLIBC_RPCGEN],
[test "x$ac_cv_path_RPCGEN" != "xno" &&
$ac_cv_path_RPCGEN -t </dev/null >/dev/null 2>&1])
@ -115,11 +128,29 @@ AC_PATH_PROG([DNSMASQ], [dnsmasq], [dnsmasq],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([BRCTL], [brctl], [brctl],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([UDEVADM], [udevadm], [],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([UDEVSETTLE], [udevsettle], [],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_PATH_PROG([MODPROBE], [modprobe], [],
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
[Location or name of the dnsmasq program])
AC_DEFINE_UNQUOTED([BRCTL],["$BRCTL"],
[Location or name of the brctl program (see bridge-utils)])
if test -n "$UDEVADM"; then
AC_DEFINE_UNQUOTED([UDEVADM],["$UDEVADM"],
[Location or name of the udevadm program])
fi
if test -n "$UDEVSETTLE"; then
AC_DEFINE_UNQUOTED([UDEVSETTLE],["$UDEVSETTLE"],
[Location or name of the udevsettle program])
fi
if test -n "$MODPROBE"; then
AC_DEFINE_UNQUOTED([MODPROBE],["$MODPROBE"],
[Location or name of the modprobe program])
fi
dnl Specific dir for HTML output ?
AC_ARG_WITH([html-dir], [AC_HELP_STRING([--with-html-dir=path],
@ -155,8 +186,12 @@ AC_ARG_WITH([uml],
[ --with-uml add UML support (on)],[],[with_uml=yes])
AC_ARG_WITH([openvz],
[ --with-openvz add OpenVZ support (on)],[],[with_openvz=yes])
AC_ARG_WITH([vbox],
[ --with-vbox add VirtualBox support (on)],[],[with_vbox=yes])
AC_ARG_WITH([lxc],
[ --with-lxc add Linux Container support (on)],[],[with_lxc=yes])
AC_ARG_WITH([one],
[ --with-one add ONE support (on)],[],[with_one=check])
AC_ARG_WITH([test],
[ --with-test add test driver support (on)],[],[with_test=yes])
AC_ARG_WITH([remote],
@ -178,6 +213,7 @@ dnl --enable-debug=(yes|no)
AC_ARG_ENABLE([debug],
[AC_HELP_STRING([--enable-debug=no/yes],
[enable debugging output])],[],[enable_debug=yes])
AM_CONDITIONAL([ENABLE_DEBUG], test x"$enable_debug" = x"yes")
if test x"$enable_debug" = x"yes"; then
AC_DEFINE([ENABLE_DEBUG], [], [whether debugging is enabled])
fi
@ -212,6 +248,14 @@ fi
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPTS_RED_HAT], test x$with_init_scripts = xredhat)
AC_MSG_RESULT($with_init_scripts)
dnl RHEL-5 has a peculiar version of Xen, which requires some special casing
AC_ARG_WITH([rhel5-api],
[AC_HELP_STRING([--with-rhel5-api=[ARG]],
[build for the RHEL-5 API [default=no]])])
if test x"$with_rhel5_api" = x"yes"; then
AC_DEFINE([WITH_RHEL5_API], [1], [whether building for the RHEL-5 API])
fi
dnl
dnl ensure that Fedora's system-config-firewall knows
dnl about libvirt's iptables rules
@ -241,6 +285,11 @@ if test "$with_openvz" = "yes"; then
fi
AM_CONDITIONAL([WITH_OPENVZ], [test "$with_openvz" = "yes"])
if test "x$with_vbox" = "xyes"; then
AC_DEFINE_UNQUOTED([WITH_VBOX], 1, [whether VirtualBox driver is enabled])
fi
AM_CONDITIONAL([WITH_VBOX], [test "$with_vbox" = "yes"])
if test "$with_libvirtd" = "no" ; then
with_lxc=no
fi
@ -262,6 +311,11 @@ if test "$with_uml" = "yes" ; then
fi
AM_CONDITIONAL([WITH_UML], [test "$with_uml" = "yes"])
if test "$with_one" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_ONE],1,[whether ONE driver is enabled])
fi
AM_CONDITIONAL([WITH_ONE],[test "$with_one" = "yes"])
if test "$with_test" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_TEST], 1, [whether Test driver is enabled])
fi
@ -363,6 +417,34 @@ dnl check for kvm headers
dnl
AC_CHECK_HEADERS([linux/kvm.h])
dnl OpenNebula driver Compilation setting
dnl
XMLRPC_REQUIRED=1.14.0
XMLRPC_CFLAGS=
XMLRPC_LIBS=
if test "x$with_one" = "xyes" -o "x$with_one" = "xcheck"; then
PKG_CHECK_MODULES(XMLRPC, xmlrpc_client >= $XMLRPC_REQUIRED,
[with_one=yes], [
if test "x$with_one" = "xcheck" ; then
with_one=no
else
AC_MSG_ERROR(
[You must install XMLRPC-C >= $XMLRPC_REQUIRED to compile libvirt ONE driver])
fi
])
if test "x$with_one" = "xyes" ; then
AC_DEFINE_UNQUOTED([HAVE_XMLRPC], 1,
[whether One is used to broadcast server presence])
fi
fi
AM_CONDITIONAL([HAVE_XMLRPC], [test "x$with_one" = "xyes"])
AM_CONDITIONAL([WITH_ONE], [test "x$with_one" = "xyes"])
AC_SUBST([XMLRPC_CFLAGS])
AC_SUBST([XMLRPC_LIBS])
dnl Need to test if pkg-config exists
PKG_PROG_PKG_CONFIG
@ -480,18 +562,26 @@ if test "x$with_sasl" != "xno"; then
fail=1
fi])
if test "x$with_sasl" != "xno" ; then
AC_CHECK_LIB([sasl2], [sasl_client_init],[with_sasl=yes],[
if test "x$with_sasl" = "xcheck" ; then
AC_CHECK_LIB([sasl2], [sasl_client_init],[
SASL_LIBS="$SASL_LIBS -lsasl2"
with_sasl=yes
],[
AC_CHECK_LIB([sasl], [sasl_client_init],[
SASL_LIBS="$SASL_LIBS -lsasl"
with_sasl=yes
],[
if test "x$with_sasl" = "xcheck" ; then
with_sasl=no
else
else
fail=1
fi])
fi
])
])
fi
test $fail = 1 &&
AC_MSG_ERROR([You must install the Cyrus SASL development package in order to compile libvirt])
CFLAGS="$old_cflags"
LIBS="$old_libs"
SASL_LIBS="$SASL_LIBS -lsasl2"
if test "x$with_sasl" = "xyes" ; then
AC_DEFINE_UNQUOTED([HAVE_SASL], 1,
[whether Cyrus SASL is available for authentication])
@ -604,6 +694,45 @@ AM_CONDITIONAL([HAVE_SELINUX], [test "$with_selinux" != "no"])
AC_SUBST([SELINUX_CFLAGS])
AC_SUBST([SELINUX_LIBS])
AC_ARG_WITH([secdriver-selinux],
[ --with-secdriver-selinux use SELinux security driver],
[],
[with_secdriver_selinux=check])
if test "$with_selinux" != "yes" ; then
if test "$with_secdriver_selinux" = "check" ; then
with_secdriver_selinux=no
else
AC_MSG_ERROR([You must install the SELinux development package in order to compile libvirt])
fi
else
old_cflags="$CFLAGS"
old_libs="$LIBS"
CFLAGS="$CFLAGS $SELINUX_CFLAGS"
LIBS="$CFLAGS $SELINUX_LIBS"
fail=0
AC_CHECK_FUNC([selinux_virtual_domain_context_path], [], [fail=1])
AC_CHECK_FUNC([selinux_virtual_image_context_path], [], [fail=1])
CFLAGS="$old_cflags"
LIBS="$old_libs"
if test "$fail" = "1" ; then
if test "$with_secdriver_selinux" = "check" ; then
with_secdriver_selinux=no
else
AC_MSG_ERROR([You must install the SELinux development package in order to compile libvirt])
fi
else
with_secdriver_selinux=yes
AC_DEFINE_UNQUOTED([WITH_SECDRIVER_SELINUX], 1, [whether SELinux security driver is available])
fi
fi
AM_CONDITIONAL([WITH_SECDRIVER_SELINUX], [test "$with_secdriver_selinux" != "no"])
dnl NUMA lib
AC_ARG_WITH([numactl],
[ --with-numactl use numactl for host topology info],
@ -639,6 +768,49 @@ AM_CONDITIONAL([HAVE_NUMACTL], [test "$with_numactl" != "no"])
AC_SUBST([NUMACTL_CFLAGS])
AC_SUBST([NUMACTL_LIBS])
dnl libcap-ng
AC_ARG_WITH([capng],
[ --with-capng use libcap-ng to reduce libvirtd privileges],
[],
[with_capng=check])
dnl
dnl This check looks for 'capng_updatev' since that was
dnl introduced in 0.4.0 release which need as minimum
dnl
CAPNG_CFLAGS=
CAPNG_LIBS=
if test "$with_qemu" = "yes" -a "$with_capng" != "no"; then
old_cflags="$CFLAGS"
old_libs="$LIBS"
if test "$with_capng" = "check"; then
AC_CHECK_HEADER([cap-ng.h],[],[with_capng=no])
AC_CHECK_LIB([cap-ng], [capng_updatev],[],[with_capng=no])
if test "$with_capng" != "no"; then
with_capng="yes"
fi
else
fail=0
AC_CHECK_HEADER([cap-ng.h],[],[fail=1])
AC_CHECK_LIB([cap-ng], [capng_updatev],[],[fail=1])
test $fail = 1 &&
AC_MSG_ERROR([You must install the capng >= 0.4.0 development package in order to compile and run libvirt])
fi
CFLAGS="$old_cflags"
LIBS="$old_libs"
fi
if test "$with_capng" = "yes"; then
CAPNG_LIBS="-lcap-ng"
AC_DEFINE_UNQUOTED([HAVE_CAPNG], 1, [whether capng is available for privilege reduction])
fi
AM_CONDITIONAL([HAVE_CAPNG], [test "$with_capng" != "no"])
AC_SUBST([CAPNG_CFLAGS])
AC_SUBST([CAPNG_LIBS])
dnl virsh libraries
AC_CHECK_HEADERS([readline/readline.h])
@ -692,10 +864,38 @@ if test "$with_network" = "yes" ; then
fi
AM_CONDITIONAL([WITH_NETWORK], [test "$with_network" = "yes"])
with_bridge=no
if test "$with_qemu:$with_lxc:$with_network" != "no:no:no"; then
with_bridge=yes
AC_DEFINE_UNQUOTED([WITH_BRIDGE], 1, [whether bridge code is needed])
fi
AM_CONDITIONAL([WITH_BRIDGE], [test "$with_bridge" = "yes"])
dnl
dnl Storage driver checks
dnl
dnl netcf library
AC_ARG_WITH([netcf],
[ --with-netcf libnetcf support to configure physical host network interfaces],
[], [with_netcf=check])
NETCF_CFLAGS=
NETCF_LIBS=
if test "$with_netcf" = "yes" -o "$with_netcf" = "check"; then
PKG_CHECK_MODULES(NETCF, netcf >= $NETCF_REQUIRED,
[with_netcf=yes], [
if test "$with_netcf" = "check" ; then
with_netcf=no
else
AC_MSG_ERROR(
[You must install libnetcf >= $NETCF_REQUIRED to compile libvirt])
fi
])
if test "$with_netcf" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_NETCF], 1,
[whether libnetcf is available to configure physical host network interfaces])
fi
fi
AM_CONDITIONAL([WITH_NETCF], [test "$with_netcf" = "yes"])
AC_SUBST([NETCF_CFLAGS])
AC_SUBST([NETCF_LIBS])
AC_ARG_WITH([storage-fs],
[ --with-storage-fs with FileSystem backend for the storage driver (on)],[],[with_storage_fs=check])
@ -703,6 +903,8 @@ AC_ARG_WITH([storage-lvm],
[ --with-storage-lvm with LVM backend for the storage driver (on)],[],[with_storage_lvm=check])
AC_ARG_WITH([storage-iscsi],
[ --with-storage-iscsi with iSCSI backend for the storage driver (on)],[],[with_storage_iscsi=check])
AC_ARG_WITH([storage-scsi],
[ --with-storage-scsi with SCSI backend for the storage driver (on)],[],[with_storage_scsi=check])
AC_ARG_WITH([storage-disk],
[ --with-storage-disk with GPartd Disk backend for the storage driver (on)],[],[with_storage_disk=check])
@ -712,6 +914,7 @@ if test "$with_libvirtd" = "no"; then
with_storage_fs=no
with_storage_lvm=no
with_storage_iscsi=no
with_storage_scsi=no
with_storage_disk=no
fi
if test "$with_storage_dir" = "yes" ; then
@ -748,21 +951,6 @@ if test "$with_storage_fs" = "yes"; then
[Location or name of the showmount program])
fi
AC_PATH_PROG([QEMU_IMG], [qemu-img], [], [$PATH:/sbin:/usr/sbin:/bin:/usr/bin])
if test -n "$QEMU_IMG" ; then
AC_DEFINE_UNQUOTED([HAVE_QEMU_IMG], 1, [whether qemu-img is available for non-raw files])
AC_DEFINE_UNQUOTED([QEMU_IMG],["$QEMU_IMG"],
[Location or name of the qemu-img program])
fi
AC_PATH_PROG([QCOW_CREATE], [qcow-create], [], [$PATH:/sbin:/usr/sbin:/bin:/usr/bin])
if test -n "$QCOW_CREATE" ; then
AC_DEFINE_UNQUOTED([HAVE_QCOW_CREATE], 1, [whether qcow-create is available for non-raw files])
AC_DEFINE_UNQUOTED([QCOW_CREATE],["$QCOW_CREATE"],
[Location or name of the qcow-create program])
fi
if test "$with_storage_lvm" = "yes" -o "$with_storage_lvm" = "check"; then
AC_PATH_PROG([PVCREATE], [pvcreate], [], [$PATH:/sbin:/usr/sbin])
AC_PATH_PROG([VGCREATE], [vgcreate], [], [$PATH:/sbin:/usr/sbin])
@ -840,6 +1028,13 @@ if test "$with_storage_iscsi" = "yes" -o "$with_storage_iscsi" = "check"; then
fi
AM_CONDITIONAL([WITH_STORAGE_ISCSI], [test "$with_storage_iscsi" = "yes"])
if test "$with_storage_scsi" = "check"; then
with_storage_scsi=yes
AC_DEFINE_UNQUOTED([WITH_STORAGE_SCSI], 1,
[whether SCSI backend for storage driver is enabled])
fi
AM_CONDITIONAL([WITH_STORAGE_SCSI], [test "$with_storage_scsi" = "yes"])
LIBPARTED_CFLAGS=
@ -1023,6 +1218,22 @@ if test "${enable_oom}" = yes; then
AC_DEFINE([TEST_OOM], 1, [Whether malloc OOM checking is enabled])
fi
AC_ARG_ENABLE([test-locking],
[ --enable-test-locking thread locking tests using CIL],
[case "${enableval}" in
yes|no) ;;
*) AC_MSG_ERROR([bad value ${enableval} for test-locking option]) ;;
esac],
[enableval=no])
enable_locking=$enableval
if test "$enable_locking" = "yes"; then
LOCK_CHECKING_CFLAGS="-Dbool=char -D_Bool=char -save-temps"
AC_SUBST([LOCK_CHECKING_CFLAGS])
fi
AM_CONDITIONAL([WITH_CIL],[test "$enable_locking" = "yes"])
dnl Enable building the proxy?
AC_ARG_WITH([xen-proxy],
@ -1152,6 +1363,7 @@ if test "x$with_hal" = "xyes" -o "x$with_hal" = "xcheck"; then
CFLAGS="$CFLAGS $HAL_CFLAGS"
LDFLAGS="$LDFLAGS $HAL_LIBS"
AC_CHECK_FUNCS([libhal_get_all_devices],,[with_hal=no])
AC_CHECK_FUNCS([dbus_watch_get_unix_fd])
CFLAGS="$old_CFLAGS"
LDFLAGS="$old_LDFLAGS"
fi
@ -1222,6 +1434,8 @@ then
fi
AM_CONDITIONAL([WITH_NODE_DEVICES], [test "$with_nodedev" = "yes"])
AM_CONDITIONAL([WITH_LINUX], [test `uname -s` = "Linux"])
# Only COPYING.LIB is under version control, yet COPYING
# is included as part of the distribution tarball.
# Copy one to the other, but only if this is a srcdir-build.
@ -1232,21 +1446,23 @@ cp -f COPYING.LIB COPYING
AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
docs/examples/Makefile docs/devhelp/Makefile \
docs/examples/python/Makefile \
docs/schemas/Makefile \
gnulib/lib/Makefile \
gnulib/tests/Makefile \
libvirt.pc libvirt.spec mingw32-libvirt.spec \
src/libvirt_sym.version \
po/Makefile.in \
include/libvirt/Makefile include/libvirt/libvirt.h \
python/Makefile python/tests/Makefile \
qemud/Makefile \
tools/Makefile \
tests/Makefile proxy/Makefile \
tests/xml2sexprdata/Makefile \
tests/sexpr2xmldata/Makefile \
tests/xmconfigdata/Makefile \
tests/xencapsdata/Makefile \
tests/confdata/Makefile \
examples/domain-events/events-c/Makefile)
examples/domain-events/events-c/Makefile \
examples/hellolibvirt/Makefile)
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Configuration summary])
@ -1259,11 +1475,14 @@ AC_MSG_NOTICE([ Proxy: $with_xen_proxy])
AC_MSG_NOTICE([ QEMU: $with_qemu])
AC_MSG_NOTICE([ UML: $with_uml])
AC_MSG_NOTICE([ OpenVZ: $with_openvz])
AC_MSG_NOTICE([ VBox: $with_vbox])
AC_MSG_NOTICE([ LXC: $with_lxc])
AC_MSG_NOTICE([ ONE: $with_one])
AC_MSG_NOTICE([ Test: $with_test])
AC_MSG_NOTICE([ Remote: $with_remote])
AC_MSG_NOTICE([ Network: $with_network])
AC_MSG_NOTICE([Libvirtd: $with_libvirtd])
AC_MSG_NOTICE([ netcf: $with_netcf])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Storage Drivers])
AC_MSG_NOTICE([])
@ -1272,8 +1491,13 @@ AC_MSG_NOTICE([ FS: $with_storage_fs])
AC_MSG_NOTICE([ NetFS: $with_storage_fs])
AC_MSG_NOTICE([ LVM: $with_storage_lvm])
AC_MSG_NOTICE([ iSCSI: $with_storage_iscsi])
AC_MSG_NOTICE([ SCSI: $with_storage_scsi])
AC_MSG_NOTICE([ Disk: $with_storage_disk])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Security Drivers])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ SELinux: $with_secdriver_selinux])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Driver Loadable Modules])
AC_MSG_NOTICE([])
if test "$with_driver_modules" != "no" ; then
@ -1302,39 +1526,54 @@ else
AC_MSG_NOTICE([ polkit: no])
fi
if test "$with_selinux" = "yes" ; then
AC_MSG_NOTICE([ selinux: $SELINUX_CFLAGS $SELINUX_LIBS])
AC_MSG_NOTICE([ selinux: $SELINUX_CFLAGS $SELINUX_LIBS])
else
AC_MSG_NOTICE([ selinux: no])
AC_MSG_NOTICE([ selinux: no])
fi
if test "$with_numactl" = "yes" ; then
AC_MSG_NOTICE([ numactl: $NUMACTL_CFLAGS $NUMACTL_LIBS])
AC_MSG_NOTICE([ numactl: $NUMACTL_CFLAGS $NUMACTL_LIBS])
else
AC_MSG_NOTICE([ numactl: no])
AC_MSG_NOTICE([ numactl: no])
fi
if test "$with_capng" = "yes" ; then
AC_MSG_NOTICE([ capng: $CAPNG_CFLAGS $CAPNG_LIBS])
else
AC_MSG_NOTICE([ capng: no])
fi
if test "$with_xen" = "yes" ; then
AC_MSG_NOTICE([ xen: $XEN_CFLAGS $XEN_LIBS])
AC_MSG_NOTICE([ xen: $XEN_CFLAGS $XEN_LIBS])
else
AC_MSG_NOTICE([ xen: no])
AC_MSG_NOTICE([ xen: no])
fi
if test "$with_hal" = "yes" ; then
AC_MSG_NOTICE([ hal: $HAL_CFLAGS $HAL_LIBS])
AC_MSG_NOTICE([ hal: $HAL_CFLAGS $HAL_LIBS])
else
AC_MSG_NOTICE([ hal: no])
AC_MSG_NOTICE([ hal: no])
fi
if test "$with_devkit" = "yes" ; then
AC_MSG_NOTICE([ devkit: $DEVKIT_CFLAGS $DEVKIT_LIBS])
else
AC_MSG_NOTICE([ devkit: no])
fi
if test "$with_netcf" = "yes" ; then
AC_MSG_NOTICE([ netcf: $NETCF_CFLAGS $NETCF_LIBS])
else
AC_MSG_NOTICE([ netcf: no])
fi
if test "$with_one" = "yes" ; then
AC_MSG_NOTICE([ xmlrpc: $XMLRPC_CFLAGS $XMLRPC_LIBS])
else
AC_MSG_NOTICE([ xmlrpc: no])
fi
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Test suite])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Coverage: $enable_coverage])
AC_MSG_NOTICE([ Coverage: $enable_coverage])
AC_MSG_NOTICE([ Alloc OOM: $enable_oom])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Miscellaneous])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Debug: $enable_debug])
AC_MSG_NOTICE([ Debug: $enable_debug])
AC_MSG_NOTICE([ Warnings: $enable_compile_warnings])
AC_MSG_NOTICE([ Readline: $lv_use_readline])
AC_MSG_NOTICE([])

View File

@ -26,4 +26,3 @@ the underlying acual implementation of the hypervisor calls.
releases of the library.
Daniel Veillard <veillard@redhat.com>
$Date$

View File

@ -1,5 +1,5 @@
## Process this file with automake to produce Makefile.in
SUBDIRS= . examples devhelp
SUBDIRS= schemas examples devhelp
# The directory containing the source code (if it contains documentation).
DOC_SOURCE_DIR=../src
@ -29,6 +29,9 @@ png = \
libvirtLogo.png \
libvirt-net-logical.png \
libvirt-net-physical.png \
libvirt-daemon-arch.png \
libvirt-driver-arch.png \
libvirt-object-model.png \
madeWith.png \
windows-cygwin-1.png \
windows-cygwin-2.png \
@ -43,6 +46,8 @@ gif = \
dot_html_in = $(wildcard *.html.in)
dot_html = $(dot_html_in:%.html.in=%.html)
patches = $(wildcard api_extension/*.patch)
xml = \
libvirt-api.xml \
libvirt-refs.xml \
@ -52,25 +57,25 @@ xml = \
testnetpriv.xml \
testnode.xml
rng = \
libvirt.rng \
network.rng
fig = \
libvirt-net-logical.fig \
libvirt-net-physical.fig
libvirt-net-physical.fig \
libvirt-daemon-arch.fig \
libvirt-driver-arch.fig \
libvirt-object-model.fig
EXTRA_DIST= \
libvirt-api.xml libvirt-refs.xml apibuild.py \
site.xsl newapi.xsl news.xsl page.xsl ChangeLog.xsl \
$(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \
$(xml) $(rng) $(fig) $(png) \
$(xml) $(fig) $(png) \
$(patches) \
virsh.pod ChangeLog.awk
all: web $(top_builddir)/NEWS $(man_MANS)
virsh.1: virsh.pod
pod2man -c "Virtualization Support" $(srcdir)/virsh.pod > $@-t
pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" $(srcdir)/virsh.pod > $@-t
mv $@-t $@
cp $@ $(top_builddir)
@ -87,6 +92,9 @@ ChangeLog.html.in: ChangeLog.xml ChangeLog.xsl
name=`echo $@ | sed -e 's/.tmp//'`; \
$(XSLTPROC) --nonet $(top_srcdir)/docs/ChangeLog.xsl $< > $@ || (rm $@ && exit 1) ; fi )
%.png: %.fig
convert -rotate 90 $< $@
%.html.tmp: %.html.in site.xsl page.xsl sitemap.html.in
@(if [ -x $(XSLTPROC) ] ; then \
echo "Generating $@"; \
@ -130,9 +138,8 @@ rebuild: api all
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-@INSTALL@ -m 0644 $(srcdir)/libvir.html $(srcdir)/FAQ.html \
$(srcdir)/redhat.gif $(srcdir)/Libxml2-Logo-90x34.gif \
$(DESTDIR)$(HTML_DIR)
-@INSTALL@ -m 0644 $(srcdir)/FAQ.html \
$(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
for h in $(apihtml); do \
$(INSTALL) -m 0644 $(srcdir)/$$h $(DESTDIR)$(HTML_DIR)/html; done

246
docs/api.html Normal file
View File

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from api.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: The libvirt API concepts</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<span class="active">API concepts</span>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
</li><li>
<div>
<a title="Providing isolated networks and NAT based network connectivity" class="inactive" href="archnetwork.html">Network</a>
</div>
</li><li>
<div>
<a title="Managing storage pools and volumes" class="inactive" href="archstorage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Enumerating host node devices" class="inactive" href="archnode.html">Node Devices</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="inactive" href="drivers.html">Drivers</a>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>The libvirt API concepts</h1>
<p> This page describes the main principles and architecture choices
behind the definition of the libvirt API:
</p>
<ul><li>
<a href="#Objects">Objects exposed</a>
</li><li>
<a href="#Functions">Functions and naming conventions</a>
</li><li>
<a href="#Driver">The drivers</a>
</li><li>
<a href="#Remote">Daemon and remote access</a>
</li></ul>
<h2>
<a name="Objects" id="Objects">Objects exposed</a>
</h2>
<p> As defined in the <a href="goals.html">goals section</a>, libvirt
API need to expose all the resources needed to manage the virtualization
support of recent operating systems. The first object manipulated though
the API is <code>virConnectPtr</code> which represent a connection to
an hypervisor. Any application using libvirt is likely to start using the
API by calling one of <a href="html/libvirt-libvirt.html#virConnectOpen">the virConnectOpen functions</a>. You will note that those functions take
a name argument which is actually an URI to select the right hypervisor to
open, this is needed to allow remote connections and also select between
different possible hypervisors (for example on a Linux system it may be
possible to use both KVM and LinuxContainers on the same node). A NULL
name will default to a preselected hypervisor but it's probably not a
wise thing to do in most cases. See the <a href="uri.html">connection
URI</a> page for a full descriptions of the values allowed.</p>
<p>
</p>
<p> Once the application obtained a <a href="html/libvirt-libvirt.html#virConnectPtr"><code>virConnectPtr</code></a>
connection to the
hypervisor it can then use it to manage domains and related resources
available for virtualization like storage and networking. All those are
exposed as first class objects, and connected to the hypervisor connection
(and the node or cluster where it is available).</p>
<p class="image">
<img alt="first class objects exposed by the API" src="libvirt-object-model.png" /></p>
<p> The figure above shows the five main objects exported by the API:</p>
<ul><li>virConnectPtr: represent a connection to an hypervisor.</li><li>virDomainPtr: represent one domain either active or defined (i.e.
existing as permanent config file and storage but not currently running
on that node). The function <a href="html/libvirt-libvirt.html#virConnectListDomains"><code>virConnectListDomains</code></a>
allows to list all the IDs for the domains active on this hypervisor.</li><li>virNetworkPtr: represent one network either active or defined (i.e.
existing as permanent config file and storage but not currently activated.
The function <a href="html/libvirt-libvirt.html#virConnectListNetworks"><code>virConnectListNetworks</code></a>
allows to list all the virtualization networks actived on this node.</li><li>virStorageVolPtr: represent one storage volume, usually this is used
as a block device available to one of the domains. The function
<a href="html/libvirt-libvirt.html#virStorageVolLookupByPath"><code>virStorageVolLookupByPath</code></a> allows to find
the object based on its path on the node.</li><li>virStoragePoolPtr: represent a storage pool, i.e. a logical area
which can be used to allocate and store storage volumes. The function
<a href="html/libvirt-libvirt.html#virStoragePoolLookupByVolume"><code>virStoragePoolLookupByVolume</code></a> allows to find
the storage pool containing a given storage volume.</li></ul>
<p> Most object manipulated by the library can also be represented using
XML descriptions. This is used primarily to create those object, but is
also helpful to modify or save their description back.</p>
<p> Domains, network and storage pools can be either <code>active</code>
i.e. either running or available for immediate use, or
<code>defined</code> in which case they are inactive but there is
a permanent definition available in the system for them. Based on this
thay can be activated dynamically in order to be used.</p>
<p> Most kind of object can also be named in various ways:</p>
<p>
</p>
<ul><li>by their <code>name</code>, an user friendly identifier but
whose unicity cannot be garanteed between two nodes.</li><li>by their <code>ID</code>, which is a runtime unique identifier
provided by the hypervisor for one given activation of the object,
but it becomes invalid once the resource is deactivated.</li><li>by their <code>UUID</code>, a 16 bytes unique identifier
as defined in <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>,
which is garanteed to be unique for long term usage and across a
set of nodes.</li></ul>
<h2>
<a name="Functions" id="Functions">Functions and naming
conventions</a>
</h2>
<p> The naming of the functions present in the library is usually
made of a prefix describing the object associated to the function
and a verb describing the action on that object.</p>
<p> For each first class object you will find apis
for the following actions:</p>
<ul><li><b>Lookup</b>:...LookupByName,
</li><li><b>Enumeration</b>:virConnectList... and virConnectNumOf...:
those are used to enumerate a set of object available to an given
hypervisor connection like:
<a href="html/libvirt-libvirt.html#virConnectListDomains"><code>virConnectListDomains</code></a>,
<a href="html/libvirt-libvirt.html#virConnectNumOfDomains"><code>virConnectNumOfDomains</code></a>,
<a href="html/libvirt-libvirt.html#virConnectListNetworks"><code>virConnectListNetworks</code></a>,
<a href="html/libvirt-libvirt.html#virConnectListStoragePools"><code>virConnectListStoragePools</code></a>, etc.</li><li><b>Description</b>: ...GetInfo: those are generic accessor providing
a set of informations about an object, they are
<a href="html/libvirt-libvirt.html#virNodeGetInfo"><code>virNodeGetInfo</code></a>,
<a href="html/libvirt-libvirt.html#virDomainGetInfo"><code>virDomainGetInfo</code></a>,
<a href="html/libvirt-libvirt.html#virStoragePoolGetInfo"><code>virStoragePoolGetInfo</code></a>,
<a href="html/libvirt-libvirt.html#virStorageVolGetInfo"><code>virStorageVolGetInfo</code></a>.</li><li><b>Accessors</b>: ...Get... and ...Set...: those are more specific
accessors to query or modify the given object, like
<a href="html/libvirt-libvirt.html#virConnectGetType"><code>virConnectGetType</code></a>,
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory"><code>virDomainGetMaxMemory</code></a>,
<a href="html/libvirt-libvirt.html#virDomainSetMemory"><code>virDomainSetMemory</code></a>,
<a href="html/libvirt-libvirt.html#virDomainGetVcpus"><code>virDomainGetVcpus</code></a>,
<a href="html/libvirt-libvirt.html#virStoragePoolSetAutostart"><code>virStoragePoolSetAutostart</code></a>,
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName"><code>virNetworkGetBridgeName</code></a>, etc.</li><li><b>Creation</b>: </li><li><b>Destruction</b>: ... </li></ul>
<p> For more in-depth details of the storage related APIs see
<a href="storage.html">the storage management page</a>,
</p>
<h2>
<a name="Driver" id="Driver">The libvirt drivers</a>
</h2>
<p></p>
<p class="image">
<img alt="The libvirt driver architecture" src="libvirt-driver-arch.png" /></p>
<h2>
<a name="Remote" id="Remote">Daemon and remote access</a>
</h2>
<p></p>
<p class="image">
<img alt="The libvirt daemon and remote architecture" src="libvirt-daemon-arch.png" /></p>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

136
docs/api.html.in Normal file
View File

@ -0,0 +1,136 @@
<?xml version="1.0"?>
<html>
<body>
<h1>The libvirt API concepts</h1>
<p> This page describes the main principles and architecture choices
behind the definition of the libvirt API:
<ul>
<li>
<a href="#Objects">Objects exposed</a>
</li>
<li>
<a href="#Functions">Functions and naming conventions</a>
</li>
<li>
<a href="#Driver">The drivers</a>
</li>
<li>
<a href="#Remote">Daemon and remote access</a>
</li>
</ul>
<h2><a name="Objects" id="Objects">Objects exposed</a></h2>
<p> As defined in the <a href="goals.html">goals section</a>, libvirt
API need to expose all the resources needed to manage the virtualization
support of recent operating systems. The first object manipulated though
the API is <code>virConnectPtr</code> which represent a connection to
an hypervisor. Any application using libvirt is likely to start using the
API by calling one of <a href="html/libvirt-libvirt.html#virConnectOpen"
>the virConnectOpen functions</a>. You will note that those functions take
a name argument which is actually an URI to select the right hypervisor to
open, this is needed to allow remote connections and also select between
different possible hypervisors (for example on a Linux system it may be
possible to use both KVM and LinuxContainers on the same node). A NULL
name will default to a preselected hypervisor but it's probably not a
wise thing to do in most cases. See the <a href="uri.html">connection
URI</a> page for a full descriptions of the values allowed.<p>
<p> Once the application obtained a <code class='docref'>virConnectPtr</code>
connection to the
hypervisor it can then use it to manage domains and related resources
available for virtualization like storage and networking. All those are
exposed as first class objects, and connected to the hypervisor connection
(and the node or cluster where it is available).</p>
<p class="image">
<img alt="first class objects exposed by the API"
src="libvirt-object-model.png"/>
</p>
<p> The figure above shows the five main objects exported by the API:</p>
<ul>
<li>virConnectPtr: represent a connection to an hypervisor.</li>
<li>virDomainPtr: represent one domain either active or defined (i.e.
existing as permanent config file and storage but not currently running
on that node). The function <code class='docref'>virConnectListDomains</code>
allows to list all the IDs for the domains active on this hypervisor.</li>
<li>virNetworkPtr: represent one network either active or defined (i.e.
existing as permanent config file and storage but not currently activated.
The function <code class='docref'>virConnectListNetworks</code>
allows to list all the virtualization networks actived on this node.</li>
<li>virStorageVolPtr: represent one storage volume, usually this is used
as a block device available to one of the domains. The function
<code class="docref">virStorageVolLookupByPath</code> allows to find
the object based on its path on the node.</li>
<li>virStoragePoolPtr: represent a storage pool, i.e. a logical area
which can be used to allocate and store storage volumes. The function
<code class="docref">virStoragePoolLookupByVolume</code> allows to find
the storage pool containing a given storage volume.</li>
</ul>
<p> Most object manipulated by the library can also be represented using
XML descriptions. This is used primarily to create those object, but is
also helpful to modify or save their description back.</p>
<p> Domains, network and storage pools can be either <code>active</code>
i.e. either running or available for immediate use, or
<code>defined</code> in which case they are inactive but there is
a permanent definition available in the system for them. Based on this
thay can be activated dynamically in order to be used.</p>
<p> Most kind of object can also be named in various ways:<p>
<ul>
<li>by their <code>name</code>, an user friendly identifier but
whose unicity cannot be garanteed between two nodes.</li>
<li>by their <code>ID</code>, which is a runtime unique identifier
provided by the hypervisor for one given activation of the object,
but it becomes invalid once the resource is deactivated.</li >
<li>by their <code>UUID</code>, a 16 bytes unique identifier
as defined in <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>,
which is garanteed to be unique for long term usage and across a
set of nodes.</li>
</ul>
<h2><a name="Functions" id="Functions">Functions and naming
conventions</a></h2>
<p> The naming of the functions present in the library is usually
made of a prefix describing the object associated to the function
and a verb describing the action on that object.</p>
<p> For each first class object you will find apis
for the following actions:</p>
<ul>
<li><b>Lookup</b>:...LookupByName,
<li><b>Enumeration</b>:virConnectList... and virConnectNumOf...:
those are used to enumerate a set of object available to an given
hypervisor connection like:
<code class='docref'>virConnectListDomains</code>,
<code class='docref'>virConnectNumOfDomains</code>,
<code class='docref'>virConnectListNetworks</code>,
<code class='docref'>virConnectListStoragePools</code>, etc.</li>
<li><b>Description</b>: ...GetInfo: those are generic accessor providing
a set of informations about an object, they are
<code class='docref'>virNodeGetInfo</code>,
<code class='docref'>virDomainGetInfo</code>,
<code class='docref'>virStoragePoolGetInfo</code>,
<code class='docref'>virStorageVolGetInfo</code>.</li>
<li><b>Accessors</b>: ...Get... and ...Set...: those are more specific
accessors to query or modify the given object, like
<code class='docref'>virConnectGetType</code>,
<code class='docref'>virDomainGetMaxMemory</code>,
<code class='docref'>virDomainSetMemory</code>,
<code class='docref'>virDomainGetVcpus</code>,
<code class='docref'>virStoragePoolSetAutostart</code>,
<code class='docref'>virNetworkGetBridgeName</code>, etc.</li>
<li><b>Creation</b>: </li>
<li><b>Destruction</b>: ... </li>
</ul>
<p> For more in-depth details of the storage related APIs see
<a href="storage.html">the storage management page</a>,
<h2><a name="Driver" id="Driver">The libvirt drivers</a></h2>
<p></p>
<p class="image">
<img alt="The libvirt driver architecture"
src="libvirt-driver-arch.png"/>
</p>
<h2><a name="Remote" id="Remote">Daemon and remote access</a></h2>
<p></p>
<p class="image">
<img alt="The libvirt daemon and remote architecture"
src="libvirt-daemon-arch.png"/>
</p>
</body>
</html>

365
docs/api_extension.html Normal file
View File

@ -0,0 +1,365 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from api_extension.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: Implementing a new API in Libvirt</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="intro.html">Architecture</a>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="inactive" href="drivers.html">Drivers</a>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="active" href="internals.html">Internals</a>
<ul class="l2"><li>
<div>
<a title="General hacking guidelines for contributors" class="inactive" href="hacking.html">Contributor guidelines</a>
</div>
</li><li>
<div>
<span class="active">API extensions</span>
</div>
</li></ul>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>Implementing a new API in Libvirt</h1>
<ul><li>
<a href="#publicapi">Defining the public API</a>
</li><li>
<a href="#internalapi">Defining the internal API</a>
</li><li>
<a href="#implpublic">Implementing the public API</a>
</li><li>
<a href="#wireproto">Defining the wire protocol format</a>
</li><li>
<a href="#rpcclient">Implement the RPC client</a>
</li><li>
<a href="#serverdispatch">Implement the server side dispatcher</a>
</li><li>
<a href="#driverimpl">Implement the driver methods</a>
</li><li>
<a href="#virsh">Implement virsh commands</a>
</li></ul>
<p>
This document walks you through the process of implementing a new
API in libvirt. It uses as an example the addition of the node device
create and destroy APIs.
</p>
<p>
Before you begin coding, it is critical that you propose your
changes on the libvirt mailing list and get feedback on your ideas to
make sure what you're proposing fits with the general direction of the
project. Even before doing a proof of concept implementation, send an
email giving an overview of the functionality you think should be
added to libvirt. Someone may already be working on the feature you
want. Also, recognize that everything you write is likely to undergo
significant rework as you discuss it with the other developers, so
don't wait too long before getting feedback.
</p>
<p>
Adding a new API to libvirt is not difficult, but there are quite a
few steps. This document assumes that you are familiar with C
programming and have checked out the libvirt code from the source code
repository and successfully built the existing tree. Instructions on
how to check out and build the code can be found at:
</p>
<p>
<a href="http://libvirt.org/downloads.html">http://libvirt.org/downloads.html</a>
</p>
<p>
Once you have a working development environment, the steps to create a
new API are:
</p>
<ol><li>define the public API</li><li>define the internal driver API</li><li>implement the public API</li><li>define the wire protocol format</li><li>implement the RPC client</li><li>implement the server side dispatcher</li><li>implement the driver methods</li><li>add virsh support</li></ol>
<p>
It is, of course, possible to implement the pieces in any order, but
if the development tasks are completed in the order listed, the code
will compile after each step. Given the number of changes required,
verification after each step is highly recommended.
</p>
<p>
Submit new code in the form shown in the example code: one patch
per step. That's not to say submit patches before you have working
functionality--get the whole thing working and make sure you're happy
with it. Then use git or some other version control system that lets
you rewrite your commit history and break patches into pieces so you
don't drop a big blob of code on the mailing list at one go. For
example, I didn't follow my own advice when I originally submitted the
example code to the libvirt list but rather submitted it in several
large chunks. I've used git's ability to rewrite my commit history to
break the code apart into the example patches shown.
</p>
<p>
Don't mix anything else into the patches you submit. The patches
should be the minimal changes required to implement the functionality
you're adding. If you notice a bug in unrelated code (i.e., code you
don't have to touch to implement your API change) during development,
create a patch that just addresses that bug and submit it
separately.
</p>
<p>With that said, let's begin.</p>
<h2>
<a name="publicapi" id="publicapi">Defining the public API</a>
</h2>
<p>The first task is to define the public API and add it to:</p>
<p>
<code>include/libvirt/libvirt.h.in</code>
</p>
<p>
This task is in many ways the most important to get right, since once
the API has been committed to the repository, it's libvirt's policy
never to change it. Mistakes in the implementation are bugs that you
can fix. Make a mistake in the API definition and you're stuck with
it, so think carefully about the interface and don't be afraid to
rework it as you go through the process of implementing it.
</p>
<p>Once you have defined the API, you have to add the symbol names to:</p>
<p>
<code>src/libvirt_public.syms</code>
</p>
<p class="example">See <a href="api_extension/0001-Step-1-of-8-Define-the-public-API.patch">0001-Step-1-of-8-Define-the-public-API.patch</a> for example code.</p>
<h2>
<a name="internalapi" id="internalapi">Defining the internal API</a>
</h2>
<p>
Each public API call is associated with a driver, such as a host
virtualization driver, a network virtualization driver, a storage
virtualization driver, a state driver, or a device monitor. Adding
the internal API is ordinarily a matter of adding a new member to the
struct representing one of these drivers.
</p>
<p>
Of course, it's possible that the new API will involve the creation of
an entire new driver type, in which case the changes will include the
creation of a new struct type to represent the new driver type.
</p>
<p>The driver structs are defined in:</p>
<p>
<code>src/driver.h</code>
</p>
<p>
To define the internal API, first typedef the driver function
prototype and then add a new field for it to the relevant driver
struct.
</p>
<p class="example">See <a href="api_extension/0002-Step-2-of-8-Define-the-internal-driver-API.patch">0002-Step-2-of-8-Define-the-internal-driver-API.patch</a></p>
<h2>
<a name="implpublic" id="implpublic">Implementing the public API</a>
</h2>
<p>
Implementing the public API is largely a formality in which we wire up
public API to the internal driver API. The public API implementation
takes care of some basic validity checks before passing control to the
driver implementation. In RFC 2119 vocabulary, this function:
</p>
<ol class="ordinarylist"><li>SHOULD log a message with VIR_DEBUG() indicating that it is
being called and its parameters;</li><li>MUST call virResetLastError();</li><li>SHOULD confirm that the connection is valid with
VIR_IS_CONNECT(conn);</li><li><strong>SECURITY: If the API requires a connection with write
privileges, MUST confirm that the connection flags do not
indicate that the connection is read-only;</strong></li><li>SHOULD do basic validation of the parameters that are being
passed in;</li><li>MUST confirm that the driver for this connection exists and that
it implements this function;</li><li>MUST call the internal API;</li><li>SHOULD log a message with VIR_DEBUG() indicating that it is
returning, its return value, and status.</li><li>MUST return status to the caller.</li></ol>
<p>The public API calls are implemented in:</p>
<p>
<code>src/libvirt.c</code>
</p>
<p class="example">See <a href="api_extension/0003-Step-3-of-8-Implement-the-public-API.patch">0003-Step-3-of-8-Implement-the-public-API.patch</a></p>
<h2>
<a name="wireproto" id="wireproto">Defining the wire protocol format</a>
</h2>
<p>
Defining the wire protocol is essentially a straightforward exercise
which is probably most easily understood by referring to the existing
remote protocol wire format definitions and the example patch. It
involves making two additions to:
</p>
<p>
<code>qemud/remote_protocol.x</code>
</p>
<p>
First, create two new structs for each new function that you're adding
to the API. One struct describes the parameters to be passed to the
remote function, and a second struct describes the value returned by
the remote function. The one exception to this rule is that functions
that return only integer status do not require a struct for returned
data.
</p>
<p>
Second, add values to the remote_procedure enum for each new function
added to the API.
</p>
<p class="example">See <a href="api_extension/0004-Step-4-of-8-Define-the-wire-protocol-format.patch">0004-Step-4-of-8-Define-the-wire-protocol-format.patch</a></p>
<p>
Once these changes are in place, it's necessary to run 'make rpcgen'
in the qemud directory to create the .c and .h files required by the
remote protocol code. This must be done on a Linux host using the
GLibC rpcgen program. Other rpcgen versions may generate code which
results in bogus compile time warnings
</p>
<h2>
<a name="rpcclient" id="rpcclient">Implement the RPC client</a>
</h2>
<p>
Implementing the RPC client is also relatively mechanical, so refer to
the exising code and example patch for guidance. The RPC client uses
the rpcgen generated .h files. The remote method calls go in:
</p>
<p>
<code>src/remote_internal.c</code>
</p>
<p>Each remote method invocation does the following:</p>
<ol class="ordinarylist"><li>locks the remote driver;</li><li>sets up the method arguments;</li><li>invokes the remote function;</li><li>checks the return value, if necessary;</li><li>extracts any returned data;</li><li>frees any returned data;</li><li>unlocks the remote driver.</li></ol>
<p>
Once you have created the remote method calls, you have to add fields
for them to the driver structs for the appropriate remote driver.
</p>
<p class="example">See <a href="api_extension/0005-Step-5-of-8-Implement-the-RPC-client.patch">0005-Step-5-of-8-Implement-the-RPC-client.patch</a></p>
<h2>
<a name="serverdispatch" id="serverdispatch">Implement the server side dispatcher</a>
</h2>
<p>
Implementing the server side of the remote function calls is simply a
matter of deserializing the parameters passed in from the remote
caller and passing them to the corresponding internal API function.
The server side dispatchers are implemented in:
</p>
<p>
<code>qemud/remote.c</code>
</p>
<p>Again, this step uses the .h files generated by make rpcgen.</p>
<p class="example">See <a href="api_extension/0006-Step-6-of-8-Implement-the-server-side-dispatcher.patch">0006-Step-6-of-8-Implement-the-server-side-dispatcher.patch</a></p>
<h2>
<a name="driverimpl" id="driverimpl">Implement the driver methods</a>
</h2>
<p>
So, after all that, we get to the fun part. All functionality in
libvirt is implemented inside a driver. Thus, here is where you
implement whatever functionality you're adding to libvirt. You'll
either need to add additional files to the src directory or extend
files that are already there, depending on what functionality you're
adding.
</p>
<p>
In the example code, the extension is only an additional two function
calls in the node device API, so most of the new code is additions to
existing files. The only new files are there for multi-platform
implementation convenience, as some of the new code is Linux specific.
</p>
<p>
The example code is probably uninteresting unless you're concerned
with libvirt storage, but I've included it here to show how new files
are added to the build environment.
</p>
<p class="example">See <a href="api_extension/0007-Step-7-of-8-Implement-the-driver-methods.patch">0007-Step-7-of-8-Implement-the-driver-methods.patch</a></p>
<h2>
<a name="virsh" id="virsh">Implement virsh commands</a>
</h2>
<p>
Once you have the new functionality in place, the easiest way to test
it and also to provide it to end users is to implement support for it
in virsh.
</p>
<p>
A virsh command is composed of a few pieces of code. You need to
define an array of vshCmdInfo structs for each new command that
contain the help text and the command description text. You also need
an array of vshCmdOptDef structs to describe the command options.
Once you have those pieces of data in place you can write the function
implementing the virsh command. Finally, you need to add the new
command to the commands[] array.
</p>
<p class="example">See <a href="api_extension/0008-Step-8-of-8-Add-virsh-support.patch">0008-Step-8-of-8-Add-virsh-support.patch</a></p>
<p>Once you have working functionality, run make check and make
syntax-check before generating patches.</p>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

302
docs/api_extension.html.in Normal file
View File

@ -0,0 +1,302 @@
<html>
<head>
<title>Implementing a new API in Libvirt</title>
</head>
<body>
<h1>Implementing a new API in Libvirt</h1>
<ul id="toc"></ul>
<p>
This document walks you through the process of implementing a new
API in libvirt. It uses as an example the addition of the node device
create and destroy APIs.
</p>
<p>
Before you begin coding, it is critical that you propose your
changes on the libvirt mailing list and get feedback on your ideas to
make sure what you're proposing fits with the general direction of the
project. Even before doing a proof of concept implementation, send an
email giving an overview of the functionality you think should be
added to libvirt. Someone may already be working on the feature you
want. Also, recognize that everything you write is likely to undergo
significant rework as you discuss it with the other developers, so
don't wait too long before getting feedback.
</p>
<p>
Adding a new API to libvirt is not difficult, but there are quite a
few steps. This document assumes that you are familiar with C
programming and have checked out the libvirt code from the source code
repository and successfully built the existing tree. Instructions on
how to check out and build the code can be found at:
</p>
<p>
<a href="http://libvirt.org/downloads.html">http://libvirt.org/downloads.html</a>
</p>
<p>
Once you have a working development environment, the steps to create a
new API are:
</p>
<ol>
<li>define the public API</li>
<li>define the internal driver API</li>
<li>implement the public API</li>
<li>define the wire protocol format</li>
<li>implement the RPC client</li>
<li>implement the server side dispatcher</li>
<li>implement the driver methods</li>
<li>add virsh support</li>
</ol>
<p>
It is, of course, possible to implement the pieces in any order, but
if the development tasks are completed in the order listed, the code
will compile after each step. Given the number of changes required,
verification after each step is highly recommended.
</p>
<p>
Submit new code in the form shown in the example code: one patch
per step. That's not to say submit patches before you have working
functionality--get the whole thing working and make sure you're happy
with it. Then use git or some other version control system that lets
you rewrite your commit history and break patches into pieces so you
don't drop a big blob of code on the mailing list at one go. For
example, I didn't follow my own advice when I originally submitted the
example code to the libvirt list but rather submitted it in several
large chunks. I've used git's ability to rewrite my commit history to
break the code apart into the example patches shown.
</p>
<p>
Don't mix anything else into the patches you submit. The patches
should be the minimal changes required to implement the functionality
you're adding. If you notice a bug in unrelated code (i.e., code you
don't have to touch to implement your API change) during development,
create a patch that just addresses that bug and submit it
separately.
</p>
<p>With that said, let's begin.</p>
<h2><a name='publicapi'>Defining the public API</a></h2>
<p>The first task is to define the public API and add it to:</p>
<p><code>include/libvirt/libvirt.h.in</code></p>
<p>
This task is in many ways the most important to get right, since once
the API has been committed to the repository, it's libvirt's policy
never to change it. Mistakes in the implementation are bugs that you
can fix. Make a mistake in the API definition and you're stuck with
it, so think carefully about the interface and don't be afraid to
rework it as you go through the process of implementing it.
</p>
<p>Once you have defined the API, you have to add the symbol names to:</p>
<p><code>src/libvirt_public.syms</code></p>
<p class="example">See <a href="api_extension/0001-Step-1-of-8-Define-the-public-API.patch">0001-Step-1-of-8-Define-the-public-API.patch</a> for example code.</p>
<h2><a name='internalapi'>Defining the internal API</a></h2>
<p>
Each public API call is associated with a driver, such as a host
virtualization driver, a network virtualization driver, a storage
virtualization driver, a state driver, or a device monitor. Adding
the internal API is ordinarily a matter of adding a new member to the
struct representing one of these drivers.
</p>
<p>
Of course, it's possible that the new API will involve the creation of
an entire new driver type, in which case the changes will include the
creation of a new struct type to represent the new driver type.
</p>
<p>The driver structs are defined in:</p>
<p><code>src/driver.h</code></p>
<p>
To define the internal API, first typedef the driver function
prototype and then add a new field for it to the relevant driver
struct.
</p>
<p class="example">See <a href="api_extension/0002-Step-2-of-8-Define-the-internal-driver-API.patch">0002-Step-2-of-8-Define-the-internal-driver-API.patch</a></p>
<h2><a name='implpublic'>Implementing the public API</a></h2>
<p>
Implementing the public API is largely a formality in which we wire up
public API to the internal driver API. The public API implementation
takes care of some basic validity checks before passing control to the
driver implementation. In RFC 2119 vocabulary, this function:
</p>
<ol class="ordinarylist">
<li>SHOULD log a message with VIR_DEBUG() indicating that it is
being called and its parameters;</li>
<li>MUST call virResetLastError();</li>
<li>SHOULD confirm that the connection is valid with
VIR_IS_CONNECT(conn);</li>
<li><strong>SECURITY: If the API requires a connection with write
privileges, MUST confirm that the connection flags do not
indicate that the connection is read-only;</strong></li>
<li>SHOULD do basic validation of the parameters that are being
passed in;</li>
<li>MUST confirm that the driver for this connection exists and that
it implements this function;</li>
<li>MUST call the internal API;</li>
<li>SHOULD log a message with VIR_DEBUG() indicating that it is
returning, its return value, and status.</li>
<li>MUST return status to the caller.</li>
</ol>
<p>The public API calls are implemented in:</p>
<p><code>src/libvirt.c</code></p>
<p class="example">See <a href="api_extension/0003-Step-3-of-8-Implement-the-public-API.patch">0003-Step-3-of-8-Implement-the-public-API.patch</a></p>
<h2><a name='wireproto'>Defining the wire protocol format</a></h2>
<p>
Defining the wire protocol is essentially a straightforward exercise
which is probably most easily understood by referring to the existing
remote protocol wire format definitions and the example patch. It
involves making two additions to:
</p>
<p><code>qemud/remote_protocol.x</code></p>
<p>
First, create two new structs for each new function that you're adding
to the API. One struct describes the parameters to be passed to the
remote function, and a second struct describes the value returned by
the remote function. The one exception to this rule is that functions
that return only integer status do not require a struct for returned
data.
</p>
<p>
Second, add values to the remote_procedure enum for each new function
added to the API.
</p>
<p class="example">See <a href="api_extension/0004-Step-4-of-8-Define-the-wire-protocol-format.patch">0004-Step-4-of-8-Define-the-wire-protocol-format.patch</a></p>
<p>
Once these changes are in place, it's necessary to run 'make rpcgen'
in the qemud directory to create the .c and .h files required by the
remote protocol code. This must be done on a Linux host using the
GLibC rpcgen program. Other rpcgen versions may generate code which
results in bogus compile time warnings
</p>
<h2><a name='rpcclient'>Implement the RPC client</a></h2>
<p>
Implementing the RPC client is also relatively mechanical, so refer to
the exising code and example patch for guidance. The RPC client uses
the rpcgen generated .h files. The remote method calls go in:
</p>
<p><code>src/remote_internal.c</code></p>
<p>Each remote method invocation does the following:</p>
<ol class="ordinarylist">
<li>locks the remote driver;</li>
<li>sets up the method arguments;</li>
<li>invokes the remote function;</li>
<li>checks the return value, if necessary;</li>
<li>extracts any returned data;</li>
<li>frees any returned data;</li>
<li>unlocks the remote driver.</li>
</ol>
<p>
Once you have created the remote method calls, you have to add fields
for them to the driver structs for the appropriate remote driver.
</p>
<p class="example">See <a href="api_extension/0005-Step-5-of-8-Implement-the-RPC-client.patch">0005-Step-5-of-8-Implement-the-RPC-client.patch</a></p>
<h2><a name="serverdispatch">Implement the server side dispatcher</a></h2>
<p>
Implementing the server side of the remote function calls is simply a
matter of deserializing the parameters passed in from the remote
caller and passing them to the corresponding internal API function.
The server side dispatchers are implemented in:
</p>
<p><code>qemud/remote.c</code></p>
<p>Again, this step uses the .h files generated by make rpcgen.</p>
<p class="example">See <a href="api_extension/0006-Step-6-of-8-Implement-the-server-side-dispatcher.patch">0006-Step-6-of-8-Implement-the-server-side-dispatcher.patch</a></p>
<h2><a name="driverimpl">Implement the driver methods</a></h2>
<p>
So, after all that, we get to the fun part. All functionality in
libvirt is implemented inside a driver. Thus, here is where you
implement whatever functionality you're adding to libvirt. You'll
either need to add additional files to the src directory or extend
files that are already there, depending on what functionality you're
adding.
</p>
<p>
In the example code, the extension is only an additional two function
calls in the node device API, so most of the new code is additions to
existing files. The only new files are there for multi-platform
implementation convenience, as some of the new code is Linux specific.
</p>
<p>
The example code is probably uninteresting unless you're concerned
with libvirt storage, but I've included it here to show how new files
are added to the build environment.
</p>
<p class="example">See <a href="api_extension/0007-Step-7-of-8-Implement-the-driver-methods.patch">0007-Step-7-of-8-Implement-the-driver-methods.patch</a></p>
<h2><a name="virsh">Implement virsh commands</a></h2>
<p>
Once you have the new functionality in place, the easiest way to test
it and also to provide it to end users is to implement support for it
in virsh.
</p>
<p>
A virsh command is composed of a few pieces of code. You need to
define an array of vshCmdInfo structs for each new command that
contain the help text and the command description text. You also need
an array of vshCmdOptDef structs to describe the command options.
Once you have those pieces of data in place you can write the function
implementing the virsh command. Finally, you need to add the new
command to the commands[] array.
</p>
<p class="example">See <a href="api_extension/0008-Step-8-of-8-Add-virsh-support.patch">0008-Step-8-of-8-Add-virsh-support.patch</a></p>
<p>Once you have working functionality, run make check and make
syntax-check before generating patches.</p>
</body>
</html>

View File

@ -0,0 +1,45 @@
From 2ae8fd62a1e5e085b7902da9bc207b806d84fd91 Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:16:11 -0400
Subject: [PATCH] Step 1 of 8 Define the public API
---
include/libvirt/libvirt.h.in | 6 ++++++
src/libvirt_public.syms | 6 ++++++
2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index a028b21..2f7076f 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1124,6 +1124,12 @@ int virNodeDeviceDettach (virNodeDevicePtr dev);
int virNodeDeviceReAttach (virNodeDevicePtr dev);
int virNodeDeviceReset (virNodeDevicePtr dev);
+virNodeDevicePtr virNodeDeviceCreateXML (virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags);
+
+int virNodeDeviceDestroy (virNodeDevicePtr dev);
+
/*
* Domain Event Notification
*/
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index f7ebbc3..b8f9128 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -258,4 +258,10 @@ LIBVIRT_0.6.1 {
virNodeGetSecurityModel;
} LIBVIRT_0.6.0;
+LIBVIRT_0.6.3 {
+ global:
+ virNodeDeviceCreateXML;
+ virNodeDeviceDestroy;
+} LIBVIRT_0.6.1;
+
# .... define new API here using predicted next version number ....
--
1.6.0.6

View File

@ -0,0 +1,37 @@
From b26d7fc2d64e7e6e4d3ea2b43361015d3620d7a6 Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:19:14 -0400
Subject: [PATCH] Step 2 of 8 Define the internal driver API
---
src/driver.h | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/driver.h b/src/driver.h
index 39dc413..c357b76 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -684,6 +684,11 @@ typedef int (*virDevMonDeviceListCaps)(virNodeDevicePtr dev,
char **const names,
int maxnames);
+typedef virNodeDevicePtr (*virDrvNodeDeviceCreateXML)(virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags);
+typedef int (*virDrvNodeDeviceDestroy)(virNodeDevicePtr dev);
+
/**
* _virDeviceMonitor:
*
@@ -702,6 +707,8 @@ struct _virDeviceMonitor {
virDevMonDeviceGetParent deviceGetParent;
virDevMonDeviceNumOfCaps deviceNumOfCaps;
virDevMonDeviceListCaps deviceListCaps;
+ virDrvNodeDeviceCreateXML deviceCreateXML;
+ virDrvNodeDeviceDestroy deviceDestroy;
};
/*
--
1.6.0.6

View File

@ -0,0 +1,120 @@
From fc585594a207dfb9149e7d3d01c9eb1c79b6d52d Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:22:23 -0400
Subject: [PATCH] Step 3 of 8 Implement the public API
---
src/libvirt.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/src/libvirt.c b/src/libvirt.c
index f3d4484..ded18a7 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -7509,6 +7509,103 @@ error:
}
+/**
+ * virNodeDeviceCreateXML:
+ * @conn: pointer to the hypervisor connection
+ * @xmlDesc: string containing an XML description of the device to be created
+ * @flags: callers should always pass 0
+ *
+ * Create a new device on the VM host machine, for example, virtual
+ * HBAs created using vport_create.
+ *
+ * Returns a node device object if successful, NULL in case of failure
+ */
+virNodeDevicePtr
+virNodeDeviceCreateXML(virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, xmlDesc=%s, flags=%d", conn, xmlDesc, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECT(conn)) {
+ virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__);
+ return NULL;
+ }
+
+ if (conn->flags & VIR_CONNECT_RO) {
+ virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ goto error;
+ }
+
+ if (xmlDesc == NULL) {
+ virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+
+ if (conn->deviceMonitor &&
+ conn->deviceMonitor->deviceCreateXML) {
+ virNodeDevicePtr dev = conn->deviceMonitor->deviceCreateXML(conn, xmlDesc, flags);
+ if (dev == NULL)
+ goto error;
+ return dev;
+ }
+
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ /* Copy to connection error object for back compatability */
+ virSetConnError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNodeDeviceDestroy:
+ * @dev: a device object
+ *
+ * Destroy the device object. The virtual device is removed from the host operating system.
+ * This function may require privileged access
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virNodeDeviceDestroy(virNodeDevicePtr dev)
+{
+ DEBUG("dev=%p", dev);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
+ virLibNodeDeviceError(NULL, VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
+ return (-1);
+ }
+
+ if (dev->conn->flags & VIR_CONNECT_RO) {
+ virLibConnError(dev->conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ goto error;
+ }
+
+ if (dev->conn->deviceMonitor &&
+ dev->conn->deviceMonitor->deviceDestroy) {
+ int retval = dev->conn->deviceMonitor->deviceDestroy(dev);
+ if (retval < 0) {
+ goto error;
+ }
+
+ return 0;
+ }
+
+ virLibConnError (dev->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ /* Copy to connection error object for back compatability */
+ virSetConnError(dev->conn);
+ return -1;
+}
+
+
/*
* Domain Event Notification
*/
--
1.6.0.6

View File

@ -0,0 +1,48 @@
From bce8f1243b0454c0d70e3db832a039d22faab09a Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Wed, 20 May 2009 13:58:58 -0400
Subject: [PATCH] Step 4 of 8 Define the wire protocol format
---
qemud/remote_protocol.x | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/qemud/remote_protocol.x b/qemud/remote_protocol.x
index 2d8e6a2..2c79949 100644
--- a/qemud/remote_protocol.x
+++ b/qemud/remote_protocol.x
@@ -1109,6 +1109,19 @@ struct remote_node_device_reset_args {
remote_nonnull_string name;
};
+struct remote_node_device_create_xml_args {
+ remote_nonnull_string xml_desc;
+ int flags;
+};
+
+struct remote_node_device_create_xml_ret {
+ remote_nonnull_node_device dev;
+};
+
+struct remote_node_device_destroy_args {
+ remote_nonnull_string name;
+};
+
/**
* Events Register/Deregister:
@@ -1270,7 +1283,10 @@ enum remote_procedure {
REMOTE_PROC_NODE_DEVICE_RESET = 120,
REMOTE_PROC_DOMAIN_GET_SECURITY_LABEL = 121,
- REMOTE_PROC_NODE_GET_SECURITY_MODEL = 122
+ REMOTE_PROC_NODE_GET_SECURITY_MODEL = 122,
+
+ REMOTE_PROC_NODE_DEVICE_CREATE_XML = 123,
+ REMOTE_PROC_NODE_DEVICE_DESTROY = 124
};
/* Custom RPC structure. */
--
1.6.0.6

View File

@ -0,0 +1,85 @@
From ff272552c297966ace3492aefe91fc830152251a Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:26:12 -0400
Subject: [PATCH] Step 5 of 8 Implement the RPC client
---
src/remote_internal.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/src/remote_internal.c b/src/remote_internal.c
index 4b3afb0..e665ef8 100644
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -4978,6 +4978,59 @@ done:
}
+static virNodeDevicePtr
+remoteNodeDeviceCreateXML(virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags)
+{
+ remote_node_device_create_xml_args args;
+ remote_node_device_create_xml_ret ret;
+ virNodeDevicePtr dev = NULL;
+ struct private_data *priv = conn->privateData;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+ args.xml_desc = (char *)xmlDesc;
+ args.flags = flags;
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_DEVICE_CREATE_XML,
+ (xdrproc_t) xdr_remote_node_device_create_xml_args, (char *) &args,
+ (xdrproc_t) xdr_remote_node_device_create_xml_ret, (char *) &ret) == -1)
+ goto done;
+
+ dev = get_nonnull_node_device(conn, ret.dev);
+ xdr_free ((xdrproc_t) xdr_remote_node_device_create_xml_ret, (char *) &ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return dev;
+}
+
+static int
+remoteNodeDeviceDestroy(virNodeDevicePtr dev)
+{
+ int rv = -1;
+ remote_node_device_destroy_args args;
+ struct private_data *priv = dev->conn->privateData;
+
+ remoteDriverLock(priv);
+
+ args.name = dev->name;
+
+ if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DESTROY,
+ (xdrproc_t) xdr_remote_node_device_destroy_args, (char *) &args,
+ (xdrproc_t) xdr_void, (char *) NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+
/*----------------------------------------------------------------------*/
static int
@@ -6982,6 +7035,8 @@ static virDeviceMonitor dev_monitor = {
.deviceGetParent = remoteNodeDeviceGetParent,
.deviceNumOfCaps = remoteNodeDeviceNumOfCaps,
.deviceListCaps = remoteNodeDeviceListCaps,
+ .deviceCreateXML = remoteNodeDeviceCreateXML,
+ .deviceDestroy = remoteNodeDeviceDestroy
};
--
1.6.0.6

View File

@ -0,0 +1,71 @@
From 4c5166df583459574526841234d61d6ae5be19a0 Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:26:55 -0400
Subject: [PATCH] Step 6 of 8 Implement the server side dispatcher
---
qemud/remote.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/qemud/remote.c b/qemud/remote.c
index e27820f..8d24a3a 100644
--- a/qemud/remote.c
+++ b/qemud/remote.c
@@ -4323,6 +4323,54 @@ remoteDispatchNodeDeviceReset (struct qemud_server *server ATTRIBUTE_UNUSED,
}
+static int
+remoteDispatchNodeDeviceCreateXml(struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_error *rerr,
+ remote_node_device_create_xml_args *args,
+ remote_node_device_create_xml_ret *ret)
+{
+ virNodeDevicePtr dev;
+
+ dev = virNodeDeviceCreateXML (conn, args->xml_desc, args->flags);
+ if (dev == NULL) {
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+
+ make_nonnull_node_device (&ret->dev, dev);
+ virNodeDeviceFree(dev);
+
+ return 0;
+}
+
+
+static int
+remoteDispatchNodeDeviceDestroy(struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_error *rerr,
+ remote_node_device_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ virNodeDevicePtr dev;
+
+ dev = virNodeDeviceLookupByName(conn, args->name);
+ if (dev == NULL) {
+ remoteDispatchFormatError(rerr, "%s", _("node_device not found"));
+ return -1;
+ }
+
+ if (virNodeDeviceDestroy(dev) == -1) {
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+
+ return 0;
+}
+
+
/**************************
* Async Events
**************************/
--
1.6.0.6

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,133 @@
From 193cc4abbb6c2fc5557d3699f86ff0103d5a21ef Mon Sep 17 00:00:00 2001
From: David Allan <dallan@redhat.com>
Date: Tue, 19 May 2009 16:47:31 -0400
Subject: [PATCH 8/8] Step 8 of 8 Add virsh support
---
src/virsh.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 103 insertions(+), 0 deletions(-)
diff --git a/src/virsh.c b/src/virsh.c
index cb32ede..ab2a2b7 100644
--- a/src/virsh.c
+++ b/src/virsh.c
@@ -2962,6 +2962,107 @@ cmdPoolCreate(vshControl *ctl, const vshCmd *cmd)
/*
+ * "nodedev-create" command
+ */
+static const vshCmdInfo info_node_device_create[] = {
+ {"help", gettext_noop("create a device defined "
+ "by an XML file on the node")},
+ {"desc", gettext_noop("Create a device on the node. Note that this "
+ "command creates devices on the physical host "
+ "that can then be assigned to a virtual machine.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_device_create[] = {
+ {"file", VSH_OT_DATA, VSH_OFLAG_REQ,
+ gettext_noop("file containing an XML description of the device")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
+{
+ virNodeDevicePtr dev = NULL;
+ char *from;
+ int found = 0;
+ int ret = TRUE;
+ char *buffer;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+ return FALSE;
+
+ from = vshCommandOptString(cmd, "file", &found);
+ if (!found) {
+ return FALSE;
+ }
+
+ if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
+ return FALSE;
+ }
+
+ dev = virNodeDeviceCreateXML(ctl->conn, buffer, 0);
+ free (buffer);
+
+ if (dev != NULL) {
+ vshPrint(ctl, _("Node device %s created from %s\n"),
+ virNodeDeviceGetName(dev), from);
+ } else {
+ vshError(ctl, FALSE, _("Failed to create node device from %s"), from);
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+
+/*
+ * "nodedev-destroy" command
+ */
+static const vshCmdInfo info_node_device_destroy[] = {
+ {"help", gettext_noop("destroy a device on the node")},
+ {"desc", gettext_noop("Destroy a device on the node. Note that this "
+ "command destroys devices on the physical host ")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_device_destroy[] = {
+ {"name", VSH_OT_DATA, VSH_OFLAG_REQ,
+ gettext_noop("name of the device to be destroyed")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
+{
+ virNodeDevicePtr dev = NULL;
+ int ret = TRUE;
+ int found = 0;
+ char *name;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) {
+ return FALSE;
+ }
+
+ name = vshCommandOptString(cmd, "name", &found);
+ if (!found) {
+ return FALSE;
+ }
+
+ dev = virNodeDeviceLookupByName(ctl->conn, name);
+
+ if (virNodeDeviceDestroy(dev) == 0) {
+ vshPrint(ctl, _("Destroyed node device '%s'\n"), name);
+ } else {
+ vshError(ctl, FALSE, _("Failed to destroy node device '%s'"), name);
+ ret = FALSE;
+ }
+
+ virNodeDeviceFree(dev);
+ return ret;
+}
+
+
+/*
* XML Building helper for pool-define-as and pool-create-as
*/
static const vshCmdOptDef opts_pool_X_as[] = {
@@ -5895,6 +5996,8 @@ static const vshCmdDef commands[] = {
{"nodedev-dettach", cmdNodeDeviceDettach, opts_node_device_dettach, info_node_device_dettach},
{"nodedev-reattach", cmdNodeDeviceReAttach, opts_node_device_reattach, info_node_device_reattach},
{"nodedev-reset", cmdNodeDeviceReset, opts_node_device_reset, info_node_device_reset},
+ {"nodedev-create", cmdNodeDeviceCreate, opts_node_device_create, info_node_device_create},
+ {"nodedev-destroy", cmdNodeDeviceDestroy, opts_node_device_destroy, info_node_device_destroy},
{"pool-autostart", cmdPoolAutostart, opts_pool_autostart, info_pool_autostart},
{"pool-build", cmdPoolBuild, opts_pool_build, info_pool_build},
--
1.6.0.6

View File

@ -27,6 +27,9 @@ included_files = {
ignored_words = {
"ATTRIBUTE_UNUSED": (0, "macro keyword"),
"VIR_DEPRECATED": (0, "macro keyword"),
"WINAPI": (0, "Windows keyword"),
"__declspec": (3, "Windows keyword"),
"__stdcall": (0, "Windows keyword"),
}
ignored_functions = {
@ -36,6 +39,7 @@ ignored_functions = {
"virDomainMigratePrepare": "private function for migration",
"virDomainMigratePrepare2": "private function for migration",
"virDrvSupportsFeature": "private function for remote access",
"DllMain": "specific function fo Win32",
}
def escape(raw):

View File

@ -141,7 +141,7 @@
</dd></dl>
<h2>Monitoring plugins</h2>
<dl><dt><a href="http://honk.sigxcpu.org/projects/libvirt/#munin">for munin</a></dt><dd>
The plugins provided by Guido Günther allows to monitor various things
The plugins provided by Guido Günther allow to monitor various things
like network and block I/O with
<a href="http://munin.projects.linpro.no/">Munin</a>.
</dd><dt><a href="http://collectd.org/plugins/libvirt.shtml">for collectd</a></dt><dd>

View File

@ -107,7 +107,7 @@
<dl>
<dt><a href="http://honk.sigxcpu.org/projects/libvirt/#munin">for munin</a></dt>
<dd>
The plugins provided by Guido Günther allows to monitor various things
The plugins provided by Guido Günther allow to monitor various things
like network and block I/O with
<a href="http://munin.projects.linpro.no/">Munin</a>.
</dd>

View File

@ -47,6 +47,14 @@
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<span class="active">Domains</span>
</div>
@ -80,6 +88,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -47,6 +47,14 @@
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
@ -80,6 +88,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -47,6 +47,14 @@
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
@ -80,6 +88,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -47,6 +47,14 @@
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
@ -80,6 +88,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -58,6 +58,10 @@
<div>
<a title="Access the libvirt daemon from a native Windows client" class="inactive" href="windows.html">Windows port</a>
</div>
</li><li>
<div>
<a title="The library and the daemon logging support" class="inactive" href="logging.html">Logging</a>
</div>
</li></ul>
</div>
</li><li>
@ -80,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -72,6 +72,10 @@
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -58,6 +58,10 @@
<div>
<a title="Access the libvirt daemon from a native Windows client" class="inactive" href="windows.html">Windows port</a>
</div>
</li><li>
<div>
<a title="The library and the daemon logging support" class="inactive" href="logging.html">Logging</a>
</div>
</li></ul>
</div>
</li><li>
@ -80,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -1,7 +1,8 @@
DEVHELP_DIR=$(datadir)/gtk-doc/html/libvirt
HTML_FILES=index.html general.html $(HTML_MODULES)
HTML_MODULES= \
libvirt-libvirt.html
libvirt-libvirt.html \
libvirt-virterror.html
EXTRA_FORMAT= \
home.png \
@ -14,14 +15,15 @@ EXTRA_DIST=devhelp.xsl html.xsl libvirt.devhelp $(HTML_FILES) $(EXTRA_FORMAT)
all: libvirt.devhelp $(HTML_FILES)
libvirt.devhelp $(HTML_FILES): devhelp.xsl html.xsl $(top_srcdir)/docs/libvirt-api.xml
libvirt.devhelp $(HTML_FILES): $(srcdir)/devhelp.xsl html.xsl $(top_srcdir)/docs/libvirt-api.xml
-@(echo Rebuilding devhelp files)
-@(if [ -x $(XSLTPROC) ] ; then \
$(XSLTPROC) --nonet -o $(srcdir)/libvirt.devhelp devhelp.xsl $(top_srcdir)/docs/libvirt-api.xml ; fi );
$(XSLTPROC) --nonet -o libvirt.devhelp $(srcdir)/devhelp.xsl $(top_srcdir)/docs/libvirt-api.xml ; fi );
install-data-local:
install-data-local: libvirt.devhelp $(HTML_FILES)
$(mkinstalldirs) $(DESTDIR)$(DEVHELP_DIR)
-@INSTALL@ -m 0644 libvirt.devhelp $(DESTDIR)$(DEVHELP_DIR)
-@INSTALL@ -m 0644 $(EXTRA_FORMAT) $(DESTDIR)$(DEVHELP_DIR)
-@INSTALL@ -m 0644 $(HTML_FILES) $(DESTDIR)$(DEVHELP_DIR)
-for file in $(EXTRA_FORMAT); do \
@INSTALL@ -m 0644 $(srcdir)/$${file} $(DESTDIR)$(DEVHELP_DIR) ; \
done

View File

@ -41,13 +41,16 @@
<pre class="synopsis">#define <a href="#VIR_NODEINFO_MAXCPUS">VIR_NODEINFO_MAXCPUS</a>(nodeinfo);
#define <a href="#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a>;
#define <a href="#VIR_USE_CPU">VIR_USE_CPU</a>(cpumap, cpu);
#define <a href="#VIR_SECURITY_DOI_BUFLEN">VIR_SECURITY_DOI_BUFLEN</a>;
#define <a href="#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a>(cpu);
#define <a href="#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a>;
#define <a href="#VIR_SECURITY_LABEL_BUFLEN">VIR_SECURITY_LABEL_BUFLEN</a>;
#define <a href="#VIR_CPU_USABLE">VIR_CPU_USABLE</a>(cpumaps, maplen, vcpu, cpu);
#define <a href="#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a>(cpumaps, maplen, vcpu, cpumap);
#define <a href="#VIR_DOMAIN_SCHED_FIELD_LENGTH">VIR_DOMAIN_SCHED_FIELD_LENGTH</a>;
#define <a href="#VIR_SECURITY_MODEL_BUFLEN">VIR_SECURITY_MODEL_BUFLEN</a>;
#define <a href="#VIR_UUID_STRING_BUFLEN">VIR_UUID_STRING_BUFLEN</a>;
#define <a href="#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a>(cpumaps, maplen, vcpu);
#define <a href="#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a>;
#define <a href="#VIR_UNUSE_CPU">VIR_UNUSE_CPU</a>(cpumap, cpu);
typedef struct _virDomainBlockStats <a href="#virDomainBlockStatsStruct">virDomainBlockStatsStruct</a>;
typedef enum <a href="#virDomainMigrateFlags">virDomainMigrateFlags</a>;
@ -70,6 +73,7 @@ typedef <a href="libvirt-libvirt.html#virDomainInterfaceStatsStruct">virDomainIn
typedef <a href="libvirt-libvirt.html#virConnectAuth">virConnectAuth</a> * <a href="#virConnectAuthPtr">virConnectAuthPtr</a>;
typedef struct _virStorageVolInfo <a href="#virStorageVolInfo">virStorageVolInfo</a>;
typedef enum <a href="#virSchedParameterType">virSchedParameterType</a>;
typedef struct _virSecurityLabel <a href="#virSecurityLabel">virSecurityLabel</a>;
typedef <a href="libvirt-libvirt.html#virStorageVolInfo">virStorageVolInfo</a> * <a href="#virStorageVolInfoPtr">virStorageVolInfoPtr</a>;
typedef <a href="libvirt-libvirt.html#virConnectCredential">virConnectCredential</a> * <a href="#virConnectCredentialPtr">virConnectCredentialPtr</a>;
typedef <a href="libvirt-libvirt.html#virStoragePool">virStoragePool</a> * <a href="#virStoragePoolPtr">virStoragePoolPtr</a>;
@ -80,9 +84,11 @@ typedef struct _virNodeDevice <a href="#virNodeDevice">virNodeDevice</a>;
typedef <a href="libvirt-libvirt.html#virConnect">virConnect</a> * <a href="#virConnectPtr">virConnectPtr</a>;
typedef struct _virStorageVol <a href="#virStorageVol">virStorageVol</a>;
typedef <a href="libvirt-libvirt.html#virNodeDevice">virNodeDevice</a> * <a href="#virNodeDevicePtr">virNodeDevicePtr</a>;
typedef struct _virInterface <a href="#virInterface">virInterface</a>;
typedef struct _virSchedParameter <a href="#virSchedParameter">virSchedParameter</a>;
typedef enum <a href="#virConnectFlags">virConnectFlags</a>;
typedef enum <a href="#virDomainEventDefinedDetailType">virDomainEventDefinedDetailType</a>;
typedef <a href="libvirt-libvirt.html#virInterface">virInterface</a> * <a href="#virInterfacePtr">virInterfacePtr</a>;
typedef enum <a href="#virDomainMemoryFlags">virDomainMemoryFlags</a>;
typedef enum <a href="#virDomainEventStoppedDetailType">virDomainEventStoppedDetailType</a>;
typedef <a href="libvirt-libvirt.html#virStorageVol">virStorageVol</a> * <a href="#virStorageVolPtr">virStorageVolPtr</a>;
@ -92,6 +98,7 @@ typedef struct _virVcpuInfo <a href="#virVcpuInfo">virVcpuInfo</a>;
typedef <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a> * <a href="#virSchedParameterPtr">virSchedParameterPtr</a>;
typedef struct _virConnectAuth <a href="#virConnectAuth">virConnectAuth</a>;
typedef struct _virConnectCredential <a href="#virConnectCredential">virConnectCredential</a>;
typedef <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> * <a href="#virSecurityModelPtr">virSecurityModelPtr</a>;
typedef enum <a href="#virDomainEventSuspendedDetailType">virDomainEventSuspendedDetailType</a>;
typedef <a href="libvirt-libvirt.html#virVcpuInfo">virVcpuInfo</a> * <a href="#virVcpuInfoPtr">virVcpuInfoPtr</a>;
typedef enum <a href="#virStoragePoolBuildFlags">virStoragePoolBuildFlags</a>;
@ -103,6 +110,8 @@ typedef enum <a href="#virConnectCredentialType">virConnectCredentialType</a>;
typedef enum <a href="#virStoragePoolState">virStoragePoolState</a>;
typedef <a href="libvirt-libvirt.html#virStoragePoolInfo">virStoragePoolInfo</a> * <a href="#virStoragePoolInfoPtr">virStoragePoolInfoPtr</a>;
typedef enum <a href="#virDomainCreateFlags">virDomainCreateFlags</a>;
typedef <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> * <a href="#virSecurityLabelPtr">virSecurityLabelPtr</a>;
typedef struct _virSecurityModel <a href="#virSecurityModel">virSecurityModel</a>;
char * <a href="#virStoragePoolGetXMLDesc">virStoragePoolGetXMLDesc</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> unsigned int flags);
const char * <a href="#virStorageVolGetKey">virStorageVolGetKey</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol);
typedef void <a href="#virEventUpdateTimeoutFunc">virEventUpdateTimeoutFunc</a> (int timer, <br/> int timeout);
@ -115,50 +124,60 @@ int <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a> (<a href=
int <a href="#virInitialize">virInitialize</a> (void);
const char * <a href="#virNodeDeviceGetName">virNodeDeviceGetName</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virStoragePoolSetAutostart">virStoragePoolSetAutostart</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> int autostart);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolCreateXML">virStorageVolCreateXML</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * xmldesc, <br/> unsigned int flags);
char * <a href="#virConnectDomainXMLFromNative">virConnectDomainXMLFromNative</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * nativeFormat, <br/> const char * nativeConfig, <br/> unsigned int flags);
int <a href="#virNodeDeviceDettach">virNodeDeviceDettach</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virDomainGetSecurityLabel">virDomainGetSecurityLabel</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virSecurityLabelPtr">virSecurityLabelPtr</a> seclabel);
int <a href="#virConnectDomainEventDeregister">virConnectDomainEventDeregister</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb);
int <a href="#virDomainGetSchedulerParameters">virDomainGetSchedulerParameters</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br/> int * nparams);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainLookupByUUIDString">virDomainLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * uuidstr);
int <a href="#virConnectNumOfDefinedNetworks">virConnectNumOfDefinedNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virConnectNumOfDomains">virConnectNumOfDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virNetworkGetUUID">virNetworkGetUUID</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> unsigned char * uuid);
char * <a href="#virInterfaceGetXMLDesc">virInterfaceGetXMLDesc</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virStoragePoolGetConnect">virStoragePoolGetConnect</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
int <a href="#virConnectGetVersion">virConnectGetVersion</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> unsigned long * hvVer);
int <a href="#virDomainFree">virDomainFree</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virStorageVolRef">virStorageVolRef</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol);
const char * <a href="#virStoragePoolGetName">virStoragePoolGetName</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
int <a href="#virDomainSetAutostart">virDomainSetAutostart</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> int autostart);
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolDefineXML">virStoragePoolDefineXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xml, <br/> unsigned int flags);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByPath">virStorageVolLookupByPath</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * path);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByName">virStorageVolLookupByName</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * name);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainCreateLinux">virDomainCreateLinux</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags);
int <a href="#virNetworkCreate">virNetworkCreate</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
int <a href="#virDomainSetMaxMemory">virDomainSetMaxMemory</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned long memory);
void <a href="#virEventRegisterImpl">virEventRegisterImpl</a> (<a href="libvirt-libvirt.html#virEventAddHandleFunc">virEventAddHandleFunc</a> addHandle, <br/> <a href="libvirt-libvirt.html#virEventUpdateHandleFunc">virEventUpdateHandleFunc</a> updateHandle, <br/> <a href="libvirt-libvirt.html#virEventRemoveHandleFunc">virEventRemoveHandleFunc</a> removeHandle, <br/> <a href="libvirt-libvirt.html#virEventAddTimeoutFunc">virEventAddTimeoutFunc</a> addTimeout, <br/> <a href="libvirt-libvirt.html#virEventUpdateTimeoutFunc">virEventUpdateTimeoutFunc</a> updateTimeout, <br/> <a href="libvirt-libvirt.html#virEventRemoveTimeoutFunc">virEventRemoveTimeoutFunc</a> removeTimeout);
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceDefineXML">virInterfaceDefineXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xml, <br/> unsigned int flags);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainMigrate">virDomainMigrate</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> dconn, <br/> unsigned long flags, <br/> const char * dname, <br/> const char * uri, <br/> unsigned long bandwidth);
int <a href="#virDomainSuspend">virDomainSuspend</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virNetworkCreate">virNetworkCreate</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainCreateLinux">virDomainCreateLinux</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags);
char * <a href="#virNodeDeviceGetXMLDesc">virNodeDeviceGetXMLDesc</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev, <br/> unsigned int flags);
typedef void <a href="#virEventUpdateHandleFunc">virEventUpdateHandleFunc</a> (int watch, <br/> int event);
int <a href="#virDomainDestroy">virDomainDestroy</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virConnectNumOfNetworks">virConnectNumOfNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolLookupByUUIDString">virStoragePoolLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * uuidstr);
int <a href="#virInterfaceCreate">virInterfaceCreate</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags);
char * <a href="#virDomainGetXMLDesc">virDomainGetXMLDesc</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> int flags);
int <a href="#virStoragePoolGetUUID">virStoragePoolGetUUID</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> unsigned char * uuid);
int <a href="#virNodeDeviceFree">virNodeDeviceFree</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virStorageVolGetInfo">virStorageVolGetInfo</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br/> <a href="libvirt-libvirt.html#virStorageVolInfoPtr">virStorageVolInfoPtr</a> info);
int <a href="#virDomainGetInfo">virDomainGetInfo</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virDomainInfoPtr">virDomainInfoPtr</a> info);
<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> <a href="#virNodeDeviceCreateXML">virNodeDeviceCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags);
int <a href="#virNetworkDestroy">virNetworkDestroy</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolLookupByName">virStoragePoolLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * name);
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolCreateXML">virStoragePoolCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags);
int <a href="#virNetworkGetAutostart">virNetworkGetAutostart</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> int * autostart);
char * <a href="#virNetworkGetBridgeName">virNetworkGetBridgeName</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br/> unsigned int flags);
char * <a href="#virConnectDomainXMLToNative">virConnectDomainXMLToNative</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * nativeFormat, <br/> const char * domainXml, <br/> unsigned int flags);
int <a href="#virDomainSetSchedulerParameters">virDomainSetSchedulerParameters</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br/> int nparams);
const char * <a href="#virConnectGetType">virConnectGetType</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolCreateXML">virStorageVolCreateXML</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * xmldesc, <br/> unsigned int flags);
int <a href="#virDomainSave">virDomainSave</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> const char * to);
int <a href="#virDomainCreate">virDomainCreate</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virConnectListDomains">virConnectListDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> int * ids, <br/> int maxids);
int <a href="#virDomainCoreDump">virDomainCoreDump</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> const char * to, <br/> int flags);
int <a href="#virDomainSetMemory">virDomainSetMemory</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned long memory);
const char * <a href="#virInterfaceGetName">virInterfaceGetName</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
int <a href="#virStoragePoolCreate">virStoragePoolCreate</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> unsigned int flags);
int <a href="#virNodeGetInfo">virNodeGetInfo</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info);
int <a href="#virNetworkSetAutostart">virNetworkSetAutostart</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> int autostart);
@ -178,34 +197,43 @@ int <a href="#virStoragePoolListVolumes">virStoragePoolListVolumes</a> (<a href=
char * <a href="#virConnectGetHostname">virConnectGetHostname</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
typedef int <a href="#virEventRemoveTimeoutFunc">virEventRemoveTimeoutFunc</a> (int timer);
const char * <a href="#virDomainGetName">virDomainGetName</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virStoragePoolRef">virStoragePoolRef</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
char * <a href="#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> int flags);
int <a href="#virConnectNumOfStoragePools">virConnectNumOfStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virInterfaceGetConnect">virInterfaceGetConnect</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
const char * <a href="#virNetworkGetName">virNetworkGetName</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
int <a href="#virConnectListDefinedDomains">virConnectListDefinedDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames);
char * <a href="#virConnectGetCapabilities">virConnectGetCapabilities</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainLookupByName">virDomainLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * name);
char * <a href="#virConnectFindStoragePoolSources">virConnectFindStoragePoolSources</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * type, <br/> const char * srcSpec, <br/> unsigned int flags);
int <a href="#virDomainPinVcpu">virDomainPinVcpu</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned int vcpu, <br/> unsigned char * cpumap, <br/> int maplen);
int <a href="#virNodeGetSecurityModel">virNodeGetSecurityModel</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virSecurityModelPtr">virSecurityModelPtr</a> secmodel);
int <a href="#virDomainRestore">virDomainRestore</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * from);
int <a href="#virNodeDeviceDestroy">virNodeDeviceDestroy</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
char * <a href="#virStorageVolGetPath">virStorageVolGetPath</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol);
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * uuidstr);
typedef int <a href="#virConnectDomainEventCallback">virConnectDomainEventCallback</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/> int event, <br/> int detail, <br/> void * opaque);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainLookupByID">virDomainLookupByID</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> int id);
int <a href="#virStorageVolDelete">virStorageVolDelete</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br/> unsigned int flags);
int <a href="#virStorageVolFree">virStorageVolFree</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol);
int <a href="#virConnectListInterfaces">virConnectListInterfaces</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames);
int <a href="#virDomainMemoryPeek">virDomainMemoryPeek</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/> unsigned long long start, <br/> size_t size, <br/> void * buffer, <br/> unsigned int flags);
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByUUID">virNetworkLookupByUUID</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const unsigned char * uuid);
int <a href="#virConnectListDefinedNetworks">virConnectListDefinedNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames);
int <a href="#virConnectRef">virConnectRef</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virDomainGetUUID">virDomainGetUUID</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned char * uuid);
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkCreateXML">virNetworkCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc);
int <a href="#virConnectDomainEventRegister">virConnectDomainEventRegister</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb, <br/> void * opaque, <br/> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> freecb);
int <a href="#virDomainGetVcpus">virDomainGetVcpus</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virVcpuInfoPtr">virVcpuInfoPtr</a> info, <br/> int maxinfo, <br/> unsigned char * cpumaps, <br/> int maplen);
<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> <a href="#virNodeDeviceLookupByName">virNodeDeviceLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * name);
int <a href="#virStoragePoolGetInfo">virStoragePoolGetInfo</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> <a href="libvirt-libvirt.html#virStoragePoolInfoPtr">virStoragePoolInfoPtr</a> info);
int <a href="#virDomainResume">virDomainResume</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virNodeListDevices">virNodeListDevices</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * cap, <br/> char ** const names, <br/> int maxnames, <br/> unsigned int flags);
int <a href="#virInterfaceRef">virInterfaceRef</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
const char * <a href="#virInterfaceGetMACString">virInterfaceGetMACString</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
int <a href="#virNetworkRef">virNetworkRef</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
int <a href="#virStoragePoolRefresh">virStoragePoolRefresh</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> unsigned int flags);
int <a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByKey">virStorageVolLookupByKey</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * key);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolCreateXMLFrom">virStorageVolCreateXMLFrom</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * xmldesc, <br/> <a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> clonevol, <br/> unsigned int flags);
int <a href="#virDomainUndefine">virDomainUndefine</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virDomainReboot">virDomainReboot</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned int flags);
int <a href="#virNetworkGetUUIDString">virNetworkGetUUIDString</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> char * buf);
@ -213,9 +241,11 @@ int <a href="#virNetworkGetUUIDString">virNetworkGetUUIDString</a> (<a href="li
int <a href="#virDomainGetMaxVcpus">virDomainGetMaxVcpus</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
typedef void <a href="#virEventHandleCallback">virEventHandleCallback</a> (int watch, <br/> int fd, <br/> int events, <br/> void * opaque);
char * <a href="#virDomainGetSchedulerType">virDomainGetSchedulerType</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> int * nparams);
int <a href="#virNodeDeviceReset">virNodeDeviceReset</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virDomainDetachDevice">virDomainDetachDevice</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> const char * xml);
int <a href="#virStoragePoolNumOfVolumes">virStoragePoolNumOfVolumes</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
int <a href="#virStoragePoolGetUUIDString">virStoragePoolGetUUIDString</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> char * buf);
int <a href="#virNodeDeviceReAttach">virNodeDeviceReAttach</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virStoragePoolUndefine">virStoragePoolUndefine</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
typedef int <a href="#virConnectAuthCallbackPtr">virConnectAuthCallbackPtr</a> (<a href="libvirt-libvirt.html#virConnectCredentialPtr">virConnectCredentialPtr</a> cred, <br/> unsigned int ncred, <br/> void * cbdata);
int <a href="#virDomainAttachDevice">virDomainAttachDevice</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> const char * xml);
@ -227,9 +257,12 @@ typedef int <a href="#virEventAddHandleFunc">virEventAddHandleFunc</a> (int fd,
int <a href="#virNetworkUndefine">virNetworkUndefine</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
int <a href="#virConnectListDefinedStoragePools">virConnectListDefinedStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames);
typedef void <a href="#virEventTimeoutCallback">virEventTimeoutCallback</a> (int timer, <br/> void * opaque);
int <a href="#virInterfaceFree">virInterfaceFree</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
int <a href="#virNodeDeviceNumOfCaps">virNodeDeviceNumOfCaps</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceLookupByMACString">virInterfaceLookupByMACString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * macstr);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virNetworkGetConnect">virNetworkGetConnect</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> net);
unsigned long long <a href="#virNodeGetFreeMemory">virNodeGetFreeMemory</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virInterfaceDestroy">virInterfaceDestroy</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virStorageVolGetConnect">virStorageVolGetConnect</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol);
int <a href="#virNodeNumOfDevices">virNodeNumOfDevices</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * cap, <br/> unsigned int flags);
int <a href="#virStoragePoolDestroy">virStoragePoolDestroy</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool);
@ -241,16 +274,22 @@ int <a href="#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a> (<a href="libvir
int <a href="#virDomainGetUUIDString">virDomainGetUUIDString</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> char * buf);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virDomainGetConnect">virDomainGetConnect</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom);
int <a href="#virConnectNumOfDefinedStoragePools">virConnectNumOfDefinedStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virNodeListDevices">virNodeListDevices</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * cap, <br/> char ** const names, <br/> int maxnames, <br/> unsigned int flags);
const char * <a href="#virNodeDeviceGetParent">virNodeDeviceGetParent</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virConnectOpen">virConnectOpen</a> (const char * name);
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainCreateXML">virDomainCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags);
int <a href="#virNodeDeviceRef">virNodeDeviceRef</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev);
int <a href="#virInterfaceUndefine">virInterfaceUndefine</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface);
int <a href="#virDomainSetVcpus">virDomainSetVcpus</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned int nvcpus);
int <a href="#virConnectDomainEventRegister">virConnectDomainEventRegister</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb, <br/> void * opaque, <br/> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> freecb);
int <a href="#virDomainRef">virDomainRef</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virConnectNumOfInterfaces">virConnectNumOfInterfaces</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
unsigned int <a href="#virDomainGetID">virDomainGetID</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
int <a href="#virDomainBlockPeek">virDomainBlockPeek</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/> const char * path, <br/> unsigned long long offset, <br/> size_t size, <br/> void * buffer, <br/> unsigned int flags);
typedef int <a href="#virEventAddTimeoutFunc">virEventAddTimeoutFunc</a> (int timeout, <br/> <a href="libvirt-libvirt.html#virEventTimeoutCallback">virEventTimeoutCallback</a> cb, <br/> void * opaque, <br/> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> ff);
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceLookupByName">virInterfaceLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * name);
int <a href="#virDomainInterfaceStats">virDomainInterfaceStats</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/> const char * path, <br/> <a href="libvirt-libvirt.html#virDomainInterfaceStatsPtr">virDomainInterfaceStatsPtr</a> stats, <br/> size_t size);
int <a href="#virConnectListNetworks">virConnectListNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames);
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByKey">virStorageVolLookupByKey</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * key);
</pre>
</div>
<div class="refsect1" lang="en">
@ -285,6 +324,18 @@ int <a href="#virConnectListNetworks">virConnectListNetworks</a> (<a href="libv
<hr/>
<div class="refsect2" lang="en"><h3><a name="VIR_NODEINFO_MAXCPUS">Macro </a>VIR_NODEINFO_MAXCPUS</h3><pre class="programlisting">#define <a href="#VIR_NODEINFO_MAXCPUS">VIR_NODEINFO_MAXCPUS</a>(nodeinfo);
</pre><p>This macro is to calculate the total number of CPUs supported but not necessary active in the host.</p><div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>nodeinfo</tt></i>:</span></td><td><a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> instance</td></tr></tbody></table></div>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="VIR_SECURITY_DOI_BUFLEN">Macro </a>VIR_SECURITY_DOI_BUFLEN</h3><pre class="programlisting">#define <a href="#VIR_SECURITY_DOI_BUFLEN">VIR_SECURITY_DOI_BUFLEN</a>;
</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> doi string.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="VIR_SECURITY_LABEL_BUFLEN">Macro </a>VIR_SECURITY_LABEL_BUFLEN</h3><pre class="programlisting">#define <a href="#VIR_SECURITY_LABEL_BUFLEN">VIR_SECURITY_LABEL_BUFLEN</a>;
</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> label string. Note that this value is based on that used by Labeled NFS.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="VIR_SECURITY_MODEL_BUFLEN">Macro </a>VIR_SECURITY_MODEL_BUFLEN</h3><pre class="programlisting">#define <a href="#VIR_SECURITY_MODEL_BUFLEN">VIR_SECURITY_MODEL_BUFLEN</a>;
</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> model string.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="VIR_UNUSE_CPU">Macro </a>VIR_UNUSE_CPU</h3><pre class="programlisting">#define <a href="#VIR_UNUSE_CPU">VIR_UNUSE_CPU</a>(cpumap, cpu);
@ -517,6 +568,16 @@ The content of this structure is not made public by the API.
<a name="VIR_EVENT_HANDLE_HANGUP">VIR_EVENT_HANDLE_HANGUP</a> = 8
};
</pre><p/>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterface">Structure </a>virInterface</h3><pre class="programlisting">struct _virInterface {
The content of this structure is not made public by the API.
} virInterface;
</pre><p/>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfacePtr">Typedef </a>virInterfacePtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterface">virInterface</a> * virInterfacePtr;
</pre><p>a <a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> is pointer to a <a href="libvirt-libvirt.html#virInterface">virInterface</a> private structure, this is the type used to reference a virtual interface in the API.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNetwork">Structure </a>virNetwork</h3><pre class="programlisting">struct _virNetwork {
@ -576,6 +637,26 @@ The content of this structure is not made public by the API.
<a name="VIR_DOMAIN_SCHED_FIELD_BOOLEAN">VIR_DOMAIN_SCHED_FIELD_BOOLEAN</a> = 6 /* boolean(character) case */
};
</pre><p/>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSecurityLabel">Structure </a>virSecurityLabel</h3><pre class="programlisting">struct _virSecurityLabel {
The content of this structure is not made public by the API.
} virSecurityLabel;
</pre><p/>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSecurityLabelPtr">Typedef </a>virSecurityLabelPtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> * virSecurityLabelPtr;
</pre><p>a <a href="libvirt-libvirt.html#virSecurityLabelPtr">virSecurityLabelPtr</a> is a pointer to a virSecurityLabel.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSecurityModel">Structure </a>virSecurityModel</h3><pre class="programlisting">struct _virSecurityModel {
The content of this structure is not made public by the API.
} virSecurityModel;
</pre><p/>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSecurityModelPtr">Typedef </a>virSecurityModelPtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> * virSecurityModelPtr;
</pre><p>a <a href="libvirt-libvirt.html#virSecurityModelPtr">virSecurityModelPtr</a> is a pointer to a virSecurityModel.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStoragePool">Structure </a>virStoragePool</h3><pre class="programlisting">struct _virStoragePool {
@ -739,8 +820,16 @@ The content of this structure is not made public by the API.
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectDomainEventRegister"/>virConnectDomainEventRegister ()</h3><pre class="programlisting">int virConnectDomainEventRegister (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb, <br/> void * opaque, <br/> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> freecb)<br/>
</pre><p>Adds a Domain Event Callback. Registering for a domain callback will enable delivery of the events</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td>opaque data to pass on to the callback</td></tr><tr><td><span class="term"><i><tt>freecb</tt></i>:</span></td><td>optional function to deallocate opaque when not used anymore</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on failure</td></tr></tbody></table></div></div>
</pre><p>Adds a Domain Event Callback. Registering for a domain callback will enable delivery of the events The <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> object handle passed into the callback upon delivery of an event is only valid for the duration of execution of the callback. If the callback wishes to keep the domain object after the callback</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td>opaque data to pass on to the callback</td></tr><tr><td><span class="term"><i><tt>freecb</tt></i>:</span></td><td>optional function to deallocate opaque when not used anymore</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>it shall take a reference to it, by calling virDomainRef. The reference can be released once the object is no longer required by calling virDomainFree. Returns 0 on success, -1 on failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectDomainXMLFromNative"/>virConnectDomainXMLFromNative ()</h3><pre class="programlisting">char * virConnectDomainXMLFromNative (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * nativeFormat, <br/> const char * nativeConfig, <br/> unsigned int flags)<br/>
</pre><p>Reads native configuration data describing a domain, and generates libvirt domain XML. The format of the native data is hypervisor dependant.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>nativeFormat</tt></i>:</span></td><td>configuration format importing from</td></tr><tr><td><span class="term"><i><tt>nativeConfig</tt></i>:</span></td><td>the configuration data to import</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>currently unused, pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded XML instance, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectDomainXMLToNative"/>virConnectDomainXMLToNative ()</h3><pre class="programlisting">char * virConnectDomainXMLToNative (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * nativeFormat, <br/> const char * domainXml, <br/> unsigned int flags)<br/>
</pre><p>Reads a domain XML configuration document, and generates generates a native configuration file describing the domain. The format of the native data is hypervisor dependant.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>nativeFormat</tt></i>:</span></td><td>configuration format exporting to</td></tr><tr><td><span class="term"><i><tt>domainXml</tt></i>:</span></td><td>the domain configuration to export</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>currently unused, pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded native config datafile, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectFindStoragePoolSources"/>virConnectFindStoragePoolSources ()</h3><pre class="programlisting">char * virConnectFindStoragePoolSources (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * type, <br/> const char * srcSpec, <br/> unsigned int flags)<br/>
</pre><p>Talks to a storage backend and attempts to auto-discover the set of available storage pool sources. e.g. For iSCSI this would be a set of iSCSI targets. For NFS this would be a list of exported paths. The srcSpec (optional for some storage pool types, e.g. local ones) is an instance of the storage pool's source element specifying where to look for the pools. srcSpec is not required for some types (e.g., those querying local storage resources only)</p>
@ -785,6 +874,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virConnectListDomains"/>virConnectListDomains ()</h3><pre class="programlisting">int virConnectListDomains (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> int * ids, <br/> int maxids)<br/>
</pre><p>Collect the list of active domains, and store their ID in @maxids</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>ids</tt></i>:</span></td><td>array to collect the list of IDs of active domains</td></tr><tr><td><span class="term"><i><tt>maxids</tt></i>:</span></td><td>size of @ids</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectListInterfaces"/>virConnectListInterfaces ()</h3><pre class="programlisting">int virConnectListInterfaces (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames)<br/>
</pre><p>Collect the list of physical host interfaces, and store their names in @names</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array to collect the list of names of interfaces</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of @names</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of interfaces found or -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectListNetworks"/>virConnectListNetworks ()</h3><pre class="programlisting">int virConnectListNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> char ** const names, <br/> int maxnames)<br/>
</pre><p>Collect the list of active networks, and store their names in @names</p>
@ -809,6 +902,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virConnectNumOfDomains"/>virConnectNumOfDomains ()</h3><pre class="programlisting">int virConnectNumOfDomains (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Provides the number of active domains.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectNumOfInterfaces"/>virConnectNumOfInterfaces ()</h3><pre class="programlisting">int virConnectNumOfInterfaces (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Provides the number of interfaces on the physical host.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of interface found or -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectNumOfNetworks"/>virConnectNumOfNetworks ()</h3><pre class="programlisting">int virConnectNumOfNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Provides the number of active networks.</p>
@ -829,6 +926,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virConnectOpenReadOnly"/>virConnectOpenReadOnly ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virConnectOpenReadOnly (const char * name)<br/>
</pre><p>This function should be called first to get a restricted connection to the library functionalities. The set of APIs usable are then restricted on the available methods to control the domains.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnectRef"/>virConnectRef ()</h3><pre class="programlisting">int virConnectRef (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Increment the reference count on the connection. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virConnectClose">virConnectClose</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a connection would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>the connection to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainAttachDevice"/>virDomainAttachDevice ()</h3><pre class="programlisting">int virDomainAttachDevice (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> const char * xml)<br/>
</pre><p>Create a virtual device attachment to backend.</p>
@ -859,7 +960,7 @@ The content of this structure is not made public by the API.
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>string containing an XML description of the domain</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>callers should always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new domain object or NULL in case of failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainDefineXML"/>virDomainDefineXML ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> virDomainDefineXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xml)<br/>
</pre><p>Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine().</p>
</pre><p>Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine(). A previous definition for this domain would be overriden if it already exists.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the domain, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the domain otherwise</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainDestroy"/>virDomainDestroy ()</h3><pre class="programlisting">int virDomainDestroy (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br/>
@ -913,6 +1014,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virDomainGetSchedulerType"/>virDomainGetSchedulerType ()</h3><pre class="programlisting">char * virDomainGetSchedulerType (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> int * nparams)<br/>
</pre><p>Get the scheduler type.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>nparams</tt></i>:</span></td><td>number of scheduler parameters(return value)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error. The caller must free the returned string.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainGetSecurityLabel"/>virDomainGetSecurityLabel ()</h3><pre class="programlisting">int virDomainGetSecurityLabel (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virSecurityLabelPtr">virSecurityLabelPtr</a> seclabel)<br/>
</pre><p>Extract security label of an active domain. The 'label' field in the @seclabel argument will be initialized to the empty string if the domain is not running under a security model.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>seclabel</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainGetUUID"/>virDomainGetUUID ()</h3><pre class="programlisting">int virDomainGetUUID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned char * uuid)<br/>
</pre><p>Get the UUID for a domain</p>
@ -965,6 +1070,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virDomainReboot"/>virDomainReboot ()</h3><pre class="programlisting">int virDomainReboot (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned int flags)<br/>
</pre><p>Reboot a domain, the domain object is still usable there after but the domain OS is being stopped for a restart. Note that the guest OS may ignore the request.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>extra flags for the reboot operation, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainRef"/>virDomainRef ()</h3><pre class="programlisting">int virDomainRef (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br/>
</pre><p>Increment the reference count on the domain. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virDomainFree">virDomainFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a domain would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>the domain to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDomainRestore"/>virDomainRestore ()</h3><pre class="programlisting">int virDomainRestore (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * from)<br/>
</pre><p>This method will restore a domain saved to disk by virDomainSave().</p>
@ -1021,6 +1130,54 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virInitialize"/>virInitialize ()</h3><pre class="programlisting">int virInitialize (void)<br/>
</pre><p>Initialize the library. It's better to call this routine at startup in multithreaded applications to avoid potential race when initializing the library.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceCreate"/>virInterfaceCreate ()</h3><pre class="programlisting">int virInterfaceCreate (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags)<br/>
</pre><p>Activate an interface (ie call "ifup")</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a defined interface</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceDefineXML"/>virInterfaceDefineXML ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceDefineXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xml, <br/> unsigned int flags)<br/>
</pre><p>Define an interface (or modify existing interface configuration)</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the interface, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the interface otherwise</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceDestroy"/>virInterfaceDestroy ()</h3><pre class="programlisting">int virInterfaceDestroy (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags)<br/>
</pre><p>deactivate an interface (ie call "ifdown") This does not remove the interface from the config, and does not free the associated <a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> object.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>an interface object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceFree"/>virInterfaceFree ()</h3><pre class="programlisting">int virInterfaceFree (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Free the interface object. The interface itself is unaltered. The data structure is freed and should not be used thereafter.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceGetConnect"/>virInterfaceGetConnect ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virInterfaceGetConnect (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Provides the connection pointer associated with an interface. The reference counter on the connection is not increased by this call. WARNING: When writing libvirt bindings in other languages, do not use this function. Instead, store the connection and the interface object together.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceGetMACString"/>virInterfaceGetMACString ()</h3><pre class="programlisting">const char * virInterfaceGetMACString (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Get the MAC for a interface as string. For more information about MAC see RFC4122.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the MAC address (in null-terminated ASCII format) or NULL, the string need not be deallocated its lifetime will be the same as the interface object.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceGetName"/>virInterfaceGetName ()</h3><pre class="programlisting">const char * virInterfaceGetName (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Get the public name for that interface</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the name or NULL, the string need not be deallocated its lifetime will be the same as the interface object.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceGetXMLDesc"/>virInterfaceGetXMLDesc ()</h3><pre class="programlisting">char * virInterfaceGetXMLDesc (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br/> unsigned int flags)<br/>
</pre><p>Provide an XML description of the interface. The description may be reused later to recreate the interface with virInterfaceCreateXML().</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded XML instance, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceLookupByMACString"/>virInterfaceLookupByMACString ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceLookupByMACString (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * macstr)<br/>
</pre><p>Try to lookup an interface on the given hypervisor based on its MAC.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>macstr</tt></i>:</span></td><td>the MAC for the interface (null-terminated ASCII format)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new interface object or NULL in case of failure. If the interface cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_INTERFACE">VIR_ERR_NO_INTERFACE</a> error is raised.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceLookupByName"/>virInterfaceLookupByName ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceLookupByName (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * name)<br/>
</pre><p>Try to lookup an interface on the given hypervisor based on its name.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name for the interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new interface object or NULL in case of failure. If the interface cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_INTERFACE">VIR_ERR_NO_INTERFACE</a> error is raised.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceRef"/>virInterfaceRef ()</h3><pre class="programlisting">int virInterfaceRef (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Increment the reference count on the interface. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virInterfaceFree">virInterfaceFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a interface would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>the interface to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virInterfaceUndefine"/>virInterfaceUndefine ()</h3><pre class="programlisting">int virInterfaceUndefine (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br/>
</pre><p>Undefine an interface, ie remove it from the config. This does not free the associated <a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> object.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a defined interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNetworkCreate"/>virNetworkCreate ()</h3><pre class="programlisting">int virNetworkCreate (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
</pre><p>Create and start a defined network. If the call succeed the network moves from the defined to the running networks pools.</p>
@ -1081,6 +1238,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virNetworkLookupByUUIDString"/>virNetworkLookupByUUIDString ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkLookupByUUIDString (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * uuidstr)<br/>
</pre><p>Try to lookup a network on the given hypervisor based on its UUID.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuidstr</tt></i>:</span></td><td>the string UUID for the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure. If the network cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> error is raised.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNetworkRef"/>virNetworkRef ()</h3><pre class="programlisting">int virNetworkRef (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
</pre><p>Increment the reference count on the network. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virNetworkFree">virNetworkFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a network would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>the network to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNetworkSetAutostart"/>virNetworkSetAutostart ()</h3><pre class="programlisting">int virNetworkSetAutostart (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/> int autostart)<br/>
</pre><p>Configure the network to be automatically started when the host machine boots.</p>
@ -1089,6 +1250,18 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virNetworkUndefine"/>virNetworkUndefine ()</h3><pre class="programlisting">int virNetworkUndefine (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
</pre><p>Undefine a network but does not stop it if it is running</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceCreateXML"/>virNodeDeviceCreateXML ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> virNodeDeviceCreateXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xmlDesc, <br/> unsigned int flags)<br/>
</pre><p>Create a new device on the VM host machine, for example, virtual HBAs created using vport_create.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>string containing an XML description of the device to be created</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>callers should always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a node device object if successful, NULL in case of failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceDestroy"/>virNodeDeviceDestroy ()</h3><pre class="programlisting">int virNodeDeviceDestroy (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Destroy the device object. The virtual device is removed from the host operating system. This function may require privileged access</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>a device object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceDettach"/>virNodeDeviceDettach ()</h3><pre class="programlisting">int virNodeDeviceDettach (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Dettach the node device from the node itself so that it may be assigned to a guest domain. Depending on the hypervisor, this may involve operations such as unbinding any device drivers from the device, binding the device to a dummy device driver and resetting the device. If the device is currently in use by the node, this method may fail. Once the device is not assigned to any guest, it may be re-attached to the node using the virNodeDeviceReattach() method.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceFree"/>virNodeDeviceFree ()</h3><pre class="programlisting">int virNodeDeviceFree (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Drops a reference to the node device, freeing it if this was the last reference.</p>
@ -1117,18 +1290,34 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceNumOfCaps"/>virNodeDeviceNumOfCaps ()</h3><pre class="programlisting">int virNodeDeviceNumOfCaps (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Accessor for the number of capabilities supported by the device.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of capabilities supported by the device.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceReAttach"/>virNodeDeviceReAttach ()</h3><pre class="programlisting">int virNodeDeviceReAttach (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Re-attach a previously dettached node device to the node so that it may be used by the node again. Depending on the hypervisor, this may involve operations such as resetting the device, unbinding it from a dummy device driver and binding it to its appropriate driver. If the device is currently in use by a guest, this method may fail.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceRef"/>virNodeDeviceRef ()</h3><pre class="programlisting">int virNodeDeviceRef (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Increment the reference count on the dev. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virNodeDeviceFree">virNodeDeviceFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a dev would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the dev to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeDeviceReset"/>virNodeDeviceReset ()</h3><pre class="programlisting">int virNodeDeviceReset (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br/>
</pre><p>Reset a previously dettached node device to the node before or after assigning it to a guest. The exact reset semantics depends on the hypervisor and device type but, for example, KVM will attempt to reset PCI devices with a Function Level Reset, Secondary Bus Reset or a Power Management D-State reset. If the reset will affect other devices which are currently in use, this function may fail.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetCellsFreeMemory"/>virNodeGetCellsFreeMemory ()</h3><pre class="programlisting">int virNodeGetCellsFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> unsigned long long * freeMems, <br/> int startCell, <br/> int maxCells)<br/>
</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetFreeMemory"/>virNodeGetFreeMemory ()</h3><pre class="programlisting">unsigned long long virNodeGetFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>provides the free memory available on the Node</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the available free memory in kilobytes or 0 in case of error</td></tr></tbody></table></div></div>
</pre><p>provides the free memory available on the Node Note: most libvirt APIs provide memory sizes in kilobytes, but in this function the returned value is in bytes. Divide by 1024 as necessary.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the available free memory in bytes or 0 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetInfo"/>virNodeGetInfo ()</h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br/>
</pre><p>Extract hardware information about the node.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> structure allocated by the user</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetSecurityModel"/>virNodeGetSecurityModel ()</h3><pre class="programlisting">int virNodeGetSecurityModel (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virSecurityModelPtr">virSecurityModelPtr</a> secmodel)<br/>
</pre><p>Extract the security model of a hypervisor. The 'model' field in the @secmodel argument may be initialized to the empty string if the driver has not activated a security model.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>secmodel</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeListDevices"/>virNodeListDevices ()</h3><pre class="programlisting">int virNodeListDevices (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * cap, <br/> char ** const names, <br/> int maxnames, <br/> unsigned int flags)<br/>
</pre><p>Collect the list of node devices, and store their names in @names If the optional 'cap' argument is non-NULL, then the count will be restricted to devices with the specified capability</p>
@ -1217,6 +1406,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virStoragePoolNumOfVolumes"/>virStoragePoolNumOfVolumes ()</h3><pre class="programlisting">int virStoragePoolNumOfVolumes (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)<br/>
</pre><p>Fetch the number of storage volumes within a pool</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of storage pools, or -1 on failure</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStoragePoolRef"/>virStoragePoolRef ()</h3><pre class="programlisting">int virStoragePoolRef (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)<br/>
</pre><p>Increment the reference count on the pool. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virStoragePoolFree">virStoragePoolFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a pool would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>the pool to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStoragePoolRefresh"/>virStoragePoolRefresh ()</h3><pre class="programlisting">int virStoragePoolRefresh (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> unsigned int flags)<br/>
</pre><p>Request that the pool refresh its list of volumes. This may involve communicating with a remote server, and/or initializing new devices at the OS layer</p>
@ -1233,13 +1426,17 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virStorageVolCreateXML"/>virStorageVolCreateXML ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolCreateXML (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * xmldesc, <br/> unsigned int flags)<br/>
</pre><p>Create a storage volume within a pool based on an XML description. Not all pools support creation of volumes</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>xmldesc</tt></i>:</span></td><td>description of volume to create</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for creation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage volume, or NULL on error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStorageVolCreateXMLFrom"/>virStorageVolCreateXMLFrom ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolCreateXMLFrom (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br/> const char * xmldesc, <br/> <a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> clonevol, <br/> unsigned int flags)<br/>
</pre><p>Create a storage volume in the parent pool, using the 'clonevol' volume as input. Information for the new volume (name, perms) are passed via a typical volume XML description.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to parent pool for the new volume</td></tr><tr><td><span class="term"><i><tt>xmldesc</tt></i>:</span></td><td>description of volume to create</td></tr><tr><td><span class="term"><i><tt>clonevol</tt></i>:</span></td><td>storage volume to use as input</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for creation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage volume, or NULL on error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStorageVolDelete"/>virStorageVolDelete ()</h3><pre class="programlisting">int virStorageVolDelete (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br/> unsigned int flags)<br/>
</pre><p>Delete the storage volume from the pool</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>future flags, use 0 for now</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStorageVolFree"/>virStorageVolFree ()</h3><pre class="programlisting">int virStorageVolFree (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br/>
</pre><p>Release the storage volume handle. The underlying storage volume contains to exist</p>
</pre><p>Release the storage volume handle. The underlying storage volume continues to exist.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStorageVolGetConnect"/>virStorageVolGetConnect ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virStorageVolGetConnect (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br/>
@ -1278,6 +1475,10 @@ The content of this structure is not made public by the API.
</pre><p>Fetch a pointer to a storage volume based on its locally (host) unique path</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>locally unique path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a storage volume, or NULL if not found / error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virStorageVolRef"/>virStorageVolRef ()</h3><pre class="programlisting">int virStorageVolRef (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br/>
</pre><p>Increment the reference count on the vol. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virStorageVolFree">virStorageVolFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a vol would increment the reference count.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>the vol to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div>
<hr/>
</div>
</div>
</body>

View File

@ -43,6 +43,7 @@ typedef enum <a href="#virErrorLevel">virErrorLevel</a>;
typedef enum <a href="#virErrorDomain">virErrorDomain</a>;
typedef enum <a href="#virErrorNumber">virErrorNumber</a>;
typedef struct _virError <a href="#virError">virError</a>;
void <a href="#virFreeError">virFreeError</a> (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> err);
int <a href="#virCopyLastError">virCopyLastError</a> (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> to);
void <a href="#virConnSetErrorFunc">virConnSetErrorFunc</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> void * userData, <br/> <a href="libvirt-virterror.html#virErrorFunc">virErrorFunc</a> handler);
void <a href="#virResetLastError">virResetLastError</a> (void);
@ -54,6 +55,7 @@ void <a href="#virDefaultErrorFunc">virDefaultErrorFunc</a> (<a href="libvirt-v
void <a href="#virSetErrorFunc">virSetErrorFunc</a> (void * userData, <br/> <a href="libvirt-virterror.html#virErrorFunc">virErrorFunc</a> handler);
int <a href="#virConnCopyLastError">virConnCopyLastError</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> to);
void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> <a href="#virSaveLastError">virSaveLastError</a> (void);
</pre>
</div>
<div class="refsect1" lang="en">
@ -103,7 +105,11 @@ void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvi
<a name="VIR_FROM_DOMAIN">VIR_FROM_DOMAIN</a> = 20 /* Error from domain config */
<a name="VIR_FROM_UML">VIR_FROM_UML</a> = 21 /* Error at the UML driver */
<a name="VIR_FROM_NODEDEV">VIR_FROM_NODEDEV</a> = 22 /* Error from node device monitor */
<a name="VIR_FROM_XEN_INOTIFY">VIR_FROM_XEN_INOTIFY</a> = 23 /* Error from xen inotify layer */
<a name="VIR_FROM_XEN_INOTIFY">VIR_FROM_XEN_INOTIFY</a> = 23 /* Error from xen inotify layer */
<a name="VIR_FROM_SECURITY">VIR_FROM_SECURITY</a> = 24 /* Error from security framework */
<a name="VIR_FROM_VBOX">VIR_FROM_VBOX</a> = 25 /* Error from VirtualBox driver */
<a name="VIR_FROM_INTERFACE">VIR_FROM_INTERFACE</a> = 26 /* Error when operating on an interface */
<a name="VIR_FROM_ONE">VIR_FROM_ONE</a> = 27 /* Error from OpenNebula driver */
};
</pre><p/>
</div>
@ -170,7 +176,12 @@ void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvi
<a name="VIR_ERR_NO_STORAGE_VOL">VIR_ERR_NO_STORAGE_VOL</a> = 50 /* storage pool not found */
<a name="VIR_WAR_NO_NODE">VIR_WAR_NO_NODE</a> = 51 /* failed to start node driver */
<a name="VIR_ERR_INVALID_NODE_DEVICE">VIR_ERR_INVALID_NODE_DEVICE</a> = 52 /* invalid node device object */
<a name="VIR_ERR_NO_NODE_DEVICE">VIR_ERR_NO_NODE_DEVICE</a> = 53 /* node device not found */
<a name="VIR_ERR_NO_NODE_DEVICE">VIR_ERR_NO_NODE_DEVICE</a> = 53 /* node device not found */
<a name="VIR_ERR_NO_SECURITY_MODEL">VIR_ERR_NO_SECURITY_MODEL</a> = 54 /* security model not found */
<a name="VIR_ERR_OPERATION_INVALID">VIR_ERR_OPERATION_INVALID</a> = 55 /* operation is not applicable at this time */
<a name="VIR_WAR_NO_INTERFACE">VIR_WAR_NO_INTERFACE</a> = 56 /* failed to start interface driver */
<a name="VIR_ERR_NO_INTERFACE">VIR_ERR_NO_INTERFACE</a> = 57 /* interface driver not running */
<a name="VIR_ERR_INVALID_INTERFACE">VIR_ERR_INVALID_INTERFACE</a> = 58 /* invalid interface object */
};
</pre><p/>
</div>
@ -184,15 +195,15 @@ void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvi
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>user provided data for the error callback</td></tr><tr><td><span class="term"><i><tt>error</tt></i>:</span></td><td>the error being raised.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnCopyLastError"/>virConnCopyLastError ()</h3><pre class="programlisting">int virConnCopyLastError (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> to)<br/>
</pre><p>Copy the content of the last error caught on that connection One will need to free the result with virResetError()</p>
</pre><p>Copy the content of the last error caught on that connection This method is not protected against access from multiple threads. In a multi-threaded application, always use the global virGetLastError() API which is backed by thread local storage. If the connection object was discovered to be invalid by an API call, then the error will be reported against the global error object. Since 0.6.0, all errors reported in the per-connection object are also duplicated in the global error object. As such an application can always use virGetLastError(). This method remains for backwards compatability. One will need to free the result with virResetError()</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>target to receive the copy</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no error was found and the error code otherwise and -1 in case of parameter error.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnGetLastError"/>virConnGetLastError ()</h3><pre class="programlisting"><a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> virConnGetLastError (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Provide a pointer to the last error caught on that connection Simpler but may not be suitable for multithreaded accesses, in which case use virConnCopyLastError()</p>
</pre><p>Provide a pointer to the last error caught on that connection This method is not protected against access from multiple threads. In a multi-threaded application, always use the global virGetLastError() API which is backed by thread local storage. If the connection object was discovered to be invalid by an API call, then the error will be reported against the global error object. Since 0.6.0, all errors reported in the per-connection object are also duplicated in the global error object. As such an application can always use virGetLastError(). This method remains for backwards compatability.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the last error or NULL if none occurred.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnResetLastError"/>virConnResetLastError ()</h3><pre class="programlisting">void virConnResetLastError (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
</pre><p>Reset the last error caught on that connection</p>
</pre><p>The error object is kept in thread local storage, so separate threads can safely access this concurrently. Reset the last error caught on that connection</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virConnSetErrorFunc"/>virConnSetErrorFunc ()</h3><pre class="programlisting">void virConnSetErrorFunc (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> void * userData, <br/> <a href="libvirt-virterror.html#virErrorFunc">virErrorFunc</a> handler)<br/>
@ -200,15 +211,19 @@ void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvi
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>pointer to the user data provided in the handler callback</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the function to get called in case of error or NULL</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virCopyLastError"/>virCopyLastError ()</h3><pre class="programlisting">int virCopyLastError (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> to)<br/>
</pre><p>Copy the content of the last error caught at the library level One will need to free the result with virResetError()</p>
</pre><p>Copy the content of the last error caught at the library level The error object is kept in thread local storage, so separate threads can safely access this concurrently. One will need to free the result with virResetError()</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>target to receive the copy</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no error was found and the error code otherwise and -1 in case of parameter error.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virDefaultErrorFunc"/>virDefaultErrorFunc ()</h3><pre class="programlisting">void virDefaultErrorFunc (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> err)<br/>
</pre><p>Default routine reporting an error to stderr.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>pointer to the error.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virFreeError"/>virFreeError ()</h3><pre class="programlisting">void virFreeError (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> err)<br/>
</pre><p>Resets and frees the given error.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>error to free</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virGetLastError"/>virGetLastError ()</h3><pre class="programlisting"><a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> virGetLastError (void)<br/>
</pre><p>Provide a pointer to the last error caught at the library level Simpler but may not be suitable for multithreaded accesses, in which case use virCopyLastError()</p>
</pre><p>Provide a pointer to the last error caught at the library level The error object is kept in thread local storage, so separate threads can safely access this concurrently.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the last error or NULL if none occurred.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virResetError"/>virResetError ()</h3><pre class="programlisting">void virResetError (<a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> err)<br/>
@ -216,8 +231,12 @@ void <a href="#virConnResetLastError">virConnResetLastError</a> (<a href="libvi
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>pointer to the <a href="libvirt-virterror.html#virError">virError</a> to clean up</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virResetLastError"/>virResetLastError ()</h3><pre class="programlisting">void virResetLastError (void)<br/>
</pre><p>Reset the last error caught at the library level.</p>
</pre><p>Reset the last error caught at the library level. The error object is kept in thread local storage, so separate threads can safely access this concurrently, only resetting their own error object.</p>
</div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSaveLastError"/>virSaveLastError ()</h3><pre class="programlisting"><a href="libvirt-virterror.html#virErrorPtr">virErrorPtr</a> virSaveLastError (void)<br/>
</pre><p>Save the last error into a new error object.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the copied error or NULL if allocation failed. It is the caller's responsibility to free the error with virFreeError().</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virSetErrorFunc"/>virSetErrorFunc ()</h3><pre class="programlisting">void virSetErrorFunc (void * userData, <br/> <a href="libvirt-virterror.html#virErrorFunc">virErrorFunc</a> handler)<br/>
</pre><p>Set a library global error handling function, if @handler is NULL, it will reset to default printing on stderr. The error raised there are those for which no handler at the connection level could caught.</p>

View File

@ -63,6 +63,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -137,7 +149,7 @@
<p>
The hypervisor drivers currently supported by libvirt are:
</p>
<ul><li><strong><a href="drvxen.html">Xen</a></strong></li><li><strong><a href="drvqemu.html">QEMU</a></strong></li><li><strong><a href="drvlxc.html">LXC</a></strong></li><li><strong><a href="drvtest.html">Test</a></strong></li><li><strong><a href="drvopenvz.html">OpenVZ</a></strong></li></ul>
<ul><li><strong><a href="drvxen.html">Xen</a></strong></li><li><strong><a href="drvqemu.html">QEMU</a></strong></li><li><strong><a href="drvlxc.html">LXC</a></strong></li><li><strong><a href="drvtest.html">Test</a></strong></li><li><strong><a href="drvopenvz.html">OpenVZ</a></strong></li><li><strong><a href="drvvbox.html">VirtualBox</a></strong></li><li><strong><a href="drvone.html">OpenNebula</a></strong></li></ul>
</div>
</div>
<div id="footer">

View File

@ -22,6 +22,8 @@
<li><strong><a href="drvlxc.html">LXC</a></strong></li>
<li><strong><a href="drvtest.html">Test</a></strong></li>
<li><strong><a href="drvopenvz.html">OpenVZ</a></strong></li>
<li><strong><a href="drvvbox.html">VirtualBox</a></strong></li>
<li><strong><a href="drvone.html">OpenNebula</a></strong></li>
</ul>
</body>
</html>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -126,6 +138,81 @@
</div>
<div id="content">
<h1>LXC container driver</h1>
<p>
The libvirt LXC driver manages "Linux Containers". Containers are sets of processes
with private namespaces which can (but don't always) look like separate machines, but
do not have their own OS. Here are two example configurations. The first is a very
light-weight "application container" which does not have it's own root image. You would
start it using
</p>
<h3>Example config version 1</h3>
<p></p>
<pre>
&lt;domain type='lxc'&gt;
&lt;name&gt;vm1&lt;/name&gt;
&lt;memory&gt;500000&lt;/memory&gt;
&lt;os&gt;
&lt;type&gt;exe&lt;/type&gt;
&lt;init&gt;/bin/sh&lt;/init&gt;
&lt;/os&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/libexec/libvirt_lxc&lt;/emulator&gt;
&lt;interface type='network'&gt;
&lt;source network='default'/&gt;
&lt;/interface&gt;
&lt;console type='pty' /&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
The next example assumes there is a private root filesystem
(perhaps hand-crafted using busybox, or installed from media,
debootstrap, whatever) under /opt/vm-1-root:
</p>
<p></p>
<pre>
&lt;domain type='lxc'&gt;
&lt;name&gt;vm1&lt;/name&gt;
&lt;memory&gt;32768&lt;/memory&gt;
&lt;os&gt;
&lt;type&gt;exe&lt;/type&gt;
&lt;init&gt;/init&lt;/init&gt;
&lt;/os&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/libexec/libvirt_lxc&lt;/emulator&gt;
&lt;filesystem type='mount'&gt;
&lt;source dir='/opt/vm-1-root'/&gt;
&lt;target dir='/'/&gt;
&lt;/filesystem&gt;
&lt;interface type='network'&gt;
&lt;source network='default'/&gt;
&lt;/interface&gt;
&lt;console type='pty' /&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
In both cases, you can define and start a container using:</p>
<pre>
virsh --connect lxc:/// define v1.xml
virsh --connect lxc:/// start v1.xml
</pre>
<pre>
virsh --connect lxc:/// console v1
</pre>
<p>Now doing 'ps -ef' will only show processes in the container, for
instance.
</p>
</div>
</div>
<div id="footer">

View File

@ -1,5 +1,84 @@
<html>
<body>
<h1>LXC container driver</h1>
<p>
The libvirt LXC driver manages "Linux Containers". Containers are sets of processes
with private namespaces which can (but don't always) look like separate machines, but
do not have their own OS. Here are two example configurations. The first is a very
light-weight "application container" which does not have it's own root image. You would
start it using
</p>
<h3>Example config version 1</h3>
<p></p>
<pre>
&lt;domain type='lxc'&gt;
&lt;name&gt;vm1&lt;/name&gt;
&lt;memory&gt;500000&lt;/memory&gt;
&lt;os&gt;
&lt;type&gt;exe&lt;/type&gt;
&lt;init&gt;/bin/sh&lt;/init&gt;
&lt;/os&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/libexec/libvirt_lxc&lt;/emulator&gt;
&lt;interface type='network'&gt;
&lt;source network='default'/&gt;
&lt;/interface&gt;
&lt;console type='pty' /&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
The next example assumes there is a private root filesystem
(perhaps hand-crafted using busybox, or installed from media,
debootstrap, whatever) under /opt/vm-1-root:
</p>
<p></p>
<pre>
&lt;domain type='lxc'&gt;
&lt;name&gt;vm1&lt;/name&gt;
&lt;memory&gt;32768&lt;/memory&gt;
&lt;os&gt;
&lt;type&gt;exe&lt;/type&gt;
&lt;init&gt;/init&lt;/init&gt;
&lt;/os&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/libexec/libvirt_lxc&lt;/emulator&gt;
&lt;filesystem type='mount'&gt;
&lt;source dir='/opt/vm-1-root'/&gt;
&lt;target dir='/'/&gt;
&lt;/filesystem&gt;
&lt;interface type='network'&gt;
&lt;source network='default'/&gt;
&lt;/interface&gt;
&lt;console type='pty' /&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
In both cases, you can define and start a container using:</p>
<pre>
virsh --connect lxc:/// define v1.xml
virsh --connect lxc:/// start v1.xml
</pre>
and then get a console using:
<pre>
virsh --connect lxc:/// console v1
</pre>
<p>Now doing 'ps -ef' will only show processes in the container, for
instance.
</p>
</body>
</html>

234
docs/drvone.html Normal file
View File

@ -0,0 +1,234 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from drvone.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: OpenNebula Virtual Infrastructure Manager driver</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="intro.html">Architecture</a>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="active" href="drivers.html">Drivers</a>
<ul class="l2"><li>
<div>
<a title="Driver the Xen hypervisor" class="inactive" href="drvxen.html">Xen</a>
</div>
</li><li>
<div>
<a title="Driver for QEMU, KQEMU, KVM and Xenner" class="inactive" href="drvqemu.html">QEMU / KVM</a>
</div>
</li><li>
<div>
<a title="Driver for the Linux native container API" class="inactive" href="drvlxc.html">Linux Container</a>
</div>
</li><li>
<div>
<a title="Psuedo-driver simulating APIs in memory for test suites" class="inactive" href="drvtest.html">Test</a>
</div>
</li><li>
<div>
<a title="Driver providing secure remote to the libvirt APIs" class="inactive" href="drvremote.html">Remote</a>
</div>
</li><li>
<div>
<a title="Driver for the OpenVZ container technology" class="inactive" href="drvopenvz.html">OpenVZ</a>
</div>
</li><li>
<div>
<a title="Driver for the User Mode Linux technology" class="inactive" href="drvuml.html">UML</a>
</div>
</li><li>
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<span class="active">OpenNebula</span>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>OpenNebula Virtual Infrastructure Manager driver</h1>
<p><a name="toc" id="toc"></a><a href="http://opennebula.org/">OpenNebula</a>
is a Virtual Infrastructure Manager that controls Virtual Machines (VM) in a pool of distributed resources
by orchestrating network, storage and virtualization technologies. The OpenNebula driver lets you manage your private or hybrid (<a href="http://aws.amazon.com/ec2/">Amazon EC2</a> or <a href="http://www.elastichosts.com/">Elastic Hosts</a> based) cloud using a standard libvirt interface, including the API as well as the related
tools and VM description files.</p>
<h2>
<a name="prereq" id="prereq"></a>Deployment pre-requisites</h2>
<ul><li>
<p style="margin-bottom: 0in">A working OpenNebula installation,
version 1.2 or higher.
</p>
</li></ul>
<h2>
<a name="uris" id="uris"></a>Connections to OpenNebula driver</h2>
<p>The Uri of the driver protocol is "one". Some example
connection Uris for the driver are:
</p>
<pre> one:/// (local access)
one+unix:/// (local access)
one://example.com/ (remote access)
one+tcp://example.com/ (remote access, SASl/Kerberos)
one+ssh://user@example.com/ (remote access, SSH tunnelled)
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig"></a>Example domain XML config</h2>
<p>There are some limitations on the XML attributes that may be
specified when interfacing OpenNebula. The following xml example
details the attributes and options supported by the OpenNebula
driver:</p>
<h3>Paravirtualized guest direct kernel boot
</h3>
<pre> &lt;domain type='one'&gt;
&lt;name&gt;vm01&lt;/name&gt;
&lt;memory&gt;32768&lt;/memory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type&gt;linux&lt;/type&gt;
&lt;kernel&gt;/boot/vmlinuz-2.6.24-17-xen&lt;/kernel&gt;
&lt;initrd&gt;/boot/initrd.img-2.6.24-17-xen&lt;/initrd&gt;
&lt;cmdline&gt;&lt;/cmdline&gt;
&lt;root&gt;sda1&lt;/root&gt;
&lt;/os&gt;
&lt;devices&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/images/sgehosts/01/disk.img'/&gt;
&lt;target dev='sda1'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/images/sgehosts/01/swap.img'/&gt;
&lt;target dev='sda2'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='cdrom'&gt;
&lt;source file='/images/iso/cdrom.iso'/&gt;
&lt;target dev='hdc'/&gt;
&lt;readonly/&gt;
&lt;/disk&gt;
&lt;!--BRIDGE--&gt;
&lt;interface type='bridge'&gt;
&lt;source bridge='eth0'/&gt;
&lt;mac address='00:16:3e:5d:c7:9e'/&gt;
&lt;/interface&gt;
&lt;!--ONE Network--&gt;
&lt;interface type='network'&gt;
&lt;source network='onenetwork'/&gt;
&lt;/interface&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
<b>Note:</b> The "&lt;interface type='network'&gt;" will
attach the interface to a previously configured network (named
<tt>onenetwork</tt>) within the <a href="http://opennebula.org/">OpenNebula</a> system, typically with the
<tt>onevnet</tt> CLI command.</p>
<p><b>Note</b>: OpenNebula supports the simultaneous use of different hypervisors, so you can specify any os type (linux or hvm) supported by your cluster.
</p>
<h2>Links</h2>
<ul><li><a href="http://www.opennebula.org/doku.php?id=documentation">OpenNebula Documentation</a>
</li><li><a href="http://www.opennebula.org/doku.php?id=documentation:rel1.2:ug">OpenNebula User Guide</a>
</li></ul>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

107
docs/drvone.html.in Normal file
View File

@ -0,0 +1,107 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 3.0 (Linux)">
<meta name="CREATED" content="0;0">
<meta name="CHANGED" content="20090701;13170700">
</head>
<body lang="en-US" dir="LTR">
<h1>OpenNebula Virtual Infrastructure Manager driver</h1>
<p><a name="toc"></a><a href="http://opennebula.org/">OpenNebula</a>
is a Virtual Infrastructure Manager that controls Virtual Machines (VM) in a pool of distributed resources
by orchestrating network, storage and virtualization technologies. The OpenNebula driver lets you manage your private or hybrid (<a href="http://aws.amazon.com/ec2/">Amazon EC2</a> or <a href="http://www.elastichosts.com/">Elastic Hosts</a> based) cloud using a standard libvirt interface, including the API as well as the related
tools and VM description files.</p>
<h2>
<a name="prereq"></a>Deployment pre-requisites</h2>
<ul>
<li>
<p style="margin-bottom: 0in">A working OpenNebula installation,
version 1.2 or higher.
</p>
</li>
</ul>
<h2>
<a name="uris"></a>Connections to OpenNebula driver</h2>
<p>The Uri of the driver protocol is "one". Some example
connection Uris for the driver are:
</p>
<pre> one:/// (local access)
one+unix:/// (local access)
one://example.com/ (remote access)
one+tcp://example.com/ (remote access, SASl/Kerberos)
one+ssh://user@example.com/ (remote access, SSH tunnelled)
</pre>
<h2>
<a name="xmlconfig"></a>Example domain XML config</h2>
<p>There are some limitations on the XML attributes that may be
specified when interfacing OpenNebula. The following xml example
details the attributes and options supported by the OpenNebula
driver:</p>
<h3>Paravirtualized guest direct kernel boot
</h3>
<pre> &lt;domain type='one'&gt;
&lt;name&gt;vm01&lt;/name&gt;
&lt;memory&gt;32768&lt;/memory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type&gt;linux&lt;/type&gt;
&lt;kernel&gt;/boot/vmlinuz-2.6.24-17-xen&lt;/kernel&gt;
&lt;initrd&gt;/boot/initrd.img-2.6.24-17-xen&lt;/initrd&gt;
&lt;cmdline&gt;&lt;/cmdline&gt;
&lt;root&gt;sda1&lt;/root&gt;
&lt;/os&gt;
&lt;devices&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/images/sgehosts/01/disk.img'/&gt;
&lt;target dev='sda1'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/images/sgehosts/01/swap.img'/&gt;
&lt;target dev='sda2'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='cdrom'&gt;
&lt;source file='/images/iso/cdrom.iso'/&gt;
&lt;target dev='hdc'/&gt;
&lt;readonly/&gt;
&lt;/disk&gt;
&lt;!--BRIDGE--&gt;
&lt;interface type='bridge'&gt;
&lt;source bridge='eth0'/&gt;
&lt;mac address='00:16:3e:5d:c7:9e'/&gt;
&lt;/interface&gt;
&lt;!--ONE Network--&gt;
&lt;interface type='network'&gt;
&lt;source network='onenetwork'/&gt;
&lt;/interface&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>
<b>Note:</b> The "&lt;interface type='network'&gt;" will
attach the interface to a previously configured network (named
<tt>onenetwork</tt>) within the <a href="http://opennebula.org/">OpenNebula</a> system, typically with the
<tt>onevnet</tt> CLI command.</p>
<p><b>Note</b>: OpenNebula supports the simultaneous use of different hypervisors, so you can specify any os type (linux or hvm) supported by your cluster.
</p>
<h2>Links</h2>
<ul>
<li><a href="http://www.opennebula.org/doku.php?id=documentation">OpenNebula Documentation</a>
</li>
<li><a href="http://www.opennebula.org/doku.php?id=documentation:rel1.2:ug">OpenNebula User Guide</a>
</li>
</ul>
</body>
</html>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -142,6 +154,7 @@
</p>
<pre>
openvz:///system (local access)
openvz+unix:///system (local access)
openvz://example.com/system (remote access, TLS/x509)
openvz+tcp://example.com/system (remote access, SASl/Kerberos)
openvz+ssh://root@example.com/system (remote access, SSH tunnelled)

View File

@ -21,6 +21,7 @@
<pre>
openvz:///system (local access)
openvz+unix:///system (local access)
openvz://example.com/system (remote access, TLS/x509)
openvz+tcp://example.com/system (remote access, SASl/Kerberos)
openvz+ssh://root@example.com/system (remote access, SSH tunnelled)

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -126,12 +138,28 @@
</div>
<div id="content">
<h1>QEMU/KVM hypervisor driver</h1>
<ul><li>
<a href="#prereq">Deployment pre-requisites</a>
</li><li>
<a href="#uris">Connections to QEMU driver</a>
</li><li>
<a href="#imex">Import and export of libvirt domain XML configs</a>
<ul><li>
<a href="#xmlimport">Converting from QEMU args to domain XML</a>
</li><li>
<a href="#xmlexport">Converting from domain XML to QEMU args</a>
</li></ul>
</li><li>
<a href="#xmlconfig">Example domain XML config</a>
</li></ul>
<p>
The libvirt QEMU driver can manage any QEMU emulator from version 0.8.1
or later. It can also manage anything that provides the same QEMU command
line syntax and monitor interaction. This includes KVM, and Xenner.
</p>
<h2>Deployment pre-requisites</h2>
<h2>
<a name="prereq" id="prereq">Deployment pre-requisites</a>
</h2>
<ul><li>
<strong>QEMU emulators</strong>: The driver will probe <code>/usr/bin</code>
for the presence of <code>qemu</code>, <code>qemu-system-x86_64</code>,
@ -149,6 +177,112 @@
node. If both are found, then Xen paravirtualized guests can be run using
the KVM hardware acceleration.
</li></ul>
<h2>
<a name="uris" id="uris">Connections to QEMU driver</a>
</h2>
<p>
The libvirt QEMU driver is a multi-instance driver, providing a single
system wide privileged driver (the "system" instance), and per-user
unprivileged drivers (the "session" instance). The of the driver protocol
is "qemu". Some example conection URIs for the libvirt driver are:
</p>
<pre>
qemu:///session (local access to per-user instance)
qemu+unix:///session (local access to per-user instance)
qemu:///system (local access to system instance)
qemu+unix:///system (local access to system instance)
qemu://example.com/system (remote access, TLS/x509)
qemu+tcp://example.com/system (remote access, SASl/Kerberos)
qemu+ssh://root@example.com/system (remote access, SSH tunnelled)
</pre>
<h2>
<a name="imex" id="imex">Import and export of libvirt domain XML configs</a>
</h2>
<p>The QEMU driver currently supports a single native
config format known as <code>qemu-argv</code>. The data for this format
is expected to be a single line first a list of environment variables,
then the QEMu binary name, finally followed by the QEMU command line
arguments</p>
<h3>
<a name="xmlimport" id="xmlimport">Converting from QEMU args to domain XML</a>
</h3>
<p>
The <code>virsh domxml-from-native</code> provides a way to convert an
existing set of QEMU args into a guest description using libvirt Domain XML
that can then be used by libvirt.
</p>
<pre>$ cat &gt; demo.args &lt;&lt;EOF
LC_ALL=C PATH=/bin HOME=/home/test USER=test \
LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \
-nographic -monitor pty -no-acpi -boot c -hda \
/dev/HostVG/QEMUGuest1 -net none -serial none \
-parallel none -usb
EOF
$ virsh domxml-from-native qemu-argv demo.args
&lt;domain type='qemu'&gt;
&lt;uuid&gt;00000000-0000-0000-0000-000000000000&lt;/uuid&gt;
&lt;memory&gt;219136&lt;/memory&gt;
&lt;currentMemory&gt;219136&lt;/currentMemory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type arch='i686' machine='pc'&gt;hvm&lt;/type&gt;
&lt;boot dev='hd'/&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/bin/qemu&lt;/emulator&gt;
&lt;disk type='block' device='disk'&gt;
&lt;source dev='/dev/HostVG/QEMUGuest1'/&gt;
&lt;target dev='hda' bus='ide'/&gt;
&lt;/disk&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>NB, don't include the literral \ in the args, put everything on one line</p>
<h3>
<a name="xmlexport" id="xmlexport">Converting from domain XML to QEMU args</a>
</h3>
<p>
The <code>virsh domxml-to-native</code> provides a way to convert a
guest description using libvirt Domain XML, into a set of QEMU args
that can be run manually.
</p>
<pre>$ cat &gt; demo.xml &lt;&lt;EOF
&lt;domain type='qemu'&gt;
&lt;name&gt;QEMUGuest1&lt;/name&gt;
&lt;uuid&gt;c7a5fdbd-edaf-9455-926a-d65c16db1809&lt;/uuid&gt;
&lt;memory&gt;219200&lt;/memory&gt;
&lt;currentMemory&gt;219200&lt;/currentMemory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type arch='i686' machine='pc'&gt;hvm&lt;/type&gt;
&lt;boot dev='hd'/&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/bin/qemu&lt;/emulator&gt;
&lt;disk type='block' device='disk'&gt;
&lt;source dev='/dev/HostVG/QEMUGuest1'/&gt;
&lt;target dev='hda' bus='ide'/&gt;
&lt;/disk&gt;
&lt;/devices&gt;
&lt;/domain&gt;
EOF
$ virsh domxml-to-native qemu-argv demo.xml
LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \
USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
-no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \
-monitor pty -no-acpi -boot c -drive \
file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \
-serial none -parallel none -usb
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig">Example domain XML config</a>
</h2>
@ -200,7 +334,7 @@
&lt;source network='default'/&gt;
&lt;mac address='24:42:53:21:52:45'/&gt;
&lt;/interface&gt;
&lt;graphics type='vnc' port='-1'/&gt;
&lt;graphics type='vnc' port='-1' keymap='de'/&gt;
&lt;/devices&gt;
&lt;/domain&gt;</pre>
<h3>Xen paravirtualized guests with hardware acceleration</h3>

View File

@ -2,13 +2,15 @@
<body>
<h1>QEMU/KVM hypervisor driver</h1>
<ul id="toc"></ul>
<p>
The libvirt QEMU driver can manage any QEMU emulator from version 0.8.1
or later. It can also manage anything that provides the same QEMU command
line syntax and monitor interaction. This includes KVM, and Xenner.
</p>
<h2>Deployment pre-requisites</h2>
<h2><a name="prereq">Deployment pre-requisites</a></h2>
<ul>
<li>
@ -32,6 +34,116 @@
</li>
</ul>
<h2><a name="uris">Connections to QEMU driver</a></h2>
<p>
The libvirt QEMU driver is a multi-instance driver, providing a single
system wide privileged driver (the "system" instance), and per-user
unprivileged drivers (the "session" instance). The of the driver protocol
is "qemu". Some example conection URIs for the libvirt driver are:
</p>
<pre>
qemu:///session (local access to per-user instance)
qemu+unix:///session (local access to per-user instance)
qemu:///system (local access to system instance)
qemu+unix:///system (local access to system instance)
qemu://example.com/system (remote access, TLS/x509)
qemu+tcp://example.com/system (remote access, SASl/Kerberos)
qemu+ssh://root@example.com/system (remote access, SSH tunnelled)
</pre>
<h2><a name="imex">Import and export of libvirt domain XML configs</a></h2>
<p>The QEMU driver currently supports a single native
config format known as <code>qemu-argv</code>. The data for this format
is expected to be a single line first a list of environment variables,
then the QEMu binary name, finally followed by the QEMU command line
arguments</p>
<h3><a name="xmlimport">Converting from QEMU args to domain XML</a></h3>
<p>
The <code>virsh domxml-from-native</code> provides a way to convert an
existing set of QEMU args into a guest description using libvirt Domain XML
that can then be used by libvirt.
</p>
<pre>$ cat &gt; demo.args &lt;&lt;EOF
LC_ALL=C PATH=/bin HOME=/home/test USER=test \
LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \
-nographic -monitor pty -no-acpi -boot c -hda \
/dev/HostVG/QEMUGuest1 -net none -serial none \
-parallel none -usb
EOF
$ virsh domxml-from-native qemu-argv demo.args
&lt;domain type='qemu'&gt;
&lt;uuid&gt;00000000-0000-0000-0000-000000000000&lt;/uuid&gt;
&lt;memory&gt;219136&lt;/memory&gt;
&lt;currentMemory&gt;219136&lt;/currentMemory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type arch='i686' machine='pc'&gt;hvm&lt;/type&gt;
&lt;boot dev='hd'/&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/bin/qemu&lt;/emulator&gt;
&lt;disk type='block' device='disk'&gt;
&lt;source dev='/dev/HostVG/QEMUGuest1'/&gt;
&lt;target dev='hda' bus='ide'/&gt;
&lt;/disk&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<p>NB, don't include the literral \ in the args, put everything on one line</p>
<h3><a name="xmlexport">Converting from domain XML to QEMU args</a></h3>
<p>
The <code>virsh domxml-to-native</code> provides a way to convert a
guest description using libvirt Domain XML, into a set of QEMU args
that can be run manually.
</p>
<pre>$ cat &gt; demo.xml &lt;&lt;EOF
&lt;domain type='qemu'&gt;
&lt;name&gt;QEMUGuest1&lt;/name&gt;
&lt;uuid&gt;c7a5fdbd-edaf-9455-926a-d65c16db1809&lt;/uuid&gt;
&lt;memory&gt;219200&lt;/memory&gt;
&lt;currentMemory&gt;219200&lt;/currentMemory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;os&gt;
&lt;type arch='i686' machine='pc'&gt;hvm&lt;/type&gt;
&lt;boot dev='hd'/&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;destroy&lt;/on_crash&gt;
&lt;devices&gt;
&lt;emulator&gt;/usr/bin/qemu&lt;/emulator&gt;
&lt;disk type='block' device='disk'&gt;
&lt;source dev='/dev/HostVG/QEMUGuest1'/&gt;
&lt;target dev='hda' bus='ide'/&gt;
&lt;/disk&gt;
&lt;/devices&gt;
&lt;/domain&gt;
EOF
$ virsh domxml-to-native qemu-argv demo.xml
LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \
USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
-no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \
-monitor pty -no-acpi -boot c -drive \
file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \
-serial none -parallel none -usb
</pre>
<h2><a name="xmlconfig">Example domain XML config</a></h2>
<h3>QEMU emulated guest on x86_64</h3>
@ -85,7 +197,7 @@
&lt;source network='default'/&gt;
&lt;mac address='24:42:53:21:52:45'/&gt;
&lt;/interface&gt;
&lt;graphics type='vnc' port='-1'/&gt;
&lt;graphics type='vnc' port='-1' keymap='de'/&gt;
&lt;/devices&gt;
&lt;/domain&gt;</pre>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -126,6 +138,22 @@
</div>
<div id="content">
<h1>Test "mock" driver</h1>
<h2>Connections to Test driver</h2>
<p>
The libvirt Test driver is a per-process fake hypervisor driver,
with a driver name of 'test'. The driver maintains all its state
in memory. It can start with a pre-configured default config, or
be given a path to a alternate config. Some example conection URIs
for the libvirt driver are:
</p>
<pre>
test:///default (local access, default config)
test:///path/to/driver/config.xml (local access, custom config)
test+unix:///default (local access, default config, via daemon)
test://example.com/default (remote access, TLS/x509)
test+tcp://example.com/default (remote access, SASl/Kerberos)
test+ssh://root@example.com/default (remote access, SSH tunnelled)
</pre>
</div>
</div>
<div id="footer">

View File

@ -1,5 +1,25 @@
<html>
<body>
<h1>Test "mock" driver</h1>
<h2>Connections to Test driver</h2>
<p>
The libvirt Test driver is a per-process fake hypervisor driver,
with a driver name of 'test'. The driver maintains all its state
in memory. It can start with a pre-configured default config, or
be given a path to a alternate config. Some example conection URIs
for the libvirt driver are:
</p>
<pre>
test:///default (local access, default config)
test:///path/to/driver/config.xml (local access, custom config)
test+unix:///default (local access, default config, via daemon)
test://example.com/default (remote access, TLS/x509)
test+tcp://example.com/default (remote access, SASl/Kerberos)
test+ssh://root@example.com/default (remote access, SSH tunnelled)
</pre>
</body>
</html>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -146,8 +158,11 @@
URIs are
</p>
<pre>
uml:///system (local access, system instance)
uml:///session (local access, session instance)
uml:///session (local access to per-user instance)
uml+unix:///session (local access to per-user instance)
uml:///system (local access to system instance)
uml+unix:///system (local access to system instance)
uml://example.com/system (remote access, TLS/x509)
uml+tcp://example.com/system (remote access, SASl/Kerberos)
uml+ssh://root@example.com/system (remote access, SSH tunnelled)

View File

@ -25,8 +25,11 @@
</p>
<pre>
uml:///system (local access, system instance)
uml:///session (local access, session instance)
uml:///session (local access to per-user instance)
uml+unix:///session (local access to per-user instance)
uml:///system (local access to system instance)
uml+unix:///system (local access to system instance)
uml://example.com/system (remote access, TLS/x509)
uml+tcp://example.com/system (remote access, SASl/Kerberos)
uml+ssh://root@example.com/system (remote access, SSH tunnelled)

258
docs/drvvbox.html Normal file
View File

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from drvvbox.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: VirtualBox hypervisor driver</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="intro.html">Architecture</a>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="active" href="drivers.html">Drivers</a>
<ul class="l2"><li>
<div>
<a title="Driver the Xen hypervisor" class="inactive" href="drvxen.html">Xen</a>
</div>
</li><li>
<div>
<a title="Driver for QEMU, KQEMU, KVM and Xenner" class="inactive" href="drvqemu.html">QEMU / KVM</a>
</div>
</li><li>
<div>
<a title="Driver for the Linux native container API" class="inactive" href="drvlxc.html">Linux Container</a>
</div>
</li><li>
<div>
<a title="Psuedo-driver simulating APIs in memory for test suites" class="inactive" href="drvtest.html">Test</a>
</div>
</li><li>
<div>
<a title="Driver providing secure remote to the libvirt APIs" class="inactive" href="drvremote.html">Remote</a>
</div>
</li><li>
<div>
<a title="Driver for the OpenVZ container technology" class="inactive" href="drvopenvz.html">OpenVZ</a>
</div>
</li><li>
<div>
<a title="Driver for the User Mode Linux technology" class="inactive" href="drvuml.html">UML</a>
</div>
</li><li>
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<span class="active">VirtualBox</span>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>VirtualBox hypervisor driver</h1>
<p>
The libvirt VirtualBox driver can manage any VirtualBox version
from version 2.2 onwards.
</p>
<h2>Connections to VirtualBox driver</h2>
<p>
The libvirt VirtualBox driver provides per-user drivers (the "session" instance).
The uri of the driver protocol is "vbox". Some example connection URIs for the driver are:
</p>
<pre>
vbox:///session (local access to per-user instance)
vbox+unix:///session (local access to per-user instance)
vbox+tcp://user@example.com/session (remote access, SASl/Kerberos)
vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig">Example domain XML config</a>
</h2>
<pre>
&lt;domain type='vbox'&gt;
&lt;name&gt;vbox&lt;/name&gt;
&lt;uuid&gt;4dab22b31d52d8f32516782e98ab3fa0&lt;/uuid&gt;
&lt;os&gt;
&lt;type&gt;hvm&lt;/type&gt;
&lt;boot dev='cdrom'/&gt;
&lt;boot dev='hd'/&gt;
&lt;boot dev='fd'/&gt;
&lt;boot dev='network'/&gt;
&lt;/os&gt;
&lt;memory&gt;654321&lt;/memory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;features&gt;
&lt;pae/&gt;
&lt;acpi/&gt;
&lt;apic/&gt;
&lt;/features&gt;
&lt;devices&gt;
&lt;disk type='file' device='cdrom'&gt;
&lt;source file='/home/user/Downloads/slax-6.0.9.iso'/&gt;
&lt;target dev='hdc'/&gt;
&lt;readonly/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/home/user/tmp/vbox.vdi'/&gt;
&lt;target dev='hdd'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='floppy'&gt;
&lt;source file='/home/user/tmp/WIN98C.IMG'/&gt;
&lt;target dev='fda'/&gt;
&lt;/disk&gt;
&lt;!--BRIDGE--&gt;
&lt;interface type='bridge'&gt;
&lt;source bridge='eth0'/&gt;
&lt;mac address='00:16:3e:5d:c7:9e'/&gt;
&lt;model type='am79c973'/&gt;
&lt;/interface&gt;
&lt;!--NAT--&gt;
&lt;interface type='user'&gt;
&lt;mac address='56:16:3e:5d:c7:9e'/&gt;
&lt;model type='82540eM'/&gt;
&lt;/interface&gt;
&lt;sound model='sb16'/&gt;
&lt;parallel type='dev'&gt;
&lt;source path='/dev/pts/1'/&gt;
&lt;target port='0'/&gt;
&lt;/parallel&gt;
&lt;parallel type='dev'&gt;
&lt;source path='/dev/pts/2'/&gt;
&lt;target port='1'/&gt;
&lt;/parallel&gt;
&lt;serial type="dev"&gt;
&lt;source path="/dev/ttyS0"/&gt;
&lt;target port="0"/&gt;
&lt;/serial&gt;
&lt;serial type="pipe"&gt;
&lt;source path="/tmp/serial.txt"/&gt;
&lt;target port="1"/&gt;
&lt;/serial&gt;
&lt;hostdev mode='subsystem' type='usb'&gt;
&lt;source&gt;
&lt;vendor id='0x1234'/&gt;
&lt;product id='0xbeef'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
&lt;hostdev mode='subsystem' type='usb'&gt;
&lt;source&gt;
&lt;vendor id='0x4321'/&gt;
&lt;product id='0xfeeb'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

119
docs/drvvbox.html.in Normal file
View File

@ -0,0 +1,119 @@
<html>
<body>
<h1>VirtualBox hypervisor driver</h1>
<p>
The libvirt VirtualBox driver can manage any VirtualBox version
from version 2.2 onwards.
</p>
<h2>Connections to VirtualBox driver</h2>
<p>
The libvirt VirtualBox driver provides per-user drivers (the "session" instance).
The uri of the driver protocol is "vbox". Some example connection URIs for the driver are:
</p>
<pre>
vbox:///session (local access to per-user instance)
vbox+unix:///session (local access to per-user instance)
vbox+tcp://user@example.com/session (remote access, SASl/Kerberos)
vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
</pre>
<h2><a name="xmlconfig">Example domain XML config</a></h2>
<pre>
&lt;domain type='vbox'&gt;
&lt;name&gt;vbox&lt;/name&gt;
&lt;uuid&gt;4dab22b31d52d8f32516782e98ab3fa0&lt;/uuid&gt;
&lt;os&gt;
&lt;type&gt;hvm&lt;/type&gt;
&lt;boot dev='cdrom'/&gt;
&lt;boot dev='hd'/&gt;
&lt;boot dev='fd'/&gt;
&lt;boot dev='network'/&gt;
&lt;/os&gt;
&lt;memory&gt;654321&lt;/memory&gt;
&lt;vcpu&gt;1&lt;/vcpu&gt;
&lt;features&gt;
&lt;pae/&gt;
&lt;acpi/&gt;
&lt;apic/&gt;
&lt;/features&gt;
&lt;devices&gt;
&lt;disk type='file' device='cdrom'&gt;
&lt;source file='/home/user/Downloads/slax-6.0.9.iso'/&gt;
&lt;target dev='hdc'/&gt;
&lt;readonly/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;source file='/home/user/tmp/vbox.vdi'/&gt;
&lt;target dev='hdd'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='floppy'&gt;
&lt;source file='/home/user/tmp/WIN98C.IMG'/&gt;
&lt;target dev='fda'/&gt;
&lt;/disk&gt;
&lt;!--BRIDGE--&gt;
&lt;interface type='bridge'&gt;
&lt;source bridge='eth0'/&gt;
&lt;mac address='00:16:3e:5d:c7:9e'/&gt;
&lt;model type='am79c973'/&gt;
&lt;/interface&gt;
&lt;!--NAT--&gt;
&lt;interface type='user'&gt;
&lt;mac address='56:16:3e:5d:c7:9e'/&gt;
&lt;model type='82540eM'/&gt;
&lt;/interface&gt;
&lt;sound model='sb16'/&gt;
&lt;parallel type='dev'&gt;
&lt;source path='/dev/pts/1'/&gt;
&lt;target port='0'/&gt;
&lt;/parallel&gt;
&lt;parallel type='dev'&gt;
&lt;source path='/dev/pts/2'/&gt;
&lt;target port='1'/&gt;
&lt;/parallel&gt;
&lt;serial type="dev"&gt;
&lt;source path="/dev/ttyS0"/&gt;
&lt;target port="0"/&gt;
&lt;/serial&gt;
&lt;serial type="pipe"&gt;
&lt;source path="/tmp/serial.txt"/&gt;
&lt;target port="1"/&gt;
&lt;/serial&gt;
&lt;hostdev mode='subsystem' type='usb'&gt;
&lt;source&gt;
&lt;vendor id='0x1234'/&gt;
&lt;product id='0xbeef'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
&lt;hostdev mode='subsystem' type='usb'&gt;
&lt;source&gt;
&lt;vendor id='0x4321'/&gt;
&lt;product id='0xfeeb'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
</body>
</html>

View File

@ -86,6 +86,14 @@
<div>
<a title="Driver for the storage management APIs" class="inactive" href="storage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Driver for VirtualBox" class="inactive" href="drvvbox.html">VirtualBox</a>
</div>
</li><li>
<div>
<a title="Driver for OpenNebula" class="inactive" href="drvone.html">OpenNebula</a>
</div>
</li></ul>
</div>
</li><li>
@ -96,6 +104,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -126,11 +138,27 @@
</div>
<div id="content">
<h1>Xen hypervisor driver</h1>
<ul><li>
<a href="#prereq">Deployment pre-requisites</a>
</li><li>
<a href="#uri">Connections to Xen driver</a>
</li><li>
<a href="#imex">Import and export of libvirt domain XML configs</a>
<ul><li>
<a href="#xmlimport">Converting from XM config files to domain XML</a>
</li><li>
<a href="#xmlexport">Converting from domain XML to XM config files</a>
</li></ul>
</li><li>
<a href="#xmlconfig">Example domain XML config</a>
</li></ul>
<p>
The libvirt Xen driver provides the ability to manage virtual machines
on any Xen release from 3.0.1 onwards.
</p>
<h2>Deployment pre-requisites</h2>
<h2>
<a name="prereq" id="prereq">Deployment pre-requisites</a>
</h2>
<p>
The libvirt Xen driver uses a combination of channels to manage Xen
virtual machines.
@ -159,6 +187,103 @@
the <code>/etc/xen</code> directory. It is important not to place
any other non-config files in this directory.
</li></ul>
<h2>
<a name="uri" id="uri">Connections to Xen driver</a>
</h2>
<p>
The libvirt Xen driver is a single-instance privileged driver,
with a driver name of 'xen'. Some example conection URIs for
the libvirt driver are:
</p>
<pre>
xen:/// (local access, direct)
xen+unix:/// (local access, via daemon)
xen://example.com/ (remote access, TLS/x509)
xen+tcp://example.com/ (remote access, SASl/Kerberos)
xen+ssh://root@example.com/ (remote access, SSH tunnelled)
</pre>
<h2>
<a name="imex" id="imex">Import and export of libvirt domain XML configs</a>
</h2>
<p>The Xen driver currently supports two native
config formats. The first known as <code>xen-xm</code> is the format
used by the XM tool for files in <code>/etc/xen</code>. The second
known as <code>xen-sxpr</code>, is the format used for interacting
with the XenD's legacy HTTP RPC service.</p>
<h3>
<a name="xmlimport" id="xmlimport">Converting from XM config files to domain XML</a>
</h3>
<p>
The <code>virsh domxml-from-native</code> provides a way to convert an
existing set of XM config files into a guest description using libvirt Domain XML
that can then be used by libvirt.
</p>
<pre>$ virsh -c xen:/// domxml-from-native xen-xm rhel5.cfg
&lt;domain type='xen'&gt;
&lt;name&gt;rhel5pv&lt;/name&gt;
&lt;uuid&gt;8f07fe28-753f-2729-d76d-bdbd892f949a&lt;/uuid&gt;
&lt;memory&gt;2560000&lt;/memory&gt;
&lt;currentMemory&gt;307200&lt;/currentMemory&gt;
&lt;vcpu&gt;4&lt;/vcpu&gt;
&lt;bootloader&gt;/usr/bin/pygrub&lt;/bootloader&gt;
&lt;os&gt;
&lt;type arch='x86_64' machine='xenpv'&gt;linux&lt;/type&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;restart&lt;/on_crash&gt;
&lt;devices&gt;
&lt;disk type='file' device='disk'&gt;
&lt;driver name='tap' type='aio'/&gt;
&lt;source file='/var/lib/xen/images/rhel5pv.img'/&gt;
&lt;target dev='xvda' bus='xen'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;driver name='tap' type='qcow'/&gt;
&lt;source file='/root/qcow1-xen.img'/&gt;
&lt;target dev='xvdd' bus='xen'/&gt;
&lt;/disk&gt;
&lt;interface type='bridge'&gt;
&lt;mac address='00:16:3e:60:36:ba'/&gt;
&lt;source bridge='xenbr0'/&gt;
&lt;/interface&gt;
&lt;console type='pty'&gt;
&lt;target port='0'/&gt;
&lt;/console&gt;
&lt;input type='mouse' bus='xen'/&gt;
&lt;graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<h3>
<a name="xmlexport" id="xmlexport">Converting from domain XML to XM config files</a>
</h3>
<p>
The <code>virsh domxml-to-native</code> provides a way to convert a
guest description using libvirt Domain XML, into the XM config file
format.
</p>
<pre># virsh -c xen:/// domxml-to-native xen-xm rhel5pv.xml
name = "rhel5pv"
uuid = "8f07fe28-753f-2729-d76d-bdbd892f949a"
maxmem = 2500
memory = 300
vcpus = 4
bootloader = "/usr/bin/pygrub"
kernel = "/var/lib/xen/boot_kernel.0YK-cS"
ramdisk = "/var/lib/xen/boot_ramdisk.vWgrxK"
extra = "ro root=/dev/VolGroup00/LogVol00 rhgb quiet"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
sdl = 0
vnc = 1
vncunused = 1
vnclisten = "0.0.0.0"
disk = [ "tap:aio:/var/lib/xen/images/rhel5pv.img,xvda,w", "tap:qcow:/root/qcow1-xen.img,xvdd,w" ]
vif = [ "mac=00:16:3e:60:36:ba,bridge=virbr0,script=vif-bridge,vifname=vif5.0" ]
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig">Example domain XML config</a>
</h2>

View File

@ -2,12 +2,14 @@
<body>
<h1>Xen hypervisor driver</h1>
<ul id="toc"></ul>
<p>
The libvirt Xen driver provides the ability to manage virtual machines
on any Xen release from 3.0.1 onwards.
</p>
<h2>Deployment pre-requisites</h2>
<h2><a name="prereq">Deployment pre-requisites</a></h2>
<p>
The libvirt Xen driver uses a combination of channels to manage Xen
@ -44,6 +46,106 @@
</li>
</ul>
<h2><a name="uri">Connections to Xen driver</a></h2>
<p>
The libvirt Xen driver is a single-instance privileged driver,
with a driver name of 'xen'. Some example conection URIs for
the libvirt driver are:
</p>
<pre>
xen:/// (local access, direct)
xen+unix:/// (local access, via daemon)
xen://example.com/ (remote access, TLS/x509)
xen+tcp://example.com/ (remote access, SASl/Kerberos)
xen+ssh://root@example.com/ (remote access, SSH tunnelled)
</pre>
<h2><a name="imex">Import and export of libvirt domain XML configs</a></h2>
<p>The Xen driver currently supports two native
config formats. The first known as <code>xen-xm</code> is the format
used by the XM tool for files in <code>/etc/xen</code>. The second
known as <code>xen-sxpr</code>, is the format used for interacting
with the XenD's legacy HTTP RPC service.</p>
<h3><a name="xmlimport">Converting from XM config files to domain XML</a></h3>
<p>
The <code>virsh domxml-from-native</code> provides a way to convert an
existing set of XM config files into a guest description using libvirt Domain XML
that can then be used by libvirt.
</p>
<pre>$ virsh -c xen:/// domxml-from-native xen-xm rhel5.cfg
&lt;domain type='xen'&gt;
&lt;name&gt;rhel5pv&lt;/name&gt;
&lt;uuid&gt;8f07fe28-753f-2729-d76d-bdbd892f949a&lt;/uuid&gt;
&lt;memory&gt;2560000&lt;/memory&gt;
&lt;currentMemory&gt;307200&lt;/currentMemory&gt;
&lt;vcpu&gt;4&lt;/vcpu&gt;
&lt;bootloader&gt;/usr/bin/pygrub&lt;/bootloader&gt;
&lt;os&gt;
&lt;type arch='x86_64' machine='xenpv'&gt;linux&lt;/type&gt;
&lt;/os&gt;
&lt;clock offset='utc'/&gt;
&lt;on_poweroff&gt;destroy&lt;/on_poweroff&gt;
&lt;on_reboot&gt;restart&lt;/on_reboot&gt;
&lt;on_crash&gt;restart&lt;/on_crash&gt;
&lt;devices&gt;
&lt;disk type='file' device='disk'&gt;
&lt;driver name='tap' type='aio'/&gt;
&lt;source file='/var/lib/xen/images/rhel5pv.img'/&gt;
&lt;target dev='xvda' bus='xen'/&gt;
&lt;/disk&gt;
&lt;disk type='file' device='disk'&gt;
&lt;driver name='tap' type='qcow'/&gt;
&lt;source file='/root/qcow1-xen.img'/&gt;
&lt;target dev='xvdd' bus='xen'/&gt;
&lt;/disk&gt;
&lt;interface type='bridge'&gt;
&lt;mac address='00:16:3e:60:36:ba'/&gt;
&lt;source bridge='xenbr0'/&gt;
&lt;/interface&gt;
&lt;console type='pty'&gt;
&lt;target port='0'/&gt;
&lt;/console&gt;
&lt;input type='mouse' bus='xen'/&gt;
&lt;graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/&gt;
&lt;/devices&gt;
&lt;/domain&gt;
</pre>
<h3><a name="xmlexport">Converting from domain XML to XM config files</a></h3>
<p>
The <code>virsh domxml-to-native</code> provides a way to convert a
guest description using libvirt Domain XML, into the XM config file
format.
</p>
<pre># virsh -c xen:/// domxml-to-native xen-xm rhel5pv.xml
name = "rhel5pv"
uuid = "8f07fe28-753f-2729-d76d-bdbd892f949a"
maxmem = 2500
memory = 300
vcpus = 4
bootloader = "/usr/bin/pygrub"
kernel = "/var/lib/xen/boot_kernel.0YK-cS"
ramdisk = "/var/lib/xen/boot_ramdisk.vWgrxK"
extra = "ro root=/dev/VolGroup00/LogVol00 rhgb quiet"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
sdl = 0
vnc = 1
vncunused = 1
vnclisten = "0.0.0.0"
disk = [ "tap:aio:/var/lib/xen/images/rhel5pv.img,xvda,w", "tap:qcow:/root/qcow1-xen.img,xvdd,w" ]
vif = [ "mac=00:16:3e:60:36:ba,bridge=virbr0,script=vif-bridge,vifname=vif5.0" ]
</pre>
<h2><a name="xmlconfig">Example domain XML config</a></h2>
<p>

View File

@ -1,4 +1,3 @@
*.exe
.memdump
Makefile.in
Makefile

View File

@ -1,4 +1,3 @@
*.exe
.memdump
Makefile.in
Makefile

View File

@ -20,7 +20,7 @@ index.html: examples.xml examples.xsl $(top_srcdir)/docs/site.xsl
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml \
$(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
$(srcdir)/*.xsl $(DESTDIR)$(HTML_DIR)
EXTRA_DIST=examples.xsl index.py examples.xml

View File

@ -218,8 +218,6 @@ def dump_sections(output):
def dump_Makefile():
for file in glob.glob('*.xml'):
extras.append(file)
for file in glob.glob('*.res'):
extras.append(file)
Makefile="""# -*- buffer-read-only: t -*- vi: set ro:
# Beware this is autogenerated by index.py
SUBDIRS=python
@ -243,7 +241,7 @@ index.html: examples.xml examples.xsl $(top_srcdir)/docs/site.xsl
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml \\
$(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
$(srcdir)/*.xsl $(DESTDIR)$(HTML_DIR)
"""
EXTRA_DIST= string.join(extras, ' ')

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -140,7 +144,7 @@
<ul><li>
<a href="#elementsDisks">Hard drives, floppy disks, CDROMs</a>
</li><li>
<a href="#elementsUSB">USB devices</a>
<a href="#elementsUSB">USB and PCI devices</a>
</li><li>
<a href="#elementsNICS">Network interfaces</a>
<ul><li>
@ -183,6 +187,8 @@
</li><li>
<a href="#elementsCharUNIX">UNIX domain socket client/server</a>
</li></ul>
</li><li>
<a href="#elementsSound">Sound devices</a>
</li></ul>
</li></ul>
</li><li>
@ -396,7 +402,7 @@
</p>
<pre>
...
&lt;clock sync="localtime"/&gt;
&lt;clock offset="localtime"/&gt;
...</pre>
<dl><dt><code>clock</code></dt><dd>The <code>sync</code> attribute takes either "utc" or
"localtime" to specify how the guest clock is initialized
@ -464,11 +470,12 @@
attribute provides the sub-type. <span class="since">Since 0.1.8</span>
</dd></dl>
<h4>
<a name="elementsUSB" id="elementsUSB">USB devices</a>
<a name="elementsUSB" id="elementsUSB">USB and PCI devices</a>
</h4>
<p>
USB devices attached to the host can be passed through to the guest using
the <code>hostdev</code> element. <span class="since">since after 0.4.4</span>
USB and PCI devices attached to the host can be passed through to the guest using
the <code>hostdev</code> element. <span class="since">since after
0.4.4 for USB and 0.6.0 for PCI (KVM only)</span>:
</p>
<pre>
...
@ -477,22 +484,43 @@
&lt;vendor id='0x1234'/&gt;
&lt;product id='0xbeef'/&gt;
&lt;/source&gt;
&lt;/disk&gt;
&lt;/hostdev&gt;
...</pre>
<p>or:</p>
<pre>
...
&lt;hostdev mode='subsystem' type='pci'&gt;
&lt;source&gt;
&lt;address bus='0x06' slot='0x02' function='0x0'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
...</pre>
<dl><dt><code>hostdev</code></dt><dd>The <code>hostdev</code> element is the main container for describing
host devices. For usb device passthrough <code>mode</code> is always
"subsystem" and <code>type</code> is "usb".
"subsystem" and <code>type</code> is "usb" for an USB device and "pci"
for a PCI device..
</dd><dt><code>source</code></dt><dd>The source element describes the device as seen from the host.
The USB device can either be addressed by vendor / product id using the
<code>vendor</code> and <code>product</code> elements or by the device's
address on the hosts using the <code>address</code> element.</dd><dt><code>vendor</code>, <code>product</code></dt><dd>The <code>vendor</code> and <code>product</code> elements each have an
address on the hosts using the <code>address</code> element.
PCI devices on the other hand can only be described by their
<code>address</code></dd><dt><code>vendor</code>, <code>product</code></dt><dd>The <code>vendor</code> and <code>product</code> elements each have an
<code>id</code> attribute that specifies the USB vendor and product id.
The ids can be given in decimal, hexadecimal (starting with 0x) or
octal (starting with 0) form.</dd><dt><code>address</code></dt><dd>The <code>address</code> element has a <code>bus</code> and
<code>device</code> attribute to specify the USB bus and device number
the device appears at on the host. The values of these attributes can
be given in decimal, hexadecimal (starting with 0x) or octal (starting
with 0) form.</dd></dl>
octal (starting with 0) form.</dd><dt><code>address</code></dt><dd>The <code>address</code> element for USB devices has a
<code>bus</code> and <code>device</code> attribute to specify the
USB bus and device number the device appears at on the host.
The values of these attributes can be given in decimal, hexadecimal
(starting with 0x) or octal (starting with 0) form.
For PCI devices the element carries 3 attributes allowing to designate
the device as can be found with the <code>lspci</code> or
with <code>virsh nodedev-list</code>. The
<code>bus</code> attribute allows the hexadecimal values 0 to ff, the
<code>slot</code> attribute allows the hexadecimal values 0 to 1f, and
the <code>function</code> attribute allows the hexadecimal values 0 to
7. There is also an optional <code>domain</code> attribute for the
PCI domain, with hexadecimal values 0 to ffff, but it is currently
not used by qemu.</dd></dl>
<h4>
<a name="elementsNICS" id="elementsNICS">Network interfaces</a>
</h4>
@ -713,13 +741,18 @@ qemu-kvm -net nic,model=? /dev/null
<dl><dt><code>graphics</code></dt><dd>The <code>graphics</code> element has a mandatory <code>type</code>
attribute which takes the value "sdl" or "vnc". The former displays
a window on the host desktop, while the latter activates a VNC server.
The former accepts 3 optional arguments: a <code>display</code>
attribute for the display to use, an <code>xauth</code> attribute for
the authentication identifier, and an optional <code>fullscreen</code>
attribute accepting values 'yes' or 'no'.
If the latter is used the <code>port</code> attribute specifies the TCP
port number (with -1 as legacy syntax indicating that it should be
auto-allocated). The <code>autoport</code> attribute is the new
preferred syntax for indicating autoallocation of the TCP port to use.
The <code>listen</code> attribute is an IP address for the server to
listen on. The <code>password</code> attribute provides a VNC password
in clear text.</dd></dl>
listen on. The <code>passwd</code> attribute provides a VNC password
in clear text. The <code>keymap</code> attribute specifies the keymap
to use.</dd></dl>
<h4>
<a name="elementsConsole" id="elementsConsole">Consoles, serial &amp; parallel devices</a>
</h4>
@ -889,6 +922,24 @@ qemu-kvm -net nic,model=? /dev/null
&lt;target port="1"/&gt;
&lt;/serial&gt;
...</pre>
<h4>
<a name="elementsSound" id="elementsSound">Sound devices</a>
</h4>
<p>
A virtual sound card can be attached to the host via the
<code>sound</code> element. <span class="since">Since 0.4.3</span>
</p>
<pre>
...
&lt;sound model='es1370'/&gt;
...</pre>
<dl><dt><code>sound</code></dt><dd>
The <code>sound</code> element has one mandatory attribute,
<code>model</code>, which specifies what real sound device is emulated.
Valid values are specific to the underlying hypervisor, though typical
choices are 'es1370', 'sb16', and 'ac97'
(<span class="since">'ac97' only since 0.6.0</span>)
</dd></dl>
<h2>
<a name="examples" id="examples">Example configs</a>
</h2>

View File

@ -287,7 +287,7 @@
<pre>
...
&lt;clock sync="localtime"/&gt;
&lt;clock offset="localtime"/&gt;
...</pre>
<dl>
@ -375,11 +375,12 @@
</dd>
</dl>
<h4><a name="elementsUSB">USB devices</a></h4>
<h4><a name="elementsUSB">USB and PCI devices</a></h4>
<p>
USB devices attached to the host can be passed through to the guest using
the <code>hostdev</code> element. <span class="since">since after 0.4.4</span>
USB and PCI devices attached to the host can be passed through to the guest using
the <code>hostdev</code> element. <span class="since">since after
0.4.4 for USB and 0.6.0 for PCI (KVM only)</span>:
</p>
<pre>
@ -389,30 +390,51 @@
&lt;vendor id='0x1234'/&gt;
&lt;product id='0xbeef'/&gt;
&lt;/source&gt;
&lt;/disk&gt;
&lt;/hostdev&gt;
...</pre>
<p>or:</p>
<pre>
...
&lt;hostdev mode='subsystem' type='pci'&gt;
&lt;source&gt;
&lt;address bus='0x06' slot='0x02' function='0x0'/&gt;
&lt;/source&gt;
&lt;/hostdev&gt;
...</pre>
<dl>
<dt><code>hostdev</code></dt>
<dd>The <code>hostdev</code> element is the main container for describing
host devices. For usb device passthrough <code>mode</code> is always
"subsystem" and <code>type</code> is "usb".
"subsystem" and <code>type</code> is "usb" for an USB device and "pci"
for a PCI device..
<dt><code>source</code></dt>
<dd>The source element describes the device as seen from the host.
The USB device can either be addressed by vendor / product id using the
<code>vendor</code> and <code>product</code> elements or by the device's
address on the hosts using the <code>address</code> element.</dd>
address on the hosts using the <code>address</code> element.
PCI devices on the other hand can only be described by their
<code>address</code></dd>
<dt><code>vendor</code>, <code>product</code></dt>
<dd>The <code>vendor</code> and <code>product</code> elements each have an
<code>id</code> attribute that specifies the USB vendor and product id.
The ids can be given in decimal, hexadecimal (starting with 0x) or
octal (starting with 0) form.</dd>
<dt><code>address</code></dt>
<dd>The <code>address</code> element has a <code>bus</code> and
<code>device</code> attribute to specify the USB bus and device number
the device appears at on the host. The values of these attributes can
be given in decimal, hexadecimal (starting with 0x) or octal (starting
with 0) form.</dd>
<dd>The <code>address</code> element for USB devices has a
<code>bus</code> and <code>device</code> attribute to specify the
USB bus and device number the device appears at on the host.
The values of these attributes can be given in decimal, hexadecimal
(starting with 0x) or octal (starting with 0) form.
For PCI devices the element carries 3 attributes allowing to designate
the device as can be found with the <code>lspci</code> or
with <code>virsh nodedev-list</code>. The
<code>bus</code> attribute allows the hexadecimal values 0 to ff, the
<code>slot</code> attribute allows the hexadecimal values 0 to 1f, and
the <code>function</code> attribute allows the hexadecimal values 0 to
7. There is also an optional <code>domain</code> attribute for the
PCI domain, with hexadecimal values 0 to ffff, but it is currently
not used by qemu.</dd>
</dl>
<h4><a name="elementsNICS">Network interfaces</a></h4>
@ -657,13 +679,18 @@ qemu-kvm -net nic,model=? /dev/null
<dd>The <code>graphics</code> element has a mandatory <code>type</code>
attribute which takes the value "sdl" or "vnc". The former displays
a window on the host desktop, while the latter activates a VNC server.
The former accepts 3 optional arguments: a <code>display</code>
attribute for the display to use, an <code>xauth</code> attribute for
the authentication identifier, and an optional <code>fullscreen</code>
attribute accepting values 'yes' or 'no'.
If the latter is used the <code>port</code> attribute specifies the TCP
port number (with -1 as legacy syntax indicating that it should be
auto-allocated). The <code>autoport</code> attribute is the new
preferred syntax for indicating autoallocation of the TCP port to use.
The <code>listen</code> attribute is an IP address for the server to
listen on. The <code>password</code> attribute provides a VNC password
in clear text.</dd>
listen on. The <code>passwd</code> attribute provides a VNC password
in clear text. The <code>keymap</code> attribute specifies the keymap
to use.</dd>
</dl>
<h4><a name="elementsConsole">Consoles, serial &amp; parallel devices</a></h4>
@ -859,6 +886,30 @@ qemu-kvm -net nic,model=? /dev/null
&lt;/serial&gt;
...</pre>
<h4><a name="elementsSound">Sound devices</a></h4>
<p>
A virtual sound card can be attached to the host via the
<code>sound</code> element. <span class="since">Since 0.4.3</span>
</p>
<pre>
...
&lt;sound model='es1370'/&gt;
...</pre>
<dl>
<dt><code>sound</code></dt>
<dd>
The <code>sound</code> element has one mandatory attribute,
<code>model</code>, which specifies what real sound device is emulated.
Valid values are specific to the underlying hypervisor, though typical
choices are 'es1370', 'sb16', and 'ac97'
(<span class="since">'ac97' only since 0.6.0</span>)
</dd>
</dl>
<h2><a name="examples">Example configs</a></h2>
<p>

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -211,7 +215,9 @@
...
&lt;ip address="192.168.122.1" netmask="255.255.255.0"&gt;
&lt;dhcp&gt;
&lt;range start="192.168.122.2" end="192.168.122.254" /&gt;
&lt;range start="192.168.122.100" end="192.168.122.254" /&gt;
&lt;host mac="00:16:3e:77:e2:ed" name="foo.example.com" ip="192.168.122.10" /&gt;
&lt;host mac="00:16:3e:3e:a9:1a" name="bar.example.com" ip="192.168.122.11" /&gt;
&lt;/dhcp&gt;
&lt;/ip&gt;
&lt;/network&gt;</pre>
@ -231,6 +237,14 @@
IPv4 addresses to be provided to DHCP clients. These two addresses
must lie within the scope of the network defined on the parent
<code>ip</code> element. <span class="since">Since 0.3.0</span>
</dd><dt><code>host</code></dt><dd>Within the <code>dhcp</code> element there may be zero or more
<code>host</code> elements; these specify hosts which will be given
names and predefined IP addresses by the built-in DHCP server. Any
such element must specify the MAC address of the host to be assigned
a given name (via the <code>mac</code> attribute), the IP to be
assigned to that host (via the <code>ip</code> attribute), and the
name to be given that host by the DHCP server (via the
<code>name</code> attribute). <span class="since">Since 0.4.5</span>
</dd></dl>
<h2>
<a name="examples" id="examples">Example configuration</a>

View File

@ -98,7 +98,9 @@
...
&lt;ip address="192.168.122.1" netmask="255.255.255.0"&gt;
&lt;dhcp&gt;
&lt;range start="192.168.122.2" end="192.168.122.254" /&gt;
&lt;range start="192.168.122.100" end="192.168.122.254" /&gt;
&lt;host mac="00:16:3e:77:e2:ed" name="foo.example.com" ip="192.168.122.10" /&gt;
&lt;host mac="00:16:3e:3e:a9:1a" name="bar.example.com" ip="192.168.122.11" /&gt;
&lt;/dhcp&gt;
&lt;/ip&gt;
&lt;/network&gt;</pre>
@ -126,6 +128,16 @@
must lie within the scope of the network defined on the parent
<code>ip</code> element. <span class="since">Since 0.3.0</span>
</dd>
<dt><code>host</code></dt>
<dd>Within the <code>dhcp</code> element there may be zero or more
<code>host</code> elements; these specify hosts which will be given
names and predefined IP addresses by the built-in DHCP server. Any
such element must specify the MAC address of the host to be assigned
a given name (via the <code>mac</code> attribute), the IP to be
assigned to that host (via the <code>ip</code> attribute), and the
name to be given that host by the DHCP server (via the
<code>name</code> attribute). <span class="since">Since 0.4.5</span>
</dd>
</dl>
<h2><a name="examples">Example configuration</a></h2>

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>

View File

@ -84,6 +84,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -131,6 +135,8 @@
<a href="#StorageVolFirst">General metadata</a>
</li><li>
<a href="#StorageVolTarget">Target elements</a>
</li><li>
<a href="#StorageVolBacking">Backing store elements</a>
</li></ul>
</li><li>
<a href="#examples">Example configuration</a>
@ -292,7 +298,7 @@
<a name="StorageVolFirst" id="StorageVolFirst">General metadata</a>
</h3>
<pre>
&lt;volume type="file"&gt;
&lt;volume&gt;
&lt;name&gt;sparse.img&lt;/name&gt;
&lt;key&gt;/var/lib/xen/images/sparse.img&lt;/key&gt;
&lt;allocation&gt;0&lt;/allocation&gt;
@ -328,31 +334,24 @@
...
&lt;target&gt;
&lt;path&gt;/var/lib/virt/images/sparse.img&lt;/path&gt;
&lt;format type='qcow2'/&gt;
&lt;permissions&gt;
&lt;owner&gt;0744&lt;/owner&gt;
&lt;group&gt;0744&lt;/group&gt;
&lt;mode&gt;0744&lt;/mode&gt;
&lt;label&gt;virt_image_t&lt;/label&gt;
&lt;/permissions&gt;
&lt;/target&gt;
&lt;/volume&gt;</pre>
<dl><dt><code>path</code></dt><dd>Provides the location at which the pool will be mapped into
the local filesystem namespace. For a filesystem/directory based
pool it will be the name of the directory in which volumes will
be created. For device based pools it will be the name of the directory in which
devices nodes exist. For the latter <code>/dev/</code> may seem
like the logical choice, however, devices nodes there are not
guaranteed stable across reboots, since they are allocated on
demand. It is preferable to use a stable location such as one
of the <code>/dev/disk/by-{path,id,uuid,label</code> locations.
<span class="since">Since 0.4.1</span>
</dd><dt><code>format</code></dt><dd>Provides information about the pool specific volume format.
&lt;/target&gt;</pre>
<dl><dt><code>path</code></dt><dd>Provides the location at which the volume can be accessed on
the local filesystem, as an absolute path. This is a readonly
attribute, so shouldn't be specified when creating a volume.
<span class="since">Since 0.4.1</span></dd><dt><code>format</code></dt><dd>Provides information about the pool specific volume format.
For disk pools it will provide the partition type. For filesystem
or directory pools it will provide the file format type, eg cow,
qcow, vmdk, raw. If omitted when creating a volume, the pool's
default format will be used. The actual format is specified via
the <code>type</code>. Consult the pool-specific docs for the
list of valid values. <span class="since">Since 0.4.1</span></dd><dt><code>permissions</code></dt><dd>Provides information about the default permissions to use
the <code>type</code> attribute. Consult the pool-specific docs for
the list of valid values. <span class="since">Since 0.4.1</span></dd><dt><code>permissions</code></dt><dd>Provides information about the default permissions to use
when creating volumes. This is currently only useful for directory
or filesystem based pools, where the volumes allocated are simple
files. For pools where the volumes are device nodes, the hotplug
@ -362,6 +361,45 @@
element contains the numeric group ID. The <code>label</code> element
contains the MAC (eg SELinux) label string.
<span class="since">Since 0.4.1</span>
</dd></dl>
<h3>
<a name="StorageVolBacking" id="StorageVolBacking">Backing store elements</a>
</h3>
<p>
A single <code>backingStore</code> element is contained within the top level
<code>volume</code> element. This tag is used to describe the optional copy
on write, backing store for the storage volume. It can contain the following
child elements:
</p>
<pre>
...
&lt;backingStore&gt;
&lt;path&gt;/var/lib/virt/images/master.img&lt;/path&gt;
&lt;format&gt;raw&lt;/format&gt;
&lt;permissions&gt;
&lt;owner&gt;0744&lt;/owner&gt;
&lt;group&gt;0744&lt;/group&gt;
&lt;mode&gt;0744&lt;/mode&gt;
&lt;label&gt;virt_image_t&lt;/label&gt;
&lt;/permissions&gt;
&lt;/backingStore&gt;
&lt;/volume&gt;</pre>
<dl><dt><code>path</code></dt><dd>Provides the location at which the backing store can be accessed on
the local filesystem, as an absolute path. If omitted, there is no
backing store for this volume.
<span class="since">Since 0.6.0</span></dd><dt><code>format</code></dt><dd>Provides information about the pool specific backing store format.
For disk pools it will provide the partition type. For filesystem
or directory pools it will provide the file format type, eg cow,
qcow, vmdk, raw. Consult the pool-specific docs for the list of valid
values. Most file formats require a backing store of the same format,
however, the qcow2 format allows a different backing store format.
<span class="since">Since 0.6.0</span></dd><dt><code>permissions</code></dt><dd>Provides information about the permissions of the backing file.
It contains 4 child elements. The
<code>mode</code> element contains the octal permission set. The
<code>owner</code> element contains the numeric user ID. The <code>group</code>
element contains the numeric group ID. The <code>label</code> element
contains the MAC (eg SELinux) label string.
<span class="since">Since 0.6.0</span>
</dd></dl>
<h2>
<a name="examples" id="examples">Example configuration</a>
@ -398,7 +436,7 @@
<a name="exampleVol" id="exampleVol">Storage volume</a>
</h3>
<pre>
&lt;volume type="file"&gt;
&lt;volume&gt;
&lt;name&gt;sparse.img&lt;/name&gt;
&lt;allocation&gt;0&lt;/allocation&gt;
&lt;capacity unit="T"&gt;1&lt;/capacity&gt;

View File

@ -183,7 +183,7 @@
<h3><a name="StorageVolFirst">General metadata</a></h3>
<pre>
&lt;volume type="file"&gt;
&lt;volume&gt;
&lt;name&gt;sparse.img&lt;/name&gt;
&lt;key&gt;/var/lib/xen/images/sparse.img&lt;/key&gt;
&lt;allocation&gt;0&lt;/allocation&gt;
@ -234,36 +234,29 @@
...
&lt;target&gt;
&lt;path&gt;/var/lib/virt/images/sparse.img&lt;/path&gt;
&lt;format type='qcow2'/&gt;
&lt;permissions&gt;
&lt;owner&gt;0744&lt;/owner&gt;
&lt;group&gt;0744&lt;/group&gt;
&lt;mode&gt;0744&lt;/mode&gt;
&lt;label&gt;virt_image_t&lt;/label&gt;
&lt;/permissions&gt;
&lt;/target&gt;
&lt;/volume&gt;</pre>
&lt;/target&gt;</pre>
<dl>
<dt><code>path</code></dt>
<dd>Provides the location at which the pool will be mapped into
the local filesystem namespace. For a filesystem/directory based
pool it will be the name of the directory in which volumes will
be created. For device based pools it will be the name of the directory in which
devices nodes exist. For the latter <code>/dev/</code> may seem
like the logical choice, however, devices nodes there are not
guaranteed stable across reboots, since they are allocated on
demand. It is preferable to use a stable location such as one
of the <code>/dev/disk/by-{path,id,uuid,label</code> locations.
<span class="since">Since 0.4.1</span>
</dd>
<dd>Provides the location at which the volume can be accessed on
the local filesystem, as an absolute path. This is a readonly
attribute, so shouldn't be specified when creating a volume.
<span class="since">Since 0.4.1</span></dd>
<dt><code>format</code></dt>
<dd>Provides information about the pool specific volume format.
For disk pools it will provide the partition type. For filesystem
or directory pools it will provide the file format type, eg cow,
qcow, vmdk, raw. If omitted when creating a volume, the pool's
default format will be used. The actual format is specified via
the <code>type</code>. Consult the pool-specific docs for the
list of valid values. <span class="since">Since 0.4.1</span></dd>
the <code>type</code> attribute. Consult the pool-specific docs for
the list of valid values. <span class="since">Since 0.4.1</span></dd>
<dt><code>permissions</code></dt>
<dd>Provides information about the default permissions to use
when creating volumes. This is currently only useful for directory
@ -278,6 +271,54 @@
</dd>
</dl>
<h3><a name="StorageVolBacking">Backing store elements</a></h3>
<p>
A single <code>backingStore</code> element is contained within the top level
<code>volume</code> element. This tag is used to describe the optional copy
on write, backing store for the storage volume. It can contain the following
child elements:
</p>
<pre>
...
&lt;backingStore&gt;
&lt;path&gt;/var/lib/virt/images/master.img&lt;/path&gt;
&lt;format&gt;raw&lt;/format&gt;
&lt;permissions&gt;
&lt;owner&gt;0744&lt;/owner&gt;
&lt;group&gt;0744&lt;/group&gt;
&lt;mode&gt;0744&lt;/mode&gt;
&lt;label&gt;virt_image_t&lt;/label&gt;
&lt;/permissions&gt;
&lt;/backingStore&gt;
&lt;/volume&gt;</pre>
<dl>
<dt><code>path</code></dt>
<dd>Provides the location at which the backing store can be accessed on
the local filesystem, as an absolute path. If omitted, there is no
backing store for this volume.
<span class="since">Since 0.6.0</span></dd>
<dt><code>format</code></dt>
<dd>Provides information about the pool specific backing store format.
For disk pools it will provide the partition type. For filesystem
or directory pools it will provide the file format type, eg cow,
qcow, vmdk, raw. Consult the pool-specific docs for the list of valid
values. Most file formats require a backing store of the same format,
however, the qcow2 format allows a different backing store format.
<span class="since">Since 0.6.0</span></dd>
<dt><code>permissions</code></dt>
<dd>Provides information about the permissions of the backing file.
It contains 4 child elements. The
<code>mode</code> element contains the octal permission set. The
<code>owner</code> element contains the numeric user ID. The <code>group</code>
element contains the numeric group ID. The <code>label</code> element
contains the MAC (eg SELinux) label string.
<span class="since">Since 0.6.0</span>
</dd>
</dl>
<h2><a name="examples">Example configuration</a></h2>
<p>
@ -312,7 +353,7 @@
<h3><a name="exampleVol">Storage volume</a></h3>
<pre>
&lt;volume type="file"&gt;
&lt;volume&gt;
&lt;name&gt;sparse.img&lt;/name&gt;
&lt;allocation&gt;0&lt;/allocation&gt;
&lt;capacity unit="T"&gt;1&lt;/capacity&gt;

165
docs/goals.html Normal file
View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from goals.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: Terminology and goals</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="active" href="intro.html">Architecture</a>
<ul class="l2"><li>
<div>
<span class="active">Goals</span>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
</li><li>
<div>
<a title="Providing isolated networks and NAT based network connectivity" class="inactive" href="archnetwork.html">Network</a>
</div>
</li><li>
<div>
<a title="Managing storage pools and volumes" class="inactive" href="archstorage.html">Storage</a>
</div>
</li><li>
<div>
<a title="Enumerating host node devices" class="inactive" href="archnode.html">Node Devices</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="inactive" href="drivers.html">Drivers</a>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>Terminology and goals</h1>
<p>To avoid ambiguity about the terms used, here are the definitions
for some of the specific concepts used in libvirt documentation:</p>
<ul><li>a <strong>node</strong> is a single physical machine</li><li>an <strong>hypervisor</strong> is a layer of software allowing to
virtualize a node in a set of virtual machines with possibly different
configurations than the node itself</li><li>a <strong>domain</strong> is an instance of an operating system
(or subsystem in the case of container virtualization) running on a
virtualized machine provided by the hypervisor</li></ul>
<p class="image">
<img alt="Hypervisor and domains running on a node" src="node.gif" /></p>
<p>Now we can define the goal of libvirt: to provide a common generic
and stable layer to securely manage domains on a node. The node may be
distant and libvirt should provide all APIs needed to provision, create,
modify, monitor, control, migrate and stop the domains, within the limits
of the support of the hypervisor for those operations. Multiple mode may
be accessed with libvirt simultaneously but the APIs are limited to
single node operations.</p>
<p>This implies the following sub-goals:</p>
<ul><li>the API should not be targeted to a single virtualization environment
which also means that some very specific capabilities which are not generic
enough may not be provided as libvirt APIs</li><li>the API should allow to do efficiently and cleanly all the operations
needed to manage domains on a node</li><li>the API will not try to provide high level virtualization policies or
multi-nodes management features like load balancing, but the API should be
sufficient so they can be implemented on top of libvirt</li><li>stability of the API is a big concern, libvirt should isolate
applications from the frequent changes expected at the lower level of the
virtualization framework</li><li>the node being managed may be on a different physical machine than
the management program using libvirt, to this effect libvirt supports
remote access, but should only do so by using secure protocols.</li><li>libvirt will provide APIs to enumerate, monitor and use the resources
available on the managed node, including CPUs, memory, storage, networking,
and NUMA partitions.</li></ul>
<p>So libvirt is intended to be a building block for higher level
management tools and for applications focusing on virtualization of a
single node (the only exception being domain migration between node
capabilities which involves more than one node).</p>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

51
docs/goals.html.in Normal file
View File

@ -0,0 +1,51 @@
<?xml version="1.0"?>
<html>
<body>
<h1>Terminology and goals</h1>
<p>To avoid ambiguity about the terms used, here are the definitions
for some of the specific concepts used in libvirt documentation:</p>
<ul>
<li>a <strong>node</strong> is a single physical machine</li>
<li>an <strong>hypervisor</strong> is a layer of software allowing to
virtualize a node in a set of virtual machines with possibly different
configurations than the node itself</li>
<li>a <strong>domain</strong> is an instance of an operating system
(or subsystem in the case of container virtualization) running on a
virtualized machine provided by the hypervisor</li>
</ul>
<p class="image">
<img alt="Hypervisor and domains running on a node" src="node.gif"/>
</p>
<p>Now we can define the goal of libvirt: to provide a common generic
and stable layer to securely manage domains on a node. The node may be
distant and libvirt should provide all APIs needed to provision, create,
modify, monitor, control, migrate and stop the domains, within the limits
of the support of the hypervisor for those operations. Multiple mode may
be accessed with libvirt simultaneously but the APIs are limited to
single node operations.</p>
<p>This implies the following sub-goals:</p>
<ul>
<li>the API should not be targeted to a single virtualization environment
which also means that some very specific capabilities which are not generic
enough may not be provided as libvirt APIs</li>
<li>the API should allow to do efficiently and cleanly all the operations
needed to manage domains on a node</li>
<li>the API will not try to provide high level virtualization policies or
multi-nodes management features like load balancing, but the API should be
sufficient so they can be implemented on top of libvirt</li>
<li>stability of the API is a big concern, libvirt should isolate
applications from the frequent changes expected at the lower level of the
virtualization framework</li>
<li>the node being managed may be on a different physical machine than
the management program using libvirt, to this effect libvirt supports
remote access, but should only do so by using secure protocols.</li>
<li>libvirt will provide APIs to enumerate, monitor and use the resources
available on the managed node, including CPUs, memory, storage, networking,
and NUMA partitions.</li>
</ul>
<p>So libvirt is intended to be a building block for higher level
management tools and for applications focusing on virtualization of a
single node (the only exception being domain migration between node
capabilities which involves more than one node).</p>
</body>
</html>

489
docs/hacking.html Normal file
View File

@ -0,0 +1,489 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from hacking.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: Contributor guidelines</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="intro.html">Architecture</a>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="inactive" href="drivers.html">Drivers</a>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="active" href="internals.html">Internals</a>
<ul class="l2"><li>
<div>
<span class="active">Contributor guidelines</span>
</div>
</li><li>
<div>
<a title="Adding new public libvirt APIs" class="inactive" href="api_extension.html">API extensions</a>
</div>
</li></ul>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>Contributor guidelines</h1>
<ul><li>
<a href="#patches">General tips for contributing patches</a>
</li><li>
<a href="#indent">Code indentation</a>
</li><li>
<a href="#formatting">Code formatting (especially for new code)</a>
</li><li>
<a href="#">C types</a>
</li><li>
<a href="#memalloc">Low level memory management</a>
</li><li>
<a href="#string">String comparisons</a>
</li><li>
<a href="#strbuf">Variable length string buffer</a>
</li><li>
<a href="#includes">Include files</a>
</li><li>
<a href="#printf">Printf-style functions</a>
</li><li>
<a href="#committers">Libvirt commiters guidelines</a>
</li></ul>
<h2>
<a name="patches" id="patches">General tips for contributing patches</a>
</h2>
<ol><li>Discuss any large changes on the mailing list first. Post patches
early and listen to feedback.</li><li><p>Post patches in unified diff format. A command similar to this
should work:</p>
<pre>
diff -urp libvirt.orig/ libvirt.modified/ &gt; libvirt-myfeature.patch
</pre>
<p>
or:
</p>
<pre>
cvs diff -up &gt; libvirt-myfeature.patch
</pre></li><li>Split large changes into a series of smaller patches, self-contained
if possible, with an explanation of each patch and an explanation of how
the sequence of patches fits together.</li><li>Make sure your patches apply against libvirt CVS. Developers
only follow CVS and don't care much about released versions.</li><li><p>Run the automated tests on your code before submitting any changes.
In particular, configure with compile warnings set to -Werror:</p>
<pre>
./configure --enable-compile-warnings=error
</pre>
<p>
and run the tests:
</p>
<pre>
make check
make syntax-check
make -C tests valgrind
</pre>
<p>
The latter test checks for memory leaks.
</p>
</li><li>Update tests and/or documentation, particularly if you are adding
a new feature or changing the output of a program.</li></ol>
<p>
There is more on this subject, including lots of links to background
reading on the subject, on
<a href="http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/">
Richard Jones' guide to working with open source projects</a>
</p>
<h2>
<a name="indent" id="indent">Code indentation</a>
</h2>
<p>
Libvirt's C source code generally adheres to some basic code-formatting
conventions. The existing code base is not totally consistent on this
front, but we do prefer that contributed code be formatted similarly.
In short, use spaces-not-TABs for indentation, use 4 spaces for each
indentation level, and other than that, follow the K&amp;R style.
</p>
<p>
If you use Emacs, add the following to one of one of your start-up files
(e.g., ~/.emacs), to help ensure that you get indentation right:
</p>
<pre>
;;; When editing C sources in libvirt, use this style.
(defun libvirt-c-mode ()
"C mode with adjusted defaults for use with libvirt."
(interactive)
(c-set-style "K&amp;R")
(setq indent-tabs-mode nil) ; indent using spaces, not TABs
(setq c-indent-level 4)
(setq c-basic-offset 4))
(add-hook 'c-mode-hook
'(lambda () (if (string-match "/libvirt" (buffer-file-name))
(libvirt-c-mode))))
</pre>
<h2>
<a name="formatting" id="formatting">Code formatting (especially for new code)</a>
</h2>
<p>
With new code, we can be even more strict.
Please apply the following function (using GNU indent) to any new code.
Note that this also gives you an idea of the type of spacing we prefer
around operators and keywords:
</p>
<pre>
indent-libvirt()
{
indent -bad -bap -bbb -bli4 -br -ce -brs -cs -i4 -l75 -lc75 \
-sbi4 -psl -saf -sai -saw -sbi4 -ss -sc -cdw -cli4 -npcs -nbc \
--no-tabs "$@"
}
</pre>
<p>
Note that sometimes you'll have to postprocess that output further, by
piping it through "expand -i", since some leading TABs can get through.
Usually they're in macro definitions or strings, and should be converted
anyhow.
</p>
<h2>
<a href="types">C types</a>
</h2>
<p>
Use the right type.
</p>
<h3>Scalars</h3>
<ul><li>If you're using "int" or "long", odds are good that there's a better type.</li><li>If a variable is counting something, be sure to declare it with an
unsigned type.</li><li>If it's memory-size-related, use size_t (use ssize_t only if required).</li><li>If it's file-size related, use uintmax_t, or maybe off_t.</li><li>If it's file-offset related (i.e., signed), use off_t.</li><li>If it's just counting small numbers use "unsigned int";
(on all but oddball embedded systems, you can assume that that
type is at least four bytes wide).</li><li>If a variable has boolean semantics, give it the "bool" type
and use the corresponding "true" and "false" macros. It's ok
to include &lt;stdbool.h&gt;, since libvirt's use of gnulib ensures
that it exists and is usable.</li><li>In the unusual event that you require a specific width, use a
standard type like int32_t, uint32_t, uint64_t, etc.</li><li>While using "bool" is good for readability, it comes with minor caveats:
<ul><li>Don't use "bool" in places where the type size must be constant across
all systems, like public interfaces and on-the-wire protocols. Note
that it would be possible (albeit wasteful) to use "bool" in libvirt's
logical wire protocol, since XDR maps that to its lower-level bool_t
type, which *is* fixed-size.</li><li>Don't compare a bool variable against the literal, "true",
since a value with a logical non-false value need not be "1".
I.e., don't write "if (seen == true) ...". Rather, write "if (seen)...".</li></ul></li></ul>
<p>
Of course, take all of the above with a grain of salt. If you're about
to use some system interface that requires a type like size_t, pid_t or
off_t, use matching types for any corresponding variables.
</p>
<p>
Also, if you try to use e.g., "unsigned int" as a type, and that
conflicts with the signedness of a related variable, sometimes
it's best just to use the *wrong* type, if "pulling the thread"
and fixing all related variables would be too invasive.
</p>
<p>
Finally, while using descriptive types is important, be careful not to
go overboard. If whatever you're doing causes warnings, or requires
casts, then reconsider or ask for help.
</p>
<h3>Pointers</h3>
<p>
Ensure that all of your pointers are "const-correct".
Unless a pointer is used to modify the pointed-to storage,
give it the "const" attribute. That way, the reader knows
up-front that this is a read-only pointer. Perhaps more
importantly, if we're diligent about this, when you see a non-const
pointer, you're guaranteed that it is used to modify the storage
it points to, or it is aliased to another pointer that is.
</p>
<h2>
<a name="memalloc" id="memalloc">Low level memory management</a>
</h2>
<p>
Use of the malloc/free/realloc/calloc APIs is deprecated in the libvirt
codebase, because they encourage a number of serious coding bugs and do
not enable compile time verification of checks for NULL. Instead of these
routines, use the macros from memory.h
</p>
<ul><li><p>eg to allocate a single object:</p>
<pre>
virDomainPtr domain;
if (VIR_ALLOC(domain) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li><li><p>eg to allocate an array of objects</p>
<pre>
virDomainPtr domains;
int ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li><li><p>eg to allocate an array of object pointers</p>
<pre>
virDomainPtr *domains;
int ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li><li><p>eg to re-allocate the array of domains to be longer</p>
<pre>
ndomains = 20
if (VIR_REALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li><li><p>eg to free the domain</p>
<pre>
VIR_FREE(domain);
</pre></li></ul>
<h2>
<a name="string" id="string">String comparisons</a>
</h2>
<p>
Do not use the strcmp, strncmp, etc functions directly. Instead use
one of the following semantically named macros
</p>
<ul><li><p>For strict equality:</p>
<pre>
STREQ(a,b)
STRNEQ(a,b)
</pre>
</li><li><p>For case sensitive equality:</p>
<pre>
STRCASEEQ(a,b)
STRCASENEQ(a,b)
</pre>
</li><li><p>For strict equality of a substring:</p>
<pre>
STREQLEN(a,b,n)
STRNEQLEN(a,b,n)
</pre>
</li><li><p>For case sensitive equality of a substring:</p>
<pre>
STRCASEEQLEN(a,b,n)
STRCASENEQLEN(a,b,n)
</pre>
</li><li><p>For strict equality of a prefix:</p>
<pre>
STRPREFIX(a,b)
</pre>
</li></ul>
<h2>
<a name="strbuf" id="strbuf">Variable length string buffer</a>
</h2>
<p>
If there is a need for complex string concatenations, avoid using
the usual sequence of malloc/strcpy/strcat/snprintf functions and
make use of the virBuffer API described in buf.h
</p>
<p>eg typical usage is as follows:</p>
<pre>
char *
somefunction(...) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
...
virBufferAddLit(&amp;buf, "&lt;domain&gt;\n");
virBufferVSprint(&amp;buf, " &lt;memory&gt;%d&lt;/memory&gt;\n", memory);
...
virBufferAddLit(&amp;buf, "&lt;/domain&gt;\n");
....
if (virBufferError(&amp;buf)) {
__virRaiseError(...);
return NULL;
}
return virBufferContentAndReset(&amp;buf);
}
</pre>
<h2>
<a name="includes" id="includes">Include files</a>
</h2>
<p>
There are now quite a large number of include files, both libvirt
internal and external, and system includes. To manage all this
complexity it's best to stick to the following general plan for all
*.c source files:
</p>
<pre>
/*
* Copyright notice
* ....
* ....
* ....
*
*/
#include &lt;config.h&gt; Must come first in every file.
#include &lt;stdio.h&gt; Any system includes you need.
#include &lt;string.h&gt;
#include &lt;limits.h&gt;
#if HAVE_NUMACTL Some system includes aren't supported
#include &lt;numa.h&gt; everywhere so need these #if defences.
#endif
#include "internal.h" Include this first, after system includes.
#include "util.h" Any libvirt internal header files.
#include "buf.h"
static myInternalFunc () The actual code.
{
...
</pre>
<p>
Of particular note: *DO NOT* include libvirt/libvirt.h or
libvirt/virterror.h. It is included by "internal.h" already and there
are some special reasons why you cannot include these files
explicitly.
</p>
<h2>
<a name="printf" id="printf">Printf-style functions</a>
</h2>
<p>
Whenever you add a new printf-style function, i.e., one with a format
string argument and following "..." in its prototype, be sure to use
gcc's printf attribute directive in the prototype. For example, here's
the one for virAsprintf, in util.h:
</p>
<pre>
int virAsprintf(char **strp, const char *fmt, ...)
ATTRIBUTE_FORMAT(printf, 2, 3);
</pre>
<p>
This makes it so gcc's -Wformat and -Wformat-security options can do
their jobs and cross-check format strings with the number and types
of arguments.
</p>
<h2>
<a name="committers" id="committers">Libvirt commiters guidelines</a>
</h2>
<p>
The AUTHORS files indicates the list of people with commit acces right
who can actually merge the patches.
</p>
<p>
The general rule for commiting patches is to make sure it has been reviewed
properly in the mailing-list first, usually if a couple of persons gave an
ACK or +1 to a patch and nobody raised an objection on the list it should
be good to go. If the patch touches a part of the code where you're not the
main maintainer or not have a very clear idea of how things work, it's better
to wait for a more authoritative feedback though. Before commiting please
also rebuild locally and run 'make check syntax-check' and make sure they
don't raise error. Try to look for warnings too for example configure with
--enable-compile-warnings=error
which adds -Werror to compile flags, so no warnings get missed
</p>
<p>
Exceptions to that 'review and approval on the list first' is fixing failures
to build:
</p>
<ul><li>if a recently commited patch breaks compilation on a platform
or for a given driver then it's fine to commit a minimal fix
directly without getting the review feedback first</li><li>if make check or make syntax-chek breaks, if there is
an obvious fix, it's fine to commit immediately.
The patch should still be sent to the list (or tell what the fix was if
trivial) and 'make check syntax-check' should pass too before commiting
anything</li><li>
fixes for documentation and code comments can be managed
in the same way, but still make sure they get reviewed if non-trivial.
</li></ul>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

432
docs/hacking.html.in Normal file
View File

@ -0,0 +1,432 @@
<html>
<body>
<h1>Contributor guidelines</h1>
<ul id="toc"></ul>
<h2><a name="patches">General tips for contributing patches</a></h2>
<ol>
<li>Discuss any large changes on the mailing list first. Post patches
early and listen to feedback.</li>
<li><p>Post patches in unified diff format. A command similar to this
should work:</p>
<pre>
diff -urp libvirt.orig/ libvirt.modified/ &gt; libvirt-myfeature.patch
</pre>
<p>
or:
</p>
<pre>
cvs diff -up > libvirt-myfeature.patch
</pre></li>
<li>Split large changes into a series of smaller patches, self-contained
if possible, with an explanation of each patch and an explanation of how
the sequence of patches fits together.</li>
<li>Make sure your patches apply against libvirt CVS. Developers
only follow CVS and don't care much about released versions.</li>
<li><p>Run the automated tests on your code before submitting any changes.
In particular, configure with compile warnings set to -Werror:</p>
<pre>
./configure --enable-compile-warnings=error
</pre>
<p>
and run the tests:
</p>
<pre>
make check
make syntax-check
make -C tests valgrind
</pre>
<p>
The latter test checks for memory leaks.
</p>
<li>Update tests and/or documentation, particularly if you are adding
a new feature or changing the output of a program.</li>
</ol>
<p>
There is more on this subject, including lots of links to background
reading on the subject, on
<a href="http://et.redhat.com/~rjones/how-to-supply-code-to-open-source-projects/">
Richard Jones' guide to working with open source projects</a>
</p>
<h2><a name="indent">Code indentation</a></h2>
<p>
Libvirt's C source code generally adheres to some basic code-formatting
conventions. The existing code base is not totally consistent on this
front, but we do prefer that contributed code be formatted similarly.
In short, use spaces-not-TABs for indentation, use 4 spaces for each
indentation level, and other than that, follow the K&amp;R style.
</p>
<p>
If you use Emacs, add the following to one of one of your start-up files
(e.g., ~/.emacs), to help ensure that you get indentation right:
</p>
<pre>
;;; When editing C sources in libvirt, use this style.
(defun libvirt-c-mode ()
"C mode with adjusted defaults for use with libvirt."
(interactive)
(c-set-style "K&amp;R")
(setq indent-tabs-mode nil) ; indent using spaces, not TABs
(setq c-indent-level 4)
(setq c-basic-offset 4))
(add-hook 'c-mode-hook
'(lambda () (if (string-match "/libvirt" (buffer-file-name))
(libvirt-c-mode))))
</pre>
<h2><a name="formatting">Code formatting (especially for new code)</a></h2>
<p>
With new code, we can be even more strict.
Please apply the following function (using GNU indent) to any new code.
Note that this also gives you an idea of the type of spacing we prefer
around operators and keywords:
</p>
<pre>
indent-libvirt()
{
indent -bad -bap -bbb -bli4 -br -ce -brs -cs -i4 -l75 -lc75 \
-sbi4 -psl -saf -sai -saw -sbi4 -ss -sc -cdw -cli4 -npcs -nbc \
--no-tabs "$@"
}
</pre>
<p>
Note that sometimes you'll have to postprocess that output further, by
piping it through "expand -i", since some leading TABs can get through.
Usually they're in macro definitions or strings, and should be converted
anyhow.
</p>
<h2><a href="types">C types</a></h2>
<p>
Use the right type.
</p>
<h3>Scalars</h3>
<ul>
<li>If you're using "int" or "long", odds are good that there's a better type.</li>
<li>If a variable is counting something, be sure to declare it with an
unsigned type.</li>
<li>If it's memory-size-related, use size_t (use ssize_t only if required).</li>
<li>If it's file-size related, use uintmax_t, or maybe off_t.</li>
<li>If it's file-offset related (i.e., signed), use off_t.</li>
<li>If it's just counting small numbers use "unsigned int";
(on all but oddball embedded systems, you can assume that that
type is at least four bytes wide).</li>
<li>If a variable has boolean semantics, give it the "bool" type
and use the corresponding "true" and "false" macros. It's ok
to include &lt;stdbool.h&gt;, since libvirt's use of gnulib ensures
that it exists and is usable.</li>
<li>In the unusual event that you require a specific width, use a
standard type like int32_t, uint32_t, uint64_t, etc.</li>
<li>While using "bool" is good for readability, it comes with minor caveats:
<ul>
<li>Don't use "bool" in places where the type size must be constant across
all systems, like public interfaces and on-the-wire protocols. Note
that it would be possible (albeit wasteful) to use "bool" in libvirt's
logical wire protocol, since XDR maps that to its lower-level bool_t
type, which *is* fixed-size.</li>
<li>Don't compare a bool variable against the literal, "true",
since a value with a logical non-false value need not be "1".
I.e., don't write "if (seen == true) ...". Rather, write "if (seen)...".</li>
</ul>
</li>
</ul>
<p>
Of course, take all of the above with a grain of salt. If you're about
to use some system interface that requires a type like size_t, pid_t or
off_t, use matching types for any corresponding variables.
</p>
<p>
Also, if you try to use e.g., "unsigned int" as a type, and that
conflicts with the signedness of a related variable, sometimes
it's best just to use the *wrong* type, if "pulling the thread"
and fixing all related variables would be too invasive.
</p>
<p>
Finally, while using descriptive types is important, be careful not to
go overboard. If whatever you're doing causes warnings, or requires
casts, then reconsider or ask for help.
</p>
<h3>Pointers</h3>
<p>
Ensure that all of your pointers are "const-correct".
Unless a pointer is used to modify the pointed-to storage,
give it the "const" attribute. That way, the reader knows
up-front that this is a read-only pointer. Perhaps more
importantly, if we're diligent about this, when you see a non-const
pointer, you're guaranteed that it is used to modify the storage
it points to, or it is aliased to another pointer that is.
</p>
<h2><a name="memalloc">Low level memory management</a></h2>
<p>
Use of the malloc/free/realloc/calloc APIs is deprecated in the libvirt
codebase, because they encourage a number of serious coding bugs and do
not enable compile time verification of checks for NULL. Instead of these
routines, use the macros from memory.h
</p>
<ul>
<li><p>eg to allocate a single object:</p>
<pre>
virDomainPtr domain;
if (VIR_ALLOC(domain) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li>
<li><p>eg to allocate an array of objects</p>
<pre>
virDomainPtr domains;
int ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li>
<li><p>eg to allocate an array of object pointers</p>
<pre>
virDomainPtr *domains;
int ndomains = 10;
if (VIR_ALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li>
<li><p>eg to re-allocate the array of domains to be longer</p>
<pre>
ndomains = 20
if (VIR_REALLOC_N(domains, ndomains) &lt; 0) {
__virRaiseError(VIR_ERROR_NO_MEMORY)
return NULL;
}
</pre></li>
<li><p>eg to free the domain</p>
<pre>
VIR_FREE(domain);
</pre></li>
</ul>
<h2><a name="string">String comparisons</a></h2>
<p>
Do not use the strcmp, strncmp, etc functions directly. Instead use
one of the following semantically named macros
</p>
<ul>
<li><p>For strict equality:</p>
<pre>
STREQ(a,b)
STRNEQ(a,b)
</pre>
</li>
<li><p>For case sensitive equality:</p>
<pre>
STRCASEEQ(a,b)
STRCASENEQ(a,b)
</pre>
</li>
<li><p>For strict equality of a substring:</p>
<pre>
STREQLEN(a,b,n)
STRNEQLEN(a,b,n)
</pre>
</li>
<li><p>For case sensitive equality of a substring:</p>
<pre>
STRCASEEQLEN(a,b,n)
STRCASENEQLEN(a,b,n)
</pre>
</li>
<li><p>For strict equality of a prefix:</p>
<pre>
STRPREFIX(a,b)
</pre>
</li>
</ul>
<h2><a name="strbuf">Variable length string buffer</a></h2>
<p>
If there is a need for complex string concatenations, avoid using
the usual sequence of malloc/strcpy/strcat/snprintf functions and
make use of the virBuffer API described in buf.h
</p>
<p>eg typical usage is as follows:</p>
<pre>
char *
somefunction(...) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
...
virBufferAddLit(&amp;buf, "&lt;domain&gt;\n");
virBufferVSprint(&amp;buf, " &lt;memory>%d&lt;/memory&gt;\n", memory);
...
virBufferAddLit(&amp;buf, "&lt;/domain&gt;\n");
....
if (virBufferError(&amp;buf)) {
__virRaiseError(...);
return NULL;
}
return virBufferContentAndReset(&amp;buf);
}
</pre>
<h2><a name="includes">Include files</a></h2>
<p>
There are now quite a large number of include files, both libvirt
internal and external, and system includes. To manage all this
complexity it's best to stick to the following general plan for all
*.c source files:
</p>
<pre>
/*
* Copyright notice
* ....
* ....
* ....
*
*/
#include &lt;config.h&gt; Must come first in every file.
#include &lt;stdio.h&gt; Any system includes you need.
#include &lt;string.h&gt;
#include &lt;limits.h&gt;
#if HAVE_NUMACTL Some system includes aren't supported
#include &lt;numa.h&gt; everywhere so need these #if defences.
#endif
#include "internal.h" Include this first, after system includes.
#include "util.h" Any libvirt internal header files.
#include "buf.h"
static myInternalFunc () The actual code.
{
...
</pre>
<p>
Of particular note: *DO NOT* include libvirt/libvirt.h or
libvirt/virterror.h. It is included by "internal.h" already and there
are some special reasons why you cannot include these files
explicitly.
</p>
<h2><a name="printf">Printf-style functions</a></h2>
<p>
Whenever you add a new printf-style function, i.e., one with a format
string argument and following "..." in its prototype, be sure to use
gcc's printf attribute directive in the prototype. For example, here's
the one for virAsprintf, in util.h:
</p>
<pre>
int virAsprintf(char **strp, const char *fmt, ...)
ATTRIBUTE_FORMAT(printf, 2, 3);
</pre>
<p>
This makes it so gcc's -Wformat and -Wformat-security options can do
their jobs and cross-check format strings with the number and types
of arguments.
</p>
<h2><a name="committers">Libvirt commiters guidelines</a></h2>
<p>
The AUTHORS files indicates the list of people with commit acces right
who can actually merge the patches.
</p>
<p>
The general rule for commiting patches is to make sure it has been reviewed
properly in the mailing-list first, usually if a couple of persons gave an
ACK or +1 to a patch and nobody raised an objection on the list it should
be good to go. If the patch touches a part of the code where you're not the
main maintainer or not have a very clear idea of how things work, it's better
to wait for a more authoritative feedback though. Before commiting please
also rebuild locally and run 'make check syntax-check' and make sure they
don't raise error. Try to look for warnings too for example configure with
--enable-compile-warnings=error
which adds -Werror to compile flags, so no warnings get missed
</p>
<p>
Exceptions to that 'review and approval on the list first' is fixing failures
to build:
</p>
<ul>
<li>if a recently commited patch breaks compilation on a platform
or for a given driver then it's fine to commit a minimal fix
directly without getting the review feedback first</li>
<li>if make check or make syntax-chek breaks, if there is
an obvious fix, it's fine to commit immediately.
The patch should still be sent to the list (or tell what the fix was if
trivial) and 'make check syntax-check' should pass too before commiting
anything</li>
<li>
fixes for documentation and code comments can be managed
in the same way, but still make sure they get reviewed if non-trivial.
</li>
</ul>
</body>
</html>

View File

@ -3,5 +3,5 @@
<html xmlns="http://www.w3.org/1999/xhtml"><!--
This file is autogenerated from html/index.html.in
Do not edit this file. Changes will be lost.
--><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="../main.css" /><link rel="SHORTCUT ICON" href="../32favicon.png" /><title>libvirt: Reference Manual for libvirt</title><meta name="description" content="libvirt, virtualization, virtualization API" /></head><body><div id="header"><div id="headerLogo"></div><div id="headerSearch"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><div><input id="query" name="query" type="text" size="12" value="" /><input id="submit" name="submit" type="submit" value="Search" /></div></form></div></div><div id="body"><div id="menu"><ul class="l0"><li><div><a title="Front page of the libvirt website" class="inactive" href="../index.html">Home</a></div></li><li><div><a title="Details of new features and bugs fixed in each release" class="inactive" href="../news.html">News</a></div></li><li><div><a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="../downloads.html">Downloads</a></div></li><li><div><a title="Information for users, administrators and developers" class="active" href="../docs.html">Documentation</a><ul class="l1"><li><div><a title="Information about deploying and using libvirt" class="inactive" href="../deployment.html">Deployment</a></div></li><li><div><a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="../intro.html">Architecture</a></div></li><li><div><a title="Description of the XML formats used in libvirt" class="inactive" href="../format.html">XML format</a></div></li><li><div><a title="Hypervisor specific driver information" class="inactive" href="../drivers.html">Drivers</a></div></li><li><div><span class="active">API reference</span><ul class="l2"><li><div><a title="core interfaces for the libvirt library" class="inactive" href="../html/libvirt-libvirt.html">libvirt</a></div></li><li><div><a title="error handling interfaces for the libvirt library" class="inactive" href="../html/libvirt-virterror.html">virterror</a></div></li><li><div><a title="matrix of API support per hypervisor per release" class="inactive" href="../hvsupport.html">Driver support</a></div></li></ul></div></li><li><div><a title="Bindings of the libvirt API for other languages" class="inactive" href="../bindings.html">Language bindings</a></div></li></ul></div></li><li><div><a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a></div></li><li><div><a title="Frequently asked questions" class="inactive" href="../FAQ.html">FAQ</a></div></li><li><div><a title="How and where to report bugs and request features" class="inactive" href="../bugs.html">Bug reports</a></div></li><li><div><a title="How to contact the developers via email and IRC" class="inactive" href="../contact.html">Contact</a></div></li><li><div><a title="Miscellaneous links of interest related to libvirt" class="inactive" href="../relatedlinks.html">Related Links</a></div></li><li><div><a title="Overview of all content on the website" class="inactive" href="../sitemap.html">Sitemap</a></div></li></ul></div><div id="content"><h1>Reference Manual for libvirt</h1><h2>Table of Contents</h2><ul><li><a href="libvirt-libvirt.html">libvirt</a>: core interfaces for the libvirt library</li><li><a href="libvirt-virterror.html">virterror</a>: error handling interfaces for the libvirt library</li></ul></div></div><div id="footer"><p id="sponsor">
--><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="../main.css" /><link rel="SHORTCUT ICON" href="../32favicon.png" /><title>libvirt: Reference Manual for libvirt</title><meta name="description" content="libvirt, virtualization, virtualization API" /></head><body><div id="header"><div id="headerLogo"></div><div id="headerSearch"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><div><input id="query" name="query" type="text" size="12" value="" /><input id="submit" name="submit" type="submit" value="Search" /></div></form></div></div><div id="body"><div id="menu"><ul class="l0"><li><div><a title="Front page of the libvirt website" class="inactive" href="../index.html">Home</a></div></li><li><div><a title="Details of new features and bugs fixed in each release" class="inactive" href="../news.html">News</a></div></li><li><div><a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="../downloads.html">Downloads</a></div></li><li><div><a title="Information for users, administrators and developers" class="active" href="../docs.html">Documentation</a><ul class="l1"><li><div><a title="Information about deploying and using libvirt" class="inactive" href="../deployment.html">Deployment</a></div></li><li><div><a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="../intro.html">Architecture</a></div></li><li><div><a title="Description of the XML formats used in libvirt" class="inactive" href="../format.html">XML format</a></div></li><li><div><a title="Hypervisor specific driver information" class="inactive" href="../drivers.html">Drivers</a></div></li><li><div><span class="active">API reference</span><ul class="l2"><li><div><a title="core interfaces for the libvirt library" class="inactive" href="../html/libvirt-libvirt.html">libvirt</a></div></li><li><div><a title="error handling interfaces for the libvirt library" class="inactive" href="../html/libvirt-virterror.html">virterror</a></div></li><li><div><a title="matrix of API support per hypervisor per release" class="inactive" href="../hvsupport.html">Driver support</a></div></li></ul></div></li><li><div><a title="Bindings of the libvirt API for other languages" class="inactive" href="../bindings.html">Language bindings</a></div></li><li><div><a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="../internals.html">Internals</a></div></li></ul></div></li><li><div><a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a></div></li><li><div><a title="Frequently asked questions" class="inactive" href="../FAQ.html">FAQ</a></div></li><li><div><a title="How and where to report bugs and request features" class="inactive" href="../bugs.html">Bug reports</a></div></li><li><div><a title="How to contact the developers via email and IRC" class="inactive" href="../contact.html">Contact</a></div></li><li><div><a title="Miscellaneous links of interest related to libvirt" class="inactive" href="../relatedlinks.html">Related Links</a></div></li><li><div><a title="Overview of all content on the website" class="inactive" href="../sitemap.html">Sitemap</a></div></li></ul></div><div id="content"><h1>Reference Manual for libvirt</h1><h2>Table of Contents</h2><ul><li><a href="libvirt-libvirt.html">libvirt</a>: core interfaces for the libvirt library</li><li><a href="libvirt-virterror.html">virterror</a>: error handling interfaces for the libvirt library</li></ul></div></div><div id="footer"><p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="../et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p></div></body></html>

View File

@ -3,13 +3,16 @@
<html xmlns="http://www.w3.org/1999/xhtml"><!--
This file is autogenerated from html/libvirt-libvirt.html.in
Do not edit this file. Changes will be lost.
--><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="../main.css" /><link rel="SHORTCUT ICON" href="../32favicon.png" /><title>libvirt: Module libvirt from libvirt</title><meta name="description" content="libvirt, virtualization, virtualization API" /></head><body><div id="header"><div id="headerLogo"></div><div id="headerSearch"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><div><input id="query" name="query" type="text" size="12" value="" /><input id="submit" name="submit" type="submit" value="Search" /></div></form></div></div><div id="body"><div id="menu"><ul class="l0"><li><div><a title="Front page of the libvirt website" class="inactive" href="../index.html">Home</a></div></li><li><div><a title="Details of new features and bugs fixed in each release" class="inactive" href="../news.html">News</a></div></li><li><div><a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="../downloads.html">Downloads</a></div></li><li><div><a title="Information for users, administrators and developers" class="active" href="../docs.html">Documentation</a><ul class="l1"><li><div><a title="Information about deploying and using libvirt" class="inactive" href="../deployment.html">Deployment</a></div></li><li><div><a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="../intro.html">Architecture</a></div></li><li><div><a title="Description of the XML formats used in libvirt" class="inactive" href="../format.html">XML format</a></div></li><li><div><a title="Hypervisor specific driver information" class="inactive" href="../drivers.html">Drivers</a></div></li><li><div><a title="Reference manual for the C public API" class="active" href="../html/index.html">API reference</a><ul class="l2"><li><div><span class="active">libvirt</span></div></li><li><div><a title="error handling interfaces for the libvirt library" class="inactive" href="../html/libvirt-virterror.html">virterror</a></div></li><li><div><a title="matrix of API support per hypervisor per release" class="inactive" href="../hvsupport.html">Driver support</a></div></li></ul></div></li><li><div><a title="Bindings of the libvirt API for other languages" class="inactive" href="../bindings.html">Language bindings</a></div></li></ul></div></li><li><div><a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a></div></li><li><div><a title="Frequently asked questions" class="inactive" href="../FAQ.html">FAQ</a></div></li><li><div><a title="How and where to report bugs and request features" class="inactive" href="../bugs.html">Bug reports</a></div></li><li><div><a title="How to contact the developers via email and IRC" class="inactive" href="../contact.html">Contact</a></div></li><li><div><a title="Miscellaneous links of interest related to libvirt" class="inactive" href="../relatedlinks.html">Related Links</a></div></li><li><div><a title="Overview of all content on the website" class="inactive" href="../sitemap.html">Sitemap</a></div></li></ul></div><div id="content"><h1>Module libvirt from libvirt</h1><p>Provides the interfaces of the libvirt library to handle virtualized domains </p><h2>Table of Contents</h2><h3><a href="#macros">Macros</a></h3><pre>#define <a href="#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a>
--><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="../main.css" /><link rel="SHORTCUT ICON" href="../32favicon.png" /><title>libvirt: Module libvirt from libvirt</title><meta name="description" content="libvirt, virtualization, virtualization API" /></head><body><div id="header"><div id="headerLogo"></div><div id="headerSearch"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><div><input id="query" name="query" type="text" size="12" value="" /><input id="submit" name="submit" type="submit" value="Search" /></div></form></div></div><div id="body"><div id="menu"><ul class="l0"><li><div><a title="Front page of the libvirt website" class="inactive" href="../index.html">Home</a></div></li><li><div><a title="Details of new features and bugs fixed in each release" class="inactive" href="../news.html">News</a></div></li><li><div><a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="../downloads.html">Downloads</a></div></li><li><div><a title="Information for users, administrators and developers" class="active" href="../docs.html">Documentation</a><ul class="l1"><li><div><a title="Information about deploying and using libvirt" class="inactive" href="../deployment.html">Deployment</a></div></li><li><div><a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="../intro.html">Architecture</a></div></li><li><div><a title="Description of the XML formats used in libvirt" class="inactive" href="../format.html">XML format</a></div></li><li><div><a title="Hypervisor specific driver information" class="inactive" href="../drivers.html">Drivers</a></div></li><li><div><a title="Reference manual for the C public API" class="active" href="../html/index.html">API reference</a><ul class="l2"><li><div><span class="active">libvirt</span></div></li><li><div><a title="error handling interfaces for the libvirt library" class="inactive" href="../html/libvirt-virterror.html">virterror</a></div></li><li><div><a title="matrix of API support per hypervisor per release" class="inactive" href="../hvsupport.html">Driver support</a></div></li></ul></div></li><li><div><a title="Bindings of the libvirt API for other languages" class="inactive" href="../bindings.html">Language bindings</a></div></li><li><div><a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="../internals.html">Internals</a></div></li></ul></div></li><li><div><a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a></div></li><li><div><a title="Frequently asked questions" class="inactive" href="../FAQ.html">FAQ</a></div></li><li><div><a title="How and where to report bugs and request features" class="inactive" href="../bugs.html">Bug reports</a></div></li><li><div><a title="How to contact the developers via email and IRC" class="inactive" href="../contact.html">Contact</a></div></li><li><div><a title="Miscellaneous links of interest related to libvirt" class="inactive" href="../relatedlinks.html">Related Links</a></div></li><li><div><a title="Overview of all content on the website" class="inactive" href="../sitemap.html">Sitemap</a></div></li></ul></div><div id="content"><h1>Module libvirt from libvirt</h1><p>Provides the interfaces of the libvirt library to handle virtualized domains </p><h2>Table of Contents</h2><h3><a href="#macros">Macros</a></h3><pre>#define <a href="#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a>
#define <a href="#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a>
#define <a href="#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a>
#define <a href="#VIR_CPU_USABLE">VIR_CPU_USABLE</a>
#define <a href="#VIR_DOMAIN_SCHED_FIELD_LENGTH">VIR_DOMAIN_SCHED_FIELD_LENGTH</a>
#define <a href="#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a>
#define <a href="#VIR_NODEINFO_MAXCPUS">VIR_NODEINFO_MAXCPUS</a>
#define <a href="#VIR_SECURITY_DOI_BUFLEN">VIR_SECURITY_DOI_BUFLEN</a>
#define <a href="#VIR_SECURITY_LABEL_BUFLEN">VIR_SECURITY_LABEL_BUFLEN</a>
#define <a href="#VIR_SECURITY_MODEL_BUFLEN">VIR_SECURITY_MODEL_BUFLEN</a>
#define <a href="#VIR_UNUSE_CPU">VIR_UNUSE_CPU</a>
#define <a href="#VIR_USE_CPU">VIR_USE_CPU</a>
#define <a href="#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a>
@ -43,6 +46,8 @@ typedef <a href="libvirt-libvirt.html#virDomain">virDomain</a> * <a name="virDom
typedef enum <a href="#virDomainState">virDomainState</a>
typedef enum <a href="#virDomainXMLFlags">virDomainXMLFlags</a>
typedef enum <a href="#virEventHandleType">virEventHandleType</a>
typedef struct _virInterface <a href="#virInterface">virInterface</a>
typedef <a href="libvirt-libvirt.html#virInterface">virInterface</a> * <a name="virInterfacePtr" id="virInterfacePtr">virInterfacePtr</a>
typedef struct _virNetwork <a href="#virNetwork">virNetwork</a>
typedef <a href="libvirt-libvirt.html#virNetwork">virNetwork</a> * <a name="virNetworkPtr" id="virNetworkPtr">virNetworkPtr</a>
typedef struct _virNodeDevice <a href="#virNodeDevice">virNodeDevice</a>
@ -52,6 +57,10 @@ typedef <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> * <a name="vi
typedef struct _virSchedParameter <a href="#virSchedParameter">virSchedParameter</a>
typedef <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a> * <a name="virSchedParameterPtr" id="virSchedParameterPtr">virSchedParameterPtr</a>
typedef enum <a href="#virSchedParameterType">virSchedParameterType</a>
typedef struct _virSecurityLabel <a href="#virSecurityLabel">virSecurityLabel</a>
typedef <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> * <a name="virSecurityLabelPtr" id="virSecurityLabelPtr">virSecurityLabelPtr</a>
typedef struct _virSecurityModel <a href="#virSecurityModel">virSecurityModel</a>
typedef <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> * <a name="virSecurityModelPtr" id="virSecurityModelPtr">virSecurityModelPtr</a>
typedef struct _virStoragePool <a href="#virStoragePool">virStoragePool</a>
typedef enum <a href="#virStoragePoolBuildFlags">virStoragePoolBuildFlags</a>
typedef enum <a href="#virStoragePoolDeleteFlags">virStoragePoolDeleteFlags</a>
@ -77,6 +86,8 @@ int <a href="#virConnectDomainEventCallback">virConnectDomainEventCallback</a> (
int <a href="#virConnectDomainEventDeregister">virConnectDomainEventDeregister</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb)
int <a href="#virConnectDomainEventRegister">virConnectDomainEventRegister</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb, <br /> void * opaque, <br /> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> freecb)
char * <a href="#virConnectDomainXMLFromNative">virConnectDomainXMLFromNative</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * nativeFormat, <br /> const char * nativeConfig, <br /> unsigned int flags)
char * <a href="#virConnectDomainXMLToNative">virConnectDomainXMLToNative</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * nativeFormat, <br /> const char * domainXml, <br /> unsigned int flags)
char * <a href="#virConnectFindStoragePoolSources">virConnectFindStoragePoolSources</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * type, <br /> const char * srcSpec, <br /> unsigned int flags)
char * <a href="#virConnectGetCapabilities">virConnectGetCapabilities</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
char * <a href="#virConnectGetHostname">virConnectGetHostname</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
@ -88,17 +99,20 @@ int <a href="#virConnectListDefinedDomains">virConnectListDefinedDomains</a> (<a
int <a href="#virConnectListDefinedNetworks">virConnectListDefinedNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)
int <a href="#virConnectListDefinedStoragePools">virConnectListDefinedStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)
int <a href="#virConnectListDomains">virConnectListDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> int * ids, <br /> int maxids)
int <a href="#virConnectListInterfaces">virConnectListInterfaces</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)
int <a href="#virConnectListNetworks">virConnectListNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)
int <a href="#virConnectListStoragePools">virConnectListStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)
int <a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfDefinedNetworks">virConnectNumOfDefinedNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfDefinedStoragePools">virConnectNumOfDefinedStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfDomains">virConnectNumOfDomains</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfInterfaces">virConnectNumOfInterfaces</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfNetworks">virConnectNumOfNetworks</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virConnectNumOfStoragePools">virConnectNumOfStoragePools</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virConnectOpen">virConnectOpen</a> (const char * name)
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virConnectOpenAuth">virConnectOpenAuth</a> (const char * name, <br /> <a href="libvirt-libvirt.html#virConnectAuthPtr">virConnectAuthPtr</a> auth, <br /> int flags)
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virConnectOpenReadOnly">virConnectOpenReadOnly</a> (const char * name)
int <a href="#virConnectRef">virConnectRef</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virDomainAttachDevice">virDomainAttachDevice</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * xml)
int <a href="#virDomainBlockPeek">virDomainBlockPeek</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br /> const char * path, <br /> unsigned long long offset, <br /> size_t size, <br /> void * buffer, <br /> unsigned int flags)
int <a href="#virDomainBlockStats">virDomainBlockStats</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br /> const char * path, <br /> <a href="libvirt-libvirt.html#virDomainBlockStatsPtr">virDomainBlockStatsPtr</a> stats, <br /> size_t size)
@ -120,6 +134,7 @@ const char * <a href="#virDomainGetName">virDomainGetName</a> (<a href="libvirt-
char * <a href="#virDomainGetOSType">virDomainGetOSType</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)
int <a href="#virDomainGetSchedulerParameters">virDomainGetSchedulerParameters</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br /> int * nparams)
char * <a href="#virDomainGetSchedulerType">virDomainGetSchedulerType</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int * nparams)
int <a href="#virDomainGetSecurityLabel">virDomainGetSecurityLabel</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virSecurityLabelPtr">virSecurityLabelPtr</a> seclabel)
int <a href="#virDomainGetUUID">virDomainGetUUID</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned char * uuid)
int <a href="#virDomainGetUUIDString">virDomainGetUUIDString</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> char * buf)
int <a href="#virDomainGetVcpus">virDomainGetVcpus</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virVcpuInfoPtr">virVcpuInfoPtr</a> info, <br /> int maxinfo, <br /> unsigned char * cpumaps, <br /> int maplen)
@ -133,6 +148,7 @@ int <a href="#virDomainMemoryPeek">virDomainMemoryPeek</a> (<a href="libvirt-li
<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> <a href="#virDomainMigrate">virDomainMigrate</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> dconn, <br /> unsigned long flags, <br /> const char * dname, <br /> const char * uri, <br /> unsigned long bandwidth)
int <a href="#virDomainPinVcpu">virDomainPinVcpu</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned int vcpu, <br /> unsigned char * cpumap, <br /> int maplen)
int <a href="#virDomainReboot">virDomainReboot</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned int flags)
int <a href="#virDomainRef">virDomainRef</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)
int <a href="#virDomainRestore">virDomainRestore</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * from)
int <a href="#virDomainResume">virDomainResume</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)
int <a href="#virDomainSave">virDomainSave</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * to)
@ -174,6 +190,18 @@ void <a href="#virFreeCallback">virFreeCallback</a> (void * opaque)
int <a href="#virGetVersion">virGetVersion</a> (unsigned long * libVer, <br /> const char * type, <br /> unsigned long * typeVer)
int <a href="#virInitialize">virInitialize</a> (void)
int <a href="#virInterfaceCreate">virInterfaceCreate</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceDefineXML">virInterfaceDefineXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xml, <br /> unsigned int flags)
int <a href="#virInterfaceDestroy">virInterfaceDestroy</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)
int <a href="#virInterfaceFree">virInterfaceFree</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virInterfaceGetConnect">virInterfaceGetConnect</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
const char * <a href="#virInterfaceGetMACString">virInterfaceGetMACString</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
const char * <a href="#virInterfaceGetName">virInterfaceGetName</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
char * <a href="#virInterfaceGetXMLDesc">virInterfaceGetXMLDesc</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceLookupByMACString">virInterfaceLookupByMACString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * macstr)
<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> <a href="#virInterfaceLookupByName">virInterfaceLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)
int <a href="#virInterfaceRef">virInterfaceRef</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
int <a href="#virInterfaceUndefine">virInterfaceUndefine</a> (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)
int <a href="#virNetworkCreate">virNetworkCreate</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkCreateXML">virNetworkCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc)
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkDefineXML">virNetworkDefineXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xml)
@ -189,8 +217,12 @@ char * <a href="#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a> (<a href="libvi
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByName">virNetworkLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByUUID">virNetworkLookupByUUID</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const unsigned char * uuid)
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * uuidstr)
int <a href="#virNetworkRef">virNetworkRef</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)
int <a href="#virNetworkSetAutostart">virNetworkSetAutostart</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br /> int autostart)
int <a href="#virNetworkUndefine">virNetworkUndefine</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)
<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> <a href="#virNodeDeviceCreateXML">virNodeDeviceCreateXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc, <br /> unsigned int flags)
int <a href="#virNodeDeviceDestroy">virNodeDeviceDestroy</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeDeviceDettach">virNodeDeviceDettach</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeDeviceFree">virNodeDeviceFree</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
const char * <a href="#virNodeDeviceGetName">virNodeDeviceGetName</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
const char * <a href="#virNodeDeviceGetParent">virNodeDeviceGetParent</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
@ -198,9 +230,13 @@ char * <a href="#virNodeDeviceGetXMLDesc">virNodeDeviceGetXMLDesc</a> (<a href=
int <a href="#virNodeDeviceListCaps">virNodeDeviceListCaps</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev, <br /> char ** const names, <br /> int maxnames)
<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> <a href="#virNodeDeviceLookupByName">virNodeDeviceLookupByName</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)
int <a href="#virNodeDeviceNumOfCaps">virNodeDeviceNumOfCaps</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeDeviceReAttach">virNodeDeviceReAttach</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeDeviceRef">virNodeDeviceRef</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeDeviceReset">virNodeDeviceReset</a> (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)
int <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> unsigned long long * freeMems, <br /> int startCell, <br /> int maxCells)
unsigned long long <a href="#virNodeGetFreeMemory">virNodeGetFreeMemory</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)
int <a href="#virNodeGetInfo">virNodeGetInfo</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)
int <a href="#virNodeGetSecurityModel">virNodeGetSecurityModel</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virSecurityModelPtr">virSecurityModelPtr</a> secmodel)
int <a href="#virNodeListDevices">virNodeListDevices</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * cap, <br /> char ** const names, <br /> int maxnames, <br /> unsigned int flags)
int <a href="#virNodeNumOfDevices">virNodeNumOfDevices</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * cap, <br /> unsigned int flags)
int <a href="#virStoragePoolBuild">virStoragePoolBuild</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)
@ -223,10 +259,12 @@ int <a href="#virStoragePoolListVolumes">virStoragePoolListVolumes</a> (<a href=
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolLookupByUUIDString">virStoragePoolLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * uuidstr)
<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> <a href="#virStoragePoolLookupByVolume">virStoragePoolLookupByVolume</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)
int <a href="#virStoragePoolNumOfVolumes">virStoragePoolNumOfVolumes</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)
int <a href="#virStoragePoolRef">virStoragePoolRef</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)
int <a href="#virStoragePoolRefresh">virStoragePoolRefresh</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)
int <a href="#virStoragePoolSetAutostart">virStoragePoolSetAutostart</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> int autostart)
int <a href="#virStoragePoolUndefine">virStoragePoolUndefine</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolCreateXML">virStorageVolCreateXML</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * xmldesc, <br /> unsigned int flags)
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolCreateXMLFrom">virStorageVolCreateXMLFrom</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * xmldesc, <br /> <a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> clonevol, <br /> unsigned int flags)
int <a href="#virStorageVolDelete">virStorageVolDelete</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br /> unsigned int flags)
int <a href="#virStorageVolFree">virStorageVolFree</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)
<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> <a href="#virStorageVolGetConnect">virStorageVolGetConnect</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)
@ -238,7 +276,8 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByKey">virStorageVolLookupByKey</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * key)
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByName">virStorageVolLookupByName</a> (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * name)
<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> <a href="#virStorageVolLookupByPath">virStorageVolLookupByPath</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * path)
</pre><h2>Description</h2><h3><a name="macros" id="macros">Macros</a></h3><h3><a name="LIBVIR_VERSION_NUMBER" id="LIBVIR_VERSION_NUMBER"><code>LIBVIR_VERSION_NUMBER</code></a></h3><pre>#define LIBVIR_VERSION_NUMBER</pre><p>Macro providing the version of the library as version * 1,000,000 + minor * 1000 + micro</p><h3><a name="VIR_COPY_CPUMAP" id="VIR_COPY_CPUMAP"><code>VIR_COPY_CPUMAP</code></a></h3><pre>#define VIR_COPY_CPUMAP</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() and virDomainPinVcpu() APIs. <a href="libvirt-libvirt.html#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a> macro extract the cpumap of the specified vcpu from cpumaps array and copy it into cpumap to be used later by virDomainPinVcpu() API.</p><h3><a name="VIR_CPU_MAPLEN" id="VIR_CPU_MAPLEN"><code>VIR_CPU_MAPLEN</code></a></h3><pre>#define VIR_CPU_MAPLEN</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. It returns the length (in bytes) required to store the complete CPU map between a single virtual &amp; all physical CPUs of a domain.</p><h3><a name="VIR_CPU_USABLE" id="VIR_CPU_USABLE"><code>VIR_CPU_USABLE</code></a></h3><pre>#define VIR_CPU_USABLE</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() API. <a href="libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a> macro returns a non zero value (true) if the cpu is usable by the vcpu, and 0 otherwise.</p><h3><a name="VIR_DOMAIN_SCHED_FIELD_LENGTH" id="VIR_DOMAIN_SCHED_FIELD_LENGTH"><code>VIR_DOMAIN_SCHED_FIELD_LENGTH</code></a></h3><pre>#define VIR_DOMAIN_SCHED_FIELD_LENGTH</pre><p>Macro providing the field length of <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a></p><h3><a name="VIR_GET_CPUMAP" id="VIR_GET_CPUMAP"><code>VIR_GET_CPUMAP</code></a></h3><pre>#define VIR_GET_CPUMAP</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() and virDomainPinVcpu() APIs. <a href="libvirt-libvirt.html#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a> macro returns a pointer to the cpumap of the specified vcpu from cpumaps array.</p><h3><a name="VIR_NODEINFO_MAXCPUS" id="VIR_NODEINFO_MAXCPUS"><code>VIR_NODEINFO_MAXCPUS</code></a></h3><pre>#define VIR_NODEINFO_MAXCPUS</pre><p>This macro is to calculate the total number of CPUs supported but not necessary active in the host.</p><h3><a name="VIR_UNUSE_CPU" id="VIR_UNUSE_CPU"><code>VIR_UNUSE_CPU</code></a></h3><pre>#define VIR_UNUSE_CPU</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.</p><h3><a name="VIR_USE_CPU" id="VIR_USE_CPU"><code>VIR_USE_CPU</code></a></h3><pre>#define VIR_USE_CPU</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.</p><h3><a name="VIR_UUID_BUFLEN" id="VIR_UUID_BUFLEN"><code>VIR_UUID_BUFLEN</code></a></h3><pre>#define VIR_UUID_BUFLEN</pre><p>This macro provides the length of the buffer required for virDomainGetUUID()</p><h3><a name="VIR_UUID_STRING_BUFLEN" id="VIR_UUID_STRING_BUFLEN"><code>VIR_UUID_STRING_BUFLEN</code></a></h3><pre>#define VIR_UUID_STRING_BUFLEN</pre><p>This macro provides the length of the buffer required for virDomainGetUUIDString()</p><h3><a name="types" id="types">Types</a></h3><h3><a name="virConnect" id="virConnect"><code>virConnect</code></a></h3><div class="api"><pre>struct virConnect{
int <a href="#virStorageVolRef">virStorageVolRef</a> (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)
</pre><h2>Description</h2><h3><a name="macros" id="macros">Macros</a></h3><h3><a name="LIBVIR_VERSION_NUMBER" id="LIBVIR_VERSION_NUMBER"><code>LIBVIR_VERSION_NUMBER</code></a></h3><pre>#define LIBVIR_VERSION_NUMBER</pre><p>Macro providing the version of the library as version * 1,000,000 + minor * 1000 + micro</p><h3><a name="VIR_COPY_CPUMAP" id="VIR_COPY_CPUMAP"><code>VIR_COPY_CPUMAP</code></a></h3><pre>#define VIR_COPY_CPUMAP</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() and virDomainPinVcpu() APIs. <a href="libvirt-libvirt.html#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a> macro extract the cpumap of the specified vcpu from cpumaps array and copy it into cpumap to be used later by virDomainPinVcpu() API.</p><h3><a name="VIR_CPU_MAPLEN" id="VIR_CPU_MAPLEN"><code>VIR_CPU_MAPLEN</code></a></h3><pre>#define VIR_CPU_MAPLEN</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. It returns the length (in bytes) required to store the complete CPU map between a single virtual &amp; all physical CPUs of a domain.</p><h3><a name="VIR_CPU_USABLE" id="VIR_CPU_USABLE"><code>VIR_CPU_USABLE</code></a></h3><pre>#define VIR_CPU_USABLE</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() API. <a href="libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a> macro returns a non zero value (true) if the cpu is usable by the vcpu, and 0 otherwise.</p><h3><a name="VIR_DOMAIN_SCHED_FIELD_LENGTH" id="VIR_DOMAIN_SCHED_FIELD_LENGTH"><code>VIR_DOMAIN_SCHED_FIELD_LENGTH</code></a></h3><pre>#define VIR_DOMAIN_SCHED_FIELD_LENGTH</pre><p>Macro providing the field length of <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a></p><h3><a name="VIR_GET_CPUMAP" id="VIR_GET_CPUMAP"><code>VIR_GET_CPUMAP</code></a></h3><pre>#define VIR_GET_CPUMAP</pre><p>This macro is to be used in conjunction with virDomainGetVcpus() and virDomainPinVcpu() APIs. <a href="libvirt-libvirt.html#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a> macro returns a pointer to the cpumap of the specified vcpu from cpumaps array.</p><h3><a name="VIR_NODEINFO_MAXCPUS" id="VIR_NODEINFO_MAXCPUS"><code>VIR_NODEINFO_MAXCPUS</code></a></h3><pre>#define VIR_NODEINFO_MAXCPUS</pre><p>This macro is to calculate the total number of CPUs supported but not necessary active in the host.</p><h3><a name="VIR_SECURITY_DOI_BUFLEN" id="VIR_SECURITY_DOI_BUFLEN"><code>VIR_SECURITY_DOI_BUFLEN</code></a></h3><pre>#define VIR_SECURITY_DOI_BUFLEN</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> doi string.</p><h3><a name="VIR_SECURITY_LABEL_BUFLEN" id="VIR_SECURITY_LABEL_BUFLEN"><code>VIR_SECURITY_LABEL_BUFLEN</code></a></h3><pre>#define VIR_SECURITY_LABEL_BUFLEN</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> label string. Note that this value is based on that used by Labeled NFS.</p><h3><a name="VIR_SECURITY_MODEL_BUFLEN" id="VIR_SECURITY_MODEL_BUFLEN"><code>VIR_SECURITY_MODEL_BUFLEN</code></a></h3><pre>#define VIR_SECURITY_MODEL_BUFLEN</pre><p>Macro providing the maximum length of the <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> model string.</p><h3><a name="VIR_UNUSE_CPU" id="VIR_UNUSE_CPU"><code>VIR_UNUSE_CPU</code></a></h3><pre>#define VIR_UNUSE_CPU</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.</p><h3><a name="VIR_USE_CPU" id="VIR_USE_CPU"><code>VIR_USE_CPU</code></a></h3><pre>#define VIR_USE_CPU</pre><p>This macro is to be used in conjunction with virDomainPinVcpu() API. USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.</p><h3><a name="VIR_UUID_BUFLEN" id="VIR_UUID_BUFLEN"><code>VIR_UUID_BUFLEN</code></a></h3><pre>#define VIR_UUID_BUFLEN</pre><p>This macro provides the length of the buffer required for virDomainGetUUID()</p><h3><a name="VIR_UUID_STRING_BUFLEN" id="VIR_UUID_STRING_BUFLEN"><code>VIR_UUID_STRING_BUFLEN</code></a></h3><pre>#define VIR_UUID_STRING_BUFLEN</pre><p>This macro provides the length of the buffer required for virDomainGetUUIDString()</p><h3><a name="types" id="types">Types</a></h3><h3><a name="virConnect" id="virConnect"><code>virConnect</code></a></h3><div class="api"><pre>struct virConnect{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
</pre></div><h3><a name="virConnectAuth" id="virConnectAuth"><code>virConnectAuth</code></a></h3><div class="api"><pre>struct virConnectAuth{
@ -289,6 +328,9 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><table><tr><td><a name="VIR_DOMAIN_XML_SECURE" id="VIR_DOMAIN_XML_SECURE">VIR_DOMAIN_XML_SECURE</a></td><td> = </td><td>1</td><td> : dump security sensitive information too</td></tr><tr><td><a name="VIR_DOMAIN_XML_INACTIVE" id="VIR_DOMAIN_XML_INACTIVE">VIR_DOMAIN_XML_INACTIVE</a></td><td> = </td><td>2</td><td> : dump inactive domain information</td></tr></table><pre>}
</pre></div><h3><a name="virEventHandleType" id="virEventHandleType"><code>virEventHandleType</code></a></h3><div class="api"><pre>enum virEventHandleType {
</pre><table><tr><td><a name="VIR_EVENT_HANDLE_READABLE" id="VIR_EVENT_HANDLE_READABLE">VIR_EVENT_HANDLE_READABLE</a></td><td> = </td><td>1</td></tr><tr><td><a name="VIR_EVENT_HANDLE_WRITABLE" id="VIR_EVENT_HANDLE_WRITABLE">VIR_EVENT_HANDLE_WRITABLE</a></td><td> = </td><td>2</td></tr><tr><td><a name="VIR_EVENT_HANDLE_ERROR" id="VIR_EVENT_HANDLE_ERROR">VIR_EVENT_HANDLE_ERROR</a></td><td> = </td><td>4</td></tr><tr><td><a name="VIR_EVENT_HANDLE_HANGUP" id="VIR_EVENT_HANDLE_HANGUP">VIR_EVENT_HANDLE_HANGUP</a></td><td> = </td><td>8</td></tr></table><pre>}
</pre></div><h3><a name="virInterface" id="virInterface"><code>virInterface</code></a></h3><div class="api"><pre>struct virInterface{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
</pre></div><h3><a name="virNetwork" id="virNetwork"><code>virNetwork</code></a></h3><div class="api"><pre>struct virNetwork{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
@ -303,6 +345,12 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
}
</pre></div><h3><a name="virSchedParameterType" id="virSchedParameterType"><code>virSchedParameterType</code></a></h3><div class="api"><pre>enum virSchedParameterType {
</pre><table><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_INT" id="VIR_DOMAIN_SCHED_FIELD_INT">VIR_DOMAIN_SCHED_FIELD_INT</a></td><td> = </td><td>1</td><td> : integer case</td></tr><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_UINT" id="VIR_DOMAIN_SCHED_FIELD_UINT">VIR_DOMAIN_SCHED_FIELD_UINT</a></td><td> = </td><td>2</td><td> : unsigned integer case</td></tr><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_LLONG" id="VIR_DOMAIN_SCHED_FIELD_LLONG">VIR_DOMAIN_SCHED_FIELD_LLONG</a></td><td> = </td><td>3</td><td> : long long case</td></tr><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_ULLONG" id="VIR_DOMAIN_SCHED_FIELD_ULLONG">VIR_DOMAIN_SCHED_FIELD_ULLONG</a></td><td> = </td><td>4</td><td> : unsigned long long case</td></tr><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_DOUBLE" id="VIR_DOMAIN_SCHED_FIELD_DOUBLE">VIR_DOMAIN_SCHED_FIELD_DOUBLE</a></td><td> = </td><td>5</td><td> : double case</td></tr><tr><td><a name="VIR_DOMAIN_SCHED_FIELD_BOOLEAN" id="VIR_DOMAIN_SCHED_FIELD_BOOLEAN">VIR_DOMAIN_SCHED_FIELD_BOOLEAN</a></td><td> = </td><td>6</td><td> : boolean(character) case</td></tr></table><pre>}
</pre></div><h3><a name="virSecurityLabel" id="virSecurityLabel"><code>virSecurityLabel</code></a></h3><div class="api"><pre>struct virSecurityLabel{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
</pre></div><h3><a name="virSecurityModel" id="virSecurityModel"><code>virSecurityModel</code></a></h3><div class="api"><pre>struct virSecurityModel{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
</pre></div><h3><a name="virStoragePool" id="virStoragePool"><code>virStoragePool</code></a></h3><div class="api"><pre>struct virStoragePool{
</pre><table><tr><td colspan="3">The content of this structure is not made public by the API</td></tr></table><pre>
}
@ -335,7 +383,9 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>This function closes the connection to the Hypervisor. This should not be called if further interaction with the Hypervisor are needed especially if there is running domain which need further monitoring by the application.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or -1 in case of error.</td></tr></tbody></table></div><h3><a name="virConnectDomainEventCallback" id="virConnectDomainEventCallback"><code>virConnectDomainEventCallback</code></a></h3><pre class="programlisting">typedef int (*virConnectDomainEventCallback) (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br /> int event, <br /> int detail, <br /> void * opaque)
</pre><p>A callback function to be registered, and called when a domain event occurs</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td><a href="libvirt-libvirt.html#virConnect">virConnect</a> connection</td></tr><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>The domain on which the event occured</td></tr><tr><td><span class="term"><i><tt>event</tt></i>:</span></td><td>The specfic <a href="libvirt-libvirt.html#virDomainEventType">virDomainEventType</a> which occured</td></tr><tr><td><span class="term"><i><tt>detail</tt></i>:</span></td><td>event specific detail information</td></tr><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td>opaque user data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><br /><h3><a name="virConnectDomainEventDeregister" id="virConnectDomainEventDeregister"><code>virConnectDomainEventDeregister</code></a></h3><pre class="programlisting">int virConnectDomainEventDeregister (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb)<br />
</pre><p>Removes a Domain Event Callback. De-registering for a domain callback will disable delivery of this event type</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on failure</td></tr></tbody></table></div><h3><a name="virConnectDomainEventRegister" id="virConnectDomainEventRegister"><code>virConnectDomainEventRegister</code></a></h3><pre class="programlisting">int virConnectDomainEventRegister (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virConnectDomainEventCallback">virConnectDomainEventCallback</a> cb, <br /> void * opaque, <br /> <a href="libvirt-libvirt.html#virFreeCallback">virFreeCallback</a> freecb)<br />
</pre><p>Adds a Domain Event Callback. Registering for a domain callback will enable delivery of the events</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td>opaque data to pass on to the callback</td></tr><tr><td><span class="term"><i><tt>freecb</tt></i>:</span></td><td>optional function to deallocate opaque when not used anymore</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on failure</td></tr></tbody></table></div><h3><a name="virConnectFindStoragePoolSources" id="virConnectFindStoragePoolSources"><code>virConnectFindStoragePoolSources</code></a></h3><pre class="programlisting">char * virConnectFindStoragePoolSources (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * type, <br /> const char * srcSpec, <br /> unsigned int flags)<br />
</pre><p>Adds a Domain Event Callback. Registering for a domain callback will enable delivery of the events The <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> object handle passed into the callback upon delivery of an event is only valid for the duration of execution of the callback. If the callback wishes to keep the domain object after the callback</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the connection</td></tr><tr><td><span class="term"><i><tt>cb</tt></i>:</span></td><td>callback to the function handling domain events</td></tr><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td>opaque data to pass on to the callback</td></tr><tr><td><span class="term"><i><tt>freecb</tt></i>:</span></td><td>optional function to deallocate opaque when not used anymore</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>it shall take a reference to it, by calling virDomainRef. The reference can be released once the object is no longer required by calling virDomainFree. Returns 0 on success, -1 on failure</td></tr></tbody></table></div><h3><a name="virConnectDomainXMLFromNative" id="virConnectDomainXMLFromNative"><code>virConnectDomainXMLFromNative</code></a></h3><pre class="programlisting">char * virConnectDomainXMLFromNative (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * nativeFormat, <br /> const char * nativeConfig, <br /> unsigned int flags)<br />
</pre><p>Reads native configuration data describing a domain, and generates libvirt domain XML. The format of the native data is hypervisor dependant.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>nativeFormat</tt></i>:</span></td><td>configuration format importing from</td></tr><tr><td><span class="term"><i><tt>nativeConfig</tt></i>:</span></td><td>the configuration data to import</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>currently unused, pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded XML instance, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div><h3><a name="virConnectDomainXMLToNative" id="virConnectDomainXMLToNative"><code>virConnectDomainXMLToNative</code></a></h3><pre class="programlisting">char * virConnectDomainXMLToNative (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * nativeFormat, <br /> const char * domainXml, <br /> unsigned int flags)<br />
</pre><p>Reads a domain XML configuration document, and generates generates a native configuration file describing the domain. The format of the native data is hypervisor dependant.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>nativeFormat</tt></i>:</span></td><td>configuration format exporting to</td></tr><tr><td><span class="term"><i><tt>domainXml</tt></i>:</span></td><td>the domain configuration to export</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>currently unused, pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded native config datafile, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div><h3><a name="virConnectFindStoragePoolSources" id="virConnectFindStoragePoolSources"><code>virConnectFindStoragePoolSources</code></a></h3><pre class="programlisting">char * virConnectFindStoragePoolSources (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * type, <br /> const char * srcSpec, <br /> unsigned int flags)<br />
</pre><p>Talks to a storage backend and attempts to auto-discover the set of available storage pool sources. e.g. For iSCSI this would be a set of iSCSI targets. For NFS this would be a list of exported paths. The srcSpec (optional for some storage pool types, e.g. local ones) is an instance of the storage pool's source element specifying where to look for the pools. srcSpec is not required for some types (e.g., those querying local storage resources only)</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>type of storage pool sources to discover</td></tr><tr><td><span class="term"><i><tt>srcSpec</tt></i>:</span></td><td>XML document specifying discovery source</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for discovery (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an xml document consisting of a SourceList element containing a source document appropriate to the given pool type for each discovered source.</td></tr></tbody></table></div><h3><a name="virConnectGetCapabilities" id="virConnectGetCapabilities"><code>virConnectGetCapabilities</code></a></h3><pre class="programlisting">char * virConnectGetCapabilities (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides capabilities of the hypervisor / driver.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, or an XML string defining the capabilities. The client must free the returned string after use.</td></tr></tbody></table></div><h3><a name="virConnectGetHostname" id="virConnectGetHostname"><code>virConnectGetHostname</code></a></h3><pre class="programlisting">char * virConnectGetHostname (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>This returns the system hostname on which the hypervisor is running (the result of the gethostname(2) system call). If we are connected to a remote system, then this returns the hostname of the remote system.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to a hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the hostname which must be freed by the caller, or NULL if there was an error.</td></tr></tbody></table></div><h3><a name="virConnectGetMaxVcpus" id="virConnectGetMaxVcpus"><code>virConnectGetMaxVcpus</code></a></h3><pre class="programlisting">int virConnectGetMaxVcpus (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * type)<br />
@ -346,18 +396,21 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>list the defined but inactive domains, stores the pointers to the names in @names</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>pointer to an array to store the names</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of the array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of names provided in the array or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListDefinedNetworks" id="virConnectListDefinedNetworks"><code>virConnectListDefinedNetworks</code></a></h3><pre class="programlisting">int virConnectListDefinedNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>list the inactive networks, stores the pointers to the names in @names</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>pointer to an array to store the names</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of the array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of names provided in the array or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListDefinedStoragePools" id="virConnectListDefinedStoragePools"><code>virConnectListDefinedStoragePools</code></a></h3><pre class="programlisting">int virConnectListDefinedStoragePools (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Provides the list of names of inactive storage pools upto maxnames. If there are more than maxnames, the remaining names will be silently ignored.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array of char * to fill with pool names (allocated by caller)</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of the names array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on error</td></tr></tbody></table></div><h3><a name="virConnectListDomains" id="virConnectListDomains"><code>virConnectListDomains</code></a></h3><pre class="programlisting">int virConnectListDomains (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> int * ids, <br /> int maxids)<br />
</pre><p>Collect the list of active domains, and store their ID in @maxids</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>ids</tt></i>:</span></td><td>array to collect the list of IDs of active domains</td></tr><tr><td><span class="term"><i><tt>maxids</tt></i>:</span></td><td>size of @ids</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListNetworks" id="virConnectListNetworks"><code>virConnectListNetworks</code></a></h3><pre class="programlisting">int virConnectListNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Collect the list of active domains, and store their ID in @maxids</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>ids</tt></i>:</span></td><td>array to collect the list of IDs of active domains</td></tr><tr><td><span class="term"><i><tt>maxids</tt></i>:</span></td><td>size of @ids</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListInterfaces" id="virConnectListInterfaces"><code>virConnectListInterfaces</code></a></h3><pre class="programlisting">int virConnectListInterfaces (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Collect the list of physical host interfaces, and store their names in @names</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array to collect the list of names of interfaces</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of @names</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of interfaces found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListNetworks" id="virConnectListNetworks"><code>virConnectListNetworks</code></a></h3><pre class="programlisting">int virConnectListNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Collect the list of active networks, and store their names in @names</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array to collect the list of names of active networks</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of @names</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of networks found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectListStoragePools" id="virConnectListStoragePools"><code>virConnectListStoragePools</code></a></h3><pre class="programlisting">int virConnectListStoragePools (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Provides the list of names of active storage pools upto maxnames. If there are more than maxnames, the remaining names will be silently ignored.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array of char * to fill with pool names (allocated by caller)</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of the names array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on error</td></tr></tbody></table></div><h3><a name="virConnectNumOfDefinedDomains" id="virConnectNumOfDefinedDomains"><code>virConnectNumOfDefinedDomains</code></a></h3><pre class="programlisting">int virConnectNumOfDefinedDomains (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of defined but inactive domains.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfDefinedNetworks" id="virConnectNumOfDefinedNetworks"><code>virConnectNumOfDefinedNetworks</code></a></h3><pre class="programlisting">int virConnectNumOfDefinedNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of inactive networks.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of networks found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfDefinedStoragePools" id="virConnectNumOfDefinedStoragePools"><code>virConnectNumOfDefinedStoragePools</code></a></h3><pre class="programlisting">int virConnectNumOfDefinedStoragePools (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of inactive storage pools</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of pools found, or -1 on error</td></tr></tbody></table></div><h3><a name="virConnectNumOfDomains" id="virConnectNumOfDomains"><code>virConnectNumOfDomains</code></a></h3><pre class="programlisting">int virConnectNumOfDomains (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of active domains.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfNetworks" id="virConnectNumOfNetworks"><code>virConnectNumOfNetworks</code></a></h3><pre class="programlisting">int virConnectNumOfNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of active domains.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of domain found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfInterfaces" id="virConnectNumOfInterfaces"><code>virConnectNumOfInterfaces</code></a></h3><pre class="programlisting">int virConnectNumOfInterfaces (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of interfaces on the physical host.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of interface found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfNetworks" id="virConnectNumOfNetworks"><code>virConnectNumOfNetworks</code></a></h3><pre class="programlisting">int virConnectNumOfNetworks (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of active networks.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of network found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virConnectNumOfStoragePools" id="virConnectNumOfStoragePools"><code>virConnectNumOfStoragePools</code></a></h3><pre class="programlisting">int virConnectNumOfStoragePools (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Provides the number of active storage pools</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of pools found, or -1 on error</td></tr></tbody></table></div><h3><a name="virConnectOpen" id="virConnectOpen"><code>virConnectOpen</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virConnectOpen (const char * name)<br />
</pre><p>This function should be called first to get a connection to the Hypervisor and xen store</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div><h3><a name="virConnectOpenAuth" id="virConnectOpenAuth"><code>virConnectOpenAuth</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virConnectOpenAuth (const char * name, <br /> <a href="libvirt-libvirt.html#virConnectAuthPtr">virConnectAuthPtr</a> auth, <br /> int flags)<br />
</pre><p>This function should be called first to get a connection to the Hypervisor. If necessary, authentication will be performed fetching credentials via the callback</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>auth</tt></i>:</span></td><td>Authenticate callback parameters</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>Open flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div><h3><a name="virConnectOpenReadOnly" id="virConnectOpenReadOnly"><code>virConnectOpenReadOnly</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virConnectOpenReadOnly (const char * name)<br />
</pre><p>This function should be called first to get a restricted connection to the library functionalities. The set of APIs usable are then restricted on the available methods to control the domains.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div><h3><a name="virDomainAttachDevice" id="virDomainAttachDevice"><code>virDomainAttachDevice</code></a></h3><pre class="programlisting">int virDomainAttachDevice (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * xml)<br />
</pre><p>This function should be called first to get a restricted connection to the library functionalities. The set of APIs usable are then restricted on the available methods to control the domains.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div><h3><a name="virConnectRef" id="virConnectRef"><code>virConnectRef</code></a></h3><pre class="programlisting">int virConnectRef (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>Increment the reference count on the connection. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virConnectClose">virConnectClose</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a connection would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>the connection to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div><h3><a name="virDomainAttachDevice" id="virDomainAttachDevice"><code>virDomainAttachDevice</code></a></h3><pre class="programlisting">int virDomainAttachDevice (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * xml)<br />
</pre><p>Create a virtual device attachment to backend.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>pointer to XML description of one device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainBlockPeek" id="virDomainBlockPeek"><code>virDomainBlockPeek</code></a></h3><pre class="programlisting">int virDomainBlockPeek (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br /> const char * path, <br /> unsigned long long offset, <br /> size_t size, <br /> void * buffer, <br /> unsigned int flags)<br />
</pre><p>This function allows you to read the contents of a domain's disk device. Typical uses for this are to determine if the domain has written a Master Boot Record (indicating that the domain has completed installation), or to try to work out the state of the domain's filesystems. (Note that in the local case you might try to open the block device or file directly, but that won't work in the remote case, nor if you don't have sufficient permission. Hence the need for this call). 'path' must be a device or file corresponding to the domain. In other words it must be the precise string returned in a &lt;disk&gt;&lt;source dev='...'/&gt;&lt;/disk&gt; from virDomainGetXMLDesc. 'offset' and 'size' represent an area which must lie entirely within the device or file. 'size' may be 0 to test if the call would succeed. 'buffer' is the return buffer and must be at least 'size' bytes. NB. The remote driver imposes a 64K byte limit on 'size'. For your program to be able to work reliably over a remote connection you should split large requests to &lt;= 65536 bytes.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to the domain object</td></tr><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>path to the block device</td></tr><tr><td><span class="term"><i><tt>offset</tt></i>:</span></td><td>offset within block device</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>size to read</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>return buffer (must be at least size bytes)</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>unused, always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or -1 in case of failure. really 64 bits</td></tr></tbody></table></div><h3><a name="virDomainBlockStats" id="virDomainBlockStats"><code>virDomainBlockStats</code></a></h3><pre class="programlisting">int virDomainBlockStats (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br /> const char * path, <br /> <a href="libvirt-libvirt.html#virDomainBlockStatsPtr">virDomainBlockStatsPtr</a> stats, <br /> size_t size)<br />
</pre><p>This function returns block device (disk) stats for block devices attached to the domain. The path parameter is the name of the block device. Get this by calling <a href="libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a> and finding the &lt;target dev='...'&gt; attribute within //domain/devices/disk. (For example, "xvda"). Domains may have more than one block device. To get stats for each you should make multiple calls to this function. Individual fields within the stats structure may be returned as -1, which indicates that the hypervisor does not support that particular statistic.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to the domain object</td></tr><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>path to the block device</td></tr><tr><td><span class="term"><i><tt>stats</tt></i>:</span></td><td>block device stats (returned)</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>size of stats structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainCoreDump" id="virDomainCoreDump"><code>virDomainCoreDump</code></a></h3><pre class="programlisting">int virDomainCoreDump (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * to, <br /> int flags)<br />
@ -365,7 +418,7 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>launch a defined domain. If the call succeed the domain moves from the defined to the running domains pools.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to a defined domain</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virDomainCreateLinux" id="virDomainCreateLinux"><code>virDomainCreateLinux</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> virDomainCreateLinux (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc, <br /> unsigned int flags)<br />
</pre><p>Deprecated after 0.4.6. Renamed to virDomainCreateXML() providing identical functionality. This existing name will left indefinitely for API compatability.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>string containing an XML description of the domain</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>callers should always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new domain object or NULL in case of failure</td></tr></tbody></table></div><h3><a name="virDomainCreateXML" id="virDomainCreateXML"><code>virDomainCreateXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> virDomainCreateXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc, <br /> unsigned int flags)<br />
</pre><p>Launch a new guest domain, based on an XML description similar to the one returned by virDomainGetXMLDesc() This function may requires privileged access to the hypervisor. The domain is not persistent, so its definition will disappear when it is destroyed, or if the host is restarted (see virDomainDefineXML() to define persistent domains).</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>string containing an XML description of the domain</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>callers should always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new domain object or NULL in case of failure</td></tr></tbody></table></div><h3><a name="virDomainDefineXML" id="virDomainDefineXML"><code>virDomainDefineXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> virDomainDefineXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xml)<br />
</pre><p>Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the domain, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the domain otherwise</td></tr></tbody></table></div><h3><a name="virDomainDestroy" id="virDomainDestroy"><code>virDomainDestroy</code></a></h3><pre class="programlisting">int virDomainDestroy (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Define a domain, but does not start it. This definition is persistent, until explicitly undefined with virDomainUndefine(). A previous definition for this domain would be overriden if it already exists.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the domain, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the domain otherwise</td></tr></tbody></table></div><h3><a name="virDomainDestroy" id="virDomainDestroy"><code>virDomainDestroy</code></a></h3><pre class="programlisting">int virDomainDestroy (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Destroy the domain object. The running instance is shutdown if not down already and all resources used by it are given back to the hypervisor. This does not free the associated <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> object. This function may require privileged access</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainDetachDevice" id="virDomainDetachDevice"><code>virDomainDetachDevice</code></a></h3><pre class="programlisting">int virDomainDetachDevice (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * xml)<br />
</pre><p>Destroy a virtual device attachment to backend.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>pointer to XML description of one device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainFree" id="virDomainFree"><code>virDomainFree</code></a></h3><pre class="programlisting">int virDomainFree (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Free the domain object. The running instance is kept alive. The data structure is freed and should not be used thereafter.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainGetAutostart" id="virDomainGetAutostart"><code>virDomainGetAutostart</code></a></h3><pre class="programlisting">int virDomainGetAutostart (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int * autostart)<br />
@ -378,7 +431,8 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>Get the public name for that domain</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the name or NULL, the string need not be deallocated its lifetime will be the same as the domain object.</td></tr></tbody></table></div><h3><a name="virDomainGetOSType" id="virDomainGetOSType"><code>virDomainGetOSType</code></a></h3><pre class="programlisting">char * virDomainGetOSType (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Get the type of domain operation system.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new string or NULL in case of error, the string must be freed by the caller.</td></tr></tbody></table></div><h3><a name="virDomainGetSchedulerParameters" id="virDomainGetSchedulerParameters"><code>virDomainGetSchedulerParameters</code></a></h3><pre class="programlisting">int virDomainGetSchedulerParameters (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br /> int * nparams)<br />
</pre><p>Get the scheduler parameters, the @params array will be filled with the values.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>params</tt></i>:</span></td><td>pointer to scheduler parameter object (return value)</td></tr><tr><td><span class="term"><i><tt>nparams</tt></i>:</span></td><td>pointer to number of scheduler parameter (this value should be same than the returned value nparams of virDomainGetSchedulerType)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success.</td></tr></tbody></table></div><h3><a name="virDomainGetSchedulerType" id="virDomainGetSchedulerType"><code>virDomainGetSchedulerType</code></a></h3><pre class="programlisting">char * virDomainGetSchedulerType (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int * nparams)<br />
</pre><p>Get the scheduler type.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>nparams</tt></i>:</span></td><td>number of scheduler parameters(return value)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error. The caller must free the returned string.</td></tr></tbody></table></div><h3><a name="virDomainGetUUID" id="virDomainGetUUID"><code>virDomainGetUUID</code></a></h3><pre class="programlisting">int virDomainGetUUID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned char * uuid)<br />
</pre><p>Get the scheduler type.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object</td></tr><tr><td><span class="term"><i><tt>nparams</tt></i>:</span></td><td>number of scheduler parameters(return value)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error. The caller must free the returned string.</td></tr></tbody></table></div><h3><a name="virDomainGetSecurityLabel" id="virDomainGetSecurityLabel"><code>virDomainGetSecurityLabel</code></a></h3><pre class="programlisting">int virDomainGetSecurityLabel (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virSecurityLabelPtr">virSecurityLabelPtr</a> seclabel)<br />
</pre><p>Extract security label of an active domain. The 'label' field in the @seclabel argument will be initialized to the empty string if the domain is not running under a security model.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>seclabel</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virSecurityLabel">virSecurityLabel</a> structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div><h3><a name="virDomainGetUUID" id="virDomainGetUUID"><code>virDomainGetUUID</code></a></h3><pre class="programlisting">int virDomainGetUUID (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned char * uuid)<br />
</pre><p>Get the UUID for a domain</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>uuid</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a> bytes array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virDomainGetUUIDString" id="virDomainGetUUIDString"><code>virDomainGetUUIDString</code></a></h3><pre class="programlisting">int virDomainGetUUIDString (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> char * buf)<br />
</pre><p>Get the UUID for a domain as string. For more information about UUID see RFC4122.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#VIR_UUID_STRING_BUFLEN">VIR_UUID_STRING_BUFLEN</a> bytes array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virDomainGetVcpus" id="virDomainGetVcpus"><code>virDomainGetVcpus</code></a></h3><pre class="programlisting">int virDomainGetVcpus (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virVcpuInfoPtr">virVcpuInfoPtr</a> info, <br /> int maxinfo, <br /> unsigned char * cpumaps, <br /> int maplen)<br />
</pre><p>Extract information about virtual CPUs of domain, store it in info array and also in cpumaps if this pointer isn't NULL.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object, or NULL for Domain0</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to an array of <a href="libvirt-libvirt.html#virVcpuInfo">virVcpuInfo</a> structures (OUT)</td></tr><tr><td><span class="term"><i><tt>maxinfo</tt></i>:</span></td><td>number of structures in info array</td></tr><tr><td><span class="term"><i><tt>cpumaps</tt></i>:</span></td><td>pointer to an bit map of real CPUs for all vcpus of this domain (in 8-bit bytes) (OUT) If cpumaps is NULL, then no cpumap information is returned by the API. It's assumed there is &lt;maxinfo&gt; cpumap in cpumaps array. The memory allocated to cpumaps must be (maxinfo * maplen) bytes (ie: calloc(maxinfo, maplen)). One cpumap inside cpumaps has the format described in virDomainPinVcpu() API.</td></tr><tr><td><span class="term"><i><tt>maplen</tt></i>:</span></td><td>number of bytes in one cpumap, from 1 up to size of CPU map in underlying virtualization system (Xen...).</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of info filled in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainGetXMLDesc" id="virDomainGetXMLDesc"><code>virDomainGetXMLDesc</code></a></h3><pre class="programlisting">char * virDomainGetXMLDesc (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int flags)<br />
@ -391,7 +445,8 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>This function allows you to read the contents of a domain's memory. The memory which is read is controlled by the 'start', 'size' and 'flags' parameters. If 'flags' is <a href="libvirt-libvirt.html#VIR_MEMORY_VIRTUAL">VIR_MEMORY_VIRTUAL</a> then the 'start' and 'size' parameters are interpreted as virtual memory addresses for whichever task happens to be running on the domain at the moment. Although this sounds haphazard it is in fact what you want in order to read Linux kernel state, because it ensures that pointers in the kernel image can be interpreted coherently. 'buffer' is the return buffer and must be at least 'size' bytes. 'size' may be 0 to test if the call would succeed. NB. The remote driver imposes a 64K byte limit on 'size'. For your program to be able to work reliably over a remote connection you should split large requests to &lt;= 65536 bytes.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dom</tt></i>:</span></td><td>pointer to the domain object</td></tr><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>start of memory to peek</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>size of memory to peek</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>return buffer (must be at least size bytes)</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags, see below</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or -1 in case of failure. really 64 bits</td></tr></tbody></table></div><h3><a name="virDomainMigrate" id="virDomainMigrate"><code>virDomainMigrate</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> virDomainMigrate (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> dconn, <br /> unsigned long flags, <br /> const char * dname, <br /> const char * uri, <br /> unsigned long bandwidth)<br />
</pre><p>Migrate the domain object from its current host to the destination host given by dconn (a connection to the destination host). Flags may be one of more of the following: <a href="libvirt-libvirt.html#VIR_MIGRATE_LIVE">VIR_MIGRATE_LIVE</a> Attempt a live migration. If a hypervisor supports renaming domains during migration, then you may set the dname parameter to the new name (otherwise it keeps the same name). If this is not supported by the hypervisor, dname must be NULL or else you will get an error. Since typically the two hypervisors connect directly to each other in order to perform the migration, you may need to specify a path from the source to the destination. This is the purpose of the uri parameter. If uri is NULL, then libvirt will try to find the best method. Uri may specify the hostname or IP address of the destination host as seen from the source. Or uri may be a URI giving transport, hostname, user, port, etc. in the usual form. Refer to driver documentation for the particular URIs supported. The maximum bandwidth (in Mbps) that will be used to do migration can be specified with the bandwidth parameter. If set to 0, libvirt will choose a suitable default. Some hypervisors do not support this feature and will return an error if bandwidth is not 0. To see which features are supported by the current hypervisor, see virConnectGetCapabilities, /capabilities/host/migration_features. There are many limitations on migration imposed by the underlying technology - for example it may not be possible to migrate between different processors even with the same architecture, or between different types of hypervisor.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>dconn</tt></i>:</span></td><td>destination host (a connection object)</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags</td></tr><tr><td><span class="term"><i><tt>dname</tt></i>:</span></td><td>(optional) rename domain to this at destination</td></tr><tr><td><span class="term"><i><tt>uri</tt></i>:</span></td><td>(optional) dest hostname/URI as seen from the source host</td></tr><tr><td><span class="term"><i><tt>bandwidth</tt></i>:</span></td><td>(optional) specify migration bandwidth limit in Mbps</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new domain object if the migration was successful, or NULL in case of error. Note that the new domain object exists in the scope of the destination connection (dconn).</td></tr></tbody></table></div><h3><a name="virDomainPinVcpu" id="virDomainPinVcpu"><code>virDomainPinVcpu</code></a></h3><pre class="programlisting">int virDomainPinVcpu (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned int vcpu, <br /> unsigned char * cpumap, <br /> int maplen)<br />
</pre><p>Dynamically change the real CPUs which can be allocated to a virtual CPU. This function requires privileged access to the hypervisor.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>pointer to domain object, or NULL for Domain0</td></tr><tr><td><span class="term"><i><tt>vcpu</tt></i>:</span></td><td>virtual CPU number</td></tr><tr><td><span class="term"><i><tt>cpumap</tt></i>:</span></td><td>pointer to a bit map of real CPUs (in 8-bit bytes) (IN) Each bit set to 1 means that corresponding CPU is usable. Bytes are stored in little-endian order: CPU0-7, 8-15... In each byte, lowest CPU number is least significant bit.</td></tr><tr><td><span class="term"><i><tt>maplen</tt></i>:</span></td><td>number of bytes in cpumap, from 1 up to size of CPU map in underlying virtualization system (Xen...). If maplen &lt; size, missing bytes are set to zero. If maplen &gt; size, failure code is returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainReboot" id="virDomainReboot"><code>virDomainReboot</code></a></h3><pre class="programlisting">int virDomainReboot (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> unsigned int flags)<br />
</pre><p>Reboot a domain, the domain object is still usable there after but the domain OS is being stopped for a restart. Note that the guest OS may ignore the request.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>extra flags for the reboot operation, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainRestore" id="virDomainRestore"><code>virDomainRestore</code></a></h3><pre class="programlisting">int virDomainRestore (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * from)<br />
</pre><p>Reboot a domain, the domain object is still usable there after but the domain OS is being stopped for a restart. Note that the guest OS may ignore the request.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>extra flags for the reboot operation, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainRef" id="virDomainRef"><code>virDomainRef</code></a></h3><pre class="programlisting">int virDomainRef (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Increment the reference count on the domain. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virDomainFree">virDomainFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a domain would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>the domain to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainRestore" id="virDomainRestore"><code>virDomainRestore</code></a></h3><pre class="programlisting">int virDomainRestore (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * from)<br />
</pre><p>This method will restore a domain saved to disk by virDomainSave().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>path to the</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainResume" id="virDomainResume"><code>virDomainResume</code></a></h3><pre class="programlisting">int virDomainResume (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain)<br />
</pre><p>Resume an suspended domain, the process is restarted from the state where it was frozen by calling virSuspendDomain(). This function may requires privileged access</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainSave" id="virDomainSave"><code>virDomainSave</code></a></h3><pre class="programlisting">int virDomainSave (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> const char * to)<br />
</pre><p>This method will suspend a domain and save its memory contents to a file on disk. After the call, if successful, the domain is not listed as running anymore (this may be a problem). Use virDomainRestore() to restore a domain after saving.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>domain</tt></i>:</span></td><td>a domain object</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>path for the output file</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virDomainSetAutostart" id="virDomainSetAutostart"><code>virDomainSetAutostart</code></a></h3><pre class="programlisting">int virDomainSetAutostart (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br /> int autostart)<br />
@ -414,7 +469,19 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>Part of the EventImpl, this user-defined callback updates an event timeout.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>timer</tt></i>:</span></td><td>the timer to modify</td></tr><tr><td><span class="term"><i><tt>timeout</tt></i>:</span></td><td>the new timeout value</td></tr></tbody></table></div><br /><h3><a name="virFreeCallback" id="virFreeCallback"><code>virFreeCallback</code></a></h3><pre class="programlisting">typedef void (*virFreeCallback ) (void * opaque)
</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>opaque</tt></i>:</span></td><td></td></tr></tbody></table></div><br /><h3><a name="virGetVersion" id="virGetVersion"><code>virGetVersion</code></a></h3><pre class="programlisting">int virGetVersion (unsigned long * libVer, <br /> const char * type, <br /> unsigned long * typeVer)<br />
</pre><p>Provides two information back, @libVer is the version of the library while @typeVer will be the version of the hypervisor type @type against which the library was compiled. If @type is NULL, "Xen" is assumed, if @type is unknown or not available, an error code will be returned and @typeVer will be 0.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>libVer</tt></i>:</span></td><td>return value for the library version (OUT)</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of connection/driver looked at</td></tr><tr><td><span class="term"><i><tt>typeVer</tt></i>:</span></td><td>return value for the version of the hypervisor (OUT)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of failure, 0 otherwise, and values for @libVer and @typeVer have the format major * 1,000,000 + minor * 1,000 + release.</td></tr></tbody></table></div><h3><a name="virInitialize" id="virInitialize"><code>virInitialize</code></a></h3><pre class="programlisting">int virInitialize (void)<br />
</pre><p>Initialize the library. It's better to call this routine at startup in multithreaded applications to avoid potential race when initializing the library.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNetworkCreate" id="virNetworkCreate"><code>virNetworkCreate</code></a></h3><pre class="programlisting">int virNetworkCreate (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
</pre><p>Initialize the library. It's better to call this routine at startup in multithreaded applications to avoid potential race when initializing the library.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virInterfaceCreate" id="virInterfaceCreate"><code>virInterfaceCreate</code></a></h3><pre class="programlisting">int virInterfaceCreate (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)<br />
</pre><p>Activate an interface (ie call "ifup")</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a defined interface</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virInterfaceDefineXML" id="virInterfaceDefineXML"><code>virInterfaceDefineXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceDefineXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xml, <br /> unsigned int flags)<br />
</pre><p>Define an interface (or modify existing interface configuration)</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the interface, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the interface otherwise</td></tr></tbody></table></div><h3><a name="virInterfaceDestroy" id="virInterfaceDestroy"><code>virInterfaceDestroy</code></a></h3><pre class="programlisting">int virInterfaceDestroy (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)<br />
</pre><p>deactivate an interface (ie call "ifdown") This does not remove the interface from the config, and does not free the associated <a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> object.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>an interface object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virInterfaceFree" id="virInterfaceFree"><code>virInterfaceFree</code></a></h3><pre class="programlisting">int virInterfaceFree (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Free the interface object. The interface itself is unaltered. The data structure is freed and should not be used thereafter.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virInterfaceGetConnect" id="virInterfaceGetConnect"><code>virInterfaceGetConnect</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virInterfaceGetConnect (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Provides the connection pointer associated with an interface. The reference counter on the connection is not increased by this call. WARNING: When writing libvirt bindings in other languages, do not use this function. Instead, store the connection and the interface object together.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virInterfaceGetMACString" id="virInterfaceGetMACString"><code>virInterfaceGetMACString</code></a></h3><pre class="programlisting">const char * virInterfaceGetMACString (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Get the MAC for a interface as string. For more information about MAC see RFC4122.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the MAC address (in null-terminated ASCII format) or NULL, the string need not be deallocated its lifetime will be the same as the interface object.</td></tr></tbody></table></div><h3><a name="virInterfaceGetName" id="virInterfaceGetName"><code>virInterfaceGetName</code></a></h3><pre class="programlisting">const char * virInterfaceGetName (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Get the public name for that interface</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the name or NULL, the string need not be deallocated its lifetime will be the same as the interface object.</td></tr></tbody></table></div><h3><a name="virInterfaceGetXMLDesc" id="virInterfaceGetXMLDesc"><code>virInterfaceGetXMLDesc</code></a></h3><pre class="programlisting">char * virInterfaceGetXMLDesc (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface, <br /> unsigned int flags)<br />
</pre><p>Provide an XML description of the interface. The description may be reused later to recreate the interface with virInterfaceCreateXML().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>a interface object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded XML instance, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div><h3><a name="virInterfaceLookupByMACString" id="virInterfaceLookupByMACString"><code>virInterfaceLookupByMACString</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceLookupByMACString (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * macstr)<br />
</pre><p>Try to lookup an interface on the given hypervisor based on its MAC.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>macstr</tt></i>:</span></td><td>the MAC for the interface (null-terminated ASCII format)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new interface object or NULL in case of failure. If the interface cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_INTERFACE">VIR_ERR_NO_INTERFACE</a> error is raised.</td></tr></tbody></table></div><h3><a name="virInterfaceLookupByName" id="virInterfaceLookupByName"><code>virInterfaceLookupByName</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> virInterfaceLookupByName (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)<br />
</pre><p>Try to lookup an interface on the given hypervisor based on its name.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name for the interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new interface object or NULL in case of failure. If the interface cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_INTERFACE">VIR_ERR_NO_INTERFACE</a> error is raised.</td></tr></tbody></table></div><h3><a name="virInterfaceRef" id="virInterfaceRef"><code>virInterfaceRef</code></a></h3><pre class="programlisting">int virInterfaceRef (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Increment the reference count on the interface. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virInterfaceFree">virInterfaceFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a interface would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>the interface to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virInterfaceUndefine" id="virInterfaceUndefine"><code>virInterfaceUndefine</code></a></h3><pre class="programlisting">int virInterfaceUndefine (<a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> iface)<br />
</pre><p>Undefine an interface, ie remove it from the config. This does not free the associated <a href="libvirt-libvirt.html#virInterfacePtr">virInterfacePtr</a> object.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iface</tt></i>:</span></td><td>pointer to a defined interface</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNetworkCreate" id="virNetworkCreate"><code>virNetworkCreate</code></a></h3><pre class="programlisting">int virNetworkCreate (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
</pre><p>Create and start a defined network. If the call succeed the network moves from the defined to the running networks pools.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNetworkCreateXML" id="virNetworkCreateXML"><code>virNetworkCreateXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkCreateXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc)<br />
</pre><p>Create and start a new virtual network, based on an XML description similar to the one returned by virNetworkGetXMLDesc()</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>an XML description of the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure</td></tr></tbody></table></div><h3><a name="virNetworkDefineXML" id="virNetworkDefineXML"><code>virNetworkDefineXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkDefineXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xml)<br />
</pre><p>Define a network, but does not create it</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xml</tt></i>:</span></td><td>the XML description for the network, preferably in UTF-8</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of error, a pointer to the network otherwise</td></tr></tbody></table></div><h3><a name="virNetworkDestroy" id="virNetworkDestroy"><code>virNetworkDestroy</code></a></h3><pre class="programlisting">int virNetworkDestroy (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
@ -429,19 +496,27 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>Provide an XML description of the network. The description may be reused later to relaunch the network with virNetworkCreateXML().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>and OR'ed set of extraction flags, not used yet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a 0 terminated UTF-8 encoded XML instance, or NULL in case of error. the caller must free() the returned value.</td></tr></tbody></table></div><h3><a name="virNetworkLookupByName" id="virNetworkLookupByName"><code>virNetworkLookupByName</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkLookupByName (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)<br />
</pre><p>Try to lookup a network on the given hypervisor based on its name.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name for the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure. If the network cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> error is raised.</td></tr></tbody></table></div><h3><a name="virNetworkLookupByUUID" id="virNetworkLookupByUUID"><code>virNetworkLookupByUUID</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkLookupByUUID (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const unsigned char * uuid)<br />
</pre><p>Try to lookup a network on the given hypervisor based on its UUID.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuid</tt></i>:</span></td><td>the raw UUID for the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure. If the network cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> error is raised.</td></tr></tbody></table></div><h3><a name="virNetworkLookupByUUIDString" id="virNetworkLookupByUUIDString"><code>virNetworkLookupByUUIDString</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> virNetworkLookupByUUIDString (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * uuidstr)<br />
</pre><p>Try to lookup a network on the given hypervisor based on its UUID.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuidstr</tt></i>:</span></td><td>the string UUID for the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure. If the network cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> error is raised.</td></tr></tbody></table></div><h3><a name="virNetworkSetAutostart" id="virNetworkSetAutostart"><code>virNetworkSetAutostart</code></a></h3><pre class="programlisting">int virNetworkSetAutostart (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br /> int autostart)<br />
</pre><p>Try to lookup a network on the given hypervisor based on its UUID.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuidstr</tt></i>:</span></td><td>the string UUID for the network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new network object or NULL in case of failure. If the network cannot be found, then <a href="libvirt-virterror.html#VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> error is raised.</td></tr></tbody></table></div><h3><a name="virNetworkRef" id="virNetworkRef"><code>virNetworkRef</code></a></h3><pre class="programlisting">int virNetworkRef (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
</pre><p>Increment the reference count on the network. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virNetworkFree">virNetworkFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a network would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>the network to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNetworkSetAutostart" id="virNetworkSetAutostart"><code>virNetworkSetAutostart</code></a></h3><pre class="programlisting">int virNetworkSetAutostart (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br /> int autostart)<br />
</pre><p>Configure the network to be automatically started when the host machine boots.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>whether the network should be automatically started 0 or 1</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virNetworkUndefine" id="virNetworkUndefine"><code>virNetworkUndefine</code></a></h3><pre class="programlisting">int virNetworkUndefine (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
</pre><p>Undefine a network but does not stop it if it is running</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeDeviceFree" id="virNodeDeviceFree"><code>virNodeDeviceFree</code></a></h3><pre class="programlisting">int virNodeDeviceFree (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Undefine a network but does not stop it if it is running</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeDeviceCreateXML" id="virNodeDeviceCreateXML"><code>virNodeDeviceCreateXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> virNodeDeviceCreateXML (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * xmlDesc, <br /> unsigned int flags)<br />
</pre><p>Create a new device on the VM host machine, for example, virtual HBAs created using vport_create.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>xmlDesc</tt></i>:</span></td><td>string containing an XML description of the device to be created</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>callers should always pass 0</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a node device object if successful, NULL in case of failure</td></tr></tbody></table></div><h3><a name="virNodeDeviceDestroy" id="virNodeDeviceDestroy"><code>virNodeDeviceDestroy</code></a></h3><pre class="programlisting">int virNodeDeviceDestroy (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Destroy the device object. The virtual device is removed from the host operating system. This function may require privileged access</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>a device object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeDeviceDettach" id="virNodeDeviceDettach"><code>virNodeDeviceDettach</code></a></h3><pre class="programlisting">int virNodeDeviceDettach (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Dettach the node device from the node itself so that it may be assigned to a guest domain. Depending on the hypervisor, this may involve operations such as unbinding any device drivers from the device, binding the device to a dummy device driver and resetting the device. If the device is currently in use by the node, this method may fail. Once the device is not assigned to any guest, it may be re-attached to the node using the virNodeDeviceReattach() method.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeDeviceFree" id="virNodeDeviceFree"><code>virNodeDeviceFree</code></a></h3><pre class="programlisting">int virNodeDeviceFree (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Drops a reference to the node device, freeing it if this was the last reference.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the 0 for success, -1 for error.</td></tr></tbody></table></div><h3><a name="virNodeDeviceGetName" id="virNodeDeviceGetName"><code>virNodeDeviceGetName</code></a></h3><pre class="programlisting">const char * virNodeDeviceGetName (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Just return the device name</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the device name or NULL in case of error</td></tr></tbody></table></div><h3><a name="virNodeDeviceGetParent" id="virNodeDeviceGetParent"><code>virNodeDeviceGetParent</code></a></h3><pre class="programlisting">const char * virNodeDeviceGetParent (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Accessor for the parent of the device</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the name of the device's parent, or NULL if the device has no parent.</td></tr></tbody></table></div><h3><a name="virNodeDeviceGetXMLDesc" id="virNodeDeviceGetXMLDesc"><code>virNodeDeviceGetXMLDesc</code></a></h3><pre class="programlisting">char * virNodeDeviceGetXMLDesc (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev, <br /> unsigned int flags)<br />
</pre><p>Fetch an XML document describing all aspects of the device.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for XML generation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XML document, or NULL on error</td></tr></tbody></table></div><h3><a name="virNodeDeviceListCaps" id="virNodeDeviceListCaps"><code>virNodeDeviceListCaps</code></a></h3><pre class="programlisting">int virNodeDeviceListCaps (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev, <br /> char ** const names, <br /> int maxnames)<br />
</pre><p>Lists the names of the capabilities supported by the device.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array to collect the list of capability names</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of @names</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of capability names listed in @names.</td></tr></tbody></table></div><h3><a name="virNodeDeviceLookupByName" id="virNodeDeviceLookupByName"><code>virNodeDeviceLookupByName</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> virNodeDeviceLookupByName (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * name)<br />
</pre><p>Lookup a node device by its name.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>unique device name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> if found, NULL otherwise.</td></tr></tbody></table></div><h3><a name="virNodeDeviceNumOfCaps" id="virNodeDeviceNumOfCaps"><code>virNodeDeviceNumOfCaps</code></a></h3><pre class="programlisting">int virNodeDeviceNumOfCaps (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Accessor for the number of capabilities supported by the device.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of capabilities supported by the device.</td></tr></tbody></table></div><h3><a name="virNodeGetCellsFreeMemory" id="virNodeGetCellsFreeMemory"><code>virNodeGetCellsFreeMemory</code></a></h3><pre class="programlisting">int virNodeGetCellsFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> unsigned long long * freeMems, <br /> int startCell, <br /> int maxCells)<br />
</pre><p>Accessor for the number of capabilities supported by the device.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of capabilities supported by the device.</td></tr></tbody></table></div><h3><a name="virNodeDeviceReAttach" id="virNodeDeviceReAttach"><code>virNodeDeviceReAttach</code></a></h3><pre class="programlisting">int virNodeDeviceReAttach (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Re-attach a previously dettached node device to the node so that it may be used by the node again. Depending on the hypervisor, this may involve operations such as resetting the device, unbinding it from a dummy device driver and binding it to its appropriate driver. If the device is currently in use by a guest, this method may fail.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeDeviceRef" id="virNodeDeviceRef"><code>virNodeDeviceRef</code></a></h3><pre class="programlisting">int virNodeDeviceRef (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Increment the reference count on the dev. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virNodeDeviceFree">virNodeDeviceFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a dev would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>the dev to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeDeviceReset" id="virNodeDeviceReset"><code>virNodeDeviceReset</code></a></h3><pre class="programlisting">int virNodeDeviceReset (<a href="libvirt-libvirt.html#virNodeDevicePtr">virNodeDevicePtr</a> dev)<br />
</pre><p>Reset a previously dettached node device to the node before or after assigning it to a guest. The exact reset semantics depends on the hypervisor and device type but, for example, KVM will attempt to reset PCI devices with a Function Level Reset, Secondary Bus Reset or a Power Management D-State reset. If the reset will affect other devices which are currently in use, this function may fail.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dev</tt></i>:</span></td><td>pointer to the node device</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeGetCellsFreeMemory" id="virNodeGetCellsFreeMemory"><code>virNodeGetCellsFreeMemory</code></a></h3><pre class="programlisting">int virNodeGetCellsFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> unsigned long long * freeMems, <br /> int startCell, <br /> int maxCells)<br />
</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="virNodeGetFreeMemory" id="virNodeGetFreeMemory"><code>virNodeGetFreeMemory</code></a></h3><pre class="programlisting">unsigned long long virNodeGetFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br />
</pre><p>provides the free memory available on the Node</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the available free memory in kilobytes or 0 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"><code>virNodeGetInfo</code></a></h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
</pre><p>Extract hardware information about the node.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> structure allocated by the user</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeListDevices" id="virNodeListDevices"><code>virNodeListDevices</code></a></h3><pre class="programlisting">int virNodeListDevices (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * cap, <br /> char ** const names, <br /> int maxnames, <br /> unsigned int flags)<br />
</pre><p>provides the free memory available on the Node Note: most libvirt APIs provide memory sizes in kilobytes, but in this function the returned value is in bytes. Divide by 1024 as necessary.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the available free memory in bytes or 0 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"><code>virNodeGetInfo</code></a></h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
</pre><p>Extract hardware information about the node.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> structure allocated by the user</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virNodeGetSecurityModel" id="virNodeGetSecurityModel"><code>virNodeGetSecurityModel</code></a></h3><pre class="programlisting">int virNodeGetSecurityModel (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virSecurityModelPtr">virSecurityModelPtr</a> secmodel)<br />
</pre><p>Extract the security model of a hypervisor. The 'model' field in the @secmodel argument may be initialized to the empty string if the driver has not activated a security model.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>a connection object</td></tr><tr><td><span class="term"><i><tt>secmodel</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virSecurityModel">virSecurityModel</a> structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure</td></tr></tbody></table></div><h3><a name="virNodeListDevices" id="virNodeListDevices"><code>virNodeListDevices</code></a></h3><pre class="programlisting">int virNodeListDevices (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * cap, <br /> char ** const names, <br /> int maxnames, <br /> unsigned int flags)<br />
</pre><p>Collect the list of node devices, and store their names in @names If the optional 'cap' argument is non-NULL, then the count will be restricted to devices with the specified capability</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>cap</tt></i>:</span></td><td>capability name</td></tr><tr><td><span class="term"><i><tt>names</tt></i>:</span></td><td>array to collect the list of node device names</td></tr><tr><td><span class="term"><i><tt>maxnames</tt></i>:</span></td><td>size of @names</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of node devices found or -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeNumOfDevices" id="virNodeNumOfDevices"><code>virNodeNumOfDevices</code></a></h3><pre class="programlisting">int virNodeNumOfDevices (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * cap, <br /> unsigned int flags)<br />
</pre><p>Provides the number of node devices. If the optional 'cap' argument is non-NULL, then the count will be restricted to devices with the specified capability</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>cap</tt></i>:</span></td><td>capability name</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of node devices or -1 in case of error</td></tr></tbody></table></div><h3><a name="virStoragePoolBuild" id="virStoragePoolBuild"><code>virStoragePoolBuild</code></a></h3><pre class="programlisting">int virStoragePoolBuild (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)<br />
</pre><p>Build the underlying storage pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>future flags, use 0 for now</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 upon failure</td></tr></tbody></table></div><h3><a name="virStoragePoolCreate" id="virStoragePoolCreate"><code>virStoragePoolCreate</code></a></h3><pre class="programlisting">int virStoragePoolCreate (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)<br />
@ -463,13 +538,15 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>Fetch a storage pool based on its globally unique id</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuid</tt></i>:</span></td><td>globally unique id of pool to fetch</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> object, or NULL if no matching pool is found</td></tr></tbody></table></div><h3><a name="virStoragePoolLookupByUUIDString" id="virStoragePoolLookupByUUIDString"><code>virStoragePoolLookupByUUIDString</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> virStoragePoolLookupByUUIDString (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * uuidstr)<br />
</pre><p>Fetch a storage pool based on its globally unique id</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>uuidstr</tt></i>:</span></td><td>globally unique id of pool to fetch</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> object, or NULL if no matching pool is found</td></tr></tbody></table></div><h3><a name="virStoragePoolLookupByVolume" id="virStoragePoolLookupByVolume"><code>virStoragePoolLookupByVolume</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> virStoragePoolLookupByVolume (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Fetch a storage pool which contains a particular volume</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> object, or NULL if no matching pool is found</td></tr></tbody></table></div><h3><a name="virStoragePoolNumOfVolumes" id="virStoragePoolNumOfVolumes"><code>virStoragePoolNumOfVolumes</code></a></h3><pre class="programlisting">int virStoragePoolNumOfVolumes (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)<br />
</pre><p>Fetch the number of storage volumes within a pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of storage pools, or -1 on failure</td></tr></tbody></table></div><h3><a name="virStoragePoolRefresh" id="virStoragePoolRefresh"><code>virStoragePoolRefresh</code></a></h3><pre class="programlisting">int virStoragePoolRefresh (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)<br />
</pre><p>Fetch the number of storage volumes within a pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of storage pools, or -1 on failure</td></tr></tbody></table></div><h3><a name="virStoragePoolRef" id="virStoragePoolRef"><code>virStoragePoolRef</code></a></h3><pre class="programlisting">int virStoragePoolRef (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)<br />
</pre><p>Increment the reference count on the pool. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virStoragePoolFree">virStoragePoolFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a pool would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>the pool to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div><h3><a name="virStoragePoolRefresh" id="virStoragePoolRefresh"><code>virStoragePoolRefresh</code></a></h3><pre class="programlisting">int virStoragePoolRefresh (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> unsigned int flags)<br />
</pre><p>Request that the pool refresh its list of volumes. This may involve communicating with a remote server, and/or initializing new devices at the OS layer</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags to control refresh behaviour (currently unused, use 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the volume list was refreshed, -1 on failure</td></tr></tbody></table></div><h3><a name="virStoragePoolSetAutostart" id="virStoragePoolSetAutostart"><code>virStoragePoolSetAutostart</code></a></h3><pre class="programlisting">int virStoragePoolSetAutostart (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> int autostart)<br />
</pre><p>Sets the autostart flag</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>new flag setting</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, -1 on failure</td></tr></tbody></table></div><h3><a name="virStoragePoolUndefine" id="virStoragePoolUndefine"><code>virStoragePoolUndefine</code></a></h3><pre class="programlisting">int virStoragePoolUndefine (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool)<br />
</pre><p>Undefine an inactive storage pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> object, or NULL if creation failed</td></tr></tbody></table></div><h3><a name="virStorageVolCreateXML" id="virStorageVolCreateXML"><code>virStorageVolCreateXML</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolCreateXML (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * xmldesc, <br /> unsigned int flags)<br />
</pre><p>Create a storage volume within a pool based on an XML description. Not all pools support creation of volumes</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>xmldesc</tt></i>:</span></td><td>description of volume to create</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for creation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage volume, or NULL on error</td></tr></tbody></table></div><h3><a name="virStorageVolDelete" id="virStorageVolDelete"><code>virStorageVolDelete</code></a></h3><pre class="programlisting">int virStorageVolDelete (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br /> unsigned int flags)<br />
</pre><p>Create a storage volume within a pool based on an XML description. Not all pools support creation of volumes</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>xmldesc</tt></i>:</span></td><td>description of volume to create</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for creation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage volume, or NULL on error</td></tr></tbody></table></div><h3><a name="virStorageVolCreateXMLFrom" id="virStorageVolCreateXMLFrom"><code>virStorageVolCreateXMLFrom</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolCreateXMLFrom (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * xmldesc, <br /> <a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> clonevol, <br /> unsigned int flags)<br />
</pre><p>Create a storage volume in the parent pool, using the 'clonevol' volume as input. Information for the new volume (name, perms) are passed via a typical volume XML description.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to parent pool for the new volume</td></tr><tr><td><span class="term"><i><tt>xmldesc</tt></i>:</span></td><td>description of volume to create</td></tr><tr><td><span class="term"><i><tt>clonevol</tt></i>:</span></td><td>storage volume to use as input</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for creation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage volume, or NULL on error</td></tr></tbody></table></div><h3><a name="virStorageVolDelete" id="virStorageVolDelete"><code>virStorageVolDelete</code></a></h3><pre class="programlisting">int virStorageVolDelete (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br /> unsigned int flags)<br />
</pre><p>Delete the storage volume from the pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>future flags, use 0 for now</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on error</td></tr></tbody></table></div><h3><a name="virStorageVolFree" id="virStorageVolFree"><code>virStorageVolFree</code></a></h3><pre class="programlisting">int virStorageVolFree (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Release the storage volume handle. The underlying storage volume contains to exist</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on error</td></tr></tbody></table></div><h3><a name="virStorageVolGetConnect" id="virStorageVolGetConnect"><code>virStorageVolGetConnect</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virStorageVolGetConnect (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Release the storage volume handle. The underlying storage volume continues to exist.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on error</td></tr></tbody></table></div><h3><a name="virStorageVolGetConnect" id="virStorageVolGetConnect"><code>virStorageVolGetConnect</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> virStorageVolGetConnect (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Provides the connection pointer associated with a storage volume. The reference counter on the connection is not increased by this call. WARNING: When writing libvirt bindings in other languages, do not use this function. Instead, store the connection and the volume object together.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to a pool</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> or NULL in case of failure.</td></tr></tbody></table></div><h3><a name="virStorageVolGetInfo" id="virStorageVolGetInfo"><code>virStorageVolGetInfo</code></a></h3><pre class="programlisting">int virStorageVolGetInfo (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol, <br /> <a href="libvirt-libvirt.html#virStorageVolInfoPtr">virStorageVolInfoPtr</a> info)<br />
</pre><p>Fetches volatile information about the storage volume such as its current allocation</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer at which to store info</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, or -1 on failure</td></tr></tbody></table></div><h3><a name="virStorageVolGetKey" id="virStorageVolGetKey"><code>virStorageVolGetKey</code></a></h3><pre class="programlisting">const char * virStorageVolGetKey (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Fetch the storage volume key. This is globally unique, so the same volume will have the same key no matter what host it is accessed from</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the volume key, or NULL on error</td></tr></tbody></table></div><h3><a name="virStorageVolGetName" id="virStorageVolGetName"><code>virStorageVolGetName</code></a></h3><pre class="programlisting">const char * virStorageVolGetName (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
@ -478,5 +555,6 @@ char * <a href="#virStorageVolGetXMLDesc">virStorageVolGetXMLDesc</a> (<a href=
</pre><p>Fetch an XML document describing all aspects of the storage volume</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>pointer to storage volume</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>flags for XML generation (unused, pass 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XML document, or NULL on error</td></tr></tbody></table></div><h3><a name="virStorageVolLookupByKey" id="virStorageVolLookupByKey"><code>virStorageVolLookupByKey</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolLookupByKey (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * key)<br />
</pre><p>Fetch a pointer to a storage volume based on its globally unique key</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>key</tt></i>:</span></td><td>globally unique key</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a storage volume, or NULL if not found / error</td></tr></tbody></table></div><h3><a name="virStorageVolLookupByName" id="virStorageVolLookupByName"><code>virStorageVolLookupByName</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolLookupByName (<a href="libvirt-libvirt.html#virStoragePoolPtr">virStoragePoolPtr</a> pool, <br /> const char * name)<br />
</pre><p>Fetch a pointer to a storage volume based on its name within a pool</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pool</tt></i>:</span></td><td>pointer to storage pool</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name of storage volume</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a storage volume, or NULL if not found / error</td></tr></tbody></table></div><h3><a name="virStorageVolLookupByPath" id="virStorageVolLookupByPath"><code>virStorageVolLookupByPath</code></a></h3><pre class="programlisting"><a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> virStorageVolLookupByPath (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * path)<br />
</pre><p>Fetch a pointer to a storage volume based on its locally (host) unique path</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>locally unique path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a storage volume, or NULL if not found / error</td></tr></tbody></table></div></div></div><div id="footer"><p id="sponsor">
</pre><p>Fetch a pointer to a storage volume based on its locally (host) unique path</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to hypervisor connection</td></tr><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>locally unique path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a storage volume, or NULL if not found / error</td></tr></tbody></table></div><h3><a name="virStorageVolRef" id="virStorageVolRef"><code>virStorageVolRef</code></a></h3><pre class="programlisting">int virStorageVolRef (<a href="libvirt-libvirt.html#virStorageVolPtr">virStorageVolPtr</a> vol)<br />
</pre><p>Increment the reference count on the vol. For each additional call to this method, there shall be a corresponding call to <a href="libvirt-libvirt.html#virStorageVolFree">virStorageVolFree</a> to release the reference count, once the caller no longer needs the reference to this object. This method is typically useful for applications where multiple threads are using a connection, and it is required that the connection remain open until all threads have finished using it. ie, each new thread using a vol would increment the reference count.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vol</tt></i>:</span></td><td>the vol to hold a reference on</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of failure.</td></tr></tbody></table></div></div></div><div id="footer"><p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="../et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,6 +21,8 @@ updated on <i>2008-06-05</i>.
<th><a href="drvqemu.html">QEMU</a></th>
<th><a href="drvkvm.html">KVM</a></th>
<th><a href="remote.html">Remote</a></th>
<th><a href="drvvbox.html">VirtualBox</a></th>
<th><a href="drvone.html">ONE</a></th>
</tr>
<tr>
<td> virConnectClose </td>
@ -29,6 +31,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectGetCapabilities </td>
@ -37,6 +41,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectGetHostname </td>
@ -45,6 +51,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.3.3 </td>
<td> &#x2265; 0.3.3 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virConnectGetMaxVcpus </td>
@ -53,6 +61,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virConnectGetType </td>
@ -61,6 +71,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectGetURI </td>
@ -69,6 +81,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectGetVersion </td>
@ -77,6 +91,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectListDefinedDomains </td>
@ -85,6 +101,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectListDomains </td>
@ -93,6 +111,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectNumOfDefinedDomains </td>
@ -101,6 +121,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectNumOfDomains </td>
@ -109,6 +131,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectOpen </td>
@ -117,6 +141,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virConnectOpenAuth </td>
@ -125,6 +151,8 @@ updated on <i>2008-06-05</i>.
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> virConnectOpenReadOnly </td>
@ -133,6 +161,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainAttachDevice </td>
@ -141,6 +171,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainBlockPeek </td>
@ -149,6 +181,8 @@ updated on <i>2008-06-05</i>.
<td> 0.4.3 </td>
<td> 0.4.3 </td>
<td> x </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainBlockStats </td>
@ -157,6 +191,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.2 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainCoreDump </td>
@ -165,6 +201,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainCreate </td>
@ -173,6 +211,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainCreateLinux </td>
@ -181,6 +221,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainDefineXML </td>
@ -189,6 +231,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainDestroy </td>
@ -197,6 +241,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainDetachDevice </td>
@ -205,6 +251,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainFree </td>
@ -213,6 +261,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetAutostart </td>
@ -221,11 +271,13 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetConnect </td>
<td> 0.3.0 </td>
<td colspan="4"> not a HV function </td>
<td colspan="6"> not a HV function </td>
</tr>
<tr>
<td> virDomainGetID </td>
@ -234,6 +286,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetInfo </td>
@ -242,6 +296,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetMaxMemory </td>
@ -250,6 +306,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetMaxVcpus </td>
@ -258,6 +316,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetName </td>
@ -266,6 +326,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetOSType </td>
@ -274,6 +336,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetSchedulerParameters </td>
@ -282,6 +346,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetSchedulerType </td>
@ -290,6 +356,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetUUID </td>
@ -298,6 +366,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetUUIDString </td>
@ -306,6 +376,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainGetVcpus </td>
@ -314,6 +386,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainInterfaceStats </td>
@ -322,6 +396,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.2 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainGetXMLDesc </td>
@ -330,6 +406,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainLookupByID </td>
@ -338,6 +416,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainLookupByName </td>
@ -346,6 +426,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainLookupByUUID </td>
@ -354,6 +436,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainLookupByUUIDString </td>
@ -362,6 +446,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainMigrate </td>
@ -370,6 +456,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> 0.3.2 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainPinVcpu </td>
@ -378,6 +466,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainReboot </td>
@ -386,6 +476,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainRestore </td>
@ -394,6 +486,9 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> &#x2265; 0.3.2 </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainResume </td>
@ -402,6 +497,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainSave </td>
@ -410,6 +507,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> &#x2265; 0.3.2 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainSetAutostart </td>
@ -418,6 +517,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.2.1 </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainSetMaxMemory </td>
@ -426,6 +527,7 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainSetMemory </td>
@ -434,6 +536,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virDomainSetSchedulerParameters </td>
@ -442,6 +546,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainSetVcpus </td>
@ -450,6 +556,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> &#x2265; 0.3.0 </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virDomainShutdown </td>
@ -458,6 +566,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainSuspend </td>
@ -466,6 +576,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virDomainUndefine </td>
@ -474,17 +586,19 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> &#x2265; 0.6.4 </td>
</tr>
<tr>
<td> virGetVersion </td>
<td> All </td>
<td> All </td>
<td colspan="3"> Returns -1 if HV unsupported. </td>
<td colspan="5"> Returns -1 if HV unsupported. </td>
</tr>
<tr>
<td> virInitialize </td>
<td> 0.1.0 </td>
<td colspan="4"> not a HV function </td>
<td colspan="6"> not a HV function </td>
</tr>
<tr>
<td> virDomainMemoryPeek </td>
@ -493,6 +607,8 @@ updated on <i>2008-06-05</i>.
<td> 0.4.3 </td>
<td> 0.4.3 </td>
<td> x </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virNodeGetInfo </td>
@ -501,6 +617,8 @@ updated on <i>2008-06-05</i>.
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.2.0 </td>
<td> &#x2265; 0.3.0 </td>
<td> &#x2265; 0.6.3 </td>
<td> x </td>
</tr>
<tr>
<td> virNodeGetFreeMemory </td>
@ -509,6 +627,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> x </td>
<td> x </td>
<td> x </td>
</tr>
<tr>
<td> virNodeGetCellsFreeMemory </td>
@ -517,6 +637,8 @@ updated on <i>2008-06-05</i>.
<td> x </td>
<td> x </td>
<td> x </td>
<td> x </td>
<td> x </td>
</tr>
</table>
<h3>Network functions</h3>

View File

@ -82,24 +82,30 @@
A set of bindings for common languages
</li><li>
A <a href="CIM/">CIM provider</a> for the DMTF virtualization schema
</li><li>
A <a href="/qpid/">QMF agent</a> for the AMQP/QPid messaging system
</li></ul>
<h2>libvirt supports:</h2>
<ul><li>
The <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen</a> hypervisor
on Linux and Solaris hosts.
</li><li>
The <a href="http://fabrice.bellard.free.fr/qemu/">QEMU</a> emulator
The <a href="http://bellard.org/qemu/">QEMU</a> emulator
</li><li>
The <a href="http://kvm.qumranet.com/kvmwiki">KVM</a> Linux hypervisor
</li><li>
The <a href="http://lxc.sourceforge.net/">LXC</a> Linux container system
</li><li>
The <a href="http://openvz.org/">OpenVZ</a> Linux container system
</li><li>
The <a href="http://user-mode-linux.sourceforge.net/">User Mode Linux</a> paravirtualized kernel
</li><li>
The <a href="http://www.virtualbox.org/">VirtualBox</a> hypervisor
</li><li>
Storage on IDE/SCSI/USB disks, FibreChannel, LVM, iSCSI, NFS and filesystems
</li></ul>
<h2>libvirt provides:</h2>
<ul><li>Remote management using TLS encryption and x509 certificates</li><li>Remote management authenticating with Kerberos and SASL</li><li>Local access control using PolicyKit</li><li>Zero-conf discovery using Avahi multicast-DNS</li><li>Management of virtual machines, virtual networks and storage</li></ul>
<ul><li>Remote management using TLS encryption and x509 certificates</li><li>Remote management authenticating with Kerberos and SASL</li><li>Local access control using PolicyKit</li><li>Zero-conf discovery using Avahi multicast-DNS</li><li>Management of virtual machines, virtual networks and storage</li><li>Portable client API for Linux, Solaris and Windows</li></ul>
<p class="image">
<img src="libvirtLogo.png" alt="libvirt Logo" /></p>
</div>

View File

@ -25,6 +25,9 @@
<li>
A <a href="CIM/">CIM provider</a> for the DMTF virtualization schema
</li>
<li>
A <a href="/qpid/">QMF agent</a> for the AMQP/QPid messaging system
</li>
</ul>
<h2>libvirt supports:</h2>
@ -35,7 +38,7 @@
on Linux and Solaris hosts.
</li>
<li>
The <a href="http://fabrice.bellard.free.fr/qemu/">QEMU</a> emulator
The <a href="http://bellard.org/qemu/">QEMU</a> emulator
</li>
<li>
The <a href="http://kvm.qumranet.com/kvmwiki">KVM</a> Linux hypervisor
@ -46,6 +49,12 @@
<li>
The <a href="http://openvz.org/">OpenVZ</a> Linux container system
</li>
<li>
The <a href="http://user-mode-linux.sourceforge.net/">User Mode Linux</a> paravirtualized kernel
</li>
<li>
The <a href="http://www.virtualbox.org/">VirtualBox</a> hypervisor
</li>
<li>
Storage on IDE/SCSI/USB disks, FibreChannel, LVM, iSCSI, NFS and filesystems
</li>
@ -59,6 +68,7 @@
<li>Local access control using PolicyKit</li>
<li>Zero-conf discovery using Avahi multicast-DNS</li>
<li>Management of virtual machines, virtual networks and storage</li>
<li>Portable client API for Linux, Solaris and Windows</li>
</ul>
<p class="image">

121
docs/internals.html Normal file
View File

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file is autogenerated from internals.html.in
Do not edit this file. Changes will be lost.
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="SHORTCUT ICON" href="32favicon.png" />
<title>libvirt: libvirt internals</title>
<meta name="description" content="libvirt, virtualization, virtualization API" />
</head>
<body>
<div id="header">
<div id="headerLogo"></div>
<div id="headerSearch">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><div>
<input id="query" name="query" type="text" size="12" value="" />
<input id="submit" name="submit" type="submit" value="Search" />
</div></form>
</div>
</div>
<div id="body">
<div id="menu">
<ul class="l0"><li>
<div>
<a title="Front page of the libvirt website" class="inactive" href="index.html">Home</a>
</div>
</li><li>
<div>
<a title="Details of new features and bugs fixed in each release" class="inactive" href="news.html">News</a>
</div>
</li><li>
<div>
<a title="Get the latest source releases, binary builds and get access to the source repository" class="inactive" href="downloads.html">Downloads</a>
</div>
</li><li>
<div>
<a title="Information for users, administrators and developers" class="active" href="docs.html">Documentation</a>
<ul class="l1"><li>
<div>
<a title="Information about deploying and using libvirt" class="inactive" href="deployment.html">Deployment</a>
</div>
</li><li>
<div>
<a title="Overview of the logical subsystems in the libvirt API" class="inactive" href="intro.html">Architecture</a>
</div>
</li><li>
<div>
<a title="Description of the XML formats used in libvirt" class="inactive" href="format.html">XML format</a>
</div>
</li><li>
<div>
<a title="Hypervisor specific driver information" class="inactive" href="drivers.html">Drivers</a>
</div>
</li><li>
<div>
<a title="Reference manual for the C public API" class="inactive" href="html/index.html">API reference</a>
</div>
</li><li>
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<span class="active">Internals</span>
<ul class="l2"><li>
<div>
<a title="General hacking guidelines for contributors" class="inactive" href="hacking.html">Contributor guidelines</a>
</div>
</li><li>
<div>
<a title="Adding new public libvirt APIs" class="inactive" href="api_extension.html">API extensions</a>
</div>
</li></ul>
</div>
</li></ul>
</div>
</li><li>
<div>
<a title="User contributed content" class="inactive" href="http://wiki.libvirt.org">Wiki</a>
</div>
</li><li>
<div>
<a title="Frequently asked questions" class="inactive" href="FAQ.html">FAQ</a>
</div>
</li><li>
<div>
<a title="How and where to report bugs and request features" class="inactive" href="bugs.html">Bug reports</a>
</div>
</li><li>
<div>
<a title="How to contact the developers via email and IRC" class="inactive" href="contact.html">Contact</a>
</div>
</li><li>
<div>
<a title="Miscellaneous links of interest related to libvirt" class="inactive" href="relatedlinks.html">Related Links</a>
</div>
</li><li>
<div>
<a title="Overview of all content on the website" class="inactive" href="sitemap.html">Sitemap</a>
</div>
</li></ul>
</div>
<div id="content">
<h1>libvirt internals</h1>
<p>
This section provides documents useful to those working on the libvirt
internals, adding new public APIs, new hypervisor drivers or extending
the libvirtd daemon code.
</p>
</div>
</div>
<div id="footer">
<p id="sponsor">
Sponsored by:<br /><a href="http://et.redhat.com/"><img src="et.png" alt="Project sponsored by Red Hat Emerging Technology" /></a></p>
</div>
</body>
</html>

11
docs/internals.html.in Normal file
View File

@ -0,0 +1,11 @@
<html>
<body>
<h1>libvirt internals</h1>
<p>
This section provides documents useful to those working on the libvirt
internals, adding new public APIs, new hypervisor drivers or extending
the libvirtd daemon code.
</p>
</body>
</html>

View File

@ -47,6 +47,14 @@
<div>
<span class="active">Architecture</span>
<ul class="l2"><li>
<div>
<a title="Terminology and goals of libvirt API" class="inactive" href="goals.html">Goals</a>
</div>
</li><li>
<div>
<a title="The libvirt API concepts" class="inactive" href="api.html">API concepts</a>
</div>
</li><li>
<div>
<a title="Managing virtual machines" class="inactive" href="archdomain.html">Domains</a>
</div>
@ -80,6 +88,10 @@
<div>
<a title="Bindings of the libvirt API for other languages" class="inactive" href="bindings.html">Language bindings</a>
</div>
</li><li>
<div>
<a title="Working on the internals of libvirt API, driver and daemon code" class="inactive" href="internals.html">Internals</a>
</div>
</li></ul>
</div>
</li><li>
@ -110,36 +122,12 @@
</div>
<div id="content">
<h1>Architecture</h1>
<p>Libvirt is a C toolkit to interact with the virtualization capabilities of
recent versions of Linux (and other OSes), but libvirt won't try to provide
all possible interfaces for interacting with the virtualization features.</p>
<p>To avoid ambiguity about the terms used here here are the definitions for
some of the specific concepts used in libvirt documentation:</p>
<ul><li>a <strong>node</strong> is a single physical machine</li><li>an <strong>hypervisor</strong> is a layer of software allowing to
virtualize a node in a set of virtual machines with possibly different
configurations than the node itself</li><li>a <strong>domain</strong> is an instance of an operating system running
on a virtualized machine provided by the hypervisor</li></ul>
<p class="image">
<img alt="Hypervisor and domains running on a node" src="node.gif" /></p>
<p>Now we can define the goal of libvirt: to provide the lowest possible
generic and stable layer to manage domains on a node.</p>
<p>This implies the following:</p>
<ul><li>the API should not be targeted to a single virtualization environment
though Xen is the current default, which also means that some very
specific capabilities which are not generic enough may not be provided as
libvirt APIs</li><li>the API should allow to do efficiently and cleanly all the operations
needed to manage domains on a node</li><li>the API will not try to provide high level multi-nodes management
features like load balancing, though they could be implemented on top of
libvirt</li><li>stability of the API is a big concern, libvirt should isolate
applications from the frequent changes expected at the lower level of the
virtualization framework</li></ul>
<p>So libvirt should be a building block for higher level management tools
and for applications focusing on virtualization of a single node (the only
exception being domain migration between node capabilities which may need to
be added at the libvirt level). Where possible libvirt should be extendable
to be able to provide the same API for remote nodes, however this is not the
case at the moment, the code currently handle only local node accesses
(extension for remote access support is being worked on, see <a href="bugs.html">the mailing list</a> discussions about it).</p>
<p>Libvirt is a C toolkit manage the virtualization capabilities
of recent versions of Linux (and other OSes).</p>
<p>To avoid ambiguity about the goals, terms and specific concepts used
in libvirt documentation please see the <a href="goals.html">Goal
section</a>.
</p>
</div>
</div>
<div id="footer">

View File

@ -2,45 +2,11 @@
<html>
<body>
<h1>Architecture</h1>
<p>Libvirt is a C toolkit to interact with the virtualization capabilities of
recent versions of Linux (and other OSes), but libvirt won't try to provide
all possible interfaces for interacting with the virtualization features.</p>
<p>To avoid ambiguity about the terms used here here are the definitions for
some of the specific concepts used in libvirt documentation:</p>
<ul>
<li>a <strong>node</strong> is a single physical machine</li>
<li>an <strong>hypervisor</strong> is a layer of software allowing to
virtualize a node in a set of virtual machines with possibly different
configurations than the node itself</li>
<li>a <strong>domain</strong> is an instance of an operating system running
on a virtualized machine provided by the hypervisor</li>
</ul>
<p class="image">
<img alt="Hypervisor and domains running on a node" src="node.gif"/>
<p>Libvirt is a C toolkit manage the virtualization capabilities
of recent versions of Linux (and other OSes).</p>
<p>To avoid ambiguity about the goals, terms and specific concepts used
in libvirt documentation please see the <a href="goals.html">Goal
section</a>.
</p>
<p>Now we can define the goal of libvirt: to provide the lowest possible
generic and stable layer to manage domains on a node.</p>
<p>This implies the following:</p>
<ul>
<li>the API should not be targeted to a single virtualization environment
though Xen is the current default, which also means that some very
specific capabilities which are not generic enough may not be provided as
libvirt APIs</li>
<li>the API should allow to do efficiently and cleanly all the operations
needed to manage domains on a node</li>
<li>the API will not try to provide high level multi-nodes management
features like load balancing, though they could be implemented on top of
libvirt</li>
<li>stability of the API is a big concern, libvirt should isolate
applications from the frequent changes expected at the lower level of the
virtualization framework</li>
</ul>
<p>So libvirt should be a building block for higher level management tools
and for applications focusing on virtualization of a single node (the only
exception being domain migration between node capabilities which may need to
be added at the libvirt level). Where possible libvirt should be extendable
to be able to provide the same API for remote nodes, however this is not the
case at the moment, the code currently handle only local node accesses
(extension for remote access support is being worked on, see <a href="bugs.html">the mailing list</a> discussions about it).</p>
</body>
</html>

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