The Relax-NG schema for domains regarding <hostdev> doesn't match what's
implemented in src/conf/domain_conf.c#virDomainHostdevDefFormat(): The
implementation only requires @type, but the schema currently either
required none or all three attributes (@mode, @type, and @managed) to be
defined together, because they are declared in the same
<optional)-section. (@managed is currently even undocumented on
<
http://libvirt.org/formatdomain.html#elementsUSB>).
Thus the following minimal <hostdev>-example fails to validate:
<domain type='test'>
<name>N</name>
<memory>4096</memory>
<bootloader>/bin/false</bootloader>
<os>
<type arch='x86_64'
machine='xenpv'>linux</type>
</os>
<devices>
<hostdev type='pci'>
<source>
<address bus='0x06' slot='0x00'
function='0x0'/>
</source>
</hostdev>
</devices>
</domain>
The schema is changed to match the current implementation:
1. @mode is optional (which defaults to 'subsystem')
2. @type is required
3. @managed is optional (which defaults to 'no')
The documnetation is updated to mention @managed.
Signed-off-by: Philipp Hahn <hahn(a)univention.de>
---
docs/formatdomain.html.in | 7 ++++---
docs/schemas/domain.rng | 14 ++++++++------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 84b1cab..0ec2045 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -953,7 +953,7 @@
<pre>
...
<devices>
- <hostdev mode='subsystem' type='pci'>
+ <hostdev mode='subsystem' type='pci'
managed='yes'>
<source>
<address bus='0x06' slot='0x02'
function='0x0'/>
</source>
@@ -967,8 +967,9 @@
<dd>The <code>hostdev</code> element is the main container for
describing
host devices. For usb device passthrough <code>mode</code> is always
"subsystem" and <code>type</code> is "usb" for an
USB device and "pci"
- for a PCI device..
- <dt><code>source</code></dt>
+ for a PCI device. When <code>managed</code> is "yes" for a PIC
device, it
+ is detached from the host before being passed on to the guest.</dd>
+ <dt><code>source</code></dt>
<dd>The source element describes the device as seen from the host.
The USB device can either be addressed by vendor / product id using the
<code>vendor</code> and <code>product</code> elements or by
the device's
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index 8b215f3..21c4380 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -1731,12 +1731,14 @@
<value>capabilities</value>
</choice>
</attribute>
- <attribute name="type">
- <choice>
- <value>usb</value>
- <value>pci</value>
- </choice>
- </attribute>
+ </optional>
+ <attribute name="type">
+ <choice>
+ <value>usb</value>
+ <value>pci</value>
+ </choice>
+ </attribute>
+ <optional>
<attribute name="managed">
<choice>
<value>yes</value>
--
1.7.1