<?xml version="1.0"?> <!-- 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"> <include href='basictypes.rng'/> <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> <optional> <element name="path"><text/></element> </optional> <optional> <element name="parent"><text/></element> </optional> <optional> <element name="driver"> <element name="name"><text/></element> </element> </optional> <zeroOrMore> <ref name="capability"/> </zeroOrMore> </element> </define> <define name='capability'> <element name="capability"> <choice> <ref name="capsystem"/> <ref name="cappcidev"/> <ref name="capusbdev"/> <ref name="capusbinterface"/> <ref name="capnet"/> <ref name="capscsihost"/> <ref name="capscsitarget"/> <ref name="capscsi"/> <ref name="capstorage"/> </choice> </element> </define> <define name='capsystem'> <attribute name='type'> <value>system</value> </attribute> <optional> <element name='product'><text/></element> </optional> <element name='hardware'> <optional> <element name='vendor'><text/></element> </optional> <optional> <element name='version'><text/></element> </optional> <optional> <element name='serial'><text/></element> </optional> <element name='uuid'> <ref name='UUID'/> </element> </element> <element name='firmware'> <optional> <element name='vendor'><text/></element> </optional> <optional> <element name='version'><text/></element> </optional> <optional> <element name='release_date'><text/></element> </optional> </element> </define> <define name='cappcidev'> <attribute name='type'> <value>pci</value> </attribute> <element name='domain'> <ref name='unsignedLong'/> </element> <element name='bus'> <ref name='unsignedLong'/> </element> <element name='slot'> <ref name='unsignedLong'/> </element> <element name='function'> <ref name='unsignedLong'/> </element> <element name='product'> <attribute name='id'> <ref name='hexuint'/> </attribute> <choice> <text/> <empty/> </choice> </element> <element name='vendor'> <attribute name='id'> <ref name='hexuint'/> </attribute> <choice> <text/> <empty/> </choice> </element> <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> <attribute name='maxCount'> <ref name='unsignedInt'/> </attribute> </optional> <zeroOrMore> <ref name='address'/> </zeroOrMore> </element> </optional> <optional> <element name='capability'> <attribute name='type'> <choice> <value>pci-bridge</value> <value>cardbus-bridge</value> </choice> </attribute> </element> </optional> <optional> <element name='iommuGroup'> <attribute name='number'> <ref name='unsignedInt'/> </attribute> <oneOrMore> <ref name='address'/> </oneOrMore> </element> </optional> <optional> <element name='numa'> <optional> <attribute name='node'> <data type='int'/> </attribute> </optional> </element> </optional> <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> </define> <define name='capusbdev'> <attribute name='type'> <value>usb_device</value> </attribute> <element name='bus'> <ref name='unsignedLong'/> </element> <element name='device'> <ref name='unsignedLong'/> </element> <element name='product'> <attribute name='id'> <ref name='hexuint'/> </attribute> <choice> <text/> <empty/> </choice> </element> <element name='vendor'> <attribute name='id'> <ref name='hexuint'/> </attribute> <choice> <text/> <empty/> </choice> </element> </define> <define name='capusbinterface'> <attribute name='type'> <value>usb</value> </attribute> <element name='number'> <ref name='unsignedLong'/> </element> <element name='class'> <ref name='unsignedLong'/> </element> <element name='subclass'> <ref name='unsignedLong'/> </element> <element name='protocol'> <ref name='unsignedLong'/> </element> <optional> <element name='description'> <text/> </element> </optional> </define> <define name='capnet'> <attribute name='type'> <value>net</value> </attribute> <element name='interface'> <text/> </element> <optional> <element name='address'> <ref name='mac'/> </element> </optional> <ref name="link-speed-state"/> <zeroOrMore> <element name='feature'> <attribute name='name'> <ref name='netfeaturename'/> </attribute> </element> </zeroOrMore> <zeroOrMore> <ref name='subcapnet'/> </zeroOrMore> </define> <define name='netfeaturename'> <data type='string'> <param name='pattern'>[a-zA-Z\-_]+</param> </data> </define> <define name='subcapnet'> <element name='capability'> <choice> <ref name='subcapnet80203'/> <ref name='subcapnet80211'/> </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> <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> <element name='fabric_wwn'> <ref name='wwn'/> </element> </define> <define name='capsvports'> <attribute name='type'> <value>vports_ops</value> </attribute> <element name='max_vports'> <ref name='unsignedInt'/> </element> <element name='vports'> <ref name='unsignedInt'/> </element> </define> <define name='capscsihost'> <attribute name='type'> <value>scsi_host</value> </attribute> <element name='host'> <ref name='unsignedLong'/> </element> <optional> <element name='unique_id'> <ref name='positiveInteger'/> </element> </optional> <optional> <zeroOrMore> <element name='capability'> <choice> <ref name='capsfchost'/> <ref name='capsvports'/> </choice> </element> </zeroOrMore> </optional> </define> <define name='capscsitarget'> <attribute name='type'> <value>scsi_target</value> </attribute> <element name='target'> <text/> </element> </define> <define name='capscsi'> <attribute name='type'> <value>scsi</value> </attribute> <element name='host'> <ref name='unsignedLong'/> </element> <element name='bus'> <ref name='unsignedLong'/> </element> <element name='target'> <ref name='unsignedLong'/> </element> <element name='lun'> <ref name='unsignedLong'/> </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'> <text/> </element> </optional> <optional> <element name='drive_type'> <text/> </element> </optional> <optional> <element name='model'> <text/> </element> </optional> <optional> <element name='vendor'> <text/> </element> </optional> <optional> <element name='serial'> <text/> </element> </optional> <choice> <ref name='capstorageremoveable'/> <ref name='capstoragefixed'/> </choice> <optional> <element name='capability'> <attribute name='type'> <value>hotpluggable</value> </attribute> </element> </optional> </define> <define name='capstorageremoveable'> <element name='capability'> <attribute name='type'> <value>removable</value> </attribute> <element name='media_available'> <choice> <value>1</value> <value>0</value> </choice> </element> <element name='media_size'> <ref name='unsignedLong'/> </element> <optional> <element name='media_label'> <text/> </element> </optional> </element> </define> <define name='capstoragefixed'> <element name='size'> <ref name='unsignedLong'/> </element> </define> <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> <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>