2013-01-23 23:03:17 +08:00
<?xml version="1.0"?>
2009-01-27 15:29:53 +00:00
<!-- A Relax NG schema for the libvirt node device XML format -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2012-03-06 15:08:02 +01:00
<include href='basictypes.rng'/>
2009-01-27 15:29:53 +00:00
<start>
<ref name='device'/>
</start>
<define name='device'>
<element name="device">
<!-- The name of the network, used to refer to it through the API
and in virsh -->
<element name="name"><text/></element>
2013-10-03 17:11:57 -04:00
<optional>
<element name="path"><text/></element>
</optional>
2017-02-15 01:04:10 +04:00
<optional>
<element name="devnode">
<attribute name='type'>
<value>dev</value>
</attribute>
<text/>
</element>
</optional>
<zeroOrMore>
<element name="devnode">
<attribute name='type'>
<value>link</value>
</attribute>
<text/>
</element>
</zeroOrMore>
2009-01-27 15:29:53 +00:00
<optional>
2016-11-17 11:09:09 -05:00
<ref name="parent"/>
2009-01-27 15:29:53 +00:00
</optional>
2012-08-02 13:23:16 +02:00
<optional>
<element name="driver">
<element name="name"><text/></element>
</element>
</optional>
2009-01-27 15:29:53 +00:00
<zeroOrMore>
2010-03-01 20:09:26 +01:00
<ref name="capability"/>
2009-01-27 15:29:53 +00:00
</zeroOrMore>
</element>
</define>
2016-11-17 11:09:09 -05:00
<define name='parent'>
<element name='parent'>
<choice>
<group>
<attribute name='wwnn'>
<ref name='wwn'/>
</attribute>
<attribute name='wwpn'>
<ref name='wwn'/>
</attribute>
<empty/>
</group>
<group>
<attribute name='fabric_wwn'>
<ref name='wwn'/>
</attribute>
<empty/>
</group>
<text/>
</choice>
</element>
</define>
2009-01-27 15:29:53 +00:00
<define name='capability'>
<element name="capability">
<choice>
2010-03-01 20:09:26 +01:00
<ref name="capsystem"/>
<ref name="cappcidev"/>
<ref name="capusbdev"/>
<ref name="capusbinterface"/>
<ref name="capnet"/>
<ref name="capscsihost"/>
2016-03-21 15:49:29 +01:00
<ref name="capscsitarget"/>
2010-03-01 20:09:26 +01:00
<ref name="capscsi"/>
<ref name="capstorage"/>
2017-02-15 01:04:12 +04:00
<ref name="capdrm"/>
2017-03-06 17:18:48 +01:00
<ref name="capmdev"/>
2017-05-22 08:38:22 +02:00
<ref name="capccwdev"/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
</define>
<define name='capsystem'>
<attribute name='type'>
<value>system</value>
</attribute>
<optional>
<element name='product'><text/></element>
</optional>
<element name='hardware'>
<optional>
2010-03-01 20:09:26 +01:00
<element name='vendor'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
<optional>
2010-03-01 20:09:26 +01:00
<element name='version'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
<optional>
2010-03-01 20:09:26 +01:00
<element name='serial'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
<element name='uuid'>
2012-03-06 15:08:02 +01:00
<ref name='UUID'/>
2009-01-27 15:29:53 +00:00
</element>
</element>
<element name='firmware'>
<optional>
2010-03-01 20:09:26 +01:00
<element name='vendor'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
<optional>
2010-03-01 20:09:26 +01:00
<element name='version'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
<optional>
2010-03-01 20:09:26 +01:00
<element name='release_date'><text/></element>
2009-01-27 15:29:53 +00:00
</optional>
</element>
</define>
<define name='cappcidev'>
<attribute name='type'>
<value>pci</value>
</attribute>
2019-03-21 10:12:40 +03:00
<optional>
<element name='class'>
<data type="string">
<param name="pattern">0x[0-9a-fA-F]{6}</param>
</data>
</element>
</optional>
2009-01-27 15:29:53 +00:00
<element name='domain'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='bus'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='slot'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='function'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='product'>
<attribute name='id'>
2010-03-01 20:09:26 +01:00
<ref name='hexuint'/>
2009-01-27 15:29:53 +00:00
</attribute>
<choice>
2010-03-01 20:09:26 +01:00
<text/>
<empty/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
<element name='vendor'>
<attribute name='id'>
2010-03-01 20:09:26 +01:00
<ref name='hexuint'/>
2009-01-27 15:29:53 +00:00
</attribute>
<choice>
2010-03-01 20:09:26 +01:00
<text/>
<empty/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
2012-08-02 13:23:16 +02:00
<optional>
<element name='capability'>
<attribute name='type'>
<value>phys_function</value>
</attribute>
<optional>
<ref name='address'/>
</optional>
</element>
</optional>
<optional>
<element name='capability'>
<attribute name='type'>
<value>virt_functions</value>
</attribute>
<optional>
2016-04-03 20:57:58 +02:00
<attribute name='maxCount'>
<ref name='unsignedInt'/>
</attribute>
2012-08-02 13:23:16 +02:00
</optional>
2016-04-03 20:57:58 +02:00
<zeroOrMore>
<ref name='address'/>
</zeroOrMore>
2012-08-02 13:23:16 +02:00
</element>
</optional>
2016-04-03 20:36:40 +02:00
<optional>
<element name='capability'>
<attribute name='type'>
<choice>
<value>pci-bridge</value>
<value>cardbus-bridge</value>
</choice>
</attribute>
</element>
</optional>
2017-03-06 17:17:34 +01:00
<optional>
<element name='capability'>
<attribute name='type'>
<value>mdev_types</value>
</attribute>
<oneOrMore>
<element name='type'>
<attribute name='id'>
<data type='string'/>
</attribute>
<optional>
<element name='name'><text/></element>
</optional>
<element name='deviceAPI'>
2017-09-07 11:58:26 +02:00
<value>vfio-pci</value>
2017-03-06 17:17:34 +01:00
</element>
<element name='availableInstances'>
<ref name='unsignedInt'/>
</element>
</element>
</oneOrMore>
</element>
2017-09-07 12:16:04 +02:00
</optional>
2017-03-06 17:17:34 +01:00
2013-06-23 14:01:00 -04:00
<optional>
<element name='iommuGroup'>
<attribute name='number'>
<ref name='unsignedInt'/>
</attribute>
<oneOrMore>
<ref name='address'/>
</oneOrMore>
</element>
</optional>
2014-05-07 18:07:12 +02:00
<optional>
<element name='numa'>
<optional>
<attribute name='node'>
<data type='int'/>
</attribute>
</optional>
</element>
2016-03-15 12:22:03 +01:00
</optional>
2014-05-15 10:13:45 +02:00
<optional>
<element name='pci-express'>
<zeroOrMore>
<element name='link'>
<attribute name='validity'>
<choice>
<value>cap</value>
<value>sta</value>
</choice>
</attribute>
<optional>
<attribute name='port'>
<ref name='unsignedInt'/>
</attribute>
</optional>
<optional>
<attribute name='speed'>
<data type="string">
<param name="pattern">[0-9]+(.[0-9]+)?</param>
</data>
</attribute>
</optional>
<attribute name='width'>
<ref name='unsignedInt'/>
</attribute>
</element>
</zeroOrMore>
</element>
</optional>
2009-01-27 15:29:53 +00:00
</define>
<define name='capusbdev'>
<attribute name='type'>
<value>usb_device</value>
</attribute>
<element name='bus'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='device'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='product'>
<attribute name='id'>
2010-03-01 20:09:26 +01:00
<ref name='hexuint'/>
2009-01-27 15:29:53 +00:00
</attribute>
<choice>
2010-03-01 20:09:26 +01:00
<text/>
<empty/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
<element name='vendor'>
<attribute name='id'>
2010-03-01 20:09:26 +01:00
<ref name='hexuint'/>
2009-01-27 15:29:53 +00:00
</attribute>
<choice>
2010-03-01 20:09:26 +01:00
<text/>
<empty/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
</define>
<define name='capusbinterface'>
<attribute name='type'>
<value>usb</value>
</attribute>
<element name='number'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='class'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='subclass'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='protocol'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<optional>
<element name='description'>
2010-03-01 20:09:26 +01:00
<text/>
2009-01-27 15:29:53 +00:00
</element>
</optional>
</define>
<define name='capnet'>
<attribute name='type'>
<value>net</value>
</attribute>
<element name='interface'>
<text/>
</element>
<optional>
<element name='address'>
2010-03-01 20:09:26 +01:00
<ref name='mac'/>
2009-01-27 15:29:53 +00:00
</element>
</optional>
2014-06-05 17:36:31 +02:00
<ref name="link-speed-state"/>
2009-01-27 15:29:53 +00:00
2015-02-23 15:38:29 +00:00
<zeroOrMore>
<element name='feature'>
<attribute name='name'>
<ref name='netfeaturename'/>
</attribute>
</element>
</zeroOrMore>
2009-01-27 15:29:53 +00:00
<zeroOrMore>
<ref name='subcapnet'/>
</zeroOrMore>
</define>
2015-02-23 15:38:29 +00:00
<define name='netfeaturename'>
<data type='string'>
<param name='pattern'>[a-zA-Z\-_]+</param>
</data>
</define>
2009-01-27 15:29:53 +00:00
<define name='subcapnet'>
<element name='capability'>
<choice>
2010-03-01 20:09:26 +01:00
<ref name='subcapnet80203'/>
<ref name='subcapnet80211'/>
2009-01-27 15:29:53 +00:00
</choice>
</element>
</define>
<define name='subcapnet80203'>
<attribute name='type'>
<value>80203</value>
</attribute>
</define>
<define name='subcapnet80211'>
<attribute name='type'>
<value>80211</value>
</attribute>
</define>
2011-12-06 07:09:03 -05:00
<define name='capsfchost'>
<attribute name='type'>
<value>fc_host</value>
</attribute>
<element name='wwnn'>
<ref name='wwn'/>
</element>
<element name='wwpn'>
<ref name='wwn'/>
</element>
2017-01-16 14:27:34 +01:00
<optional>
<element name='fabric_wwn'>
<ref name='wwn'/>
</element>
</optional>
2011-12-06 07:09:03 -05:00
</define>
<define name='capsvports'>
<attribute name='type'>
<value>vports_ops</value>
</attribute>
2013-01-08 01:05:32 +08:00
<element name='max_vports'>
<ref name='unsignedInt'/>
</element>
<element name='vports'>
<ref name='unsignedInt'/>
</element>
2011-12-06 07:09:03 -05:00
</define>
2009-01-27 15:29:53 +00:00
<define name='capscsihost'>
<attribute name='type'>
<value>scsi_host</value>
</attribute>
<element name='host'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
2011-12-06 07:09:03 -05:00
2014-06-05 13:17:05 -04:00
<optional>
<element name='unique_id'>
<ref name='positiveInteger'/>
</element>
</optional>
2011-12-06 07:09:03 -05:00
<optional>
<zeroOrMore>
<element name='capability'>
<choice>
<ref name='capsfchost'/>
<ref name='capsvports'/>
</choice>
</element>
</zeroOrMore>
</optional>
2009-01-27 15:29:53 +00:00
</define>
2017-05-22 08:38:25 +02:00
<define name='capsfcrport'>
<attribute name='type'>
<value>fc_remote_port</value>
</attribute>
<element name='rport'>
<text/>
</element>
<element name='wwpn'>
<ref name='wwn'/>
</element>
</define>
2016-03-21 15:49:29 +01:00
<define name='capscsitarget'>
<attribute name='type'>
<value>scsi_target</value>
</attribute>
<element name='target'>
<text/>
</element>
2017-05-22 08:38:25 +02:00
<optional>
<element name='capability'>
<ref name='capsfcrport'/>
</element>
</optional>
2016-03-21 15:49:29 +01:00
</define>
2009-01-27 15:29:53 +00:00
<define name='capscsi'>
<attribute name='type'>
<value>scsi</value>
</attribute>
<element name='host'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='bus'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='target'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='lun'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
<element name='type'>
<text/>
</element>
</define>
<define name='capstorage'>
<attribute name='type'>
<value>storage</value>
</attribute>
<element name='block'>
<ref name='path'/>
</element>
<optional>
<element name='bus'>
2010-03-01 20:09:26 +01:00
<text/>
2009-01-27 15:29:53 +00:00
</element>
</optional>
<optional>
<element name='drive_type'>
2010-03-01 20:09:26 +01:00
<text/>
2009-01-27 15:29:53 +00:00
</element>
</optional>
<optional>
<element name='model'>
2010-03-01 20:09:26 +01:00
<text/>
2017-09-07 12:16:04 +02:00
</element>
2009-01-27 15:29:53 +00:00
</optional>
<optional>
<element name='vendor'>
2010-03-01 20:09:26 +01:00
<text/>
2009-01-27 15:29:53 +00:00
</element>
</optional>
2009-06-11 14:25:19 +00:00
<optional>
<element name='serial'>
2010-03-01 20:09:26 +01:00
<text/>
2009-06-11 14:25:19 +00:00
</element>
</optional>
2009-01-27 15:29:53 +00:00
<choice>
<ref name='capstorageremoveable'/>
<ref name='capstoragefixed'/>
</choice>
<optional>
<element name='capability'>
2010-03-01 20:09:26 +01:00
<attribute name='type'>
<value>hotpluggable</value>
</attribute>
2009-01-27 15:29:53 +00:00
</element>
</optional>
</define>
<define name='capstorageremoveable'>
<element name='capability'>
<attribute name='type'>
2010-03-01 20:09:26 +01:00
<value>removable</value>
2009-01-27 15:29:53 +00:00
</attribute>
<element name='media_available'>
2010-03-01 20:09:26 +01:00
<choice>
<value>1</value>
<value>0</value>
</choice>
2009-01-27 15:29:53 +00:00
</element>
<element name='media_size'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
2009-12-14 14:58:23 +01:00
<optional>
<element name='media_label'>
<text/>
</element>
</optional>
2018-05-19 08:00:58 -04:00
<ref name='blockData'/>
2009-01-27 15:29:53 +00:00
</element>
</define>
<define name='capstoragefixed'>
<element name='size'>
2012-03-06 15:08:02 +01:00
<ref name='unsignedLong'/>
2009-01-27 15:29:53 +00:00
</element>
2018-05-19 08:00:58 -04:00
<ref name='blockData'/>
</define>
<define name='blockData'>
<optional>
<element name='logical_block_size'>
<ref name='unsignedLong'/>
</element>
<element name='num_blocks'>
<ref name='unsignedLong'/>
</element>
</optional>
2009-01-27 15:29:53 +00:00
</define>
2017-02-15 01:04:12 +04:00
<define name='capdrm'>
<attribute name='type'>
<value>drm</value>
</attribute>
<element name='type'>
<choice>
<value>primary</value>
<value>control</value>
<value>render</value>
</choice>
</element>
</define>
2017-03-06 17:18:48 +01:00
<define name='capmdev'>
<attribute name='type'>
<value>mdev</value>
</attribute>
<element name='type'>
<attribute name='id'>
<data type='string'/>
</attribute>
</element>
<element name='iommuGroup'>
<attribute name='number'>
<ref name='unsignedInt'/>
</attribute>
</element>
</define>
2017-05-22 08:38:22 +02:00
<define name='capccwdev'>
<attribute name='type'>
<value>ccw</value>
</attribute>
<element name='cssid'>
<ref name='ccwCssidRange'/>
</element>
<element name='ssid'>
<ref name='ccwSsidRange'/>
</element>
<element name='devno'>
<ref name='ccwDevnoRange'/>
</element>
</define>
2012-08-02 13:23:16 +02:00
<define name='address'>
<element name='address'>
<attribute name='domain'><ref name='hexuint'/></attribute>
<attribute name='bus'><ref name='hexuint'/></attribute>
<attribute name='slot'><ref name='hexuint'/></attribute>
<attribute name='function'><ref name='hexuint'/></attribute>
</element>
</define>
2009-01-27 15:29:53 +00:00
<define name='mac'>
<data type='string'>
<param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param>
</data>
</define>
<define name='path'>
<data type='string'>
<param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
</data>
</define>
</grammar>