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@xxxxxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list