[libvirt] [PATCH v2 0/1] netlink events
by D. Herrendoerfer
From: "D. Herrendoerfer" <d.herrendoerfer(a)herrendoerfer.name>
This is the second version of the netlink event code. it has most of
the proposed changes by Eric and Daniel included.
DirkH
D. Herrendoerfer (1):
Add netlink message event service
daemon/libvirtd.c | 9 +
src/Makefile.am | 1 +
src/libvirt_private.syms | 8 +
src/util/virnetlink.c | 447 ++++++++++++++++++++++++++++++++++++++++++++++
src/util/virnetlink.h | 64 +++++++
5 files changed, 529 insertions(+), 0 deletions(-)
create mode 100644 src/util/virnetlink.c
create mode 100644 src/util/virnetlink.h
--
1.7.7.5
12 years, 9 months
[libvirt] [RFC Incomplete Patch] Libvirt + Openvswitch
by Dan Wendlandt
Hello all,
I know of many people who want to spin up VMs using libvirt + kvm/qemu and
attach those VMs to an openvswitch bridge (see: http://www.openvswitch.org).
However, the only way I know of to get this working is a kludge that uses
to tap devices along with <interface type="ethernet"> while running
ovs-vsctl outside of libvirt. Even worse, doing this on RHEL/Fedora seems
to require privilege tweaks (e.g., running qemu as root, not dropping
capabilities), which may not be acceptable for production deployments
(see:
http://fedoraproject.org/wiki/How_to_debug_Virtualization_problems#Errors...).
So I would like to start taking steps toward better libvirt/openvswitch
integration. My initial step has the fairly limit goal of enabling
kvm/qemu VM NICs to attach to an openvswitch bridge in much the same way VM
NIC can already attached to the linux bridge. For example, specifying:
<interface type="openvswitch">
<source bridge="br0"/>
<mac address="ca:fe:de;ad:be:ef"/>
</interface>
I also wanted to add a new child element of <interface> that can be used to
specify some OVS specific configuration. To start, I just want to expose a
single 'interfaceid' value (this parameter is specific to openvswitch).
Extending the previous example:
<interface type="openvswitch">
<source bridge="br0"/>
<mac address="ca:fe:de;ad:be:ef"/>
<openvswitchport interfaceid="interface-xyz"/>
</interface>
For this first step (see attached patch), I am only targeting the model
where the OVS bridge has been created externally ahead of time. I am not
tackling any of the "network" logic that actually creates/destroys bridges,
as it is not needed for my target use case.
A couple notes about the attached patch:
- I haven't actually run this code. I was just poking around the libvirt
code to learn about it and figured that a diff was the most concrete way to
propose what I was thinking of doing. I would be curious for pointers
about big chunks of work that I may have missed (for example, I haven't
added any tests yet).
- the code was modeled on the network interface "bandwidth" code, that
calls out to 'tc' to configure bandwidth rates. Ideally we would be able
to make direct C calls to OVS (and we plan to make that possible in the
future), but calling an external utility right now is the only viable
path.
- no attention was paid to style guidelines. Will do that before any real
submission.
- I wasn't very clear on the notion of an "actual" net def, as opposed to a
normal net def. What's the best place to look for documentation on this?
Anyway, I'm primarily looking for feedback about whether I'm barking up the
right tree before I spend time debugging or polishing the patch, so I would
appreciate thoughts, advice, etc. Thanks,
Dan
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dan Wendlandt
Nicira Networks: www.nicira.com
twitter: danwendlandt
~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 years, 9 months
[libvirt] [libvirt-glib] Add gvir_storage_vol_resize()
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
Add wrapper for virStorageVolResize().
---
libvirt-gobject/libvirt-gobject-storage-vol.c | 27 +++++++++++++++++++++++++
libvirt-gobject/libvirt-gobject-storage-vol.h | 20 ++++++++++++++++++
libvirt-gobject/libvirt-gobject.sym | 1 +
3 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.c b/libvirt-gobject/libvirt-gobject-storage-vol.c
index 491e2e6..78ce76e 100644
--- a/libvirt-gobject/libvirt-gobject-storage-vol.c
+++ b/libvirt-gobject/libvirt-gobject-storage-vol.c
@@ -299,3 +299,30 @@ gboolean gvir_storage_vol_delete(GVirStorageVol *vol,
return TRUE;
}
+
+/**
+ * gvir_storage_vol_resize:
+ * @vol: the storage volume to resize
+ * @capacity: the new capacity of the volume
+ * @flags: (type GVirStorageVolResizeFlags): the flags
+ * @err: Return location for errors, or NULL
+ *
+ * Changes the capacity of the storage volume @vol to @capacity.
+ *
+ * Returns: #TRUE success, #FALSE otherwise
+ */
+gboolean gvir_storage_vol_resize(GVirStorageVol *vol,
+ guint64 capacity,
+ guint flags,
+ GError **err)
+{
+ if (virStorageVolResize(vol->priv->handle, capacity, flags) < 0) {
+ gvir_set_error_literal(err,
+ GVIR_STORAGE_VOL_ERROR,
+ 0,
+ "Unable to resize volume storage");
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.h b/libvirt-gobject/libvirt-gobject-storage-vol.h
index 25f683a..b425f0a 100644
--- a/libvirt-gobject/libvirt-gobject-storage-vol.h
+++ b/libvirt-gobject/libvirt-gobject-storage-vol.h
@@ -23,6 +23,7 @@
#if !defined(__LIBVIRT_GOBJECT_H__) && !defined(LIBVIRT_GOBJECT_BUILD)
#error "Only <libvirt-gobject/libvirt-gobject.h> can be included directly."
#endif
+#include <libvirt/libvirt.h>
#ifndef __LIBVIRT_GOBJECT_STORAGE_VOL_H__
#define __LIBVIRT_GOBJECT_STORAGE_VOL_H__
@@ -65,6 +66,21 @@ typedef enum {
GVIR_STORAGE_VOL_STATE_DIR = 2, /* Directory-passthrough based volume */
} GVirStorageVolType;
+/**
+ * GVirStorageVolResizeFlags:
+ * @GVIR_STORAGE_VOL_RESIZE_NONE: No flags
+ * @GVIR_STORAGE_VOL_RESIZE_ALLOCATE: force allocation of new size
+ * @GVIR_STORAGE_VOL_RESIZE_DELTA: size is relative to current
+ * @GVIR_STORAGE_VOL_RESIZE_SHRINK: allow decrease in capacity. This combined
+ * with #GVIR_STORAGE_VOL_RESIZE_DELTA, implies a negative delta.
+ */
+typedef enum {
+ GVIR_STORAGE_VOL_RESIZE_NONE = 0,
+ GVIR_STORAGE_VOL_RESIZE_ALLOCATE = VIR_STORAGE_VOL_RESIZE_ALLOCATE,
+ GVIR_STORAGE_VOL_RESIZE_DELTA = VIR_STORAGE_VOL_RESIZE_DELTA,
+ GVIR_STORAGE_VOL_RESIZE_SHRINK = VIR_STORAGE_VOL_RESIZE_SHRINK,
+} GVirStorageVolResizeFlags;
+
typedef struct _GVirStorageVolInfo GVirStorageVolInfo;
struct _GVirStorageVolInfo
{
@@ -89,6 +105,10 @@ GVirConfigStorageVol *gvir_storage_vol_get_config(GVirStorageVol *vol,
GError **err);
GVirStorageVolInfo *gvir_storage_vol_get_info(GVirStorageVol *vol,
GError **err);
+gboolean gvir_storage_vol_resize(GVirStorageVol *vol,
+ guint64 capacity,
+ guint flags,
+ GError **err);
G_END_DECLS
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index a4f03f7..468bf65 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -126,6 +126,7 @@ LIBVIRT_GOBJECT_0.0.4 {
gvir_storage_vol_get_config;
gvir_storage_vol_get_info;
gvir_storage_vol_delete;
+ gvir_storage_vol_resize;
gvir_connection_handle_get_type;
--
1.7.7.6
12 years, 9 months
[libvirt] [PATCH] virterror.c: Fix several spelling mistakes
by Philipp Hahn
compat{a->i}bility
erron{->e}ous
nec{c->}essary.
Either "the" or "a".
Signed-off-by: Philipp Hahn <hahn(a)univention.de>
---
ChangeLog-old | 36 ++++++++++++++++++------------------
docs/drvlxc.html.in | 2 +-
docs/formatdomain.html.in | 4 ++--
docs/locking.html.in | 2 +-
docs/migration.html.in | 2 +-
docs/news.html.in | 6 +++---
src/conf/domain_conf.c | 6 +++---
src/libvirt.c | 2 +-
src/lxc/lxc_container.c | 2 +-
src/qemu/qemu_migration.c | 2 +-
src/rpc/virnetserverprogram.c | 2 +-
src/util/virterror.c | 8 ++++----
src/xenxs/xen_sxpr.c | 2 +-
13 files changed, 38 insertions(+), 38 deletions(-)
diff --git a/ChangeLog-old b/ChangeLog-old
index c3b41e2..b5d44d5 100644
--- a/ChangeLog-old
+++ b/ChangeLog-old
@@ -882,7 +882,7 @@ Wed May 13 18:06:17 CEST 2009 Daniel Veillard <veillard(a)redhat.com>
Wed May 13 12:34:06 BST 2009 Daniel P. Berrange <berrange(a)redhat.com>
* src/lxc_container.c: Replace sys/capability.h with
- linux/capability.h, to avoid unneccessary dependancy
+ linux/capability.h, to avoid unnecessary dependency
on the libcap package.
Tue May 12 16:39:06 EDT 2009 Cole Robinson <crobinso(a)redhat.com>
@@ -3351,7 +3351,7 @@ Tue Jan 20 20:22:53 GMT 2009 Daniel P. Berrange <berrange(a)redhat.com>
Tue Jan 20 19:49:53 GMT 2009 Daniel P. Berrange <berrange(a)redhat.com>
* .x-sc_prohibit_nonreentrant: Blacklist some places where
- use of non-threadsafe APIs are not neccessary to check
+ use of non-threadsafe APIs are not necessary to check
* Makefile.am, Makefile.maint, Makefile.nonreentrant: Add
check for non-reentrant safe API calls
* Makefile.cfg: Temporarily disable non-reentrant check
@@ -3591,7 +3591,7 @@ Thu Jan 15 19:54:19 GMT 2009 Daniel P. Berrange <berrange(a)redhat.com>
* src/Makefile.am, src/threads.c, src/threads.h: Generic internal API for threads
* src/threads-pthread.c, src/threads-pthread.h: UNIX pthreads impl
* src/threads-win32.c, src/threads-win32.h: Win32 threads impl
- * src/internal.h: Remove unnneccessary pthreads macros
+ * src/internal.h: Remove unnecessary pthreads macros
* src/libvirt_private.syms: Add symbols for internal threads API
* po/POTFILES.in: Add node_device_conf.c
* proxy/Makefile.am: Add threads.c to build
@@ -4262,7 +4262,7 @@ Thu Dec 18 11:50:58 GMT 2008 Daniel P. Berrange <berrange(a)redhat.com>
Misc daemon bug fixes (John Levon)
* qemud/qemud.c: Fix conditional for node devices
- * qemud/remote.c: Remove unneccessary path.h include
+ * qemud/remote.c: Remove unnecessary path.h include
Thu Dec 18 07:47:58 +0100 2008 Jim Meyering <meyering(a)redhat.com>
@@ -5032,7 +5032,7 @@ Tue Nov 25 11:17:40 GMT 2008 Daniel P. Berrange <berrange(a)redhat.com>
Tue Nov 25 10:49:40 GMT 2008 Daniel P. Berrange <berrange(a)redhat.com>
- * src/Makefile.am: Remove unneccessary $(builddir) usage which
+ * src/Makefile.am: Remove unnecessary $(builddir) usage which
breaks on older automake. Remove duplicate CFLAGS from merge
error
* src/xen_unified.c: Wire up XM driver for autostart
@@ -5093,7 +5093,7 @@ Mon Nov 24 19:22:40 GMT 2008 Daniel P. Berrange <berrange(a)redhat.com>
* tests/Makefile.am, tests/sexpr2xmltest.c,
tests/testutilsxen.c, tests/xencapstest.c,
tests/xmconfigtest.c, tests/xml2sexprtest.c: Disable all
- Xen tests when Xen driver build is disabled. Remove unneccessary
+ Xen tests when Xen driver build is disabled. Remove unnecessary
WITH_XEN conditionals from source, since the entire build
is disabled in Makefile.am
@@ -6822,7 +6822,7 @@ Wed Aug 20 21:05:09 BST 2008 Daniel P. Berrange <berrange(a)redhat.com>
src/xen_unified.h, src/xend_internal.c, src/xend_internal.h,
src/xm_internal.c, src/xs_internal.c, src/xs_internal.h
tests/testutils.h: Remove preprocessor conditions for driver
- compilation. Remove unneccessary "extern C" declarations.
+ compilation. Remove unnecessary "extern C" declarations.
Wed Aug 20 20:42:09 BST 2008 Daniel P. Berrange <berrange(a)redhat.com>
@@ -7008,7 +7008,7 @@ Fri Aug 8 16:41:24 BST 2008 Daniel Berrange <berrange(a)redhat.com>
src/storage_backend_fs.c, src/storage_backend_iscsi.c,
src/storage_backend_logical.c, src/util.c, src/util.h,
src/veth.c, tests/qemuxml2argvtest.c: Fix const-correctness
- of virRun and virExec, and remove unneccessary casts in callers
+ of virRun and virExec, and remove unnecessary casts in callers
Fri Aug 8 16:53:24 CEST 2008 Daniel Veillard <veillard(a)redhat.com>
@@ -7530,7 +7530,7 @@ Wed Jul 16 16:44:27 CEST 2008 Daniel Veillard <veillard(a)redhat.com>
Sat Jul 12 14:52:59 BST 2008 Daniel P. Berrange <berrange(a)redhat.com>
- * src/qemu_conf.c: Remove unneccessary c-ctype.h include
+ * src/qemu_conf.c: Remove unnecessary c-ctype.h include
Fri Jul 11 20:32:59 BST 2008 Daniel P. Berrange <berrange(a)redhat.com>
@@ -8612,7 +8612,7 @@ Thu May 1 14:10:28 EST 2008 Daniel P. Berrange <berrange(a)redhat.com>
Tue Apr 29 12:32:28 EST 2008 Daniel P. Berrange <berrange(a)redhat.com>
- * configure.in: Remove compatability macros AC_CHECK_*_ONCE for
+ * configure.in: Remove compatibility macros AC_CHECK_*_ONCE for
now part of onceonly.m4 in gnulib/m4/
Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering(a)redhat.com>
@@ -8628,7 +8628,7 @@ Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering(a)redhat.com>
Tue Apr 29 11:54:28 EST 2008 Daniel P. Berrange <berrange(a)redhat.com>
- * configure.in: Add compatability macros AC_CHECK_*_ONCE for
+ * configure.in: Add compatibility macros AC_CHECK_*_ONCE for
older autoconf (RHEL-5 vintage)
Tue Apr 29 08:13:28 EST 2008 Daniel P. Berrange <berrange(a)redhat.com>
@@ -10247,7 +10247,7 @@ Fri Jan 25 12:00:00 BST 2008 Richard W.M. Jones <rjones(a)redhat.com>
Fri Jan 25 10:46:32 CET 2008 Daniel Veillard <veillard(a)redhat.com>
- * src/xen_internal.c: fix an erronous use of VIR_DOMAIN_NONE instead
+ * src/xen_internal.c: fix an erroneous use of VIR_DOMAIN_NONE instead
of VIR_DOMAIN_NOSTATE (both defined as 0, no regression)
Thu Jan 24 18:08:28 CET 2008 Daniel Veillard <veillard(a)redhat.com>
@@ -10283,8 +10283,8 @@ Tue Jan 22 16:27:47 EST 2008 Daniel P. Berrange <berrange(a)redhat.com>
* configure.ac: Remove use of PKG_CHECK_EXISTS macro. Avoid
lines going over 80 chars wide. Make sasl check automatic
- enable/disable as neccessary.
- * acinclude.m4: Added compatability macro for old pkg-config
+ enable/disable as necessary.
+ * acinclude.m4: Added compatibility macro for old pkg-config
* src/gnutls_1_0_compat.h: Add compat for gnutls_cipher_algorithm_t
Mon Jan 21 18:03:47 CET 2008 Jim Meyering <meyering(a)redhat.com>
@@ -11617,7 +11617,7 @@ Tue Oct 23 17:30:52 CEST 2007 Daniel Veillard <veillard(a)redhat.com>
Mon Oct 22 22:33:59 CEST 2007 Daniel Veillard <veillard(a)redhat.com>
* src/xen_internal.c src/xen_unified.c src/xen_unified.h
- src/xend_internal.c src/xml.c src/xml.h: commited erronously
+ src/xend_internal.c src/xml.c src/xml.h: committed erroneously
the NUMA patches sent for review on the list in last commit.
But that should not affect non NUMA users so early push should
not be a problem.
@@ -12117,7 +12117,7 @@ Mon Aug 13 21:18:48 EST 2007 Daniel P. Berrange <berrange(a)redhat.com>
* src/util.h, src/util.c: Allow a file descriptor to be supplied
for STDIN when calling virExec(), or if -1, redirect from /dev/null
* src/qemu_driver.c, src/openvz_driver.c: Pass in -1 for new stdin
- parameter above where neccessary. Patch from Jim Paris
+ parameter above where necessary. Patch from Jim Paris
Mon Aug 13 20:13:48 EST 2007 Daniel P. Berrange <berrange(a)redhat.com>
@@ -15485,7 +15485,7 @@ Fri Aug 4 20:19:23 EDT 2006 Daniel Berrange <berrange(a)redhat.com>
* src/libvirt.c: Fix off-by-one in validated VCPU number (it is
zero based, not one based).
* include/libvirt/libvirt.h: Add some convenience macros for
- calculating neccessary CPU map lengths & total host CPUs
+ calculating necessary CPU map lengths & total host CPUs
* src/virsh.c: Add 'vcpuinfo' and 'vcpumap' commands
Fri Aug 4 14:45:25 CEST 2006 Daniel Veillard <veillard(a)redhat.com>
@@ -15708,7 +15708,7 @@ Wed Jun 14 13:10:03 EDT 2006 Daniel Veillard <veillard(a)redhat.com>
Tue Jun 13 14:06:01 EDT 2006 Daniel P. Berrange <berrange(a)redhat.com>
* src/virsh.c: use 'double' instead of 'float' when calculating
- 'CPU time' field for dominfo command, to ensure no unneccessary
+ 'CPU time' field for dominfo command, to ensure no unnecessary
loss of precision converting from nanoseconds to seconds.
Tue Jun 13 18:35:22 EDT 2006 Daniel Veillard <veillard(a)redhat.com>
diff --git a/docs/drvlxc.html.in b/docs/drvlxc.html.in
index 47837d1..c817a9b 100644
--- a/docs/drvlxc.html.in
+++ b/docs/drvlxc.html.in
@@ -35,7 +35,7 @@ mount them use:
<p>
NB, the blkio controller in some kernels will not allow creation of nested
sub-directories which will prevent correct operation of the libvirt LXC
-driver. On such kernels, it may be neccessary to unmount the blkio controller.
+driver. On such kernels, it may be necessary to unmount the blkio controller.
</p>
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 6bf64a6..284e780 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -2885,8 +2885,8 @@ qemu-kvm -net nic,model=? /dev/null
<dl>
<dt><code>video</code></dt>
<dd>
- The <code>video</code> element is the a container for describing
- video devices. For backwards compatability, if no <code>video</code>
+ The <code>video</code> element is the container for describing
+ video devices. For backwards compatibility, if no <code>video</code>
is set but there is a <code>graphics</code> in domain xml, then libvirt
will add a default <code>video</code> according to the guest type.
For a guest of type "kvm", the default <code>video</code> for it is:
diff --git a/docs/locking.html.in b/docs/locking.html.in
index 5a64453..28781a4 100644
--- a/docs/locking.html.in
+++ b/docs/locking.html.in
@@ -76,7 +76,7 @@
<p>
The sanlock daemon must be started on every single host
that will be running virtual machines. So repeat these
- steps as neccessary.
+ steps as necessary.
</p>
<h2><a name="sanlockplugin">libvirt sanlock plugin configuration</a></h2>
diff --git a/docs/migration.html.in b/docs/migration.html.in
index 3676f0b..9d9d9b9 100644
--- a/docs/migration.html.in
+++ b/docs/migration.html.in
@@ -25,7 +25,7 @@
on the hypervisor in question, but will typically have the lowest computational costs
by minimising the number of data copies involved. The native data transports will also
require extra hypervisor-specific network configuration steps by the administrator when
- deploying a host. For some hypervisors, it might be neccessary to open up a large range
+ deploying a host. For some hypervisors, it might be necessary to open up a large range
of ports on the firewall to allow multiple concurrent migration operations.
</p>
diff --git a/docs/news.html.in b/docs/news.html.in
index c8365d9..f8e07f1 100644
--- a/docs/news.html.in
+++ b/docs/news.html.in
@@ -5471,7 +5471,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
qemu: Search binaries in PATH instead of hardcoding /usr/bin (Matthias Bolte),<br/>
Implement QMP support for extracting CPU thread ID (Daniel P. Berrange),<br/>
Misc fixes to QMP monitor support for QEMU (Daniel P. Berrange),<br/>
- Fix setup of compatability serial devices from console device (Daniel P. Berrange),<br/>
+ Fix setup of compatibility serial devices from console device (Daniel P. Berrange),<br/>
Start modernizing configure (Eric Blake),<br/>
Add a rule to check for uses of readlink. (Chris Lalancette),<br/>
Add virConnectGetVersion Python API (Taizo ITO),<br/>
@@ -6025,7 +6025,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
Fix a typo in virDiskHasValidPciAddr() (Jiri Denemark),<br/>
Fix a number of small typos (Dan Kenigsberg),<br/>
add doc for graphic and video elements (Florian Vichot),<br/>
- Fix up 'neccessary -> necessary' in a comment. (Chris Lalancette),<br/>
+ Fix up 'necessary -> necessary' in a comment. (Chris Lalancette),<br/>
Fix up comments for domainXML{To,From}Native. (Chris Lalancette),<br/>
Simple fix of a comment in qemuStringToArgvEnv. (Chris Lalancette),<br/>
Add a README file to src/ explaining the directory structure (Daniel P. Berrange),<br/>
@@ -6125,7 +6125,7 @@ and check the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
Pull connection handling code out of doTunnelMigrate (Daniel P. Berrange),<br/>
Refactor native QEMU migration code (Daniel P. Berrange),<br/>
Don't force dconn to be NULL in virDomainMigrate (Daniel P. Berrange),<br/>
- Remove unneccessary uri_in parameter from virMigratePrepareTunnel (Daniel P. Berrange),<br/>
+ Remove unnecessary uri_in parameter from virMigratePrepareTunnel (Daniel P. Berrange),<br/>
Move the VIR_DRV_FEATURE* constants (Daniel P. Berrange),<br/>
Fix configure.ac message vertical alignment (Daniel P. Berrange),<br/>
cgroup: Fix -Werror breakage (Cole Robinson),<br/>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 26e24f0..dcb9549 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2970,7 +2970,7 @@ virDomainDiskDefParseXML(virCapsPtr caps,
/* People sometimes pass a bogus '' source path
when they mean to omit the source element
completely. eg CDROM without media. This is
- just a little compatability check to help
+ just a little compatibility check to help
those broken apps */
if (source && STREQ(source, ""))
VIR_FREE(source);
@@ -8002,7 +8002,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
}
VIR_FREE(nodes);
- /* For backwards compatability, if no <video> tag is set but there
+ /* For backwards compatibility, if no <video> tag is set but there
* is a <graphics> tag, then we add a single video tag */
if (def->ngraphics && !def->nvideos) {
virDomainVideoDefPtr video;
@@ -9531,7 +9531,7 @@ virDomainDefMaybeAddSmartcardController(virDomainDefPtr def)
/*
* Based on the declared <address/> info for any devices,
- * add neccessary drive controllers which are not already present
+ * add necessary drive controllers which are not already present
* in the XML. This is for compat with existing apps which will
* not know/care about <controller> info in the XML
*/
diff --git a/src/libvirt.c b/src/libvirt.c
index e8473c2..11e2635 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -16577,7 +16577,7 @@ error:
* is non-NULL, then only the specific domain will be monitored
*
* Most types of event have a callback providing a custom set of parameters
- * for the event. When registering an event, it is thus neccessary to use
+ * for the event. When registering an event, it is thus necessary to use
* the VIR_DOMAIN_EVENT_CALLBACK() macro to cast the supplied function pointer
* to match the signature of this method.
*
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 1c148e2..04af39b 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -432,7 +432,7 @@ static int lxcContainerMountBasicFS(const char *srcprefix, bool pivotRoot)
int mflags;
} mnts[] = {
/* When we want to make a bind mount readonly, for unknown reasons,
- * it is currently neccessary to bind it once, and then remount the
+ * it is currently necessary to bind it once, and then remount the
* bind with the readonly flag. If this is not done, then the original
* mount point in the main OS becomes readonly too which is not what
* we want. Hence some things have two entries here.
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 8453a47..6e8ea98 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1317,7 +1317,7 @@ qemuMigrationPrepareDirect(struct qemud_driver *driver,
/* XXX this really should have been a properly well-formed
* URI, but we can't add in tcp:// now without breaking
- * compatability with old targets. We at least make the
+ * compatibility with old targets. We at least make the
* new targets accept both syntaxes though.
*/
/* Caller frees */
diff --git a/src/rpc/virnetserverprogram.c b/src/rpc/virnetserverprogram.c
index d2ede6b..7f589c8 100644
--- a/src/rpc/virnetserverprogram.c
+++ b/src/rpc/virnetserverprogram.c
@@ -384,7 +384,7 @@ virNetServerProgramDispatchCall(virNetServerProgramPtr prog,
if (virNetServerClientNeedAuth(client) &&
dispatcher->needAuth) {
/* Explicitly *NOT* calling remoteDispatchAuthError() because
- we want back-compatability with libvirt clients which don't
+ we want back-compatibility with libvirt clients which don't
support the VIR_ERR_AUTH_FAILED error code */
virNetError(VIR_ERR_RPC,
"%s", _("authentication required"));
diff --git a/src/util/virterror.c b/src/util/virterror.c
index edd5198..fb5ca6f 100644
--- a/src/util/virterror.c
+++ b/src/util/virterror.c
@@ -228,7 +228,7 @@ virErrorGenericFailure(virErrorPtr err)
/*
- * Internal helper to perform a deep copy of the an error
+ * Internal helper to perform a deep copy of an error
*/
static int
virCopyError(virErrorPtr from,
@@ -439,7 +439,7 @@ virResetLastError(void)
* 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.
+ * remains for backwards compatibility.
*
* Returns a pointer to the last error or NULL if none occurred.
*/
@@ -470,7 +470,7 @@ virConnGetLastError(virConnectPtr conn)
* 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.
+ * remains for backwards compatibility.
*
* One will need to free the result with virResetError()
*
@@ -683,7 +683,7 @@ virRaiseErrorFull(const char *filename ATTRIBUTE_UNUSED,
/*
* All errors are recorded in thread local storage
- * For compatability, public API calls will copy them
+ * For compatibility, public API calls will copy them
* to the per-connection error object when necessary
*/
to = virLastErrorObject();
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index 756eb77..f8390ea 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -651,7 +651,7 @@ xenParseSxprSound(virDomainDefPtr def,
int i;
/*
- * Special compatability code for Xen with a bogus
+ * Special compatibility code for Xen with a bogus
* sound=all in config.
*
* NB deliberately, don't include all possible
--
1.7.1
12 years, 9 months
[libvirt] [PATCH v4] npiv: Auto-generate WWN if it's not specified
by Osier Yang
The auto-generated WWN comply with the new addressing schema of WWN:
<quote>
the first nibble is either hex 5 or 6 followed by a 3-byte vendor
identifier and 36 bits for a vendor-specified serial number.
</quote>
We choose hex 5 for the first nibble. And use Qumranet's OUI
(00:1A:4A) as the 3-byte vendor indentifier. The last 36 bits
are auto-generated.
v3 - v4:
* No changes, rebasing according the files reorgnization.
---
src/conf/node_device_conf.c | 35 ++++++++++++++++++-----------------
src/libvirt_private.syms | 1 +
src/util/virrandom.c | 25 +++++++++++++++++++++++++
src/util/virrandom.h | 1 +
4 files changed, 45 insertions(+), 17 deletions(-)
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index d9dc9ac..6812ee9 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -63,19 +63,12 @@ VIR_ENUM_IMPL(virNodeDevHBACap, VIR_NODE_DEV_CAP_HBA_LAST,
static int
virNodeDevCapsDefParseString(const char *xpath,
xmlXPathContextPtr ctxt,
- char **string,
- virNodeDeviceDefPtr def,
- const char *missing_error_fmt)
+ char **string)
{
char *s;
- s = virXPathString(xpath, ctxt);
- if (s == NULL) {
- virNodeDeviceReportError(VIR_ERR_INTERNAL_ERROR,
- missing_error_fmt,
- def->name);
+ if (!(s = virXPathString(xpath, ctxt)))
return -1;
- }
*string = s;
return 0;
@@ -763,18 +756,26 @@ virNodeDevCapScsiHostParseXML(xmlXPathContextPtr ctxt,
if (virNodeDevCapsDefParseString("string(./wwnn[1])",
ctxt,
- &data->scsi_host.wwnn,
- def,
- _("no WWNN supplied for '%s'")) < 0) {
- goto out;
+ &data->scsi_host.wwnn) < 0) {
+ if (virWWNGenerate(&data->scsi_host.wwnn) < 0) {
+ virNodeDeviceReportError(VIR_ERR_INTERNAL_ERROR,
+ _("no WWNN supplied for '%s', and "
+ "auto-generation failed"),
+ def->name);
+ goto out;
+ }
}
if (virNodeDevCapsDefParseString("string(./wwpn[1])",
ctxt,
- &data->scsi_host.wwpn,
- def,
- _("no WWPN supplied for '%s'")) < 0) {
- goto out;
+ &data->scsi_host.wwpn) < 0) {
+ if (virWWNGenerate(&data->scsi_host.wwpn) < 0) {
+ virNodeDeviceReportError(VIR_ERR_INTERNAL_ERROR,
+ _("no WWPN supplied for '%s', and "
+ "auto-generation failed"),
+ def->name);
+ goto out;
+ }
}
ctxt->node = orignode2;
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index e300f06..0d5758f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1374,6 +1374,7 @@ virPidFileDeletePath;
# virrandom.h
virRandomBits;
virRandomInitialize;
+virWWNGenerate;
# virsocketaddr.h
diff --git a/src/util/virrandom.c b/src/util/virrandom.c
index ec0cf03..3839989 100644
--- a/src/util/virrandom.c
+++ b/src/util/virrandom.c
@@ -26,6 +26,10 @@
#include "virrandom.h"
#include "threads.h"
#include "count-one-bits.h"
+#include "util.h"
+#include "virterror_internal.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
static char randomState[128];
static struct random_data randomData;
@@ -79,3 +83,24 @@ uint64_t virRandomBits(int nbits)
virMutexUnlock(&randomLock);
return ret;
}
+
+#define QUMRANET_OUI "001a4a"
+
+int virWWNGenerate(char **wwn) {
+ int suffix[5];
+
+ suffix[0] = virRandomBits(16);
+ suffix[1] = virRandomBits(256);
+ suffix[2] = virRandomBits(256);
+ suffix[3] = virRandomBits(256);
+ suffix[4] = virRandomBits(256);
+
+ if (virAsprintf(wwn, "%x%s%x%02x%02x%02x%02x", 0x5, QUMRANET_OUI,
+ suffix[0], suffix[1], suffix[2],
+ suffix[3], suffix[4]) < 0) {
+ virReportOOMError();
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/util/virrandom.h b/src/util/virrandom.h
index e180a2f..5e2cdcf 100644
--- a/src/util/virrandom.h
+++ b/src/util/virrandom.h
@@ -27,5 +27,6 @@
int virRandomInitialize(uint32_t seed) ATTRIBUTE_RETURN_CHECK;
uint64_t virRandomBits(int nbits);
+int virWWNGenerate(char **wwn);
#endif /* __VIR_RANDOM_H__ */
--
1.7.7.3
12 years, 9 months
[libvirt] [PATCH] Added missing memory reporting into python bindings
by Martin Kletzander
Two types of memory stats were not reported by python bindings. This
patch fixes both of them.
---
python/libvirt-override.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/python/libvirt-override.c b/python/libvirt-override.c
index 18849f8..289a9bb 100644
--- a/python/libvirt-override.c
+++ b/python/libvirt-override.c
@@ -258,6 +258,12 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
else if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_AVAILABLE)
PyDict_SetItem(info, libvirt_constcharPtrWrap("available"),
PyLong_FromUnsignedLongLong(stats[i].val));
+ else if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON)
+ PyDict_SetItem(info, libvirt_constcharPtrWrap("actual"),
+ PyLong_FromUnsignedLongLong(stats[i].val));
+ else if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_RSS)
+ PyDict_SetItem(info, libvirt_constcharPtrWrap("rss"),
+ PyLong_FromUnsignedLongLong(stats[i].val));
}
return info;
}
--
1.7.3.4
12 years, 9 months
[libvirt] [PATCH 0/5] switch python bindings to use libvirt_util
by Eric Blake
As threatened here:
https://www.redhat.com/archives/libvir-list/2012-February/msg00122.html
and as requested here:
https://www.redhat.com/archives/libvir-list/2012-January/msg00491.html
along with some prerequisite patches. I was quite shocked when I
discovered that we didn't have a syntax-check rule requiring the
use of VIR_FREE, before these patches.
Eric Blake (5):
build: clean up CPPFLAGS/INCLUDES usage
python: drop redundant function
build: prohibit raw malloc and free
build: expand rule to cover testsuite
python: use libvirt_util to avoid raw free
cfg.mk | 9 +
daemon/Makefile.am | 20 +-
examples/dominfo/Makefile.am | 4 +-
examples/domsuspend/Makefile.am | 4 +-
examples/hellolibvirt/Makefile.am | 4 +-
examples/openauth/Makefile.am | 4 +-
python/Makefile.am | 22 ++-
python/generator.py | 4 +-
python/libvirt-override.c | 364 ++++++++++++++++++-------------------
python/typewrappers.c | 21 +--
python/typewrappers.h | 3 +-
src/Makefile.am | 70 ++++----
src/conf/network_conf.c | 2 +-
src/cpu/cpu.c | 4 +-
src/libxl/libxl_conf.c | 13 +-
src/rpc/virnetmessage.c | 23 ++-
tests/Makefile.am | 9 +-
tests/commandhelper.c | 6 +-
tests/cputest.c | 36 ++--
tests/domainsnapshotxml2xmltest.c | 6 +-
tests/interfacexml2xmltest.c | 6 +-
tests/networkxml2argvtest.c | 10 +-
tests/networkxml2xmltest.c | 10 +-
tests/nodedevxml2xmltest.c | 6 +-
tests/nodeinfotest.c | 10 +-
tests/nwfilterxml2xmltest.c | 10 +-
tests/qemuargv2xmltest.c | 20 +-
tests/qemuxml2argvtest.c | 28 ++--
tests/qemuxml2xmltest.c | 10 +-
tests/qemuxmlnstest.c | 23 ++-
tests/qparamtest.c | 2 +-
tests/sexpr2xmltest.c | 10 +-
tests/storagepoolxml2xmltest.c | 10 +-
tests/storagevolxml2xmltest.c | 14 +-
tests/testutils.c | 9 +-
tests/testutils.h | 3 +-
tests/virshtest.c | 4 +-
tests/xencapstest.c | 10 +-
tests/xmconfigtest.c | 10 +-
tests/xml2sexprtest.c | 10 +-
tools/Makefile.am | 12 +-
tools/virsh.c | 9 +-
42 files changed, 429 insertions(+), 435 deletions(-)
--
1.7.7.6
12 years, 9 months
[libvirt] need help in vm migration
by punit gupta
sir
i am using fedora 14 and libvirt 0.8 and qemu 13 ,and i am trying to
migrate my vm using virt-manager but it is giving error .
>>
internal error Process exited while reading console log output: char device
redirected to /dev/pts/1
qemu: could not open disk image /home/punit/qemu/dos1.img: No such file or
directory
where as file is present in the directry .
please help
--
Punit Gupta
M-Tech (C.S.E) (jiit noida)
12 years, 9 months
[libvirt] [PATCH] command: allow merging stdout and stderr in string capture
by Eric Blake
Sometimes, its easier to run children with 2>&1 in shell notation,
and just deal with stdout and stderr interleaved. This was already
possible for fd handling; extend it to also work when doing string
capture of a child process.
* docs/internals/command.html.in: Document this.
* src/util/command.c (virCommandSetErrorBuffer): Likewise.
(virCommandRun, virExecWithHook): Implement it.
* tests/commandtest.c (test14): Test it.
* daemon/remote.c (remoteDispatchAuthPolkit): Use new command
feature.
---
In response to:
https://www.redhat.com/archives/libvir-list/2012-January/msg01262.html
Hmm, I thought I sent this earlier, but can't find it on the archives.
daemon/remote.c | 11 +++--------
docs/internals/command.html.in | 5 ++++-
src/util/command.c | 16 ++++++++++++++--
tests/commandtest.c | 26 +++++++++++++++++++++++++-
4 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/daemon/remote.c b/daemon/remote.c
index 26ac4a6..1cea942 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -2477,7 +2477,7 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
int status = -1;
char *ident = NULL;
bool authdismissed = 0;
- char *pkout = NULL, *pkerr = NULL;
+ char *pkout = NULL;
struct daemonClientPrivate *priv =
virNetServerClientGetPrivateData(client);
virCommandPtr cmd = NULL;
@@ -2489,7 +2489,7 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
cmd = virCommandNewArgList(PKCHECK_PATH, "--action-id", action, NULL);
virCommandSetOutputBuffer(cmd, &pkout);
- virCommandSetErrorBuffer(cmd, &pkerr);
+ virCommandSetErrorBuffer(cmd, &pkout);
VIR_DEBUG("Start PolicyKit auth %d", virNetServerClientGetFD(client));
if (virNetServerClientGetAuth(client) != VIR_NET_SERVER_SERVICE_AUTH_POLKIT) {
@@ -2548,17 +2548,12 @@ error:
if (authdismissed) {
virNetError(VIR_ERR_AUTH_CANCELLED, "%s",
_("authentication cancelled by user"));
- } else if (pkout || pkerr) {
- virNetError(VIR_ERR_AUTH_FAILED, "%s %s",
- pkerr ? pkerr : "",
- pkout ? pkout : "");
} else {
virNetError(VIR_ERR_AUTH_FAILED, "%s",
- _("authentication failed"));
+ pkout && *pkout ? pkout : _("authentication failed"));
}
VIR_FREE(pkout);
- VIR_FREE(pkerr);
virNetMessageSaveError(rerr);
virMutexUnlock(&priv->lock);
return -1;
diff --git a/docs/internals/command.html.in b/docs/internals/command.html.in
index 7dcf462..7bb9aa3 100644
--- a/docs/internals/command.html.in
+++ b/docs/internals/command.html.in
@@ -373,7 +373,10 @@
allocation of collected information (however, on an
out-of-memory condition, the buffer may still be NULL). The
caller is responsible for freeing registered buffers, since the
- buffers are designed to persist beyond virCommandFree.
+ buffers are designed to persist beyond virCommandFree. It
+ is possible to pass the same pointer to both
+ virCommandSetOutputBuffer and virCommandSetErrorBuffer, in which
+ case the child process interleaves output into a single string.
</p>
<h3><a name="directory">Setting working directory</a></h3>
diff --git a/src/util/command.c b/src/util/command.c
index 6f51fbb..a2d5f84 100644
--- a/src/util/command.c
+++ b/src/util/command.c
@@ -464,7 +464,9 @@ virExecWithHook(const char *const*argv,
}
if (errfd != NULL) {
- if (*errfd == -1) {
+ if (errfd == outfd) {
+ childerr = childout;
+ } else if (*errfd == -1) {
if (pipe2(pipeerr, O_CLOEXEC) < 0) {
virReportSystemError(errno,
"%s", _("Failed to create pipe"));
@@ -1428,7 +1430,10 @@ virCommandSetOutputBuffer(virCommandPtr cmd, char **outbuf)
* guaranteed to be allocated after successful virCommandRun or
* virCommandWait, and is best-effort allocated after failed
* virCommandRun; caller is responsible for freeing *errbuf.
- * This requires the use of virCommandRun.
+ * This requires the use of virCommandRun. It is possible to
+ * pass the same pointer as for virCommandSetOutputBuffer(), in
+ * which case the child process will interleave all output into
+ * a single string.
*/
void
virCommandSetErrorBuffer(virCommandPtr cmd, char **errbuf)
@@ -1940,6 +1945,13 @@ virCommandRun(virCommandPtr cmd, int *exitstatus)
cmd->inpipe = infd[1];
}
+ /* If caller requested the same string for stdout and stderr, then
+ * merge those into one string. */
+ if (cmd->outbuf && cmd->outbuf == cmd->errbuf) {
+ cmd->errfdptr = &cmd->outfd;
+ cmd->errbuf = NULL;
+ }
+
/* If caller hasn't requested capture of stdout/err, then capture
* it ourselves so we can log it. But the intermediate child for
* a daemon has no expected output, and we don't want our
diff --git a/tests/commandtest.c b/tests/commandtest.c
index 9b9130c..3997d2c 100644
--- a/tests/commandtest.c
+++ b/tests/commandtest.c
@@ -508,6 +508,14 @@ static int test14(const void *unused ATTRIBUTE_UNUSED)
const char *errexpect = "BEGIN STDERR\n"
"Hello World\n"
"END STDERR\n";
+
+ char *jointactual = NULL;
+ const char *jointexpect = "BEGIN STDOUT\n"
+ "BEGIN STDERR\n"
+ "Hello World\n"
+ "Hello World\n"
+ "END STDOUT\n"
+ "END STDERR\n";
int ret = -1;
virCommandSetInputBuffer(cmd, "Hello World\n");
@@ -523,7 +531,18 @@ static int test14(const void *unused ATTRIBUTE_UNUSED)
goto cleanup;
virCommandFree(cmd);
- cmd = NULL;
+
+ cmd = virCommandNew(abs_builddir "/commandhelper");
+ virCommandSetInputBuffer(cmd, "Hello World\n");
+ virCommandSetOutputBuffer(cmd, &jointactual);
+ virCommandSetErrorBuffer(cmd, &jointactual);
+ if (virCommandRun(cmd, NULL) < 0) {
+ virErrorPtr err = virGetLastError();
+ printf("Cannot run child %s\n", err->message);
+ goto cleanup;
+ }
+ if (!jointactual)
+ goto cleanup;
if (!STREQ(outactual, outexpect)) {
virtTestDifference(stderr, outexpect, outactual);
@@ -533,6 +552,10 @@ static int test14(const void *unused ATTRIBUTE_UNUSED)
virtTestDifference(stderr, errexpect, erractual);
goto cleanup;
}
+ if (!STREQ(jointactual, jointexpect)) {
+ virtTestDifference(stderr, jointexpect, jointactual);
+ goto cleanup;
+ }
ret = checkoutput("test14");
@@ -540,6 +563,7 @@ cleanup:
virCommandFree(cmd);
VIR_FREE(outactual);
VIR_FREE(erractual);
+ VIR_FREE(jointactual);
return ret;
}
--
1.7.7.6
12 years, 9 months
[libvirt] [PATCH] virsh: extension of virsh attach-disk for rawio
by Taku Izumi
This patch extends "virsh attach-disk" command so that
we can specify "rawio" attribute.
Signed-off-by: Taku Izumi <izumi.taku(a)jp.fujitsu.com>
---
tools/virsh.c | 3 +++
tools/virsh.pod | 3 ++-
2 files changed, 5 insertions(+), 1 deletion(-)
Index: libvirt/tools/virsh.c
===================================================================
--- libvirt.orig/tools/virsh.c
+++ libvirt/tools/virsh.c
@@ -13883,6 +13883,7 @@ static const vshCmdOptDef opts_attach_di
{"sourcetype", VSH_OT_STRING, 0, N_("type of source (block|file)")},
{"serial", VSH_OT_STRING, 0, N_("serial of disk device")},
{"shareable", VSH_OT_BOOL, 0, N_("shareable between domains")},
+ {"rawio", VSH_OT_BOOL, 0, N_("needs rawio capability")},
{"address", VSH_OT_STRING, 0, N_("address of disk device")},
{"multifunction", VSH_OT_BOOL, 0,
N_("use multifunction pci under specified address")},
@@ -14102,6 +14103,8 @@ cmdAttachDisk(vshControl *ctl, const vsh
(isFile) ? "file" : "block");
if (type)
virBufferAsprintf(&buf, " device='%s'", type);
+ if (vshCommandOptBool (cmd, "rawio"))
+ virBufferAddLit(&buf, " rawio='yes'");
virBufferAddLit(&buf, ">\n");
if (driver || subdriver)
Index: libvirt/tools/virsh.pod
===================================================================
--- libvirt.orig/tools/virsh.pod
+++ libvirt/tools/virsh.pod
@@ -1404,7 +1404,7 @@ the device does not use managed mode.
=item B<attach-disk> I<domain-id> I<source> I<target>
[I<--driver driver>] [I<--subdriver subdriver>] [I<--cache cache>]
[I<--type type>] [I<--mode mode>] [I<--persistent>] [I<--sourcetype soucetype>]
-[I<--serial serial>] [I<--shareable>] [I<--address address>]
+[I<--serial serial>] [I<--shareable>] [I<--rawio>] [I<--address address>]
[I<--multifunction>]
Attach a new disk device to the domain.
@@ -1421,6 +1421,7 @@ I<cache> can be one of "default", "none"
"directsync" or "unsafe".
I<serial> is the serial of disk device. I<shareable> indicates the disk device
is shareable between domains.
+I<rawio> indicates the disk is needs rawio capability.
I<address> is the address of disk device in the form of pci:domain.bus.slot.function,
scsi:controller.bus.unit or ide:controller.bus.unit.
I<multifunction> indicates specified pci address is a multifunction pci device
--
Taku Izumi <izumi.taku(a)jp.fujitsu.com>
12 years, 9 months